直流有刷電機(jī)驅(qū)動(dòng)設(shè)計(jì)與分析_第1頁
直流有刷電機(jī)驅(qū)動(dòng)設(shè)計(jì)與分析_第2頁
直流有刷電機(jī)驅(qū)動(dòng)設(shè)計(jì)與分析_第3頁
直流有刷電機(jī)驅(qū)動(dòng)設(shè)計(jì)與分析_第4頁
直流有刷電機(jī)驅(qū)動(dòng)設(shè)計(jì)與分析_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Word直流有刷電機(jī)驅(qū)動(dòng)設(shè)計(jì)與分析

直流有刷(電機(jī))直流有刷電機(jī)(Brushed(DC)motor)具有結(jié)構(gòu)簡單、易于控制、成本低等特點(diǎn),在一些功能簡單的應(yīng)用場合,或者說在能夠滿足必要的性能、低成本和足夠的可靠性的前提下,直流有刷電機(jī)往往是一個(gè)很好的選擇。例如便宜的(電子)玩具、各種風(fēng)扇和汽車的電動(dòng)座椅等?;镜闹绷饔兴㈦姍C(jī)在(電源)和電機(jī)之間只需要兩根電纜,這樣就可以節(jié)省配線和連接器所需的空間,并降低電纜和連接器的成本。此外,還可以使用(MOSFET)/(IGBT)開關(guān)對(duì)直流有刷電機(jī)進(jìn)行控制,給電機(jī)提供足夠好的性能的同時(shí),整個(gè)(電機(jī)控制)系統(tǒng)也會(huì)比較便宜。

直流有刷電機(jī)轉(zhuǎn)速快、扭矩小,在某些應(yīng)用中可能無法滿足要求。這種情況就需要做一些改進(jìn)來降低轉(zhuǎn)速,并提高力矩。直流減速電機(jī)就是這樣一種電機(jī)。

這種電機(jī)通常也叫齒輪減速電機(jī),它是在普通直流有刷電機(jī)的基礎(chǔ)上增加了一套齒輪減速箱,用來提供更大的力矩和更低的轉(zhuǎn)速。齒輪減速箱可以通過配置不同的減速比,提供各種不同的轉(zhuǎn)速和力矩。在實(shí)際使用中減速電機(jī)使用的最為廣泛,所以本章節(jié)將主要介紹直流有刷減速電機(jī)。

本章節(jié)將介紹直流有刷電機(jī)的(工作原理)、電機(jī)參數(shù)和(驅(qū)動(dòng)電路),最后通過實(shí)驗(yàn)來實(shí)現(xiàn)電機(jī)運(yùn)動(dòng)的簡單控制。

直流有刷電機(jī)工作原理

在分析原理前我們先復(fù)習(xí)一下左手定則。

左手定則是判斷通電導(dǎo)體處于磁場中時(shí),所受安培力F(或運(yùn)動(dòng))的方向、磁感應(yīng)強(qiáng)度B的方向以及通電導(dǎo)體棒的(電流)I三者方向之間的關(guān)系的定律。通過左手定則可以知道通電導(dǎo)體在磁場中的受力方向,如下圖所示。

判斷方法是:伸開左手,使拇指與其他四指垂直且在一個(gè)平面內(nèi),讓磁感線從手心流入,四指指向電流方向,大拇指指向的就是安培力方向(即導(dǎo)體受力方向)。

有刷直流電機(jī)在其電樞上繞有大量的線圈,所產(chǎn)生強(qiáng)大的磁場與外部磁場相互作用產(chǎn)生旋轉(zhuǎn)運(yùn)動(dòng)。磁極方向的跳轉(zhuǎn)是通過移動(dòng)固定位置的接觸點(diǎn)來完成的,該接觸點(diǎn)在電機(jī)轉(zhuǎn)子上與電觸點(diǎn)相對(duì)連接。這種固定觸點(diǎn)通常由石墨制成,與銅或其他金屬相比,在大電流短路或斷路/起動(dòng)過程中石墨不會(huì)熔斷或者與旋轉(zhuǎn)觸點(diǎn)焊接到一起,并且這個(gè)觸點(diǎn)通常是彈簧承載的,所以能夠獲得持續(xù)的接觸壓力,保證向線圈供應(yīng)電力。在這里我們將通過其中一組線圈和一對(duì)磁極來分析其工作原理,如下圖所示。

