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

單片機控制24v電機

發布時間:2022-05-29 11:11:35

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

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

(1)單片機控制24v電機擴展閱讀:

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

⑶ 51單片機如何控制24V兩相四電42步進電機

用單片機同時是不可能的,當然,時間間隔小到可以接受,跑幾個任務,那也可以視為同時。要實現真正意義上的同時,用FPGA/CPLD是可以完成的。 話說回來,也許你的同時並不是說一定嚴格地同時工作,只是說一個單片機去控制四個步進電機,那就好辦多了。 一個步進電機,比如4相5線那種,4個IO口可控制一個,四個步進電機就要16個,驅動晶元用ULN2003即可。 當然,如果你的IO口不允許使用這么多,那也可以通過串轉並的方法,擴展IO口,比如用74HC595,三根IO口控制它,它可以級聯,三根線可以控制很多片。一片為8位,兩片就為16位,3片為24位 …… 只要加些三極體驅動那三根控制線,三個IO口可控制一串級聯的74HC595,得到的擴展IO口,那是相當多的。我用三個IO口控制過5片74HC595,三個IO口一下子就擴展成了40個IO口!!!

⑷ 請問能用ULN2003A控制24V的步進電機嗎控制器是AT889S52單片機。步進電機的工作電壓是24V,

完全可以的哦 不用耦合的 ULN2003的 IN端接單片機的引腳 OUT步進電機 2003的公共端COM接到24v 這樣就可以控制了的 2003本來是個復合的達林頓管子 內部就相當於耦合了 專門可以用來驅動低於50V的負載的 你找個ULN的數據手冊看看典型應用就知道怎麼用了

⑸ 如何讓單片機pwm驅動24v直流電機呢

ULN2003 多口並用 保證電流

⑹ 如何用單片機5v控制24v電機的正反轉

用單片機5v控制24v電機的正反轉的電路,
我可以提供一個由兩個繼電器、兩只PNP三極體和幾個電阻、二極體組成的電路給你。

本來H橋電路,我也有,但調試過幾次都不理想。

⑺ 求單片機控制直流電機正反轉的電路圖,直流電機的工作電壓為24v。。。

可以用驅動晶元L298N!它的一般接法如圖……至於它的管腳功能可以在網上找一下,推薦一下:www.ic37.com那裡有很多晶元的官方資料。

⑻ 用51單片機控制14路24V直流電機

關鍵看你的輸入信號(也就是控制信號)。
如果是通過邏輯及數學運算得到的話,那就要用晶元控制;如果你有14個信號的話,那就不用晶元。
如果用晶元控制,那就用擴展IO口,或者用兩塊51晶元;
如果不用晶元控制,那就直接用H橋驅動馬達(正反轉);
至於要精確控制馬達,那就得用到晶元,而直流電機和步進電機都能做到。如果用直流電機的話要加霍爾感應開關如A44E來計數。

⑼ 如何用單片機5V輸出驅動24V的電路需要簡單保證能用的

如果是燈泡的話,沒必要擔心那麼嚴重的後果,又不是感性負載。

簡單的說,一兩個三極體足夠了。用MOSFET的話,一個管子就夠了,比如常見的K1270等管子都可以,一般這種情況下用N溝道的。

從單片機IO出來接限流電阻進三極體基極或場效應管柵極,三極體若嫌倍數不夠可組成達林頓或直接用達林頓管(如D633),發射極(或漏極)接地,集電集(或源極)通過一個適當的限流電阻接負載燈泡,燈的另一端接24V電源正極即可。

在使用場效應管時,如果單片機不是推挽輸出的,最好在上邊加一個下拉電阻,以防漏電流導通。

⑽ 用單片機通過L298N能控制24V直流電機正反轉嗎

完全可以的

閱讀全文

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

熱點內容
自己購買雲主伺服器推薦 瀏覽:419
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:189
pdf劈開合並 瀏覽:27
不能修改的pdf 瀏覽:751
同城公眾源碼 瀏覽:488
一個伺服器2個埠怎麼映射 瀏覽:297
java字元串ascii碼 瀏覽:78
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:945
安卓導航無聲音怎麼維修 瀏覽:332
app怎麼裝視頻 瀏覽:430
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491