Ⅰ 如何用單片機控制直流電機
通過與單片機相連的按鍵控制直流電機停啟的電路如下圖所示,通過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;
}
}
Ⅱ 我想用單片機控制100個微型電機,2.2V,100mA的,應該怎麼驅動電路啊
那你需要單片機有100個IO引腳啊。沒有那麼哪數多的單片機,你可以用鎖存器來驅動,13片74HC573需要13+8個引腳,51單片機就可以。
這只是信號輸出。
但是褲拆想輸出100毫安的李純首電流,那就還需要15片ULN2003來驅動了。
你的電機電壓挺低,需要串聯電阻才行。
至少的1W的電阻,阻值需要實驗得出。
Ⅲ 單片機控制電機
這個題目很大了,如果你一個人做,工作量太大,一是要培碼設計變頻器,二是要設計上位機(電腦)的消棚通信程序,還有USB控制線不可能很長,需要把USB轉換成485協議,這又增加配橋哪了一個設計工作。一個人雖然有這個能力,但需要太多的時間了。
建議:購買帶有通信控制介面的變頻器,搞清其通信協議,一般變頻器沒有直接使用USB的,大都是485或232,如果變頻器廠家有上位機電腦控製程序最好了,自己編寫太麻煩
Ⅳ 如何用設計單片機電路控制電機啟動
單片機IO口敗橋接三極體,三極體帶動繼電器,繼電器直接控制小型電機,或者通過接森枯改觸器控制此判大型電機
單片機的輸入可以用微型按鈕開關,也可以用觸摸屏等
Ⅳ 如何利用51系列單片機控制電機
方法一、單片機接三極體做一個全橋控制小功率直流電機正反轉,檢測到紅色的狀態標記下來,電機轉動,綠色時候標記下來,反向轉動。
方法二、淘寶上購買一小的步進電機,一般直接驅動電路帶著的,可以直接接在單片機的IO口上,程序的控制原理一樣,電機控製做for循環,步進電機,步數即for循環次數定好,正反轉的區別無非就是IO口輸出的邏輯順序不同就可以實現了。
兩個方法,一個硬體上有個難度,一個是軟體上。但是都是很簡單的,正常的情況下花1天時間就能學會和應用。預祝成功。
ps:純手打。。
Ⅵ 單片機控制電機
1、用到什麼功能,應該是取決於單片機本身的特徵,有些也要用到ADC或內置比較部分.
2、常規設計是,6個IO口控制無刷電機的轉動,3個IO口檢測過零信號,加上一些輔助的IO,樓主就可以算一下了
如下圖
Ⅶ 電子式壓力感測器的信號通過 單片機採集處理後 能控制小型電動機嗎
電子式壓力感測器的信號通過單片機採集處理後能控制小型電動機嗎?
答:可以控制小型電動機。
而且,李絕清可以控制任何宏渣可以控制的東西。
大概可以輸出幾伏電壓?
你想輸出多少伏的電壓,就能輸出多少伏的電壓,只要你能提供這個電壓。
給你提供一個簡單的電路圖。哪前
圖中的Vcc,你可以任意設置。
Ⅷ 單片機控制電機
單片機的IO接一個1K電阻到三極體基極,三極體發射極接電源,三極體集電極接小馬達的正端,小馬達負端接地.
小馬達本身沒有正負端,但你加上二極體後就有了正負端,上述"小馬達正端"指的是小馬達上二極體的負極,而"小馬達負端"指的是小馬達上二極體的正極,也就是將小馬達上的二極體正極接地,負極接三極體的集電極.
如果這樣接了局冊不轉,一是羨孫檢查小桐派宏馬達的電壓是否符合電源要求,二是檢查三極體是否良好,三是更換一個較小功率的三極體.三極體的功率越大,其導通電阻也越大.
Ⅸ 如何用單片機控制200個直流小電機(3V左右,不到100mA)啟停,正反轉(無需調速),求高手建議
哈!這到不難,就是麻煩,可用現控制發光管的方式,先擴展一堆I/O口,可用164移位寄存器最省事(因電機反應慢,就一百全串在一個串口輸出埠上也只要100US就打完,不會影響到電機運行的),也可有74X73系列的鎖存器(這要麻煩點)來並行擴展埠。再准備一對適合你這電機的正負電源(用正負電源是為了省很多事)這再找一堆驅動,就一般三極體都行,分別把NPN的和PNP的掛在正負電源上中間相聯接到一個電機腳上(如不用正負電源就要用橋式了,如是正負電源另一腳就接到這正負電源中的公共端上),基極全串一限流電阻接到你擴的I/O埠上,OK!這時你只要給埠打上相應的信號電機就會按你的正,反,關執行了。 哈!只是注意不要打成共態導通了(在打信號時能關了這正負電源為最好)
Ⅹ 單片機是怎樣控制電機的
單片機只輸出信號,經過隔離電路,再經過功率開關電路驅動電機。
控制普通的三項非同步電機可以單片機輸出信號經三極體後驅動一個小功率繼電器,由繼電器來驅動交流接觸器,進而控制電機,也可以單片機信號經三極體放大後直接驅動功率繼電器。 方法有很多很多。至於驅動伺服,單片機埠的信號經過光耦隔離後可以直接驅動,伺服驅動器本身需要的驅動信號都是弱電信號。
單片機注意事項
一般在單片機的數據手冊(Datasheet)中都會提到該單片機需要的復位信號的要求。一般復位信號的寬度應為。復位電平的寬度和幅度都應滿足晶元的要求,並且要求保持穩定。還有特別重要的一點就是復位電平應與電源上電在同一時刻發生,即晶元一上電,復位信號就已產生。
不然,由於沒有經過復位,單片機中的寄存器的值為隨機值,上電時就會按PC寄存器中的隨機內容開始運行程序,這樣很容易進行誤操作或進入死機狀態。