圖中C和D兩片半圓周的銅片構(gòu)成換向器,兩個(gè)彈性銅片靠在換向器兩側(cè)的A和B是電刷,電源通過電刷向?qū)Ь€框供電,線框中就有電流通過,在線框兩側(cè)放一對(duì)磁極N和S,形成磁場,磁力線由N到S。線框通有電流時(shí),兩側(cè)導(dǎo)線就會(huì)受到磁場的作用力,方向依左手定則判斷,紅色和藍(lán)色線框部分分別會(huì)受到力F1和F2,這兩個(gè)力的方向相反,這使得線框會(huì)轉(zhuǎn)動(dòng),當(dāng)線框轉(zhuǎn)過90°時(shí),換向器改變了線框電流的方向,產(chǎn)生的安培力方向不變,于是導(dǎo)線框會(huì)連續(xù)旋轉(zhuǎn)下去,這就是直流電動(dòng)機(jī)的工作原理。

4.2.直流有刷減速電機(jī)幾個(gè)重要參數(shù)

空載轉(zhuǎn)速:正常工作電壓下電機(jī)不帶任何負(fù)載的轉(zhuǎn)速(單位為r/min(轉(zhuǎn)/分))。空載轉(zhuǎn)速由于沒有反向力矩,所以輸出功率和堵轉(zhuǎn)情況不一樣,該參數(shù)只是提供一個(gè)電機(jī)在規(guī)定電壓下最大轉(zhuǎn)速的參考??蛰d電流:正常工作電壓下電機(jī)不帶任何負(fù)載的工作電流(單位mA(毫安))。越好的電機(jī),在空載時(shí),該值越小。負(fù)載轉(zhuǎn)速:正常工作電壓下電機(jī)帶負(fù)載的轉(zhuǎn)速。負(fù)載力矩:正常工作電壓下電機(jī)帶負(fù)載的力矩(N·m(牛米))。負(fù)載電流:負(fù)載電流是指電機(jī)拖動(dòng)負(fù)載時(shí)實(shí)際(檢測)到的定子電流數(shù)值。堵轉(zhuǎn)力矩:在電機(jī)受反向外力使其停止轉(zhuǎn)動(dòng)時(shí)的力矩。如果電機(jī)堵轉(zhuǎn)現(xiàn)象經(jīng)常出現(xiàn),則會(huì)損壞電機(jī),或燒壞驅(qū)動(dòng)(芯片)。所以大家選電機(jī)時(shí),這是除轉(zhuǎn)速外要考慮的參數(shù)。堵轉(zhuǎn)時(shí)間一長,電機(jī)溫度上升的很快,這個(gè)值也會(huì)下降的很厲害。堵轉(zhuǎn)電流:在電機(jī)受反向外力使其停止轉(zhuǎn)動(dòng)時(shí)的電流,此時(shí)電流非常大,時(shí)間稍微就可能會(huì)燒毀電機(jī),在實(shí)際使用時(shí)應(yīng)盡量避免。減速比:是指沒有減速齒輪時(shí)轉(zhuǎn)速與有減速齒輪時(shí)轉(zhuǎn)速之比。功率:般指的是它的額定功率(單位W(瓦)),即在額定電壓下能夠長期正常運(yùn)轉(zhuǎn)的最大功率,也是指電動(dòng)機(jī)在制造廠所規(guī)定的額定情況下運(yùn)行時(shí),其輸出端的(機(jī)械)功率。4.3.直流有刷電機(jī)驅(qū)動(dòng)設(shè)計(jì)與分析

我們先來想一個(gè)問題,假設(shè)你手里現(xiàn)在有一個(gè)直流電機(jī)和一節(jié)電池,當(dāng)你把電機(jī)的兩根電源線和電池的電源連接在一起時(shí),這時(shí)電機(jī)可以正常旋轉(zhuǎn),當(dāng)想要電機(jī)反向旋轉(zhuǎn)時(shí),只需要把兩根電源線交換一下就可以了。但是當(dāng)在實(shí)際應(yīng)用中要實(shí)現(xiàn)正轉(zhuǎn)和反轉(zhuǎn)的控制也通過交換電源線實(shí)現(xiàn)嗎?顯然這樣的方法是不可行的。這時(shí)候我們可以用一個(gè)叫做“H橋電路”來驅(qū)動(dòng)電機(jī)。

4.3.1.(控制電路)原理設(shè)計(jì)與分析

如下圖所示,是使用4個(gè)三極管搭建的H橋電路。

