daodanjishui
所在地区:
北京-
首页
服务/硬件产品
行业解决方案
案例
方案概述:
本文介绍了如何使用51单片机来控制180度舵机。通过产生20ms的脉冲信号,并改变高电平时间从0.5ms到2.5ms,可以控制舵机的角度。示例程序中使用定时器0来产生脉冲信号,并通过按键来改变舵机的角度。希望本文对理解如何使用51单片机来控制180度舵机有所帮助。
解决方案:
根据标题内容,本文将介绍如何使用51单片机来控制180度舵机。在上一期的项目中,我们已经介绍了如何设计一个最简单的DIY蓝牙遥控小车,其中包含了舵机控制部分的程序。但是由于舵机控制相对复杂,我们决定开设一个专题来详细讲解如何使用51单片机来控制180度舵机。
首先,我们需要了解舵机控制的原理。舵机的控制方法是通过一个20ms左右的时基脉冲来实现的,其中高电平部分的脉冲宽度对应舵盘的位置,范围为0.5ms到2.5ms,对应角度为0度到180度,呈线性变化。
根据这个原理,我们可以使用单片机产生一个20ms的脉冲信号,并通过改变高电平时间从0.5ms到2.5ms来控制舵机的角度。
下面是一个示例程序:
```c
#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(); //死循环,按键检测
}
}
```
以上是一个简单的舵机控制器程序,通过按下增加按钮可以使舵机从0度转到180度,按下减少按钮可以使舵机从180度转到0度。程序中使用了定时器0来产生0.5ms的脉冲信号,并通过改变计数次数来控制脉冲的高低电平。
希望本文对你理解如何使用51单片机来控制180度舵机有所帮助。下一个项目我们将介绍如何使用手机app和串口蓝牙模块来控制舵机翻转。
请注意,以上代码仅供参考,具体的接线和使用方法请参考详细的程序注解。
根据标题内容,本文将介绍如何使用51单片机来控制180度舵机。在上一期的项目中,我们已经介绍了如何设计一个最简单的DIY蓝牙遥控小车,其中包含了舵机控制部分的程序。但是由于舵机控制相对复杂,我们决定开设一个专题来详细讲解如何使用51单片机来控制180度舵机。
首先,我们需要了解舵机控制的原理。舵机的控制方法是通过一个20ms左右的时基脉冲来实现的,其中高电平部分的脉冲宽度对应舵盘的位置,范围为0.5ms到2.5ms,对应角度为0度到180度,呈线性变化。
根据这个原理,我们可以使用单片机产生一个20ms的脉冲信号,并通过改变高电平时间从0.5ms到2.5ms来控制舵机的角度。
下面是一个示例程序:
```c
#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(); //死循环,按键检测
}
}
```
以上是一个简单的舵机控制器程序,通过按下增加按钮可以使舵机从0度转到180度,按下减少按钮可以使舵机从180度转到0度。程序中使用了定时器0来产生0.5ms的脉冲信号,并通过改变计数次数来控制脉冲的高低电平。
希望本文对你理解如何使用51单片机来控制180度舵机有所帮助。下一个项目我们将介绍如何使用手机app和串口蓝牙模块来控制舵机翻转。
请注意,以上代码仅供参考,具体的接线和使用方法请参考详细的程序注解。
为您推荐其他供应商的行业解决方案
免责声明:本网站部分内容来源互联网,如权利人发现存在侵权信息,请及时与本站联系删除。
供应商:
daodanjishui
所在区域: 北京-
道丹技术是一家专注于全栈工程师、电路爱好者和玩具开发爱好者的公司。我们拥有丰富的软硬件方案原创能力,擅长领域包括51单片机、蓝牙、小车、智能家居、物联网、服务器、传感器等。我们提供多种解决方案,如基于蓝牙的智能小车控制、基于Android系统的万能蓝牙设备智能遥控器、基于51单片机的舵机控制器等。我们的方案简单易用,源码和原理图都提供,方便客户进行二次开发和定制。此外,我们还提供高性价比的WIFI图传方案、温湿度监控系统和无线监控智能网关的设计与实现。道丹技术致力于为客户提供优质的软硬件解决方案,帮助他们实现创意和创新。