導航:首頁 > 操作系統 > 單片機控制伺服電機程序

單片機控制伺服電機程序

發布時間:2024-03-07 18:56:35

單片機如何控制電機轉速

利用單片機的定時器TIMER_A(TA)中斷產生脈沖信號,通過在響應的中斷程序中實現步進電機步數和圈數的准確計數,通過PWM實現轉速控制。

可以利用P10埠的中斷關閉TA中斷程序,並推入堆棧,停止電機;P11中斷則開啟TA中斷,堆棧推入程序計器(PC),開啟電機。

P31埠輸出高電平由PMM8713的U/D埠控制電機的轉向;P3.0~P37埠接8279的8個數據介面。

單片機掃描到矩陣鍵盤有鍵按下時,利用P2埠的中斷設置TA,控制啟停、調速和轉向等,同時單片機反饋給8279控制LED管顯示轉速和轉向。

(1)單片機控制伺服電機程序擴展閱讀

1、單片機所接收到控制命令暫存在RXBUFFER中,與存儲在片內Flash的中斷程序的入口地址相比較,相同就進入中斷,實現步進電機的控制。

2、當P1.0中為高電平時,其內部三極體導通,使電機轉動。當P1.0為低電平時,內部三極體截止,電路斷開,電機停止轉動。所以在程序中可以利用P1.0口輸出PWM波來控制電機的轉速。

⑵ 怎麼用單片機控制伺服放大器來控制伺服電機

伺服控制一般單片機給脈沖信號,伺服接受的控制信號一般簡單控制如下:
S_ON:伺服ON,使能信號

Pulse+:正轉 或Pulse:脈沖
Pulse-:反轉 dir 方向

以上三個控制信號就可以控制伺服電機了。

⑶ 如何用單片機控制直流電機

通過與單片機相連的按鍵控制直流電機停啟的電路如下圖所示,通過P3.6口按鍵觸發啟動直流電機,P3.7口的按鍵觸發停止直流電機的運行。由圖可知,當P1.0輸出高電平「1」時,NPN型三極體導通,直流電機得電轉動;當P1.0輸出低電平「0」時,NPN型三極體截止,直流電機停止轉動。

(3)單片機控制伺服電機程序擴展閱讀:

通過單片機產生PWM波控制直流電機程序

#include"reg52.h"


#defineucharunsignedchar


#defineuintunsignedint


ucharcodetable[10]={0x3f,0x06,0x5b,


0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數碼管顯示碼(0-9)


sbitxiaoshudian=P0^7;


sbitwei1=P2^4;//數碼管位選定義


sbitwei2=P2^5;


sbitwei3=P2^6;


sbitwei4=P2^7;


sbitbeep=P2^3;//蜂鳴器控制端


sbitmotor=P1^0;//電機控制


sbits1_jiasu=P1^4;//加速按鍵


sbits2_jiansu=P1^5;//減速按鍵


sbits3_jiting=P1^6;//停止/開始按鍵


uintpulse_count;//INT0接收到的脈沖數


uintnum=0;//num相當於占空比調節的精度


ucharspeed[3];//四位速度值存儲


floatbianhuasu;//當前速度(理論計算值)


floatreallyspeed;//實際測得的速度


floatvv_min=0.0;vv_max=250.0;


floatvi_Ref=60.0;//給定值


floatvi_PreError,vi_PreDerror;


uintpwm=100;//相當於占空比標志變數


intsample_time=0;//采樣標志


floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,積分,微分常數


voiddelay(uintz)


{


uintx,y;


for(x=z;x>0;x--)


for(y=20;y>0;y--);


}


voidtime_init()


{


ET1=1;//允許定時器T1中斷


ET0=1;//允許定時器T0中斷


TMOD=0x15;//定時器0計數,模式1;定時器1定時,模式1


TH1=(65536-100)/256;//定時器1值,負責PID中斷,0.1ms定時


TL1=(65536-100)%6;


TR0=1;//開定時器


TR1=1;


IP=0X08;//定時器1為高優級


EA=1;//開總中斷


}


voidkeyscan()


{


floatj;


if(s1_jiasu==0)//加速


{


delay(20);


if(s1_jiasu==0)


vi_Ref+=10;


j=vi_Ref;


}


while(s1_jiasu==0);


if(s2_jiansu==0)//減速


{


delay(20);


if(s2_jiansu==0)


vi_Ref-=10;


j=vi_Ref;


}


while(s2_jiansu==0);


if(s3_jiting==0)


{


delay(20);


motor=0;


P1=0X00;


P3=0X00;


P0=0x00;


}


while(s3_jiting==0);


}


floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)


{


registerfloaterror1,d_error,dd_error;


error1=vi_Ref-vi_SpeedBack;//偏差的計算


d_error=error1-vi_PreError;//誤差的偏差


dd_error=d_error-vi_PreDerror;//誤差變化率


vi_PreError=error1;//存儲當前偏差


vi_PreDerror=d_error;


bianhuasu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);


return(bianhuasu);


}


voidv_Display()