上圖中,H橋式電機(jī)驅(qū)動(dòng)電路包括4個(gè)三極管和一個(gè)電機(jī)。要使電機(jī)運(yùn)轉(zhuǎn),必須導(dǎo)通對(duì)角線上的一對(duì)三極管。根據(jù)不同三極管對(duì)的導(dǎo)通情況,電流可能會(huì)從左至右或從右至左流過電機(jī),從而控制電機(jī)的轉(zhuǎn)向。

上圖中,當(dāng)Q1和Q4導(dǎo)通時(shí),電流將經(jīng)過Q1從左往右流過電機(jī),在經(jīng)過Q4流到電源負(fù)極,這時(shí)圖中電機(jī)可以順時(shí)針轉(zhuǎn)動(dòng)。

上圖中,當(dāng)Q3和Q2導(dǎo)通時(shí),電流將經(jīng)過Q3從右往左流過電機(jī),在經(jīng)過Q2流到電源負(fù)極,這時(shí)圖中電機(jī)可以逆時(shí)針轉(zhuǎn)動(dòng)。

特別地,當(dāng)同一側(cè)的Q1和Q2同時(shí)導(dǎo)通時(shí),電流將從電源先后經(jīng)過Q1和Q2,然后直接流到電源負(fù)極,在這個(gè)回路中除了三極管以外就沒有其他負(fù)載(沒有經(jīng)過電機(jī)),這時(shí)電流可能會(huì)達(dá)到最大值,此時(shí)可能會(huì)燒毀三極管,同理,當(dāng)Q3和Q4同時(shí)導(dǎo)通時(shí),也會(huì)出現(xiàn)相同的狀況。這樣的情況肯定是不能發(fā)生的,但是我們寫程序又是三分寫代碼七分在調(diào)試,這就難免會(huì)有寫錯(cuò)代碼將同一測得三極管導(dǎo)通的情況,為此我們就需要從(硬件)上來避免這個(gè)問題。下面電路圖是改進(jìn)后的驅(qū)動(dòng)電路圖。

與改進(jìn)前的電路相比,在上面的改進(jìn)電路中新增加了兩個(gè)非門和4個(gè)與門,以及Q1和Q3換成了NPN三極管,經(jīng)過這樣的組合就可以實(shí)現(xiàn)一個(gè)(信號(hào))控制兩個(gè)同一側(cè)的三極管,并且可以保證在同一側(cè)中兩個(gè)三級(jí)管不會(huì)同時(shí)導(dǎo)通在同一時(shí)刻只會(huì)有一個(gè)三極管是導(dǎo)通的。

我們來分析一下電信號(hào)的變化:在ENABLE腳接入高電平,在IN1腳接入高電平,在經(jīng)過第一個(gè)非門后,AND1的2腳就是低電平,此時(shí)與門AND1的輸出(3腳)就是低電平,所以Q1截止。而AND2的1腳和2腳都是高電平,所以AND2的3腳也是高電平,這樣Q2就導(dǎo)通了。在IN2接入低電平,同理分析可得,Q3導(dǎo)通Q4截止。在IN1和IN2處分別接入低電平和高電平,則Q1和Q4導(dǎo)通,Q3和Q2截止。當(dāng)IN1和IN2都接入高電平或者低電平時(shí)都只會(huì)同時(shí)導(dǎo)通上面或者下面的兩個(gè)三極管,不會(huì)出現(xiàn)同一側(cè)的三極管同時(shí)導(dǎo)通的情況。

4.3.2.驅(qū)動(dòng)芯片分析

通常在驅(qū)動(dòng)電機(jī)的時(shí)候我們會(huì)選擇集成H橋的IC,因?yàn)镠橋使用分立元件搭建比較麻煩,增加了硬件設(shè)計(jì)難度,當(dāng)然如果集成IC無法滿足我們的功率要求時(shí),還是需要我們自己使用MOS管、三極管等元件來搭建H橋電路,這樣的分立元件搭建的H橋一般驅(qū)動(dòng)能力都會(huì)比集成IC要高。當(dāng)我們在選擇集成IC時(shí),我們需要考慮集成IC是否能滿足電機(jī)的驅(qū)動(dòng)電壓要求,是否能承受電機(jī)工作時(shí)的電流等情況。

4.3.2.1.L298N驅(qū)動(dòng)芯片L298N是ST公司的產(chǎn)品,內(nèi)部包含4通道邏輯驅(qū)動(dòng)電路,是一種二相和四相電機(jī)的專門驅(qū)動(dòng)芯片,即內(nèi)含兩個(gè)H橋的高電壓大電流雙橋式驅(qū)動(dòng)器,接收標(biāo)準(zhǔn)的TTL邏輯電平信號(hào),可驅(qū)動(dòng)4.5V~46V、2A以下的電機(jī),電流峰值輸出可達(dá)3A,其內(nèi)部結(jié)構(gòu)如下圖所示。

