加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

最简单DIY基于51单片机的舵机控制器

2020/10/28
1692
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
方块图(2)
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

       在上一期的项目:最简单DIY的51蓝牙遥控小车设计方案 访问地址是:https://www.cirmall.com/circuit/20328 源码里面有舵机控制部分的程序,但是被我注释掉了,由于舵机控制还是比较复杂,这里还是开一个专题来讲解51单片机如何控制180度舵机。接线请看详细的程序注解吧,学过51肯定啃得动的。

 #include "reg52.h"

unsigned char count; //0.5ms 次数标识

sbit pwm =P2^7 ; //PWM信号输出,接舵机的数据线

sbit jia =P3^7; //角度增加按钮

sbit jan =P3^6; //角度减少按钮,低电平触发

unsigned char jd; //角度标识 1.0ms->45 1.5->90 2.0->135 2.5->180

void delay(unsigned char i)//普通延时函数

{

unsigned char j,k;

for(j=i;j>0;j--)

for(k=125;k>0;k--);

}

void Time0_Init() //定时器0初始化

{

TMOD = 0x01; //定时器0工作在方式1,16位增计数定时器,16位全是1,最大计数值是65535,就溢出了

IE = 0x82;//EA=1全局中断允许,ET0=1,定时器中断允许

TH0 = 0xfe;//(65536-N)/256=0xef=254推出N=512,N就是需要计数的个数,机器周期是1.09us,所以

//512*1.09us=0.5ms,这时候舵机为0度,1ms是45度,2.5ms是180度,其他的类推

TL0 = 0x33; //11.0592MHz晶振的单片机,导致0.5ms计数器溢出一次,产生定时器中断

TR0=1; //开启定时器

}

void Time0_Int() interrupt 1 //定时器0中断服务程序

{

TH0 = 0xfe; //重新装载初值

TL0 = 0x33;

if(count< jd) //判断计数次数是否小于标识

pwm=1; //输出高电平PWM

else

pwm=0; //低电平PWM

count=(count+1); //计数次数继续增加

count=count%40; //计数次数必须小于40,因为0.5ms*40=20ms,这是舵机PWM的固定周期

}

void keyscan() //按键扫描

{

if(jia==0) //按下增加按钮

{

delay(10); //消除抖动

if(jia==0) //按下增加按钮

{

jd++; //标识增加,一共有5档,jd=1对应0度,jd=2对应0,45度,jd=3对应90,4对应135,5对应180度

count=0; //计数清0,当count加到2的时候,溢出两次,时间是0.5*2=1ms,对应舵机转到45度

if(jd==6)

jd=5; //标识清0

while(jia==0); //等待按键释放

}

}

if(jan==0) //按下减少按钮

{

delay(10);

if(jan==0)

{

jd--; //同理

count=0;

if(jd==0)

jd=1; //复位

while(jan==0);

}

}

}

void main()

{

jd=1;

count=0;

Time0_Init();

while(1)

{

keyscan(); //死循环,按键检测

}

}

程序分析结束了。

总结:

根据工作原理,舵机的具体控制方法就是需要一个20ms左右的时基脉冲,

该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。

脉冲宽度从0.5ms~2.5ms,相对应舵盘的位置为0~180度,呈线性变化。

***************一般舵机脉冲宽度20ms,高电平宽度与角度对应关系***********

0.5ms————0度;

1.0ms————45度;

1.5ms————90度;

2.0ms————135度;

2.5ms————180度;

       根据上面的原理,我们知道单片机只要产生20ms的脉冲信号,通过改变高电平时间从0.5ms到2.5ms变化,就能使舵机转动到对应的角度

最后程序的功能就是按下增加按键,舵机从0度到180 ,按5次;舵机从180到0也需要按5次减少按钮。

     下个项目将会推出用手机app和串口蓝牙模块控制舵机翻转。

  • HL-1原理图.pdf
    描述:单片机原理图
  • test_motor.zip
    描述:源码MDK5编写
  • Servo.gif
    描述:舵机控制时序图
  • 将要推出的app.jpg
    描述:下一期预告

相关推荐

电子产业图谱