搭了個H橋電路,控制電機的正反轉(zhuǎn)和PWM調(diào)速,程序是網(wǎng)上的,改改引腳就能用,電路和源程序如下:

功能:P1.1按鍵停止,P1.2左轉(zhuǎn),P1.3右轉(zhuǎn),P1.0調(diào)速
#include#define uchar unsigned char #define uint unsigned int sbit PW1=P0^0 ; sbit PW2=P0^1 ; //控制電機的兩個輸入 sbit accelerate=P1^0 ; //調(diào)速按鍵 sbit stop=P1^1 ; //停止按鍵 sbit left=P1^2 ; //左轉(zhuǎn)按鍵 sbit right=P1^3 ; //右轉(zhuǎn)按鍵 #define right_turn PW1=0;PW2=1 //順時針轉(zhuǎn)動 #define left_turn PW1=1;PW2=0 //逆向轉(zhuǎn)動 #define end_turn PW1=1;PW2=1 //停轉(zhuǎn) uint t0=25000,t1=25000; //初始時占空比為50% uint a=25000; // 設置定時器裝載初值 25ms 設定頻率為20Hz uchar flag=1; //此標志用于選擇不同的裝載初值 uchar dflag; //左右轉(zhuǎn)標志 uchar count; //用來標志速度檔位 void keyscan(); //鍵盤掃描 void delay(uchar z); void time_init(); //定時器的初始化 void adjust_speed(); //通過 調(diào)整占空比來調(diào)整速度 //**********************************// void main() { time_init(); //定時器的初始化 while(1) { keyscan(); //不斷掃描鍵盤程序,以便及時作出相應的響應 } } //*************************************// void timer0() interrupt 1 using 0 { if(flag) { flag=0; end_turn; a=t0; //t0的大小決定著低電平延續(xù)時間 TH0=(65536-a)/256; TL0=(65536-a)%256; //重裝載初值 } else { flag=1; //這個標志起到交替輸出高低電平的作用 if(dflag==0) { right_turn; //右轉(zhuǎn) } else { left_turn; //左轉(zhuǎn) } a=t1; //t1的大小決定著高電平延續(xù)時間 TH0=(65536-a)/256; TL0=(65536-a)%256; //重裝載初值 } } void time_init() { TMOD=0x01; //工作方式寄存器 軟件起動定時器 定時器功能 方式1 定時器0 TH0=(65536-a)/256; TL0=(65536-a)%256; //裝載初值 ET0=1; //開啟定時器中斷使能 EA=1; // 開啟總中斷 TR0=0; } //****************************************// void delay(uchar z) //在12M下延時z毫秒 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //******************************// void keyscan() { if(stop==0) { TR0=0; //關閉定時器0 即可停止轉(zhuǎn)動 end_turn; } if(left==0) { TR0=1; dflag=1; //轉(zhuǎn)向標志置位則左轉(zhuǎn) } if(right==0) { TR0=1; dflag=0; //轉(zhuǎn)向標志復位則右轉(zhuǎn) } if(accelerate==0) { delay(5) ; //延時消抖 if(accelerate==0) { while(accelerate==0) ; //等待松手 count++; if(count==1) { t0=20000; t1=30000; //占空比為百分之60 } if(count==2) { t0=15000; t1=35000; //占空比為百分之70 } if(count==3) { t0=10000; t1=40000; //占空比為百分之80 } if(count==4) { t0=5000; t1=45000; //占空比為百分之90 } if(count==5) { count=0; } } } }
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
51單片機
+關注
關注
276文章
5707瀏覽量
125935 -
PWM調(diào)速
+關注
關注
2文章
34瀏覽量
11143 -
控制電機
+關注
關注
0文章
243瀏覽量
18508
發(fā)布評論請先 登錄
相關推薦
直流電機正反轉(zhuǎn)控制電路的工作原理
直流電機的正反轉(zhuǎn)控制可以通過改變電機的電流方向來實現(xiàn)。常用的正反轉(zhuǎn)控制電路包括
發(fā)表于 03-27 15:28
?1.7w次閱讀

PWM控制ULN2003怎么實現(xiàn)正反轉(zhuǎn)
現(xiàn)在在整個控制直流電機的樣品,能實現(xiàn)正反轉(zhuǎn),還可以調(diào)速?哪位兄弟有好的方法啊,說說吧,多謝!我準備用MOS管組成H
發(fā)表于 04-23 06:35
PWM調(diào)速原理分享,如何實現(xiàn)電機的正轉(zhuǎn)反轉(zhuǎn)調(diào)速?
,就可以改變直流電機兩端的平均電壓,從而實現(xiàn)直流電機的調(diào)速。前文說過,改變電機兩端的電源極性可以改變電機的轉(zhuǎn)速,那么
發(fā)表于 12-10 11:06
Proteus仿真H橋控制電機正反轉(zhuǎn)是怎樣支持pwm調(diào)速的
Proteus仿真H橋控制電機正反轉(zhuǎn),支持pwm調(diào)速
發(fā)表于 06-28 13:07
MS管搭建的H橋電路如何去實現(xiàn)電機的正反轉(zhuǎn)控制
直流有刷電機有哪些優(yōu)缺點?步進電機有哪些優(yōu)缺點?直流減速電機驅(qū)動該如何去設計?MS管搭建的H橋電路
發(fā)表于 09-03 07:13
PWM如何實現(xiàn)電機的正反轉(zhuǎn)以及調(diào)速呢
直流電機的調(diào)速原理是什么?PWM信號調(diào)速的原理是什么?PWM如何實現(xiàn)電機的
發(fā)表于 09-23 07:31
2路直流電機驅(qū)動模塊正反轉(zhuǎn)PWM調(diào)速+雙H橋步進電機迷你電機驅(qū)動
2路直流電機驅(qū)動模塊正反轉(zhuǎn)PWM調(diào)速+雙H橋步進電機
發(fā)表于 07-21 08:48
?90次下載
pwm控制電機正反轉(zhuǎn),PWM直流電機調(diào)速程序
PWM調(diào)速開關控制方式控制電機,廣泛應用于玩具、小車、機器人等項目,通過串口預設正反轉(zhuǎn)速度,可以
發(fā)表于 10-30 15:00
?2.1w次閱讀
使用單片機實現(xiàn)直流電機正反轉(zhuǎn)及PWM調(diào)速控制的C語言實例
本文檔的主要內(nèi)容詳細介紹的是使用單片機實現(xiàn)直流電機正反轉(zhuǎn)及PWM調(diào)速控制的C語言實例
發(fā)表于 03-31 17:24
?71次下載
評論