其工作原理與上面的講解的H橋原理一樣,這里不再贅述。L298N引腳圖如下圖所示。

L298N邏輯功能表。

IN1IN2ENA電機(jī)狀態(tài)××0電機(jī)停止101電機(jī)正轉(zhuǎn)011電機(jī)反轉(zhuǎn)001電機(jī)停止111電機(jī)停止IN3,IN4的邏輯圖與上表相同。由上表可知ENA為低電平時(shí),INx輸入電平對(duì)電機(jī)控制不起作用,當(dāng)ENA為高電平,輸入電平為一高一低,電機(jī)正或反轉(zhuǎn)。同為低電平電機(jī)停止,同為高電平電機(jī)停止。L298N的應(yīng)用電路圖將在后面硬件設(shè)計(jì)小節(jié)講解。

4.4.直流有刷減速電機(jī)控制實(shí)現(xiàn)

4.4.1.速度控制原理

脈沖寬度調(diào)制(Pulsewidthmodulation,PWM)信號(hào),即PWM是一種按一定的規(guī)則對(duì)各脈沖的寬度進(jìn)行調(diào)制,既可改變電路輸出電壓的大小,也可改變輸出頻率。PWM通過一定的頻率來改變通電和斷電的時(shí)間,從而控制電路輸出功率,在電機(jī)的控制周期中,通電時(shí)間決定了它的轉(zhuǎn)速。其中,通電時(shí)間/(通斷時(shí)間+斷電時(shí)間)=占空比,即,高電平占整個(gè)周期的百分比,如下圖所示:

上圖中:T1為高電平時(shí)間,T2為低電平時(shí)間,T是周期。

D(占空比)=T1/T*100%

設(shè)電機(jī)的速度為V,最大速度為Vmax。

則:V=Vmax*D

當(dāng)占空比D(0≤D≤1)的大小改變時(shí),速度V也會(huì)改變,所以只要改變占空比就能達(dá)到控制的目的。

4.4.2.硬件設(shè)計(jì)

主控有刷電機(jī)接口原理圖如下圖所示,有刷電機(jī)接口與無刷接口使用的是同一個(gè)接口,舍去了其中一些多余的接口,用到了兩個(gè)(定時(shí)器)通道,(編碼器)、兩路(ADC)采集通道(后續(xù)章節(jié)講解)。本節(jié)實(shí)驗(yàn)只用到了(TI)M1的CH1和CH2,即PA8和PA9來輸出PWM信號(hào)來控制電機(jī),注意主控板需要和電機(jī)驅(qū)動(dòng)板供地。

4.4.2.1.L298N驅(qū)動(dòng)板可以支持12-42V的寬電壓供電,并且?guī)л斎腚妷恨D(zhuǎn)5V的電壓芯片,所以驅(qū)動(dòng)板只需要一個(gè)電源輸入。具體需要多大電壓需要根據(jù)電機(jī)來選擇。電路圖見下圖所示。

在下圖電機(jī)控制接口中,ENABLEA和ENABLEB是使能輸入腳,ENABLEA用于控制A橋,可以接到(單片機(jī))的引腳控制,也是直接使用跳冒連接到5V,ENABLEB用于控制B橋,控制方式與ENABLE一樣。INPUT1和INPUT2是A橋的控制信號(hào),INPUT1和INPUT2是B橋的控制信號(hào),可以接PWM控制電機(jī)。OUTPUT1和OUTPUT2是A橋的輸出接口,OUTPUT3和OUTPUT4是B橋的輸出接口。

上圖中8個(gè)(二極管)用于防止電機(jī)的反電動(dòng)勢損壞L298N,當(dāng)E點(diǎn)反電勢為正,超過電源+0.7V時(shí),上端二極管導(dǎo)通,這樣輸出線就被限位在電源電壓+0.7V上,不會(huì)超過這個(gè)數(shù)值;當(dāng)E點(diǎn)反電勢為負(fù),低于-0.7V時(shí),下端二極管導(dǎo)通,這樣輸出線就被限位在-0.7V上,不會(huì)低于-0.7V了。這兩個(gè)二極管是作為鉗位使用,使得輸出線上電壓(或叫電位)被箝位在-0.7V~+Vcc+0.7V之間。其他二極管作用于E點(diǎn)這兩個(gè)一樣。

電機(jī)與L298N驅(qū)動(dòng)板連接見下表所示。

