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

單片機控制電機

發布時間:2022-04-22 22:38:38

『壹』 怎麼用單片機控制無刷電機驅動器

單片機驅動無刷電機,首先需要知道無刷電機的工作原理,按線序和相位導通,從而實現轉動和正反轉。

解決了驅動程序的問題,還需要解決硬體問題。

單片機io口不能直接驅動無刷電機,需要使用MOS管組成的h橋,或者專用晶元。

『貳』 51單片機控制電機轉速原理

51單片機完全可以控制電機轉速,無論是直流電機的電壓控制還是步進電機或者無刷直流電機的脈沖控制都可以通過外擴晶元或者引腳的PWM調試。

『叄』 如何用單片機控制直流電機

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

(3)單片機控制電機擴展閱讀:

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

#include "reg52.h"


#define uchar unsigned char


#define uint unsigned int


uchar code table[10]={0x3f,0x06,0x5b,


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


sbit xiaoshudian=P0^7;


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


sbit wei2=P2^5;


sbit wei3=P2^6;


sbit wei4=P2^7;


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


sbit motor = P1^0; //電機控制


sbit s1_jiasu = P1^4; //加速按鍵


sbit s2_jiansu= P1^5; //減速按鍵


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


uint pulse_count; //INT0接收到的脈沖數


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


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


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


float reallyspeed; //實際測得的速度


float vv_min=0.0;vv_max=250.0;


float vi_Ref=60.0; //給定值


float vi_PreError,vi_PreDerror;


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


int sample_time=0; //采樣標志


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


void delay (uint z)


{


uint x,y;


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


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


}


void time_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; //開總中斷


}


void keyscan()


{


float j;


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);


}


float v_PIDCalc(float vi_Ref,float vi_SpeedBack)


{


register float error1,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);


}


void v_Display()


{


uint su;


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;


}


void BEEP()


{


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


{


beep=~beep;


delay(4);


}


}


void main()


{


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);


}


void timer0() interrupt 1


{


}


void timer1() interrupt 3


{


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;


}


}



『肆』 51單片機控制電機運轉,用什麼繼電器

採用固態繼電器即可。

控制方法:

1、單片機輸出端接光電耦合器,加上三極體、繼電器組合的電路。

2、看繼電器對應的是多大電壓驅動,繼電器有一端要接上這個電壓,另一端接三極體。

3、繼電器一端接適合交流電機的交流電壓,另一端接交流電機。

4、正反轉用兩個繼電器控制。

繼電器

繼電器(英文名稱:relay)是一種電控制器件,是當輸入量(激勵量)的變化達到規定要求時,在電氣輸出電路中使被控量發生預定的階躍變化的一種電器。它具有控制系統(又稱輸入迴路)和被控制系統(又稱輸出迴路)之間的互動關系。

通常應用於自動化的控制電路中,它實際上是用小電流去控制大電流運作的一種「自動開關」。故在電路中起著自動調節、安全保護、轉換電路等作用。

『伍』 單片機如何控制電機轉速

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

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

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

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

(5)單片機控制電機擴展閱讀

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

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

『陸』 單片機控制步進電動機的運動的原理及單片機程序

51單片步進電機控制原理與控制設計程序
51單片步進電機是數字控制電機,它將脈沖信號轉變成角位移,即給一個脈沖信號,步進電機就轉動一個角度,因此非常適合於單片機控制。步進電機可分為反應式步進電機(簡稱vr)、永磁式步進電機(簡稱pm)和混合式步進電機(簡稱hb)。
51單片步進電機區別於其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉動角度由輸入脈沖數決定,而電機的轉速由脈沖信號頻率決定。
51單片步進電機的驅動電路根據控制信號工作,控制信號由單片機產生。其基本原理作用如下:
(1)控制換相順序
通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為a-b-c-d,通電控制脈沖必須嚴格按照這一順序分別控制a,b,c,d相的通斷。
(2)控制步51單片進電機的轉向
如果給定工作方式正序換相通電,步進電機正轉,如果按反序通電換相,則電機就反轉。
(3)控制51單片步進電機的速度
如果給步進電機發一個控制脈沖,它就轉一步,再發一個脈沖,它會再轉一步。兩個脈沖的間隔越短,步進電機就轉得越快。調整單片機發出的脈沖頻率,就可以對步進電機進行調速。步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。

『柒』 單片機是怎樣控制電機的

單片機只輸出信號,經過隔離電路,再經過功率開關電路驅動電機。

控制普通的三項非同步電機可以單片機輸出信號經三極體後驅動一個小功率繼電器,由繼電器來驅動交流接觸器,進而控制電機,也可以單片機信號經三極體放大後直接驅動功率繼電器。 方法有很多很多。至於驅動伺服,單片機埠的信號經過光耦隔離後可以直接驅動,伺服驅動器本身需要的驅動信號都是弱電信號。

單片機注意事項

一般在單片機的數據手冊(Datasheet)中都會提到該單片機需要的復位信號的要求。一般復位信號的寬度應為。復位電平的寬度和幅度都應滿足晶元的要求,並且要求保持穩定。還有特別重要的一點就是復位電平應與電源上電在同一時刻發生,即晶元一上電,復位信號就已產生。

不然,由於沒有經過復位,單片機中的寄存器的值為隨機值,上電時就會按PC寄存器中的隨機內容開始運行程序,這樣很容易進行誤操作或進入死機狀態。

『捌』 單片機控制步進電機程序

假設P0口低4位接步進電機4個繞組,高電平繞組通電,程序如下:
whille(1)
{P0=1;delayms(5);
P0=2;delayms(5);
P0=4;delayms(5);
P0=8;delayms(5);}
反轉 的話, 就按 8 4 2 1 順序輸出。

『玖』 如何使用單片機控制步進電機

根據電機相數買個驅動器。然後用單片機產生脈沖來控制電機的轉動以及正反轉。單片機產生脈沖的方法和單片機控制流水燈是一樣的。希望我的回答能給你點思路。

『拾』 如何用單片機驅動馬達

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

閱讀全文

與單片機控制電機相關的資料

熱點內容
excel表格單列數據加密 瀏覽:646
給同事的解壓話語 瀏覽:990
linux關閉網卡命令行 瀏覽:452
史上最漂亮程序員 瀏覽:768
java實現excel的導入 瀏覽:758
光遇賬號如何轉移安卓 瀏覽:266
5分之13除以26的演算法 瀏覽:342
蘭州安寧區買解壓包子 瀏覽:641
php接收圖片代碼 瀏覽:668
hci命令 瀏覽:662
福建伺服器大區雲空間 瀏覽:840
筆桿子程序員 瀏覽:745
手機軟體易驗證加密 瀏覽:589
文檔加密只讀模式也不能看到 瀏覽:431
把jpg轉換成pdf的軟體 瀏覽:874
linuxeth0mac 瀏覽:192
windows編程知乎 瀏覽:442
壓縮工期超過40 瀏覽:249
Android怎麼優化內存 瀏覽:106
linuxetcsysconfig 瀏覽:396