舵机的算法
‘壹’ 如何用51单片机控制舵机的单片机程序是怎么写的希望你也能给我发一个编写程序和电路图
单片机系统实现对舵机输出转角的控制,必须首先完成两项任务:首先,产生基本的PWM周期信号,即产生20ms的周期信号;其次,调整脉宽,即单片机调节PWM信号的占空比。单片机能使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将PWM信号输出到舵机。
发一个自己原来写的简单的。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar count,jd;
sbit pwm=P1^0;
sbit jia=P3^2;
sbit jian=P3^3;
uchar code table[10] = {0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
//延时函数
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);
}
//定时器初始化
void Time0_init()
{
TMOD=0x01; //定时器0工作方式1
IE=0x82;
TH0=0xfe;
TL0=0x33; //11.0592MHZ晶振,0.5ms
TR0=1;
}
//定时器0中断程序
void Time0() interrupt 1
{
TH0=0xfe;
TL0=0x33;
if(count<jd) //判断0.5ms次数是否小于角度标识
pwm=1; //是,pwm输出高电平
else
pwm=0; //否,输出低电平
count=count+1;
count=count%40; //次数始终保持为40,即保持周期为20ms
}
//按键扫描
void keyscan()
{
if(jia==0)
{
delay(10);
if(jia==0)
{
jd++; //角度增加 1
count=0; //按键按下则20ms周期重新开始计时
if(jd==6)
jd=5; //已经是180度,保持
while(jia==0);
}
}
if(jian==0)
{
delay(10);
if(jian==0)
{
jd--;
count=0;
if(jd==0)
jd=1; //已经0度,保持
while(jian==0);
}
}
}
//数码管显示
void display()
{
uchar ,shi,ge ;
switch(jd)
{
case 1:
=0;
shi=0;
ge=0;
break;
case 2:
=0;
shi=4;
ge=5;
break;
case 3:
=0;
shi=9;
ge=0;
break;
case 4:
=1;
shi=3;
ge=5;
break;
case 5:
=1;
shi=8;
ge=0;
break;
}
P0=table[];
P2=1;
delay(5);
P0=table[shi];
P2=2;
delay(5);
P0=table[ge];
P2=3;
delay(5);
}
void main()
{
//jd=1;
count=0;
Time0_init();
while(1)
{
keyscan();
display();
}
}
电路图很简单的,几个按键,再在单片机最小系统上接出一个信号线,再给舵机供上电就可以了。
‘贰’ 数字舵机与模拟舵机有什么区别
数字舵机与模拟舵机有的区别:
1、在处理输入信号的方式不同:数字舵机是由主要由马达、减速齿轮、控制电路等组成,只需要发送一次PWM信号就能保持在规定的某个位置。
而模拟舵机是相同于传统的舵机,是需要多次发送PWM信号才能够保持在规定的位置上,实现对舵机的控制,按照规定的要求进行的速度进行转动。
2、在控制电路上不同:数字舵机的控制电路比模拟舵机多了微处理器和晶振;因此两者在控制电路的处理方式不同,同时数字舵机的性能方面上也不同于模拟舵机。
3、两者的反应速度不同:模拟舵机是需要一个短促的动力脉冲,紧接着很长时间的停顿,因此并不能够给马达过多的激励,来使其转动。
数字舵机是新型时代出现的舵机,因此数字在反应速度方面与模拟舵机相比是由优势的。因为数字舵机是拥有微处理器,所有数字舵机可以将动力脉冲发生到马达之前,对输入的信号进行的根据的设定参数进行处理。
‘叁’ 单片机编程控制舵机求救啊啊
没有舵机的资料也不知道改哪里啊。。。。
你先改小延时参数试试。
num == 100
100改小或改大试试。
不行就改
angle(75,75,75,75,100);
里面的参数,该大或者改小看效果。
‘肆’ 摄像头组舵机PID算法的偏差ek要怎么求
不知道你的pid 表是控制什么的,我们用来控制蒸汽薄膜阀动作来控制温度的,而且一般表都有pid 自诊定,表自身能计算出适合的pid 值。我的经验是,p值最重要,一般p值越小,控制的动作反应越快,I 值和D 值只是帮助控制的效果更好。
和你说下在我们设备的一个经验值里,P=3,I=60,D=90,希望对你有所帮助。很多的控制也都是慢慢试验出来的pid 值。因为各种应用场合千差万别,不好根据公式计算出pid 值。
以下摘自网络:
PID控制方式的具体流程是计算误差和温度的变化速度进行PID计算,先以P参数和误差计算出基础输出量,在根据误差的累积值和I参数计算出修正量,最终找出控制点和温度设定点之间的平衡状态,最后在通过温度的变化速率与D参数控制温度的变化速度以防止温度的剧烈变化。进行整定时先进行P调节,使I和D作用无效,观察温度变化曲线,若变化曲线多次出现波形则应该放大比例(P)参数,若变化曲线非常平缓,则应该缩小比例(P)参数。比例(P)参数设定好后,设定积分(I)参数,积分(I)正好与P参数相反,曲线平缓则需要放大积分(I),出现多次波形则需要缩小积分(I)。比例(P)和积分(I)都设定好以后设定微分(D)参数,微分(D)参数与比例(P)参数的设定方法是一样的。