如何定制控制板開發(fā)直流電機(jī)和驅(qū)動(dòng)
控制板開發(fā)中的PWM應(yīng)用
脈寬調(diào)制是一種模擬控制方式,通過對(duì)晶體管基極或 MOS管柵極的偏置調(diào)制,實(shí)現(xiàn)晶體管或 MOS管的導(dǎo)通時(shí)間的改變,從而改變開關(guān)穩(wěn)壓電源的輸出。該方法能夠在工作條件改變的情況下,使電源輸出電壓保持恒定,是利用單片機(jī)的數(shù)字信號(hào)控制模擬電路的一種非常有效的方法。脈寬調(diào)制是一種利用單片機(jī)的數(shù)字輸出量來控制模擬電路的一種非常有效的方法,在從測(cè)量、通訊到功率控制和變換等諸多領(lǐng)域都有廣泛的應(yīng)用。
所謂PWM,就是脈沖寬度調(diào)制技術(shù),其具有兩個(gè)很重要的參數(shù):頻率和占空比。頻率,就是周期的倒數(shù);占空比,就是高電平在一個(gè)周期內(nèi)所占的比例。
本次使用了電機(jī)驅(qū)動(dòng)模塊是L298N
實(shí)物圖如下,改模塊常用直流電機(jī)的驅(qū)動(dòng)
其內(nèi)部結(jié)構(gòu)圖如下圖所示
延續(xù)二極管(flyback diode),有時(shí)也被稱為飛輪二極管或 snubber二極管,是一種二極管,與感受性負(fù)載一起使用,當(dāng)感受器的電流有突然改變或減小時(shí),會(huì)產(chǎn)生突變電壓,從而破壞其它元件。與續(xù)流二極管配合時(shí),電流變化比較平穩(wěn),避免了突波電壓的發(fā)生。所謂的“續(xù)流二極管”,由于在電路中起著續(xù)流的作用,所以一般選擇快速恢復(fù)二極管或肖特基二極管作為“續(xù)流二極管”,它在電路中一般用來保護(hù)元件不被感應(yīng)電壓擊穿或燒壞,以并聯(lián)的方式接接產(chǎn)生感應(yīng)電動(dòng)勢(shì)的元件兩端,并與其形成回路,一般用于保護(hù)元件不被感應(yīng)電壓擊穿或燒壞,以并聯(lián)的方式接接產(chǎn)生感應(yīng)電動(dòng)勢(shì)的元件兩端,并與之形成回路以續(xù)流的高電勢(shì)。 。
本次程序?qū)崿F(xiàn)原理通過單片機(jī)IO口輸出高低電平驅(qū)動(dòng)電機(jī)的正反轉(zhuǎn),然后再通過定時(shí)器產(chǎn)生PWM信號(hào)進(jìn)而調(diào)速
定時(shí)器初始化
void motor_Init()
{
EA=1;//打開總中斷
TMOD=0x01; //定時(shí)器工作方式
TH0=(65535-1000)/256; //初值約1ms
TL0=(65535-1000)%256;
ET0=1; //打開定時(shí)器中斷
TR0=1; //打開定時(shí)器
}
定時(shí)器中斷函數(shù)
/*
* @description : 定時(shí)器中斷函數(shù),利用定時(shí)器產(chǎn)生PWM調(diào)速信號(hào)
* @param :無
* @return : 無
*/
void Time() interrupt 1
{
static unsigned char count=0;
TH0=(65535-1000)/256; //重裝初值
TL0=(65535-1000)%256; //重裝初值
count++;
if(count==20)count=0;
if(count>=speedA)
{
ENA=1;
}
else{
ENA=0;
}
if(count>=speedB)
{
ENB=1;
}
else{
ENB=0;
}
}
控制電機(jī)方向
/*
* @description : 電機(jī)轉(zhuǎn)向
* @param : 0-A正 1 F反 2-B正 3-B反
* @return : 無
*/
void motor(unsigned char status)
{
if(status==0)
{
IN1=0;
IN2=1;
}
if(status==1)
{
IN1=1;
IN2=0;
}
if(status==3)
{
IN3=0;
IN4=1;
}
if(status==4)
{
IN3=1;
IN4=0;
}
}
通過PWM信號(hào)占空比調(diào)節(jié)AB的速度
單片機(jī)定時(shí)器產(chǎn)生1ms一次中斷,并且通過調(diào)節(jié)speedA與speedB調(diào)節(jié)速度
PWM
兩個(gè)重要的概念,頻率、占空比
??頻率是指每秒鐘信號(hào)從高電平到低電平再回到高電平的次數(shù),為一個(gè)PWM波周期的倒數(shù)。上圖中頻率=1/(0.003+0.001)=250 HZ
??占空比是指高電平持續(xù)時(shí)間比一個(gè)周期持續(xù)的時(shí)間。上圖中占空比=1/(1+3)=25%,所以可以通過控制占空比,來控制輸出的等效電壓。
??所以對(duì)于方波的話,頻率和占空比就確定了一個(gè)波。
怎么能產(chǎn)生一個(gè)PWM波?
??方法1:利用芯片內(nèi)部模塊輸出 PWM信號(hào),除TIM6和7外,STM32的定時(shí)器。其它計(jì)時(shí)器可用于產(chǎn)生 PWM輸出。先進(jìn)的TIM1和TIM8定時(shí)器可同時(shí)產(chǎn)生多達(dá)7路 PWM輸出。普通計(jì)時(shí)器還可同時(shí)產(chǎn)生多達(dá)4路 PWM輸出,因此STM32最多可同時(shí)產(chǎn)生30路 PWM輸出!可是!!!TIM相同的計(jì)時(shí)器只能產(chǎn)生一個(gè)頻率的 PWM波,你只能改變占空比。特定的程序可以在實(shí)際的STM32部分中找到。
方法2:利用 IO口高低電平轉(zhuǎn)換輸出 PWM信號(hào),如上圖所示,維持1 ms,然后電平拉低,維持3 ms,再將 PWM波形調(diào)高,這樣循環(huán)往復(fù),就可以產(chǎn)生一個(gè)周期4毫秒占空比為25%的 PWM波。詳細(xì)的做法是在 IO口上添加一個(gè)計(jì)時(shí)器,利用定時(shí)器中斷實(shí)現(xiàn)實(shí)時(shí)高、低電平的切換。詳細(xì)過程見下面51單片機(jī)部分。
定時(shí)器
??要想使用51單片機(jī)設(shè)計(jì)來產(chǎn)生一路PWM,根據(jù)上述的方法2,首先你應(yīng)該知道什么是定時(shí)器?定時(shí)器是怎么工作的?
定時(shí)器:和計(jì)數(shù)器說的是一個(gè)東西,因?yàn)樗饶苡?jì)時(shí)也能計(jì)數(shù)。定時(shí)器的實(shí)質(zhì)是,由機(jī)器頻率向一個(gè)16位寄存器累加,累加滿溢出時(shí)觸發(fā)中斷。為了產(chǎn)生一個(gè)我們想要的時(shí)間間隔。比如說1s,所以我們要在這個(gè)寄存器里設(shè)定一個(gè)初值,以至于讓它在這個(gè)初值上累加可以產(chǎn)生一個(gè)1s的倍數(shù)。這樣我們就得到了穩(wěn)定的時(shí)間間隔。
??這個(gè)寄存器分為TH(高八位)和TL(低八位)。所以我們需要把計(jì)算好的初值分成兩部分分別放入TH和TL。