{


uintsu;


su=(int)(reallyspeed*10);//乘以10之後強制轉化成整型


speed[3]=su/1000;//百位


speed[2]=(su00)/100;//十位


speed[1]=(su0)/10;//個位


speed[0]=su;//小數點後一位


wei1=0;//第一位打開


P0=table[speed[3]];


delay(5);


wei1=1;//第一位關閉


wei2=0;


P0=table[speed[2]];


delay(5);


wei2=1;


wei3=0;


P0=table[speed[1]];


xiaoshudian=1;


delay(5);


wei3=1;


wei4=0;


P0=table[speed[0]];


delay(5);


wei4=1;


}


voidBEEP()


{


if((reallyspeed)>=vi_Ref+5||(reallyspeed


{


beep=~beep;


delay(4);


}


}


voidmain()


{


time_init();


motor=0;


while(1)


{


v_Display();


BEEP();


}


if(s3_jiting==0)//對按鍵3進行掃描,增強急停效果


{


delay(20);


motor=0;


P1=0X00;


P3=0X00;


P0=0x00;


}


while(s3_jiting==0);


}


voidtimer0()interrupt1


{


}


voidtimer1()interrupt3


{


TH1=(65536-100)/256;//1ms定時


TL1=(65536-100)%6;


sample_time++;


if(sample_time==5000)//采樣時間0.1ms*5000=0.5s


{


TR0=0;//關閉定時器0


sample_time=0;


pulse_count=TH0*255+TL0;//保存當前脈沖數


keyscan();//掃描按鍵


reallyspeed=pulse_count/(4*0.6);//計算速度


pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);


if(pwm


if(pwm>100)pwm=100;


TH0=TL0=0;


TR0=1;//開啟定時器0


}


num++;


if(num==pwm)//此處的num值,就是占空比


{


motor=0;


}


if(num==100)//100相當於占空比調節的精度


{


num=0;


motor=1;


}


}



⑷ 如何用單片機驅動馬達

一、第一步是將電機連接到HC6800em3單板注意使用P1端的電纜排列單片機連接到電機控制晶元的輸入端(4Pin埠),以確保P1.0-P1.3正常。

⑸ 跪求單片機控制伺服電機轉速程(匯編語言)序及電路圖

最小系統就可以控制伺服了,伺服電機的控制需要三個信號就OK,分別是SV_ON(使能),CW,CCW。比如:
CW EQU P1.0
CCW EQU P1.1
SVON EQU P1.2
KEY EQU P1.3
ORG 0000H
SJMP STA
ORG 0030H
STA:
CLR EA
SETB SVON
LOOP:
JB KEY,LOOP1
CPL CW
LCALL DELAY
SJMP LOOP
LOOP1:
CPL CCW
LCALL DELAY
SJMP LOOP
END

⑹ 51單片機控制8路伺服電機的程序。。下面這個程序是怎麼實現的啊看來半天頭有點暈了。。求注釋。。

order1 有 1-16 16種狀態 ,每進一次中斷改變一次。
1-16分別對應 8個口高一次,低一次,
高低總時間計數器2700次 比如 d1 高 t1 1500 低時 2700-t1= 1200
出來波形就是
d1 高 (1500) 拉低(1200) d2高(1000) 拉低。。。d8 高(2000) 拉低(700) d1高(1500)這樣循環下去。

⑺ 如何做一個單片機板控制伺服電機,以及伺服電機基本

#includde<reg51.h>
sbit sv_on=P1^0;
sbit cw=P1^1;
sbit ccw=P1^2;
void delay(int a)
{
unsigned char i;
while(a--)for(i=0;i<120;i++);
}
main()
{
unsigned char i;

while(1)

{
for(i=0;i<250;i++)

{
sv_on=1;

cw=~cw;

ccw=0;

delay(1);

}

for(i=0;i<250;i++)

{
sv_on=1;

cw=0;

ccw=~ccw;

delay(1);

}

}
}

閱讀全文

與單片機控制伺服電機程序相關的資料

熱點內容
企業內網加密app 瀏覽:49
騰訊雲伺服器怎麼設置本地網路 瀏覽:623
日常程序員 瀏覽:513
哪個pe有bit加密功能 瀏覽:108
rust伺服器是用什麼ip 瀏覽:692
java隨機字元串生成 瀏覽:551
數碼寶貝編程人物 瀏覽:390
php多用戶建站系統 瀏覽:624
加密防盜地上栓價位 瀏覽:671
比澤爾壓縮機下載 瀏覽:420
深圳壓縮機製造公司 瀏覽:882
如何給u盤單獨文件加密碼 瀏覽:284
恆溫機故障源碼 瀏覽:418
如何打開管家婆伺服器支持者 瀏覽:266
安卓手機自帶瀏覽器有什麼用 瀏覽:532
老闆咨詢阿里雲還是獨立伺服器 瀏覽:814
諾基亞手機app哪裡下載 瀏覽:520
看比賽用哪個app 瀏覽:977
如何評價如故app 瀏覽:152
建立表結構的命令 瀏覽:581