舵機的演算法
『壹』 如何用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)參數的設定方法是一樣的。