void T0_int (void) interrupt 1
{
TIMER0_OFF;
if(flag == 0)
{
flag = 1;
SERVO_PORT = 0;
rate = PULS_OFF - angle; // low level time
}
else
{
flag = 0;
SERVO_PORT = 1;
rate = angle;
}
if(angle + speed < target)
angle += speed;
else if(angle - speed > target)
angle -= speed;
else
angle = target;
TH0 = ~(byte)((0xff00 & rate) >> 8);
TL0 = ~(byte)(0x00ff & rate);
TIMER0_ON;
}
위 소스는 8051작품란에 있는 코드중의 하나인데요...
코드를 보니 모터에 high신호와 low신호를 주는 부분인데요..
if(angle + speed < target)
angle += speed;
else if(angle - speed > target)
angle -= speed;
else
angle = target;
TH0 = ~(byte)((0xff00 & rate) >> 8);
TL0 = ~(byte)(0x00ff & rate);
이 부분이 서보모터속도를 제어하는 부분같은데요... 이해가 잘 되지 않습니다...
어떻게 속도가 되는건지 좀 알켜주시겠어요?;;
좋은 하루 보내세요 ^_^~
TH0 = ~(byte)((0xff00 & rate) >> 8);
TL0 = ~(byte)(0x00ff & rate);
이것은 타이머에 주기를 입력하는란이고 이 주기에 의해서 서보모터의 각이 결정됩니다.
저 위에 소스들은 그 주기를 계산하는것이며 원하는 주기(TARGET)가 될때까지 일정한 속도(SPEED)로
각(ANGLE)주기를 더해주거나 빼주고 이를 타이머 주기로 입력하여 서보모터를 구동하게 되는 형식입니다.
{
flag = 1;
SERVO_PORT = 0;
rate = PULS_OFF - angle; // low level time
}
else
{
flag = 0;
SERVO_PORT = 1;
rate = angle;
}
요부분은 서보모터 출력포트로 HIGH,LOW를 출력하는 소스입니다. 물론 설정된 타이머 주기에 따라서요