어케 어케 센서와 모터를 따로 따로 동작은 시켰지만...
문제는 이걸 합칠려고 하니 잘 모르겠어서요.;;;
일단은 AVR128에 12Mhz 모터는 스텝모터구요.
DDRA는 모터, DDRC는 발광, DDRF는 수광입니다.
일단은 참고서적에 있는 소스를 제것에 맞게 바꾸어는 봤는데요.
참으로 이상한게... 모터에 6개의 선이 있잖아요? SLA7024에서 나오는 출력부가 모터에 들어갈때요.
근데 이것이-____- 6개중에 4개만 펄스가 나오더라구요?;; 대략 난감...
발광부는 펄스파형이 나오는걸로 봐서 정상적이긴한데...
수광부는 쩝...전류는 흘르는데...검은색 선에 반응을 안하니 -_-;; 나중엔 이자식 망가졌나라는 생각이...;;
일단 이게 돌아가면...우찌 응용하면...좌회전 우회전은 가능할꺼 같은데...
양쪽 끝 센서는 가감속용 센서지만 일단은 역회전용으로 되어있습니다.
우찌하면 센서값을 입력받아서 모터를 동작시킬수있을까요?
AVR Studio로 작업중이고 보내는 것은 ponyporg로 하고 있는데...소스에는 문법적 오류는 없고...
워링은 한개 있긴하지만 무시해도 될만한것이고...에러는 없구요.
포트나 여타 지정방법에서 틀린것 같은데요 ;;
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
const unsigned char two_phase[ ] = {0x55,0x66,0xaa,0x99};
volatile unsigned char count,center_sensor,right_sensor,phase_pnt;
unsigned char dir,tmp;
void initialize_timer(void);
void delay(unsigned int d1, unsigned int d2);
void go_step_2phase(unsigned int time);
SIGNAL(SIG_OVERFLOW0) //4000 Hz sensor interrupt routine
{
TCNT0 = 141; //250us
count++;
switch(count){
case 1:
tmp = PINC | 0xFF;
PORTC = tmp;
break;
case 2:
center_sensor = PINF & 0x81;
tmp = PINC & 0x00;
PORTC = tmp;
break;
case 3:
tmp = PINC | 0xFF;
PORTC = tmp;
break;
case 4:
right_sensor = PINF & 0x18;
tmp = PINC & 0x00;
PORTC = tmp;
break;
case 6:
count = 0;
break;
default:
break;
}
}
int main(void)
{
DDRA = 0xFF;
DDRC = 0xFF;
DDRF = 0x00;
initialize_timer();
do{
if(center_sensor){
dir = 0;
go_step_2phase(700);
}
else if(right_sensor){
dir = 1; //역회전
go_step_2phase(700);
}
}while(1);
}
void delay(unsigned int d1, unsigned int d2)
{
unsigned int i, j;
for(i=0;i<d1;i++){
for(j=0;j<d2;j++);
}
}
void initialize_timer(void)
{
TCNT0 = 141;
TCCR0 = 0x03;
TIMSK = 0x01;
sei();
}
void go_step_2phase(unsigned int time)
{
if(!dir)//정회전
PORTA = (two_phase[phase_pnt++] << 4);
else //역회전
PORTA = (two_phase[phase_pnt--] << 4);
phase_pnt &= 0x03; //phase_pnt = (4,0xff)이면 -> phase_pnt = (0,3)
delay(time, 100);
}
-->두개는 전원+.-아닌가요?
검은색에 반응안하는건 센서의 위치나 센서의불량문제혹은 감도문제일수 있습니다. 다른 글을 검색해보세요.
4개는 컨트롤라인이구요 (A, /A, B, /B)
2개는 전원부 선입니다.(vcc, gnd)
센서부쪽은
첫번째 : 회로 체크 해보기(숏트났는지 등등)
두번째 : 센서고장여부 확인 바람니다.