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

單片機控制直流電機

發布時間:2022-02-10 16:31:31

❶ 怎麼用單片機控制直流電機調速

用PWM或DAC都可以,工業現場這兩種都有用到,根據你的具體情況進行選擇,PWM的要仔細選擇頻率,並且做好濾波和抗干擾;用DAC的話成本相對來說會稍高,但干擾較小.
如果是做試驗,用玩具小馬達的話,直接用三極體以PWM來控制就可以了.

❷ 51單片機控制直流電機。(c語言控制)

有3種方案:
第一種,通過PWM脈寬調制輸出方法控制轉速,控制占空比的大小可以實現調速!
第二種,通過AD轉換的方法控制直流電機的電壓
第三種,用xtr115程式控制電流源來控制直流電機(類似第二種方法)
如果以上的驅動能力不夠的話再加上一個電壓跟隨器!
程序方面就是一個寄存器的配置問題了,你查一下單片機的技術手冊上面都有介紹的,祝你成功

❸ 單片機驅動直流電動機

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

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

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

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

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

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

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

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

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

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

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

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

(4)單片機控制直流電機擴展閱讀:

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


}


}



❺ 單片機pwm控制直流電機

直流電機驅動最簡單的是用三極體8050和8550搭H橋,然後用PWM控制,單片機檢測撥碼開關,然後輸出不同的PWM就可以了,H橋原理圖:

❻ 單片機控制直流電機設計

摘要
i
abstract
ii
1
概述
1
1.1
課題研究背景及意義
1
1.2
直流電機控制現狀及發展趨勢
2
1.3
課題任務與研究內容
3
2
直流電機控制方案的確定
5
2.1
直流電動機調速方法的選擇
5
2.2
調壓調速方法的選擇
7
2.3
pwm調速控制原理
10
2.4
驅動方式的選擇
11
2.5
伺服系統控制方案的選擇
13
3
控制系統matlab/simulink建模模擬
16
3.1
matlab動態模擬工具simulink簡介
16
3.2
模擬參數計算
16
3.3
模型建立與模擬結果分析
18
4
系統硬體電路設計
27
4.1
系統硬體結構概述
27
4.2
主電路設計
27
4.3
tms320lf2407控制器
30
4.4
檢測電路設計
32
4.5
ipm驅動控制電路設計
34
4.6
故障綜合電路設計
35
4.7
dsp-pc機通信電路設計
36
5
系統軟體設計
37
5.1
dsp軟體開發工具ccs簡介
37
5.2
軟體設計概述
38
5.3
主程序
40
5.4
pwm波形輸出程序
41
5.5
電樞電流檢測程序
42
5.6
轉速檢測程序
42
5.7
dsp-pc通信程序
43
5.8
調節器程序
44
5.9
中斷處理程序
46
總結
47
參考文獻
48
附錄
50


51

❼ 單片機如何控制直流電機的速度

基於模糊PID的直流力矩電機轉速控制。

在分析模糊控制和PID控制結合方式的基礎上,設計一個二維模糊PID控制演算法,該演算法根據誤差信號是否達到閾值來決定何時在模糊控制與PID控制之間切換.採用編碼器、80196KC單片機、16位D/A轉換器和直流力矩電並結合上述控制演算法構成直流力矩電機的模糊PID穩速控制系統.通過對標准PID和模糊PID實測數據分析比較說明,模糊PID控制可以達到無超調輸出,其調節時間小於標准PID控制的調節時間,穩態誤差小於萬分之四.

❽ 51單片機可以直接控制直流電機嗎 在IO口上接個直流電機

不可以,電機工作電流很大,遠遠超過單片機的允許范圍,直接控制,很容易燒壞單片機或者使系統無法正常工作,其他的問題還有一大把。

❾ 單片機通過繼電器控制直流電機程序

記得加三極體驅動繼電器

閱讀全文

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

熱點內容
2020江西買車購置稅演算法 瀏覽:222
百度已解壓文件在哪 瀏覽:88
小米安卓turbo手勢怎麼用 瀏覽:941
php框架作用 瀏覽:35
python消息自定義 瀏覽:949
四川內江電信寬頻伺服器雲主機 瀏覽:953
編譯後的源文件到哪找 瀏覽:956
小米多模網關如何接入aqaraapp 瀏覽:915
python為什麼true 瀏覽:591
androidfonts 瀏覽:341
51單片機外接電源維修 瀏覽:337
文件解壓軟體是幹嘛的 瀏覽:936
linux設置伺服器端ip地址 瀏覽:356
如何把代碼編譯出來 瀏覽:129
python之禪中文版 瀏覽:752
androidbluetooth開發 瀏覽:681
如何買美股什麼app可以買美股 瀏覽:509
分享緩解壓力的做法 瀏覽:383
python圖像處理框架 瀏覽:231
汽車車門加密封條好嗎 瀏覽:498