電機(jī)與L298N驅(qū)動(dòng)板連接

電機(jī)L298N驅(qū)動(dòng)板M+電機(jī)輸出:1M-電機(jī)輸出:2L298N驅(qū)動(dòng)板與主控板連接見下表所示。

L298N驅(qū)動(dòng)板與主控板連接

L298N驅(qū)動(dòng)板主控板PWM1PA9PWM2PA8GNDGNDENAPG12在L298N驅(qū)動(dòng)板與主控板連接中,ENA可以不接PG12,使用跳冒連接到5V。

4.4.2.2.野火直流有刷電機(jī)驅(qū)動(dòng)板-MOS管搭建板野火有刷電機(jī)驅(qū)動(dòng)板是使用MOS管搭建的大功率H橋電機(jī)驅(qū)動(dòng)板,實(shí)物圖如下圖所示。

驅(qū)動(dòng)板可支持12V~70V的寬電壓輸入,10A過電流(保護(hù)電路),超過10A可自動(dòng)禁用電機(jī)控制信號(hào),最高功率支持700W。實(shí)際使用輸入電壓需要根據(jù)電機(jī)進(jìn)行選擇,同時(shí)還具有電流采樣電路、編碼器接口和電源電壓檢測電路等等,本小節(jié)主要講解電機(jī)驅(qū)動(dòng)部分電路,其他功能將在后續(xù)章節(jié)中講解。

野火使用MOS管搭建的直流有刷驅(qū)動(dòng)板做到了信號(hào)完全隔離,其他驅(qū)動(dòng)板基本都只是使用(光耦)隔離了控制信號(hào),并沒有對(duì)(AD)C采樣電路進(jìn)行隔離,野火不僅使用光耦對(duì)控制信號(hào)進(jìn)行了隔離,還使用AMC1200SDUBR隔離運(yùn)放對(duì)ADC采樣電路進(jìn)行了隔離。

PWM控制信號(hào)使用了TLP2362高速光耦進(jìn)行了隔離,SD控制信號(hào)使用了EL357N光耦進(jìn)行了隔離,如下圖所示。

與門的作用是可以使單片機(jī)和過流保護(hù)電路共同控制SD腳,過流保護(hù)電路將在電流電壓采集章節(jié)講解,與門輸入輸出與MOS管狀態(tài)真值表如下表所示。

與門輸入輸出與MOS管狀態(tài)真值表

ABYMOSHHH可導(dǎo)通HLL關(guān)斷(過流保護(hù))LHL關(guān)斷(單片機(jī)控制關(guān)斷)LLL關(guān)斷(單片機(jī)控制關(guān)斷,過流保護(hù))下圖是使用MOS管搭建的H橋電路,使用兩個(gè)EG2104驅(qū)動(dòng)四個(gè)MOS管。

EG2104S主要功能有邏輯信號(hào)輸入處理、死區(qū)時(shí)間控制、電平轉(zhuǎn)換功能、懸浮自舉電源結(jié)構(gòu)和上下橋圖騰柱式輸出。邏輯信號(hào)輸入端高電平閥值為2.5V以上,低電平閥值為1.0V以下,要求邏輯信號(hào)的輸出電流小,可以使(MCU)輸出邏輯信號(hào)直接連接到EG2104S的輸入通道上。EG2104S芯片有一個(gè)shutdown引腳,邏輯輸入控制信號(hào)低電平有效,控制強(qiáng)行使LO、HO輸出低電平。這樣可以直接使用這個(gè)引腳做軟件控制電機(jī)的旋轉(zhuǎn)與停止,還可以實(shí)現(xiàn)硬件的限流保護(hù)(后續(xù)章節(jié)分析保護(hù)電路),輸入信號(hào)和輸出信號(hào)邏輯真值表如下表所示。

EG2104S輸入信號(hào)和輸出信號(hào)邏輯真值表

IN(引腳2)SD(引腳3)HO(引腳7)LO(引腳5)LLLLHLLLLHLHHHHL從真值表可知,在輸入邏輯信號(hào)SD為“L”時(shí),不管IN為“H”或者“L”情況下,驅(qū)動(dòng)器控制輸出HO、LO同時(shí)為“L”,上、下功率管同時(shí)關(guān)斷;當(dāng)輸入邏輯信號(hào)SD為“H”、IN為“L”時(shí),HO輸出為“L”,LO輸出為“H”;當(dāng)輸入邏輯信號(hào)SD為“H”、IN為“H”時(shí),HO輸出為“H”,LO輸出為“L”。

