使用8051单片机控制舵机
8051控制舵机
舵机在电子和嵌入式系统中非常有用,由于可以把它旋转到任何特定的角度,所以广泛应用于玩具、机器人、计算机、汽车、飞机等项目中。舵机的适用范围也很广泛,从高扭矩电机到低扭矩电机都有应用。
先简单了解一下舵机的工作原理,舵机主要告靠PWM(脉宽调制)控制,这意味着它的旋转角度是由控制脉冲的持续时间控制制的。舵机基本上由直流电动机组成,而直流电动机由可变电阻(电位器)和一些齿轮控制。直流电机的输出通过齿轮转换成扭矩。电位器连接到舵机的输出轴上,并计算角度,在到达需要的角度时停止直流电机。
舵机角度控制
舵机可旋转0到180度,可以通过1ms到2ms之间的脉冲持续时间来控制这种程度的旋转。1ms可以旋转0度,1.5ms可以旋转90度和2毫秒脉冲可旋转180度。1至2毫秒之间的持续时间可以旋转舵机到0至180度之间的任何角度。
电路原理图:
电路原理图
舵机有三根控制线,红色的VCC(电源),棕色的为GND,橙色是控制线。控制线连接到8051的引脚P2.0。当这个引脚输出高电平1ms,则舵机旋转到0度,输出高电平1.5ms,则舵机旋转到90度,输出高电平2ms,则舵机旋转到180度。函数“servo_delay”使用8051芯片的定时器生成50us延时。
由于使用8051的定时器0模式1,所以在TMOD寄存器中写入0x01。模式1是16位定时器模式,TH0是16位定时器的高字节,TL0是16位定时器的低字节。将0xff写入TH0,将0xd2写入TL0,在11.0592M的晶振下,值0xffd2将使定时器0产生50us延时。TR引脚用于启动定时器,TF是溢出标志,在溢出时由硬件设置标志,需要通过软件重新设置。
C语言代码:
#include<reg51.h>
sbit output=P2^0;
void msdelay(unsigned int time) // 毫秒级延时函数.
{
unsigned i,j ;
for(i=0;i<time;i++)
for(j=0;j<1275;j++);
}
void servo_delay(int times) // 50us整倍延时函数
{
int m;
for(m=0;m<times;m++)
{
TH0=0xFF;
TL0=0xD2;
TR0=1;
while(TF0==0);
TF0=0;
TR0=0;
}
}
void main()
{
int n;
TMOD=0x01; // 选择 Timer 0, Mode 1
output=0;
while(1)
{
for(n=13;n<28;n=n+2)
{
output=1;
servo_delay(n);
output=0;
servo_delay(260);
msdelay(200);
}
}
}
51单片机驱动mg995舵机实践讲解
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机的组成包括一个小型直流电机,加上传感器、控制芯片、减速齿轮组,装进一体化外壳。舵机能够通过输入信号(一般是PWM信号)控制旋转角度。
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以 MG995舵机为例,其对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
PWM,即脉宽调制,控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
我们学过51单片机后会知道,51单片机不能直接产生PWM信号。但我们了解了PWM的工作原理,我们就可以用51单片机中的定时器将PWM信号给模拟出来。
首先我们需要对51单片机的定时器初始化,设定定时器中端和定义模拟输出PWM信号的引脚。设定51单片机定时器周期为0.5ms,定义变量count统计计时时间,当计时达到20ms后重新计时,这样我们就得到了舵机的运行周期。
我们将编好的程序下载到51单片机中,连接好舵机,程序运行后我们会发现舵机的转动十分缓慢,这是什么原因导致的呢?
我们通过查阅手册可以知道,舵机的工作电压在4.8V—6V,51单片机输出电压为5V,在理论上肯定能带动舵机,但还是要以实际情况为准。根据编者自身实践经验来说,用51单片机驱动MG995舵机时还是选用3.3V工作电压较好,此时舵机能够正常转动而不会缓慢抖动。当然,选用3.3V电压驱动舵机仅限于编者自身实践的经验。如果在程序无错误的情况下用5V电压驱动MG995舵机,舵机不能正常运转时,不妨试一下用3.3V电压驱动舵机。
相关问答
新人求教,如何用 单片机控制舵机 ,该怎样连线?电压一般4.8v或者6v看你舵机型号。。。信号线上要求输入周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5m...舵机有三根线,电源正极,电源负极,一根信号线...
如何 控制舵机 啊?要控制舵机,首先需要连接舵机到电源和控制信号线。然后使用微控制器或单片机发送PWM信号来控制舵机的位置。可以编写程序来指定舵机的转动角度和速度。另外还...
单片机控制舵机 电压不够怎么办?单片机控制舵机电压不够,有可以是使用L298N对stm32供电导致电压不稳,可以取消L298N对stm32供电,用其他稳定电源对stm32供电,即可解决单片机控制舵机电压不够,...
让 舵机 在不同角度停止转动的程序?舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准...
51单片机 可以驱动16路 舵机 么?可以。1.51单片机可以驱动多路舵机,包括16路,通过编写程序和使用PWM技术,可以控制舵机的角度和速度,使其按照预定程序运动。2.驱动16路舵机需要一定的计算...
单片机 开发板跟 舵机 多路 控制板 是什么概念?舵机多路控制板属于单片机的一种应用咯,开发板也可以开发那个开发板可以做很多实验,但舵机控制板只能用来做舵机的控制实验。一个多用,一个单用。...
伺服电机 控制 方法有哪些? 单片机 或驱动CPU原理?伺服电机也叫舵机。控制方法很简单不同占空比的pwm可以控制它正转反转。用单片机的引脚产生pwm接到电机的信号脚上即可。伺服电机也叫舵机。控制方法很简单...
遥控车 舵机 转向器怎么自制?自制遥控车舵机转向器可以是使用Arduino等单片机进行控制。首先需要了解舵机原理和工作方式,再选择合适的控制器,如Arduino,进行编程实现舵机的控制。然后需要...
在智能车上加装 舵机 ,需要一个 舵机 驱动模块吗?航模上使用的舵机,一般都是PWM控制的,安装舵机,当然得有舵机控制电路了。航模上PWM控制基本都是单片机控制的(少数是模拟电路做的),如果单片机的驱动能力...
我有一个梦想是做智能机器人,需要怎么做?当然来得及!首先你有这样的梦想,又肯努力去追求,就没有什么做不成的!学过单片机,尝试用舵机控制板做六足机器人,这就是做机器人的一个很好的基础。A如...