❶ 51單片機怎麼驅動直流電機c語言
51單片機驅動直流電機程序(用的是l298n晶元):
#include<reg51.h>
#include<math.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineN100
sbits1=P1^0;//電機驅動口
sbits2=P1^1;//電機驅動口
sbits3=P1^2;//電機驅動口
sbits4=P1^3;//電機驅動口
sbiten1=P1^4;//電機使能端
sbiten2=P1^5;//電機使能端
sbitLSEN=P2^0;//光電對管最左
sbitLSEN1=P2^1;//光電對管左1
sbitLSEN2=P2^2;//光電對管左2
sbitRSEN1=P2^3;//光電對管右1
sbitRSEN2=P2^4;//光電對管右2
sbitRSEN=P2^5;//光電對管最右
uintpwm1=0,pwm2=0,t=0;
voiddelay(uintxms)
{
uinta;
while(--xms)
{
for(a=123;a>0;a--);
}
}
voidmotor(ucharspeed1,ucharspeed2)
{
if(speed1>=-100&&speed1<=100)
{
pwm1=abs(speed1);
if(speed1>0)
{
s1=1;
s2=0;
}
if(speed1==0)
{
s1=1;
s2=1;
}
if(speed1<0)
{
s1=0;
s2=1;
}
}
if(speed2>=-100&&speed2<=100)
{
pwm2=abs(speed2);
if(speed2>0)
{
s3=1;
s4=0;
}
if(speed2==0)
{
s3=1;
s4=1;
}
if(speed2<0)
{
s3=0;
s4=1;
}
}
}
voidgo_forward(uintspeed)
{
s1=1;
s2=0;
s3=1;
s4=0;
pwm1=speed;
pwm2=speed;
}
voidgo_back(uintspeed)
{
s1=0;
s2=1;
s3=0;
s4=1;
pwm1=speed;
pwm2=speed;
}
voidstop()
{
s1=1;
s2=1;
s3=1;
s4=1;
pwm1=0;
pwm2=0;
}
voidturn_right(uintP1,uintP2)//右轉函數
{
s1=1;
s2=0;
s3=0;
s4=1;
pwm1=P1;
pwm2=P2;
}
voidturn_left(uintP1,uintP2)//左轉函數
{
s1=0;
s2=1;
s3=1;
s4=0;
pwm1=P1;
pwm2=P2;
}
voidtracking()
{
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0))//沒有檢測到
{
go_forward(100);
}
if((LSEN1==1)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0))//左一檢測到
{
turn_left(40,80);//左轉右輪》左輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==1)&&(RSEN1==0)&&(RSEN2==0))//左二檢測到
{
turn_left(40,60);//左轉右輪》左輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==1)&&(RSEN2==0))//右一檢測到
{
turn_right(60,4);//右轉左輪》右輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==1))//右二檢測到
{
turn_right(80,40);//右轉左輪》右輪
delay(N);
}
if((LSEN1==1)&&(LSEN2==1))
{
turn_left(0,100);
delay(1000);
}
if((RSEN1==1)&&(RSEN2==1))
{
turn_right(100,0);
delay(1000);
}
}
voidavoidance()
{
}
voidinit()
{
TMOD=0x02;//timer0同時配置為模式2,8自動重裝計數模式
TH0=156;//定時器初值設置100us中斷
TL0=156;
ET0=1;
EA=1;
TR0=1;//開啟總中斷
}
voidmain()
{
init();
while(1)
{
tracking();
}
}
voidtimer0()interrupt1//電機驅動提供PWM信號
{
if(t<pwm1)
en1=1;
else
en1=0;
if(t<pwm2)
en2=1;
else
en2=0;
t++;
if(t>100)
t=0;
}
(1)直流電機如何和51單片機相連擴展閱讀
L298N是一種雙H橋電機驅動晶元,其中每個H橋可以提供2A的電流,功率部分的供電電壓范圍是2.5-48v,邏輯部分5v供電,接受5vTTL電平。一般情況下,功率部分的電壓應大於6V否則晶元可能不能正常工作。
❷ 如何用51單片機控制4個直流電機電機
倆L298N,一共4個H橋,能控制4個直流電機正反轉,且能調速
如果只需要正轉或者反轉,用uln2003一片即可
注意一點:用298N的時候需要加續流二極體保護晶元,uln2003自帶續流二極體
單片機(Microcontrollers)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機
❸ 51單片機怎麼讓直流電機轉動
一般而言,所有單片機的埠驅動能力都有限,還有電機的額定電壓也許會比單片機的供電電壓高,直接驅動電機有困難。這時候要想驅動電機,就必須根據電機的額定電壓和額定功率採用合適的功率器件去驅動。
下邊的電路圖是我工程上實際使用的,可以正反轉,脈寬調制的話還可以調速。
❹ 51單片機怎麼控制大功率的直流電機,麻煩給下電路圖,謝啦。主要是驅動那怎麼設計
看了這么多回答的,還是我給你一個答案吧!
答案見插圖。解釋如下:
1:你說的大功率直流電機,用三極體肯定驅動不了,必須要大功率的MOSFET或者IGBT去驅動,IGBT或者MOSFET可以買Infineon的。主電路結構最好採用H橋電路,可以雙極性正反調速。
2:H橋的上管可以用IR2110來驅動,這個晶元自己提供了一個自舉功能,上管MOSFET(或IGBT)的源極電壓是浮動的,自舉電路可以保證上管的柵源之間的電壓在開啟電壓閾值之上。
3:你想要用51單片機實現調速,只需要用51單片機的P0~P3口產生兩組互相反相的PWM波(注意兩組之間要有死區),輸出到IR2110的HIN和LIN。至於程序,就很簡單了,不用我多說,你懂的。呵呵……
❺ 怎樣用51單片機驅動ULN2003來帶動5V直流電機
51單片機的I/O口(不是P0 口),直接和ULN2003連,ULN2003有16個腳共7路驅動.ULN2003的8腳接5V電源地,9腳接+5V電源,因為ULN2003裡面有續流二極體從9腳引出.假如你用P1.0驅動一個電機,那麼P1.0接ULN2003的1腳,ULN2003的16腳接電機線圈的一端,電機線圈的另一端接+5V電源.P1.0為高電平,電機就轉,P1.0為低電平,電機就停.ULN2003驅動電流500MA.