EG2104S內(nèi)部集成了死區(qū)時(shí)控制電路,死區(qū)時(shí)間波形圖如下圖所示,其中死區(qū)時(shí)間DT的典型值為640ns。

EG2104S采用自舉懸浮驅(qū)動(dòng)電源結(jié)構(gòu)大大簡化了驅(qū)動(dòng)電源設(shè)計(jì),只用一路電源電壓VCC即可完成高端N溝道MOS管和低端N溝道MOS管兩個(gè)功率開關(guān)器件的驅(qū)動(dòng),給實(shí)際應(yīng)用帶來極大的方便。EG2104S自舉電路結(jié)構(gòu)如下圖所示,EG2104S可以使用外接一個(gè)自舉二極管和一個(gè)自舉(電容)自動(dòng)完成自舉升壓功能,假定在下管開通、上管關(guān)斷期間VC自舉電容已充到足夠的電壓(Vc=VCC),當(dāng)HO輸出高電平時(shí)上管開通、下管關(guān)斷時(shí),VC自舉電容上的電壓將等效一個(gè)電壓源作為內(nèi)部驅(qū)動(dòng)器VB和VS的電源,完成高端N溝道MOS管的驅(qū)動(dòng)。

電機(jī)與MOS管搭建驅(qū)動(dòng)板連接見下表所示。

電機(jī)與MOS管搭建驅(qū)動(dòng)板連接

電機(jī)MOS管搭建驅(qū)動(dòng)板M+M+M-M-MOS管搭建驅(qū)動(dòng)板與主控板連接見下表所示。

MOS管搭建驅(qū)動(dòng)板與主控板連接

MOS管搭建驅(qū)動(dòng)板主控板PWM1PA9PWM2PA8SDPG12電源輸入:5V5V電源輸入:GNDGND(推薦)使用配套的牛角排線直接連接驅(qū)動(dòng)板和主控板。

4.4.3.軟件設(shè)計(jì)

這里只講解核心的部分代碼,有些變量的設(shè)置,頭文件的包含等并沒有涉及到,完整的代碼請參考本章配套的工程。我們創(chuàng)建了四個(gè)文件:bsp_general_tim.c、bsp_general_tim.h、bsp_motor_control.c和bsp_motor_control.h文件用來存定時(shí)器驅(qū)動(dòng)和電機(jī)控制程序及相關(guān)宏定義。

4.4.3.1.(編程)要點(diǎn)定時(shí)器IO配置定時(shí)器時(shí)基結(jié)構(gòu)體TIM_TimeBaseInitTypeDef配置定時(shí)器輸出比較結(jié)構(gòu)體TIM_OCInitTypeDef配置根據(jù)定時(shí)器定義電機(jī)控制相關(guān)函數(shù)bsp_general_tim.h-宏定義

/*宏定義*/#definePWM_TIMTIM1#definePWM_TIM_GPIO_AFGPIO_AF1_TIM1#definePWM_TIM_CLK_ENABLE()__TIM1_CLK_ENABLE()#definePWM_CHANNEL_1TIM_CHANNEL_1#definePWM_CHANNEL_2TIM_CHANNEL_2/*累計(jì)TIM_Period個(gè)后產(chǎn)生一個(gè)更新或者中斷*//*當(dāng)定時(shí)器從0計(jì)數(shù)到PWM_PERIOD_COUNT,即為PWM_PERIOD_COUNT+1次,為一個(gè)定時(shí)周期*/#definePWM_PERIOD_COUNT(5600)/*通用控制定時(shí)器(時(shí)鐘)源TIMxCLK=HCLK=168MHz*//*設(shè)定定時(shí)器頻率為=TIMxCLK/(PWM_PRESCALER_COUNT+1)*/#definePWM_PRESCALER_COUNT(2)/*最大比較值*/#definePWM_MAX_PERIOD_COUNT(PWM_PERIOD_COUNT-100)/*PWM引腳*/#definePWM_TIM_CH1_GPIO_PORTGPIOA#definePWM_TIM_CH1_(PI)NGPIO_PIN_8#definePWM_TIM_CH2_GPIO_PORTGPIOA#definePWM_TIM_CH2_PINGPIO_PIN_9#definePWM_TIM_CH3_GPIO_PORTGPIOA#definePWM_TIM_CH3_PINGPIO_PIN_10使用宏定義非常方便程序升級(jí)、移植。如果使用不同的定時(shí)器IO,修改這些宏即可。

定時(shí)器復(fù)用功能引腳初始化

定時(shí)器復(fù)用功能引腳初始化

