接线
接线方法:
红 色 VCC
棕色 GND
橙色 信号线
原理
调整信号线的PWM,实现各个角度转动
高电平t占整个周期T(20ms)的时间
舵机旋转的角度
0.5ms ---------> 0度
1ms ---------> 45度
1.5ms ---------> 90度
2ms ---------> 135度
2.5ms ---------> 180度
参考代码
#include
/* 自定义变量类型 */
typedef unsigned char uchar; //0~255
typedef unsigned int uint; //0~65535
uchar Turn_angle;
***it PWM = P3^5; //信号线
uchar kk = 0;
//延迟1ms
void delay_ms(uint c) //误差 0us
{
uint a,b;
for(;c>0;c--)
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
EA = 1;
ET0 = 1;
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
TR0=1; //定时器开始
}
void main()
{
Time0_Init();
//PWM = 0;
while (1)
{
kk = 0;
Turn_angle = 1; //归零 1--0 2--45 3--90 4--135 5--180
delay_ms(1000);
kk = 0;
Turn_angle = 5; //旋转
delay_ms(1000);
}
}
void timer0() interrupt 1
{
TR0 = 0; //关闭计时
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
if(kk<=Turn_angle) //1---0度 2---45度 3---90 4--- 135度 5---180度
{
PWM = 1;
}
else
{
PWM = 0;
}
if(kk==40) //一个周期20ms
{
kk = 0;
}
kk ++;
TR0 = 1; //开启计时
}
问题总结
1.注意我这里用是11.0592MHZ的晶振,定时器的初值要和自己的板子相对应
2.测试程序时要测试每一个角度,可能会出现错误
3.错误一般出现在定时器上,PWM的占空比出错
接线
接线方法:
红 色 VCC
棕色 GND
橙色 信号线
原理
调整信号线的PWM,实现各个角度转动
高电平t占整个周期T(20ms)的时间
舵机旋转的角度
0.5ms ---------> 0度
1ms ---------> 45度
1.5ms ---------> 90度
2ms ---------> 135度
2.5ms ---------> 180度
参考代码
#include
/* 自定义变量类型 */
typedef unsigned char uchar; //0~255
typedef unsigned int uint; //0~65535
uchar Turn_angle;
***it PWM = P3^5; //信号线
uchar kk = 0;
//延迟1ms
void delay_ms(uint c) //误差 0us
{
uint a,b;
for(;c>0;c--)
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
EA = 1;
ET0 = 1;
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
TR0=1; //定时器开始
}
void main()
{
Time0_Init();
//PWM = 0;
while (1)
{
kk = 0;
Turn_angle = 1; //归零 1--0 2--45 3--90 4--135 5--180
delay_ms(1000);
kk = 0;
Turn_angle = 5; //旋转
delay_ms(1000);
}
}
void timer0() interrupt 1
{
TR0 = 0; //关闭计时
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
if(kk<=Turn_angle) //1---0度 2---45度 3---90 4--- 135度 5---180度
{
PWM = 1;
}
else
{
PWM = 0;
}
if(kk==40) //一个周期20ms
{
kk = 0;
}
kk ++;
TR0 = 1; //开启计时
}
问题总结
1.注意我这里用是11.0592MHZ的晶振,定时器的初值要和自己的板子相对应
2.测试程序时要测试每一个角度,可能会出现错误
3.错误一般出现在定时器上,PWM的占空比出错
举报