舵机三股线接法:黄线接信号线,红线接vcc,褐色线接GND
舵机控制原理:通过控制PWM来控制舵机的旋转角度。 关于PWM的知识可以在智能小车的专栏里学习。 旋转周期为20ms,控制高电平的时间来控制舵机的旋转角度。
关于180舵机
t=0.5ms——————-转向机会旋转0
t=1.0ms——————-转向机会旋转45
t=1.5毫秒——33543354 -舵机会旋转90
t=2.0ms——————-转向机会旋转135
t=2.5毫秒——33543354 -舵机180转
此代码包含计时器、中断和pwm知识,可以在51智能购物车专栏中学习。 其中,计时器选择计时器1,使用两个字符型变量中的timer1决定高电平的时间,count作为计数器发挥功能,使用if语句判断两个字符型变量的大小,决定何时成为高电平或成为低电平
//_nop_ () 1机器周期# includereg 52.h # include delay.hsbitpwm=P3 ^ 2; //PWM输出的I/O端口设置为unsigned char count=0; 无符号char time R1; /* 180舵机t=0.5ms——————-舵机会旋转0 t=1.0ms——————-舵机会旋转45t=1.5ms33543——33——-舵机会旋转90 -舵机会180*//*延迟程序*//*计时器T0初始化*/voidtimer0_init({tmod=0x00; TMOD |=0x01; //计时器T0设定为方式1 TH0=0xff; //定时常数0.1ms石英振动频率为11.0592MHz TL0=0xa4; ET0=1; TR0=1; EA=1; }/*T0中断初始化*/void time0_ init (interrupt1(tr0=0; TH0=0xff; //0.1msTL0=0xa4; if (计数=时间R1 )//5==0 15==90{ PWM=1; }else { PWM=0; }计数; if(count=200 )//T=20ms清除({ count=0; }TR0=1; T0}void main () {Timer0_Init ); wile(1) {timer1=5; //舵机返回0度位置count=0; //让计时器重新计数延迟(3000 ); 时间R1=10; //舵机45度旋转count=0; 延迟(3000; 时间R1=15; //舵机旋转90度count=0; 延迟(3000; }简单地使用延迟函数提高了代码的可移植性
Delay.c//1ms级延迟函数
voidDelay(unsignedintXMS ) {unsigned char i,j; wile(XMS---- ) I=2; j=239; do{while (--j ); (while(--I ); }} Delay.h
# ifndef _ delay _ h _ # define _ _ delay _ h _ _ void delay (unsignedintxms ); #endif