搭了個(gè)H橋電路,控制電機(jī)的正反轉(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 ; //控制電機(jī)的兩個(gè)輸入 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 //順時(shí)針轉(zhuǎn)動(dòng) #define left_turn PW1=1;PW2=0 //逆向轉(zhuǎn)動(dòng) #define end_turn PW1=1;PW2=1 //停轉(zhuǎn) uint t0=25000,t1=25000; //初始時(shí)占空比為50% uint a=25000; // 設(shè)置定時(shí)器裝載初值 25ms 設(shè)定頻率為20Hz uchar flag=1; //此標(biāo)志用于選擇不同的裝載初值 uchar dflag; //左右轉(zhuǎn)標(biāo)志 uchar count; //用來(lái)標(biāo)志速度檔位 void keyscan(); //鍵盤(pán)掃描 void delay(uchar z); void time_init(); //定時(shí)器的初始化 void adjust_speed(); //通過(guò) 調(diào)整占空比來(lái)調(diào)整速度 //**********************************// void main() { time_init(); //定時(shí)器的初始化 while(1) { keyscan(); //不斷掃描鍵盤(pán)程序,以便及時(shí)作出相應(yīng)的響應(yīng) } } //*************************************// void timer0() interrupt 1 using 0 { if(flag) { flag=0; end_turn; a=t0; //t0的大小決定著低電平延續(xù)時(shí)間 TH0=(65536-a)/256; TL0=(65536-a)%256; //重裝載初值 } else { flag=1; //這個(gè)標(biāo)志起到交替輸出高低電平的作用 if(dflag==0) { right_turn; //右轉(zhuǎn) } else { left_turn; //左轉(zhuǎn) } a=t1; //t1的大小決定著高電平延續(xù)時(shí)間 TH0=(65536-a)/256; TL0=(65536-a)%256; //重裝載初值 } } void time_init() { TMOD=0x01; //工作方式寄存器 軟件起動(dòng)定時(shí)器 定時(shí)器功能 方式1 定時(shí)器0 TH0=(65536-a)/256; TL0=(65536-a)%256; //裝載初值 ET0=1; //開(kāi)啟定時(shí)器中斷使能 EA=1; // 開(kāi)啟總中斷 TR0=0; } //****************************************// void delay(uchar z) //在12M下延時(shí)z毫秒 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //******************************// void keyscan() { if(stop==0) { TR0=0; //關(guān)閉定時(shí)器0 即可停止轉(zhuǎn)動(dòng) end_turn; } if(left==0) { TR0=1; dflag=1; //轉(zhuǎn)向標(biāo)志置位則左轉(zhuǎn) } if(right==0) { TR0=1; dflag=0; //轉(zhuǎn)向標(biāo)志復(fù)位則右轉(zhuǎn) } if(accelerate==0) { delay(5) ; //延時(shí)消抖 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; } } } }
-
51單片機(jī)
+關(guān)注
關(guān)注
277文章
5707瀏覽量
126058 -
PWM調(diào)速
+關(guān)注
關(guān)注
2文章
34瀏覽量
11149 -
控制電機(jī)
+關(guān)注
關(guān)注
0文章
243瀏覽量
18516
發(fā)布評(píng)論請(qǐng)先 登錄
直流電機(jī)正反轉(zhuǎn)控制電路的工作原理

評(píng)論