求问单片机控制舵机连续来回转动而不停下来的C程序怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求问单片机控制舵机连续来回转动而不停下来的C程序怎么写相关的知识,希望对你有一定的参考价值。

因为舵机中有电位器,输出1.5ms宽度的脉冲宽度是正90度,所以你可以写一个for循环,然后引进一个参数,不停地改变0.5ms到2.5ms之间的脉冲宽度就行了。(用延迟函数可以调整速度)希望能帮到你! 参考技术A AT89C52控制

#include<reg52.h>
sbit PWM=P1^0;
unsigned char angle=0;
unsigned char count;
unsigned char flage;
void delay(unsigned int z)

unsigned int x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);

void Time0_Init()

TMOD=0x01;
IE=0x82;
TH0=0xfe;
TL0=0x33;
TR0=1;

void keyscan1()

if(flage==0)

delay(10);
angle=2;

void keyscan2()

if(flage==1)

delay(10);
angle=3;


void main()

flage=1;
count=0;
Time0_Init();
while(1)

if(flage==1)

keyscan2();
delay(10);

flage=!flage;
delay(1000);
if(flage==0)

keyscan1();
delay(10);

flage=!flage;
delay(200);


void Time0_Int() interrupt 1

TH0=0xfe;
TL0=0x33;
if(count<angle)
PWM=1;
else
PWM=0;
count=(count+1);
count=count%40;

舵机控制原理

 舵机,是指在自动驾驶仪中操纵飞机舵面(操纵面)转动的一种执行部件。分有:①电动舵机,由电动机、传动部件和离合器组成。接受自动驾驶仪的指令信号而工作,当人工驾驶飞机时,由于离合器保持脱开而传动部件不发生作用。②液压舵机,由液压作动器和旁通活门组成。当人工驾驶飞机时,旁通活门打开,由于作动器活塞两边的液压互相连通而不妨害人工操纵。此外,还有电动液压舵机,简称“电液舵机”。

  舵机的大小由外舾装按照船级社的规范决定,选型时主要考虑扭矩大小。如何审慎地选择经济且合乎需求的舵机,也是一门不可轻忽的学问。本文首先介绍了舵机工作原理,其次阐述了舵机控制原理及舵机的追随特性,最后介绍了舵机的控制方法和舵机对速度的控制。

 

  舵机工作原理

  舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图:

  技术图片

  角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180°舵机来说,就是90°位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。

  当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图:

  技术图片

  舵机控制原理

  控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

  舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:

  0.5ms--------------0度;

  1.0ms------------45度;

  1.5ms------------90度;

  2.0ms-----------135度;

  2.5ms-----------180度;

  舵机的追随特性

  假设现在舵机稳定在A点,这时候CPU发出一个PWM信号,舵机全速由A点转向B点,在这个过程中需要一段时间,舵机才能运动到B点。

  保持时间为Tw

  当Tw≥△T时,舵机能够到达目标,并有剩余时间;

  当Tw≤△T时,舵机不能到达目标;

  理论上:当Tw=△T时,系统最连贯,而且舵机运动的最快。

  实际过程中w不尽相同,连贯运动时的极限△T比较难以计算出来。

  当PWM信号以最小变化量即(1DIV=8us)依次变化时,舵机的分辨率最高,但是速度会减慢。

  技术图片

  舵机的控制方法

  舵机一般用单片机或者数字电路控制。舵机工作主要跟控制线的高电平持续时间有关系,一般按0.5ms(毫秒)划分,如果持续时间为0.5ms,1ms,1.5ms,2ms,2.5ms时,舵机会转过不同的角度。

  舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是为:脉冲 设置为 0.5ms旋转角度为0度;脉冲 设置为 1.0ms旋转角度为45度;脉冲 设置为 1.5ms旋转角度为90度;脉冲 设置为 2.0ms旋转角度为135度;脉冲 设置为 2.5ms旋转角度为180度。

  技术图片

  舵机的速度控制

  对于180度舵机:

  舵机的转动速度取决于起始角度和目标角度的差,差别越大转得越快,当接近时就放慢角度。所以没有专门的函数控制转速。但在大角度转动时,你可以用程序把它设成几个小角度递进,这样可以放慢速度。也通过delay进行慢速,但快速的话只有加高电压了 。

  对于360度舵机:

  write()或者writeMicroseconds()的参数决定舵机的速度,但也可以通过delay()或者delayMicroseconds()来减速。

以上是关于求问单片机控制舵机连续来回转动而不停下来的C程序怎么写的主要内容,如果未能解决你的问题,请参考以下文章

51单片机控制舵机转角的C语言程序

这个单片机控制舵机的程序 舵机会抖动 哪位大侠帮我改一下c程序?

单片机C语言控制舵机

急求51单片机控制舵机C语言程序,舵机可以根据设定旋转任意角度!急求啊,大神帮帮忙!非常感谢!

Arduino控制舵机详解(含代码)

舵机及转向控制