2014/11/29

STM32에 MCX314AL을 붙여보자 -- 4. SLA7078MPR 굴려먹기

자 오늘은 드디어 모터를 돌려보자구.

MCX314AL은 4개의 axis를 구동 가능하다.

그 중 3개의 축에는 Bipolar 스텝모터 드라이버(TMC2660)를, 나머지 한개의 축에는 Unipolar 스텝모터 드라이버(SLA7078MPR)를 연결해놨다.

일단 유니폴라 스텝모터 먼저 돌려보고 바이폴라도 돌려보자.


 SLA7078MPR 스펙부터 확인해보자.

- Power supply voltages, Vbb : 46V(max), 10 to 44V normal operating range
- Logic supply voltages, Vdd : 3.0 to 5.5V
- Maximum output currents : 1A, 1.5A, 2A, 3A
- Built-in sequencer
- Simplified clock-in stepping control
- Microstepping at full-, half-, quater-, eighth-, and sixteenth-steps
- Built-in sense resistor, Rsint
- All variants are pin-compatible for enhanced design flexibility
- ZIP type 23-pin molded package(SLA package)
- Self-excitation PWM current control with fixed off-time; off-time adjusted automatically by step reference current ratio(3 levels)
- Built-in synchronous rectifying circuit reduces losses at PWM off
- Synchronous PWM chopping function prevents motor noise in Hold mode
- Sleep mode for reducing the IC input current in stand-by state
- Built-in protection circuitry against motor coil open/shorts option available

우왕 굳. 겁나 좋쿤.



























SLA7078MPR은 보호회로가 내장되어있고 3A까지 출력이 가능한 모델이다.

M1 : L, M2 : H, M3 : H 로 연결하면 16th Microstep 이 적용된다.

그리고 Clock과 F/R만 MCX314AL로 제어하면 된다 이거지.




          outpw(adr+wr0, 0x8000);

osDelay(200);

command(0x3,0xf);
outpw(adr+wr1, 0x0000);
outpw(adr+wr2, 0xe000);
outpw(adr+wr3, 0x0000);
expmode(0x3,0x5d08,0x497f);

accofst(0x3,0);
range(0x3,800000);
acac(0x3,1010);
dcac(0x3,1010);
acc(0x3,100);
dec(0x3,100);
startv(0x3,100);
speed(0x3,4000);
pulse(0x3,100000);
lp(0x3,0);
ep(0x3,0);

command(0xc,0xf);
outpw(adr+wr1, 0x0000);
outpw(adr+wr2, 0x0040); //D6 PLSMD, 1-pulse 1-direction setting.
outpw(adr+wr3, 0x0000);
expmode(0x4,0x5d08,0x01c4);
expmode(0x8,0x5d08,0x010c);

accofst(0xc,0);
range(0xc,800000);
acac(0xc,1010);
dcac(0xc,1010);
acc(0xc,100);
dec(0xc,100);
startv(0xc,50);
speed(0xc,40);
pulse(0xc,10);
lp(0xc,0);

outpw(adr+wr4, 0x0000);
outpw(adr+wr5, 0x0124);

acc(0x8,200);
speed(0x8,4000);
pulse(0x8,40000);
while(1){
command(0x8,0x20);
wait(0x8);
command(0x8,0x21);
wait(0x8);
}




기본 초기화 루틴은 2-pulse 타입으로 세팅이 되어 있는데, 1-pulse 1-direction 타입으로 변경해서 테스트 코드를 만들어 봤다.




ㅋㅋㅋ 미친듯이 도는구만 ㅋㅋㅋ












댓글 없음:

댓글 쓰기