코드비전으로 스텝 모터 구동하는 소스를 구해 사용했습니다.
#include <mega128.h>
unsigned int cnt0;
unsigned char led=0x88, onoff=1;
interrupt [2] void exint0(void){ // interrupt [EXT_INT0] void exint0(void) 처럼 mega128.h에 저장된 정의를 사용해도 됨
if(onoff == 0) onoff = 1; else onoff = 0;
}
interrupt [17] void timerint0(void){ // interrupt [TIM0_OVF] void timerint0(void)로 해도 됨
if(onoff == 0) if( ++cnt0 == 2 ){
cnt0 = 0; led >>= 1; if(led == 0x08) led=0x88; }
PORTE = led;
TCNT0 = 6; // 재정의 1msec = 64*(256-6)/16 시뮬레이션할 때는 조절할 필요가 있음
}
void main(void){
DDRE = 0x00; // 포트F를 출력으로
DDRD = 0xff; //포트D를 입력으로 디폴트 입력으로 설정되어 있으므로 필요하지는 않음
SREG.7 = 1; //인터럽트 전체 허용
EIMSK |= 0x01; // INT0 허용
EICRA |= 3; // 상승에지 트리거
TIMSK |= 1; // 타이머0 오버플로 인터럽트 개별허용
TCCR0 |= 4; // 분주비를 64로 설정 시뮬레이션할 때는 조절할 필요가 있음
TCNT0 = 6; // 1msec = 64*(256-6)/16 시뮬레이션할 때는 조절할 필요가 있음
for(;;);
}
PORT E에 스텝모터를 두 개 연결해서 구동시켰는데 하나는 정상적으로 시계반대방향으로 작동하는데
반대쪽 하나는 걸린듯이 움직이질 않습니다. 손으로 억지로 움직이려 해도 걸린 듯 움직이지 않구요.
무엇이 문제인지, 스텝모터를 두 개 모두 정상적으로 구동하렬면 어떻게 해야 하는지 고수님들의 도움 부탁드립니다.
if(onoff == 0) if( ++cnt0 == 2 ){
cnt0 = 0; led >>= 1; if(led == 0x08) led=0x88; }
PORTE = led;
이 부분이 상 입력부분인 듯 한데요.
역상으로도 넣는 부분이 필요할 듯 하네요. 아마도 스텝모터에 케이블 방향이 반대일 듯.
강제적으로 움직이면 모터 망가집니다... 억지로 해도 안 움직인다면 각 상에 전류가 들어가기 때문에 움직이지 않습니다.
그리고 포트출력으로 스텝모터가 구동되는지 의심이 됩니다. 전류가 충분하지도 궁금하네요...