51单片机开拓板
MG996R数字舵机

MG996R是通过PWM脉冲宽度与占空比实现对旋转角度进行掌握的。脉冲周期为20ms,输出高电平时间与迁徙改变角度之间关系描述如下:

占空比与舵机旋转角度关系图
在明确占空比与舵机输出轴转角之间关系之后,我们就可以以20ms为周期进行旗子暗记输出,通过掌握每个周期输出高电平与低电平时间,实现舵机按照45度间隔进行旋转,实际小车前轮转向一样平常会在±45度范围内,因此只须要掌握转向角在±45度范围即可实现小车转向。
周期20ms紧张借助51单片机定时器1设置在0.5ms产生中断,在中断处理函数中设置高低电平。同时通过变量记录中断实行次数,当次数达到40时即为一个周期20ms。
本例测试利用51单片机开拓板,按键K2与K3掌握舵机角度增加与减少,个中K2对应P3.4引脚,K3对应P3.5引脚。
掌握程序编写本例编程利用keil software工具编写C措辞程序,输出hex格式结果,写入单片机。个中keil software工具如下:
keil software软件界面
1、头文件
本例所需头文件紧张为reg52.h用于供应52单片机操作干系方法、属性等。头文件格式如下:
#include<reg52.h>
2、变量定义
紧张定义变量包括按键变量、角度变量、周期计时变量等,变量定义如下:
sbit pwm = P1^0;//用于输入掌握旗子暗记sbit flag= P1^1;//按键相应标识sbit ka = P3^4; //角度增加按键sbit kd= P3^5; //角度减少按键uint deg;//角度标识uint count=0;//20ms周期计数
3、定时器初始化函数
定时器初始化紧张完成定时器初始计数值的设置,担保0.5ms产生中断。同时也须要完成定时器的开启。实当代码如下:
void time0_init(){ TMOD=0x01;TH0=0xfe;TL0=0x33;EA=1;ET0=1;TR0=1;}
4、中断函数
中断函数紧张用于处理0.5ms中断时干系操作,紧张指高低电平输出。实当代码如下:
void time0() interrupt 1{ TH0=0xfe;TL0=0x33;if(count<deg)pwm=1;elsepwm=0;count++;if(count==40)count=0;}
5、按键处理函数
按键处理紧张处理开拓板中K2\K3按键,实现点击按键舵机角度增减掌握。代码如下:
void keyScan(){if(ka==0)//按键K2{flag=0;delay(30);flag=1;if(ka==0){ deg++;count=0;if(deg==6)deg=5;while(ka==0);}}if(kd==0)//按键K3{flag=0; delay(30);flag=1;if(kd==0){deg--;count=0;if(deg<0)deg=0;while(kd==0);}}}
6、主函数
主函数紧张设置初始变量值及启动计时器、捕捉按键操作等。实当代码如下:
void main(){flag=1; P1 = 0xff;deg=3;count=0;time0_init();while(1){keyScan();}}程序烧录
编写好舵机掌握程序之后,实行程序天生hex文件,利用单片机烧录软件将其写入单片机中。烧录软件如下:
烧录软件
完成烧录之后就可以利用单片机K2与K3按键掌握舵机迁徙改变,后期在小车整体开拓中单片机可通过ESP8266 WIFI模块获取做事器端指令,自动掌握舵机迁徙改变。测试效果如下所示:
视频加载中...
本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码缺点、建议与见地,可在评论区回答。更多智能小车编程干系后期文章将持续发布,欢迎大家关注、评论与阅读!
干系文章链接如下:
如何编程实现电脑与智能小车通信









