導航:首頁 > 操作系統 > 430單片機直流電機

430單片機直流電機

發布時間:2024-02-29 12:13:25

❶ 用單片機怎麼使直流電機正反轉

單片機控制直流電機正反轉,最簡單的方法是 兩個I/O口 控制兩個繼電器(一組常開、常閉)的就可以,電機 兩個極 接 兩個繼電器 的 動觸點,兩個繼電器 的 常開點接+(電機電源),兩個常閉點接-,就可以了。
單片機控制接通一個繼電器 是正轉,控制接通另一個繼電器 是反轉,兩個繼電器都不接通(或者都接通)電機不轉。

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

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

(2)430單片機直流電機擴展閱讀:

通過單片機產生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;


}


}



❸ 單片機如何控制大功率直流電機

1.區別 有刷無刷非常不一樣。有刷的簡單很多,給一個直流電壓就可以轉了。無刷的話需要功率電力電子設備來開通、關斷電壓,並且需要根據轉子的位置判斷開關的節奏,控制上要求比較復雜。說白了,無刷直流本質上是一個吃方波的交流電機。不過小型無刷電機的控制已經很成熟了,所有電腦裡面的風扇都是無刷直流。 2.驅動 驅動的話,有刷電機需要的是直流DC-DC變換器。用buck,boost,半橋,都可以。只要是能調壓的直流電壓,都可以。甚至是220V-->可調變壓器-->整流器都可以。500W的電機實在是小電機,不算大功率。所以只調壓就可以控制轉速。一般轉速帶寬在幾秒鍾時間里是可以調整的。 當然,如果要是5kW以上,或者你需要轉矩控制,那就要控制電流了。電流控制就復雜一點,不過響應快,轉矩調整用幾個毫秒就足夠了。轉速調整的話帶寬在幾十毫秒。 無刷電機就復雜很多。一般至少需要一個三相h橋吧。控制分為有感測器控制和無感測器控制。有感測器控制,就是用感測器測得轉子位置,然後給定子上相應的方波電壓。不過感測器很貴,說不定比你電機便宜不了多少。無感測器控制,通過空閑的定子繞組上的電壓來推算轉子位置,需要一個控制演算法。有很多碩士論文就是研究這個的,如果你想做的話肯定要看一看才能懂。 3. 隔離。 光耦隔離在任何功率電路裡面都不是必要的。不過隔離會讓電路變的非常穩定,不容易被過電壓弄壞。而且還可以調整電平。所以還是推薦使用。單片機的信號出來用光耦隔離,然後送到門極驅動晶元,再之後送到功率開關上。當然,像AD這種公司還提供了隔離+驅動的集成晶元ADUM系列,性能極好,不過價格比較高。 隔離是電力電子驅動用的,和電機沒啥關系。光耦畢竟要花錢,如果是30、50伏這種電路,只要電路設計合理,不用光耦是沒問題的。如果電壓再高,就要用光耦了。個人建議。 4. 其他。 500W的電路損耗大概在10-20瓦這個數量級,跟你的電壓、電流等級有關系。如果要自己做的話,散熱是要考慮好的。另外電路保護也要做好,電機上是電感和一個轉動的轉子。其中電感怕斷路,有可能產生非常高的瞬間電壓,而轉子會產生一個持續的電壓,比較怕短路,這兩個上面的能量如果沒控制好,電路是有可能會爆掉的。

❹ 單片機驅動直流電動機

你用的是12V電源,也就應該使用這個電路了。

問題是單片機輸出高電平,提供的電流有限,雖經過8050放大,也難以達到使電機轉動的需求。

可以再加一級放大,用8550即可,見圖。

原來的1K電阻可以適當的減小,680~470歐姆左右即可。

此時,單片機輸出低電平時,電機轉動。

--------------------------

加那兩個電阻,是進行電流限制,以免燒壞三極體和單片機引腳。

3.3K電阻,是控制8550的基極電流,在1mA左右就基本夠用;

減小到1K也可,這時,電流將近5mA了,還可以的。

1K電阻,是控制8050的基極電流的,減小到470歐姆,基極電流就能達到8~10mA,電流再增大,8050有危險。

❺ 求用單片機和ULN2003A驅動直流電機的接法

電路圖接法:

ULN2003是大電流驅動陣列,多用於單片機、智能儀表、PLC、數字量輸出卡等控制電路中。可直接驅動繼電器等負載。輸入5VTTL電平,輸出可達500mA/50V。

ULN2003是高耐壓、大電流達林頓系列,由七個硅NPN達林頓管組成。該電路的特點如下:ULN2003的每一對達林頓都串聯一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標准邏輯緩沖器來處理的數據。

ULN2003是高壓大電流達林頓晶體管陣列系列產品,具有電流增益高、工作電壓高、溫度范圍寬、帶負載能力強等特點,適應於各類要求高速大功率驅動的系統。

(5)430單片機直流電機擴展閱讀:

引腳1:CPU脈沖輸入端,埠對應一個信號輸出端。

引腳2:CPU脈沖輸入端。

引腳3:CPU脈沖輸入端。

引腳4:CPU脈沖輸入端。

引腳5:CPU脈沖輸入端。

引腳6:CPU脈沖輸入端。

引腳7:CPU脈沖輸入端。

引腳8:接地。

引腳9:該腳是內部7個續流二極體負極的公共端,各二極體的正極分別接各達林頓管的集電極。用於感性負載時,該腳接負載電源正極,實現續流作用。如果該腳接地,實際上就是達林頓管的集電極對地接通。

引腳10:脈沖信號輸出端,對應7腳信號輸入端。

引腳11:脈沖信號輸出端,對應6腳信號輸入端。

引腳12:脈沖信號輸出端,對應5腳信號輸入端。

引腳13:脈沖信號輸出端,對應4腳信號輸入端。

引腳14:脈沖信號輸出端,對應3腳信號輸入端。

引腳15:脈沖信號輸出端,對應2腳信號輸入端。

引腳16:脈沖信號輸出端,對應1腳信號輸入端。

閱讀全文

與430單片機直流電機相關的資料

熱點內容
android兼容測試工具 瀏覽:92
雲伺服器不支持虛擬化怎麼辦 瀏覽:189
加密方式的演變 瀏覽:364
java常用演算法pdf 瀏覽:734
伺服器數據遇到異常什麼原因 瀏覽:450
phpexif信息 瀏覽:542
單片機三位元組浮點數 瀏覽:756
命令與征服泰伯利亞戰爭下載 瀏覽:378
c窗口界面編程 瀏覽:23
hypermill編程能做模板嗎 瀏覽:782
計算機網路最經典的演算法 瀏覽:628
華為思科的配置命令 瀏覽:869
linux設置光碟啟動 瀏覽:361
程序員俱樂部注冊 瀏覽:19
洗潔精雞蛋盤解壓視頻 瀏覽:294
企業內網加密app 瀏覽:51
騰訊雲伺服器怎麼設置本地網路 瀏覽:625
日常程序員 瀏覽:515
哪個pe有bit加密功能 瀏覽:110
rust伺服器是用什麼ip 瀏覽:694