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

單片機與電機控制

發布時間:2023-08-29 22:43:06

單片機是怎樣控制電機的

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

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

單片機注意事項

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

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

㈡ 怎樣用單片機控制直流電動機

1,簡單的開關控制,用單片機引腳輸出高低電平,控制MOS管驅動電路。
2,正反轉控制,需要兩個單片機引腳,一個控制正反轉,一個控制啟動與否。
3,需要控制速度,(1)電壓控制,(2)PWM(脈寬)控制。
4,需要控制轉角,首先能夠控制速度,然後增加一個編碼器,單片機中加入PID控制,用以精確控制。
以上大概就是直流電機能夠控制的東西。

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

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

㈤ 單片機控制電機

1、用到什麼功能,應該是取決於單片機本身的特徵,有些也要用到ADC或內置比較部分.

2、常規設計是,6個IO口控制無刷電機的轉動,3個IO口檢測過零信號,加上一些輔助的IO,樓主就可以算一下了

如下圖

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

1、通過設置PWM波的占空比來控制直流電機的轉速,占空比越大,轉速越快,越小轉速越低。
2、當然單片機的I/O口是不能直接驅動電機的,所以你還需要用一個馬達驅動晶元。像LG9110、CMO825等。馬達驅動友爛IC可以將單片機I/O輸出信號放大,這樣電機中流過的電流足夠大,電機才能轉起來。
3、你要是不清除PWM是怎麼回事呢,可以塌告李先作一些了解,再來知道有徵對性地團遲提問就好了。

㈦ 單片機如何控制電機轉速

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

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

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

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

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

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

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

㈧ 如何利用51系列單片機控制電機

方法一、單片機接三極體做一個全橋控制小功率直流電機正反轉,檢測到紅色的狀態標記下來,電機轉動,綠色時候標記下來,反向轉動。
方法二、淘寶上購買一小的步進電機,一般直接驅動電路帶著的,可以直接接在單片機的IO口上,程序的控制原理一樣,電機控製做for循環,步進電機,步數即for循環次數定好,正反轉的區別無非就是IO口輸出的邏輯順序不同就可以實現了。
兩個方法,一個硬體上有個難度,一個是軟體上。但是都是很簡單的,正常的情況下花1天時間就能學會和應用。預祝成功。
ps:純手打。。

閱讀全文

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

熱點內容
手機軟體加密了怎麼解開 瀏覽:887
linux中的ln命令例子 瀏覽:142
為什麼玩cf第一次進入伺服器很慢 瀏覽:967
工作單源碼 瀏覽:619
安卓如何關閉app自動升級 瀏覽:137
new文件夾怎麼打開 瀏覽:633
安卓51如何優化 瀏覽:177
活塞式壓縮機原理圖 瀏覽:845
水環式壓縮機工作原理 瀏覽:715
阿里雲伺服器安裝後怎麼使用 瀏覽:933
去做APP開戶有什麼危險沒得啊 瀏覽:696
8分之1乘58演算法 瀏覽:171
php提交過濾 瀏覽:358
豪斯曼檢驗stata命令 瀏覽:771
雲看地是什麼APP 瀏覽:886
數學指南pdf 瀏覽:860
phpcurldll64位 瀏覽:983
程序員脫產一年半 瀏覽:853
hr招程序員有什麼條件 瀏覽:590
android開源集合 瀏覽:872