staticvoidTIMx_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStruct;/*定時(shí)器通道功能引腳端口時(shí)鐘使能*/__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/*定時(shí)器通道1功能引腳IO初始化*//*設(shè)置輸出類型*/GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;/*設(shè)置引腳速率*/GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;/*設(shè)置復(fù)用*/GPIO_InitStruct.Al(te)rnate=PWM_TIM_GPIO_AF;/*選擇要控制的GPIO引腳*/GPIO_InitStruct.Pin=PWM_TIM_CH1_PIN;/*調(diào)用庫函數(shù),使用上面配置的GPIO_InitStructure初始化GPIO*/HAL_GPIO_Init(PWM_TIM_CH1_GPIO_PORT,GPIO_InitStruct.Pin=PWM_TIM_CH2_PIN;HAL_GPIO_Init(PWM_TIM_CH2_GPIO_PORT,}定時(shí)器通道引腳使用之前必須設(shè)定相關(guān)參數(shù),這選擇復(fù)用功能,并指定到對(duì)應(yīng)的定時(shí)器。使用GPIO之前都必須開啟相應(yīng)端口時(shí)鐘。

定時(shí)器模式配置[

TIM_HandleTypeDefTIM_TimeBaseStructure;staticvoidTIM_PWMOUTPUT_Config(void){TIM_OC_InitTypeDefTIM_OCInitStructure;/*使能定時(shí)器*/PWM_TIM_CLK_ENABLE();TIM_TimeBaseStructure.Instance=PWM_TIM;/*累計(jì)TIM_Period個(gè)后產(chǎn)生一個(gè)更新或者中斷*///當(dāng)定時(shí)器從0計(jì)數(shù)到PWM_PERIOD_COUNT,即為PWM_PERIOD_COUNT+1次,為一個(gè)定時(shí)周期TIM_TimeBaseStructure.Init.Period=PWM_PERIOD_COUNT-1;//通用控制定時(shí)器時(shí)鐘源TIMxCLK=HCLK/2=84MHz//設(shè)定定時(shí)器頻率為=TIMxCLK/(PWM_PRESCALER_COUNT+1)TIM_TimeBaseStructure.Init.Prescaler=PWM_PRESCALER_COUNT-1;/*計(jì)數(shù)方式*/TIM_TimeBaseStructure.Init.CounterMode=TIM_COUNTERMODE_UP;/*采樣時(shí)鐘分頻*/TIM_TimeBaseStructure.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;/*初始化定時(shí)器*/HAL_TIM_PWM_Init(/*PWM模式配置*/TIM_OCInitStructure.OCMode=TIM_OCMODE_PWM1;TIM_OCInitStructure.Pulse=0;TIM_OCInitStructure.OCPolarity=TIM_OCPOLARITY_HIGH;TIM_OCInitStructure.OCNPolarity=TIM_OCPOLARITY_HIGH;TIM_OCInitStructure.OCIdleState=TIM_OCIDLESTATE_SET;TIM_OCInitStructure.OCNIdleState=TIM_OCNIDLESTATE_RESET;TIM_OCInitStructure.OCFastMode=TIM_OCFAST_DISABLE;/*配置PWM通道*/HAL_TIM_PWM_ConfigChannel(/*開始輸出PWM*/HAL_TIM_PWM_Start(/*配置脈寬*/TIM_OCInitStructure.Pulse=0;//默認(rèn)占空比為50%/*配置PWM通道*/HAL_TIM_PWM_ConfigChannel(/*開始輸出PWM*/HAL_TIM_PWM_Start(}首先定義兩個(gè)定時(shí)器初始化結(jié)構(gòu)體,定時(shí)器模式配置函數(shù)主要就是對(duì)這兩個(gè)結(jié)構(gòu)體的成員進(jìn)行初始化,然后通過相應(yīng)的初始化函數(shù)把這些參數(shù)寫入定時(shí)器的(寄存器)中。有關(guān)結(jié)構(gòu)體的成員介紹請參考定時(shí)器詳解章節(jié)。

不同的定時(shí)器可能對(duì)應(yīng)不同的APB總線,在使能定時(shí)器時(shí)鐘是必須特別注意。通用控制定時(shí)器屬于APB1,定時(shí)器內(nèi)部時(shí)鐘是84MHz。

在時(shí)基結(jié)構(gòu)體中我們設(shè)置定時(shí)器周期參數(shù)為PWM_PERIOD_COUNT(5599),頻率為15KHz,使用向上計(jì)數(shù)方式。因?yàn)槲覀兪褂玫氖莾?nèi)部時(shí)鐘,所以外部時(shí)鐘采樣分頻成員不需要設(shè)置,重復(fù)計(jì)數(shù)器我們沒用到,也不需要設(shè)置。

在輸出比較結(jié)構(gòu)體中,設(shè)置輸出模式為PWM1模式,通道輸出高電平有效,設(shè)置脈寬為ChannelPulse,ChannelPulse是我們定義的一個(gè)無符號(hào)16位整形的全局變量,用來指定占空比大小,實(shí)際上脈寬就是設(shè)定比較寄存器CCR的值,用于跟計(jì)數(shù)器CNT的值比較。

最后使用HAL_TIM_PWM_Start函數(shù)讓計(jì)數(shù)器開始計(jì)數(shù)和通道輸出。

bsp_motor_control.h-電機(jī)方向控制枚舉

/*電機(jī)方向控制枚舉*/typedefenum{MOTOR_FWD=0,MOTOR_REV,}motor_dir_t;在這里枚舉了兩個(gè)變量,用于控制電機(jī)的正轉(zhuǎn)與反轉(zhuǎn)。注意:在這里并不規(guī)定什么方向是正轉(zhuǎn)與反轉(zhuǎn),這個(gè)是你自己定義的。

變量定義

/*私有變量*/staticmotor_dir_tdirection=MOTOR_FWD;//記錄方向staticuint16_tdutyfactor=0;//記錄占空比定義兩個(gè)私有變量,direction用于記錄電機(jī)旋轉(zhuǎn)方向,dutyfactor用于記錄當(dāng)前設(shè)置的占空比。

定時(shí)器到電機(jī)控制的宏接口[

/*設(shè)置速度(占空比)*/#defineSET_FWD_COMPAER(ChannelPulse)TIM1_SetPWM_pulse(PWM_CHANNEL_1,ChannelPulse)//設(shè)置比較寄存器的值#defineSET_REV_COMPAER(ChannelPulse)TIM1_SetPWM_pulse(PWM_CHANNEL_2,ChannelPulse)//設(shè)置比較寄存器的值/*使能輸出*/#defineMOTOR_FWD_ENABLE()HAL_TIM_PWM_Start(//使能PWM通道1#defineMOTOR_REV_ENABLE()HAL_TIM_PWM_Start(//使能PWM通道2/*禁用輸出*/#defineMOTOR_FWD_DISABLE()HAL_TIM_PWM_Stop(//禁用PWM通道1#defineMOTOR_REV_DISABLE()HAL_TIM_PWM_Stop(//禁用PWM通道2使用宏定義非常方便程序升級(jí)、移植。如果使用不同的定時(shí)器IO,修改這些宏即可。

設(shè)置電機(jī)速度

voidset_motor_speed(uint16_tv){dutyfactor=v;if(direction==MOTOR_FWD){SET_FWD_COMPAER(dutyfactor);//設(shè)置速度}else{SET_REV_COMPAER(dutyfactor);//設(shè)置速度}}根據(jù)電機(jī)的旋轉(zhuǎn)方向來設(shè)置電機(jī)的速度(占空比),并記錄下設(shè)置的占空比,方便在切換旋轉(zhuǎn)方向時(shí)設(shè)置另一路為相同的占空比。

設(shè)置電機(jī)方向

voidset_motor_direction(motor_dir_tdir){direction=dir;if(direction==MOTOR_FWD){SET_FWD_COMPAER(dutyfactor);//設(shè)置速度SET_REV_COMPAER(0);//設(shè)置占空比為0}else{SET_FWD_COMPAER(0);//設(shè)置速度SET_REV_COMPAER(dutyfactor);//設(shè)置占空比為0}}將一路PWM的占空比設(shè)置為0,另一路用于設(shè)置速度。

主要

/***@brief主函數(shù)*@pa(ram)無*@retval無*/intmain(void){__IOuint16_tChannelPulse=PWM_MAX_PERIOD_COUNT/2;uint8_ti=0;/*初始化系統(tǒng)時(shí)鐘為168MHz*/SystemClock_Config();/*初始化按鍵GPIO*/Key_GPIO_Config();/*電機(jī)初始化*/motor_init();set_motor_disable();set_motor_speed(ChannelPulse);while(1){/*掃描KEY1*/if(Key_S(can)(KEY1_GPIO_PORT,KEY1_PIN)==KEY_ON){/*使能電機(jī)*/set_motor_enable();}/*掃描KEY2*/if(Key_Scan(KEY2_GPIO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論