A. 如何用單片機控制直流電機
通過與單片機相連的按鍵控制直流電機停啟的電路如下圖所示,通過P3.6口按鍵觸發啟動直流電機,P3.7口的按鍵觸發停止直流電機的運行。由圖可知,當P1.0輸出高電平「1」時,NPN型三極體導通,直流電機得電轉動;當P1.0輸出低電平「0」時,NPN型三極體截止,直流電機停止轉動。
通過單片機產生PWM波控制直流電機程序
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數碼管顯示碼(0-9)
sbitxiaoshudian=P0^7;
sbitwei1=P2^4;//數碼管位選定義
sbitwei2=P2^5;
sbitwei3=P2^6;
sbitwei4=P2^7;
sbitbeep=P2^3;//蜂鳴器控制端
sbitmotor=P1^0;//電機控制
sbits1_jiasu=P1^4;//加速按鍵
sbits2_jiansu=P1^5;//減速按鍵
sbits3_jiting=P1^6;//停止/開始按鍵
uintpulse_count;//INT0接收到的脈沖數
uintnum=0;//num相當於占空比調節的精度
ucharspeed[3];//四位速度值存儲
floatbianhuasu;//當前速度(理論計算值)
floatreallyspeed;//實際測得的速度
floatvv_min=0.0;vv_max=250.0;
floatvi_Ref=60.0;//給定值
floatvi_PreError,vi_PreDerror;
uintpwm=100;//相當於占空比標志變數
intsample_time=0;//采樣標志
floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,積分,微分常數
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
voidtime_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;//開總中斷
}
voidkeyscan()
{
floatj;
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);
}
floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)
{
registerfloaterror1,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);
}
voidv_Display()
{
uintsu;
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;
}
voidBEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
voidmain()
{
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);
}
voidtimer0()interrupt1
{
}
voidtimer1()interrupt3
{
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;
}
}
B. 怎樣用單片機控制直流電動機
1,簡單的開關控制,用單片機引腳輸出高低電平,控制MOS管驅動電路。
2,正反轉控制,需要兩個單片機引腳,一個控制正反轉,一個控制啟動與否。
3,需要控制速度,(1)電壓控制,(2)PWM(脈寬)控制。
4,需要控制轉角,首先能夠控制速度,然後增加一個編碼器,單片機中加入PID控制,用以精確控制。
以上大概就是直流電機能夠控制的東西。
C. 單片機控制直流電機採用的是什麼信號
PWM信號。單片機官方參數顯示,控制直流電機採用的是PWM信號。單片機是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器、多種IO口和中斷系統等功能集兆亮圓成到一塊矽片鍵則上構成的一個小而完族塌善的微型計算機系統。
D. 51單片機控制兩路直流電機轉速的c程序技巧
既然是技巧的話那就不提供詳細的代碼了,首先要看你這個小車是幾輪幾驅動的,首先假設你只用一個L298n驅動板的話,那麼再假設只含左右兩個輪,只對左右兩個輪進行控制的話,那麼就簡單了,首先你要知道L298N驅動板怎麼用,不同的驅動板功能都不一定相同,不過控制引腳一般來說都是4根,可以控制兩個直流電機的正反轉,同時還有兩個PWM介面,可以控制兩個電機的轉速。
假設4個控制引腳分為A1、A2和B1、B2,A1、A2控制第一個直流電機,B1、B2控制第二個直流電機,當A1和A2接不同方向的電流後直流電機會正轉或反轉,同理B1和B2也是一樣。PWM是通過控制佔有率來控制電機速度的,即控制高電平和低電平的時間的,不同,這樣在規定時間內,如果高電平的時間佔有比例越高則電機轉速越快,輸出功率越高。
知道以上內容了那麼之後的內容就更容易理解了
前進:兩個直流電機朝正方向同時轉動即可
後退:兩個直流電機朝反方向同時轉動即可
原地左轉:類似原地打轉,只需讓兩個電機一個正轉一個反轉即可,即左轉為左邊電機反轉,右邊電機正轉
原地右轉:與原地左轉相反即可
固定輪轉:固定左邊令右側輪前進即可實現固定輪轉向的目的,例如左轉的話令左邊電機停止,右側電機正向轉動即可,向右轉的話與左轉相反。
至於keil程序,這個要根據具體的硬體來寫,別人的無法通用,不過這些都不難,只要原理弄懂了,稍微花一點兒時間還是能很容易寫出來的,先從控制電機的轉向開始。別人的程序的話可能會越看越難理解,還是自己動手比較好,先不考慮調速的情況下完成了之後再去看看有關PWM調速的內容。
E. 直流電機驅動怎麼和單片機連是不是用單片機給A1高電平,給A2低電平。A1,A2接電機,電機就會轉了(供
一般單片機引腳輸出能力和驅動能力有限,對於很小功率的電機可以直接驅動(但不推薦),但是一般來說,電機驅動需要專門的驅動電路。
F. 如何用單片機控制直流電機
1、通過設置PWM波的占空比來控制直流電機的轉速,占空比越大,轉速越快,越小轉速越低。
2、當然單片機的I/O口是不能直接驅動電機的,所以你還需要用一個馬達驅動晶元。像LG9110、CMO825等。馬達驅動IC可以將單片機I/O輸出信號放大,這樣電機中流過的電流足夠大,電機才能轉起來。
3、你要是不清除PWM是怎麼回事呢,可以先作一些了解,再來知道有徵對性地提問就好了。