在HCS08系列MCU上用軟件實(shí)現(xiàn)儀表步進(jìn)電機(jī)的驅(qū)動(dòng)_第1頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、在hcs08系列mcu上用軟件實(shí)現(xiàn)儀表步進(jìn)電機(jī)的驅(qū)動(dòng)因?yàn)榫哂薪俏灰坪洼斎朊}沖數(shù)成正比并且沒(méi)有累積誤差的特點(diǎn),而被廣泛的用作汽車儀表的顯示部件,其中具有代表性的是偉力驅(qū)動(dòng)技術(shù)(深圳)有限公司的vid29系列步進(jìn)電機(jī)。在多數(shù)狀況下,人們會(huì)用法專用的驅(qū)動(dòng)芯片來(lái)驅(qū)動(dòng)步進(jìn)電機(jī),主控制器只需要給出方向控制信號(hào)和控制轉(zhuǎn)動(dòng)步數(shù)的脈沖就行了。另外,也有集成了步進(jìn)電機(jī)驅(qū)動(dòng)的,如的mc9s12hy系列,其用法辦法也比較容易。然而,在無(wú)數(shù)較低端的汽車儀表,如微型車、農(nóng)用車、三輪貨車和摩托車的儀表上,人們?yōu)榱私档统杀?,希翼能夠不用專用?qū)動(dòng)芯片或相對(duì)較貴的帶驅(qū)動(dòng)電路的mcu,而是用一般的mcu挺直去驅(qū)動(dòng)步進(jìn)電機(jī)。本應(yīng)用筆

2、記介紹了在freescale的hcs08系列mcu上,如何用軟件來(lái)實(shí)現(xiàn)對(duì)vid29系列步進(jìn)電機(jī)的挺直驅(qū)動(dòng)。本文所附帶的程序,已經(jīng)在freescale的lg32 cluster referencedesign演示板上運(yùn)行驗(yàn)證過(guò)。vid29系列步進(jìn)電機(jī)的工作原理vid29系列步進(jìn)電機(jī)是兩相步進(jìn)電機(jī)經(jīng)三級(jí)齒輪減速傳動(dòng)輸出的。該步進(jìn)電機(jī)的工作原理可以用下面的簡(jiǎn)化的結(jié)構(gòu)圖(圖14)舉行解釋。在象vid29系列這樣的兩相步進(jìn)電機(jī)中,轉(zhuǎn)子是一個(gè)永磁體,定子上安裝了兩組線圈。當(dāng)給定子線圈通上的時(shí)候,就在轉(zhuǎn)子周圍的氣隙中產(chǎn)生了一個(gè)磁場(chǎng),轉(zhuǎn)子就會(huì)在磁力的作用下轉(zhuǎn)動(dòng)到使它自身的磁場(chǎng)方向和線圈電流產(chǎn)生的氣隙磁場(chǎng)方向平

3、行的位置(下文中把它叫做平衡位置)。要讓步進(jìn)電機(jī)延續(xù)地旋轉(zhuǎn),可以按如下步驟舉行:1. 1所示,在線圈a中通上電流,轉(zhuǎn)子就會(huì)轉(zhuǎn)過(guò)90度到圖2所示的位置;2. 2所示,斷開(kāi)線圈a中的電流,給線圈b通上電流,轉(zhuǎn)子又會(huì)繼續(xù)旋轉(zhuǎn)90度到圖3所示的位置;3. 3所示,斷開(kāi)線圈b中的電流,給線圈a通上跟步驟1中方向相反的電流,轉(zhuǎn)子繼續(xù)旋轉(zhuǎn)90度到圖4所示的位置;4. 4所示,斷開(kāi)線圈a中的電流,給線圈b通上跟步驟2中方向相反的電流,轉(zhuǎn)子繼續(xù)旋轉(zhuǎn)90度回到圖1所示的位置;5. 重復(fù)步驟14,步進(jìn)電機(jī)就會(huì)延續(xù)地旋轉(zhuǎn)起來(lái)了。假如將步驟14的挨次顛倒過(guò)來(lái),那么步進(jìn)電機(jī)就會(huì)以相反的方向旋轉(zhuǎn)。另外,假如將a和b兩個(gè)線圈

4、同時(shí)通以大小相同的電流,那么產(chǎn)生的合成磁場(chǎng)的方向就和一個(gè)線圈單獨(dú)通電時(shí)的磁場(chǎng)方向成45度夾角,這樣轉(zhuǎn)子就將旋轉(zhuǎn)45度,而不是90度。實(shí)際的步進(jìn)電機(jī)因?yàn)檗D(zhuǎn)子的外形和定子線圈的安裝方位跟上述的簡(jiǎn)化結(jié)構(gòu)不同,所以工作時(shí)驅(qū)動(dòng)電流的時(shí)序和轉(zhuǎn)子每一步旋轉(zhuǎn)的角度也不徹低一樣。對(duì)于vid29系列步進(jìn)電機(jī)來(lái)說(shuō),它的驅(qū)動(dòng)脈沖序列和轉(zhuǎn)子相應(yīng)的旋轉(zhuǎn)角度5所示。分步驅(qū)動(dòng)和微步驅(qū)動(dòng)步進(jìn)電機(jī)的驅(qū)動(dòng)通常有分步方式和微步方式兩種,圖5中的脈沖序列是分步方式下的驅(qū)動(dòng)信號(hào)。分步方式的優(yōu)點(diǎn)是驅(qū)動(dòng)信號(hào)的幅度惟獨(dú)0和電源(5v)兩種,與數(shù)字信號(hào)的低電平和高電平徹低一一對(duì)應(yīng),因此只要用法mcu的一般數(shù)字i/o口(gpio)就可以產(chǎn)生驅(qū)動(dòng)信

5、號(hào),驅(qū)動(dòng)程序也比較容易。但是因?yàn)榉植椒绞较拢ㄗ泳€圈產(chǎn)生的氣隙磁場(chǎng)的方向在每走一步的過(guò)程中都發(fā)生一個(gè)較大的跳變對(duì)于vid29系列步進(jìn)電機(jī)而言是60度的跳變,定子磁場(chǎng)從本來(lái)的方向跳變到下一個(gè)平衡位置的方向,轉(zhuǎn)子則在磁力的作用下加速向下一個(gè)平衡位置轉(zhuǎn)動(dòng),當(dāng)它到達(dá)平衡位置的那個(gè)眨眼,速度達(dá)到最大值,而磁場(chǎng)力則變?yōu)榱悖ㄖ豢紤]切向力,不考慮徑向力,由于徑向力與轉(zhuǎn)動(dòng)無(wú)關(guān)。下同);然后,假如驅(qū)動(dòng)信號(hào)沒(méi)有變幻的話,轉(zhuǎn)子就會(huì)在慣性的作用下繼續(xù)往前轉(zhuǎn)動(dòng)偏離平衡位置,這時(shí)磁場(chǎng)力將會(huì)增大,而其方向卻變成跟剛才相反,于是就使轉(zhuǎn)子減速,當(dāng)轉(zhuǎn)子與平衡位置的偏離達(dá)到最大時(shí),其速度減為零,然后在磁場(chǎng)力作用下往回加速轉(zhuǎn)動(dòng);當(dāng)轉(zhuǎn)子

6、轉(zhuǎn)回平衡位置時(shí),磁場(chǎng)力又變?yōu)榱?,而速度不為零,于是在慣性的作用下繼續(xù)轉(zhuǎn)動(dòng)偏離平衡位置如此反復(fù),只要驅(qū)動(dòng)信號(hào)還沒(méi)有再次轉(zhuǎn)變,轉(zhuǎn)子就會(huì)象蕩秋千一樣在平衡位置附近往返振蕩,并在摩擦力的作用下幅度逐漸減小。這種振蕩還會(huì)產(chǎn)生一定的噪聲,所以用分步方式驅(qū)動(dòng)時(shí),步進(jìn)電機(jī)的噪聲和顫動(dòng)會(huì)比較大。為了減小步進(jìn)電機(jī)運(yùn)行時(shí)的噪聲和顫動(dòng),人們?cè)O(shè)法讓定子線圈的磁場(chǎng)方向的跳變幅度變小,把一個(gè)分步一次的大跳變分成若干次較小的跳變來(lái)完成,于是就有了微步驅(qū)動(dòng)方式,也叫細(xì)分驅(qū)動(dòng)方式。按照矢量合成的原理,當(dāng)步進(jìn)電機(jī)中的兩個(gè)線圈各自產(chǎn)生的磁場(chǎng)的強(qiáng)度根據(jù)正/余弦邏輯變幻的時(shí)候,它們的合成磁場(chǎng)的方向就會(huì)勻速旋轉(zhuǎn),而合成磁場(chǎng)的強(qiáng)度保持不變,

7、6所示。線圈產(chǎn)生的磁場(chǎng)強(qiáng)度與通過(guò)它的電流大小成正比,因此微步驅(qū)動(dòng)方式就是讓通過(guò)線圈的驅(qū)動(dòng)電流不是象分步方式那樣在0和最大值之間跳變,而是根據(jù)正/余弦邏輯分成幾個(gè)階梯逐步變幻,7所示。那么如何來(lái)產(chǎn)生階梯變幻的驅(qū)動(dòng)電流呢?通常的做法是將一個(gè)波形電壓信號(hào)施加到線圈上;同時(shí)串聯(lián)一個(gè)阻值較小的作為電流,將電流信號(hào)轉(zhuǎn)換成電壓信號(hào)反饋回pwm控制器中;pwm控制器按照反饋信號(hào)調(diào)節(jié)輸出脈沖的占空比,從而使線圈上的平均電流等于所需的階梯電流。目前,頻繁的步進(jìn)電機(jī)專用驅(qū)動(dòng)芯片就是依據(jù)這個(gè)原理來(lái)工作的。在用法mcu挺直驅(qū)動(dòng)步進(jìn)電機(jī)的時(shí)候,由于mcu內(nèi)部也集成了pwm模塊,所以我們也可以采納這個(gè)辦法。但是,這種辦法還

8、需要用法來(lái)測(cè)量反饋信號(hào)的大小,并且要實(shí)時(shí)地計(jì)算出所需的pwm脈沖的占空比,因此將會(huì)占用太多的mcu的資源,使mcu幾乎無(wú)法再處理其他的事情。為了削減對(duì)mcu資源的占用,我們可以將其中的反饋環(huán)節(jié)刪掉,從閉環(huán)控制變?yōu)殚_(kāi)環(huán)控制。對(duì)每個(gè)階梯電流,我們事先計(jì)算出所需的pwm脈沖的占空比,并做成查找表存放在flash中。在驅(qū)動(dòng)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的時(shí)候,每走一個(gè)微步就從表中取出相應(yīng)的占空比來(lái)對(duì)pwm模塊舉行設(shè)置,然后在當(dāng)前的這一步結(jié)束之前不再轉(zhuǎn)變pwm脈沖的占空比。這樣一來(lái)就極大的削減了計(jì)算量,使mcu有足夠的資源去處理其他的事情。然而,因?yàn)槎ㄗ泳€圈具有一定的,所以通過(guò)線圈的平均電流和pwm脈沖的占空比并不是線性

9、關(guān)系,要想精確的計(jì)算出每個(gè)階梯電流對(duì)應(yīng)的占空比是相當(dāng)困難的;另外,當(dāng)轉(zhuǎn)子旋轉(zhuǎn)的時(shí)候,還會(huì)在定子線圈中產(chǎn)生感生電動(dòng)勢(shì),這個(gè)感生電動(dòng)勢(shì)會(huì)使通過(guò)線圈的電流發(fā)生轉(zhuǎn)變,而它的大小又與轉(zhuǎn)子永磁體的磁場(chǎng)強(qiáng)度和旋轉(zhuǎn)速度相關(guān)。因此,實(shí)際上在開(kāi)環(huán)控制中不管你用法多么復(fù)雜的數(shù)學(xué)公式來(lái)計(jì)算占空比,都無(wú)法使通過(guò)線圈的平均電流總是等于預(yù)期的階梯電流。不過(guò),所幸的是:在低端的汽車儀表中,并不要求對(duì)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)控制到那么精確的程度,我們可以姑且認(rèn)為通過(guò)線圈的平均電流是和pwm脈沖的占空比成正比的,反正只要減小了每一步跳變的角度(相對(duì)于分步方式而言),就可以讓步進(jìn)電機(jī)轉(zhuǎn)動(dòng)得更平穩(wěn)一些了,噪聲也能減小一些。電機(jī)轉(zhuǎn)動(dòng)的加減速步進(jìn)

10、電機(jī)在轉(zhuǎn)動(dòng)時(shí),由于轉(zhuǎn)子、傳動(dòng)齒輪和負(fù)載的轉(zhuǎn)動(dòng)慣量,使它從一個(gè)位置轉(zhuǎn)動(dòng)到下一個(gè)位置(一個(gè)分步或微步)需要一定的時(shí)光。假如在轉(zhuǎn)子轉(zhuǎn)動(dòng)到下一個(gè)位置之前,驅(qū)動(dòng)信號(hào)就又往前走了一步的話,那么轉(zhuǎn)子的磁場(chǎng)方向和定子線圈產(chǎn)生的氣隙磁場(chǎng)方向的夾角就會(huì)超過(guò)一個(gè)分步或微步所對(duì)應(yīng)的角度。只要轉(zhuǎn)子的旋轉(zhuǎn)速度跟不上驅(qū)動(dòng)信號(hào)的變幻速度,這個(gè)夾角就會(huì)越來(lái)越大,當(dāng)夾角超過(guò)180度的時(shí)候,磁場(chǎng)對(duì)轉(zhuǎn)子的作用力的方向就會(huì)變得跟本來(lái)的方向相反,8所示。這時(shí),轉(zhuǎn)子的旋轉(zhuǎn)速度就會(huì)減慢,直到變成以相反的方向旋轉(zhuǎn)。終于的結(jié)果就是轉(zhuǎn)子所轉(zhuǎn)過(guò)的角度和藹隙磁場(chǎng)所轉(zhuǎn)過(guò)的角度不相等了,也就是轉(zhuǎn)子所轉(zhuǎn)過(guò)的步數(shù)和驅(qū)動(dòng)信號(hào)走過(guò)的步數(shù)不相等了,人們常把這種現(xiàn)象

11、叫做“失步”。同樣的,當(dāng)要使步進(jìn)電機(jī)從高速的旋轉(zhuǎn)中停下來(lái)的時(shí)候,假如驅(qū)動(dòng)信號(hào)的變幻過(guò)快,轉(zhuǎn)子就有可能在慣性的作用下繼續(xù)旋轉(zhuǎn)超過(guò)180度,從而也產(chǎn)生失步。另外,因?yàn)檗D(zhuǎn)子軸承、傳動(dòng)齒輪和負(fù)載上都有一定的摩擦阻力,因此電機(jī)在延續(xù)轉(zhuǎn)動(dòng)時(shí)的速度也是有限的,假如驅(qū)動(dòng)信號(hào)的變幻速度超過(guò)了電機(jī)能達(dá)到的最大轉(zhuǎn)速的話,電機(jī)也會(huì)失步。那么,假如讓驅(qū)動(dòng)信號(hào)向來(lái)保持較慢的變幻速度,是不是就沒(méi)有問(wèn)題了呢?答案固然是否定的。這是由于步進(jìn)電機(jī)作為儀表的顯示部件,我們要求它能夠?qū)⒈粶y(cè)信號(hào)的變幻實(shí)時(shí)地顯示出來(lái);而電機(jī)轉(zhuǎn)動(dòng)假如比較慢,那么儀表的顯示就無(wú)法跟上被測(cè)信號(hào)的變幻。為了讓步進(jìn)電機(jī)既不會(huì)失步,又能轉(zhuǎn)得盡可能的快,那么就要讓驅(qū)

12、動(dòng)信號(hào)的變幻速度和轉(zhuǎn)子轉(zhuǎn)動(dòng)的速度保持基本全都。當(dāng)電機(jī)啟動(dòng)的時(shí)候,轉(zhuǎn)子做加速轉(zhuǎn)動(dòng),這時(shí)第一步的持續(xù)時(shí)光要比較長(zhǎng),然后每一步的持續(xù)時(shí)光逐漸變短,對(duì)應(yīng)的轉(zhuǎn)動(dòng)速度變幻9所示。電機(jī)停止的過(guò)程則與之相反。在vid29系列步進(jìn)電機(jī)的數(shù)據(jù)手冊(cè)上給出了電機(jī)啟動(dòng)/停止時(shí)允許的驅(qū)動(dòng)信號(hào)的變幻速度(啟動(dòng)頻率,start-stop frequency)和電機(jī)延續(xù)轉(zhuǎn)動(dòng)時(shí)允許的驅(qū)動(dòng)信號(hào)的變幻速度(最大驅(qū)動(dòng)頻率,max driving frequency),我們可以按照它們計(jì)算出第一步的持續(xù)時(shí)光和加速過(guò)程結(jié)束后的每一步的持續(xù)時(shí)光。步進(jìn)電機(jī)和mcu的硬件銜接在lg32 cluster reference design中,mcu

13、和步進(jìn)電機(jī)之間的銜接10所示。其中用法了一片74act125作為電流放大驅(qū)動(dòng),這是由于mc9s08lg32的i/o口輸出的電流最大只10ma,而vid29步進(jìn)電機(jī)需要的驅(qū)動(dòng)電流最大可達(dá)20ma。用法tpm模塊的兩個(gè)pwm輸出通道驅(qū)動(dòng)步進(jìn)電機(jī)兩個(gè)線圈的正極,兩個(gè)一般i/o口驅(qū)動(dòng)兩個(gè)線圈的負(fù)極。tpm模塊的兩個(gè)通道也可以設(shè)置成一般i/o口,這樣就可以按照需要用法微步方式驅(qū)動(dòng)或者分步方式驅(qū)動(dòng)。在mc9s08lg32中集成了兩個(gè)tpm模塊,其中tpm1有2個(gè)通道,tpm2有6個(gè)通道。在這里挑選tpm1來(lái)驅(qū)動(dòng)步進(jìn)電機(jī),是由于當(dāng)把一個(gè)tpm模塊的某一個(gè)通道設(shè)置為pwm輸出時(shí),此tpm模塊公用的模數(shù)(mod

14、)寄存器將被設(shè)成一個(gè)比較特別的值,這樣就會(huì)給它的其它通道的功能用法造成無(wú)數(shù)限制。所以為了越發(fā)充分地利用mcu的資源,這里挑選了通道較少的tpm1,而把通道較多的tpm2留作他用。步進(jìn)電機(jī)驅(qū)動(dòng)程序本驅(qū)動(dòng)程序?yàn)閼?yīng)用程序提供的接口函數(shù)有三個(gè):1. initstepper:初始化函數(shù),對(duì)驅(qū)動(dòng)所用到的i/o口和定時(shí)器舉行設(shè)置,并讓步進(jìn)電機(jī)轉(zhuǎn)到初始位置使儀表的指針指到零點(diǎn)的位置。函數(shù)原型:void initstepper(void);參數(shù):無(wú)返回值:無(wú)2. setsteppertarget:設(shè)定步進(jìn)電機(jī)的目標(biāo)位置,也就是要讓儀表的指針轉(zhuǎn)到哪個(gè)位置(以相對(duì)于零點(diǎn)的角度來(lái)表示),囫圇轉(zhuǎn)動(dòng)的過(guò)程(如需要轉(zhuǎn)多少步

15、,往哪個(gè)方向轉(zhuǎn)等)應(yīng)用程序無(wú)需知道,而且應(yīng)用程序可以指定隨意目標(biāo)位置。函數(shù)原型:void setsteppertarget(word wtargetdegree);參數(shù):word wtargetdegree,目標(biāo)位置相對(duì)于零點(diǎn)的角度,其值是以(1/12)度(等于微步方式下的步距)為單位的;返回值:無(wú)3. getsteppercurrent:得到步進(jìn)電機(jī)的當(dāng)前位置。函數(shù)原型:word getsteppercurrent(void);參數(shù):無(wú)返回值:返回儀表的指針當(dāng)前所指的位置(以相對(duì)于零點(diǎn)的角度來(lái)表示),其值也以(1/12)度(等于微步方式下的步距)為單位。另外,在頭文件stepper.h中定義

16、了挑選驅(qū)動(dòng)方式的宏,用法者修改宏定義就可以挑選分步驅(qū)動(dòng)方式或微步驅(qū)動(dòng)方式,如下:define stepper_partial_mode 0define stepper_micro_mode !stepper_partial_mode如前所述,驅(qū)動(dòng)信號(hào)的變幻速度不能太快,每次變幻后都必需保持一段時(shí)光不變,為了讓驅(qū)動(dòng)程序占用的cpu的處理時(shí)光更少,就需要用到一個(gè)定時(shí)器。除了上面的三個(gè)接口函數(shù)外,驅(qū)動(dòng)程序的其余部分都在定時(shí)器的中斷服務(wù)程序中運(yùn)行。在驅(qū)動(dòng)程序中,用兩個(gè)靜態(tài)變量來(lái)保存步進(jìn)電機(jī)的目標(biāo)位置和當(dāng)前位置,其值是到零點(diǎn)的步數(shù)。定時(shí)器中斷由setsteppertarget函數(shù)使能,在中斷服務(wù)程序中按

17、照目標(biāo)位置和當(dāng)前位置的差值來(lái)打算步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的方向和步數(shù),然后按照挑選的驅(qū)動(dòng)方式執(zhí)行相應(yīng)的轉(zhuǎn)動(dòng)程序。分步方式程序先前面的圖5中,可以看到分步方式下的驅(qū)動(dòng)信號(hào)是周期性變幻的,每個(gè)周期對(duì)應(yīng)轉(zhuǎn)子旋轉(zhuǎn)一圈(輸出軸旋轉(zhuǎn)2度),其中包含6個(gè)分步,分離對(duì)應(yīng)轉(zhuǎn)子的6個(gè)平衡位置,我們也可以把它們叫做6個(gè)相位。因此,分步驅(qū)動(dòng)方式下mcu的4個(gè)i/o口輸出的電平也有6種組合,分離對(duì)應(yīng)這6個(gè)相位。在程序中,用法一個(gè)靜態(tài)局部變量bphase來(lái)保存步進(jìn)電機(jī)當(dāng)前所處的相位,步進(jìn)電機(jī)每走一個(gè)分步,相位就加1(逆時(shí)針轉(zhuǎn))或者減1(順時(shí)針轉(zhuǎn)),然后在一個(gè)switchcase結(jié)構(gòu)中按新的相位設(shè)置i/o口的輸出狀態(tài),如下:switc

18、h(bphase)case 0:stepper_lp = 1;stepper_ln = 0;stepper_rp = 1;stepper_rn = 0;break;case 1:stepper_lp = 0;stepper_ln = 0;stepper_rp = 1;stepper_rn = 0;break;case 2:stepper_lp = 0;stepper_ln = 1;stepper_rp = 0;stepper_rn = 0;break;case 3:stepper_lp = 0;stepper_ln = 1;stepper_rp = 0;stepper_rn = 1;break

19、;case 4:stepper_lp = 0;stepper_ln = 0;stepper_rp = 0;stepper_rn = 1;break;case 5:stepper_lp = 1;stepper_ln = 0;stepper_rp = 0;stepper_rn = 0;break;default:;微步方式程序先前面的圖7中,可以看到微步方式下的驅(qū)動(dòng)信號(hào)是近似于正弦波的階梯電流信號(hào),每個(gè)周期對(duì)應(yīng)轉(zhuǎn)子旋轉(zhuǎn)一圈(輸出軸旋轉(zhuǎn)2度),當(dāng)把每個(gè)分步細(xì)分成4個(gè)微步的時(shí)候,一個(gè)正弦波周期里就有24個(gè)階梯。本文利用pwm來(lái)產(chǎn)生這些階梯電流,并且近似地認(rèn)為pwm的占空比與平均電流大小成正比。首先,把

20、tpm1的通道0和1初始化成邊沿對(duì)齊的pwm工作模式,設(shè)置tpm1的工作時(shí)鐘為時(shí)鐘,預(yù)分頻系數(shù)為1,設(shè)置tpm1mod的值為255,這樣當(dāng)總線時(shí)鐘頻率為16mhz時(shí),所產(chǎn)生的pwm信號(hào)的頻率是64khz。在對(duì)tpm舉行設(shè)置的時(shí)候需要考慮兩個(gè)方面:其一,由于pwm的占空比與平均電流大小成正比,所以要使產(chǎn)生的平均電流盡量臨近抱負(fù)的正弦波分成24個(gè)階梯時(shí)的值,就要求pwm占空比的精度比較高。tpm1mod的值打算了每個(gè)pwm周期里有多少個(gè)時(shí)鐘周期,脈沖寬度則由各個(gè)通道的value寄存器的值打算,最小為0(對(duì)應(yīng)占空比為0),最大為(tpm1mod+1)(對(duì)應(yīng)占空比為100),設(shè)置value寄存器的值大

21、于(tpm1mod+1)的效果和設(shè)為等于(tpm1mod+1)是一樣的。pwm的占空比其實(shí)就是value寄存器的值(tpm1mod+1)的比值,因?yàn)榧拇嫫骼锏闹抵荒苁钦麛?shù),所以占空比的精度只能達(dá)到1/(tpm1mod+1)。因此,要使占空比的精度較高,就要給tpm1mod設(shè)置比較大的值。其二,由于電機(jī)的線圈是個(gè)感性負(fù)載,所以用pwm驅(qū)動(dòng)的時(shí)候,線圈上的電流是波浪式變幻的,11所示。電流的變幻導(dǎo)致磁場(chǎng)強(qiáng)度的變幻,兩個(gè)線圈各自產(chǎn)生的磁場(chǎng)強(qiáng)度變幻則導(dǎo)致合成磁場(chǎng)的強(qiáng)度和方向都發(fā)生變幻,這種波浪式的變幻將使電機(jī)產(chǎn)生振動(dòng)和噪聲。明顯,電流波紋的幅度是pwm信號(hào)的周期的單調(diào)增函數(shù),即pwm的周期越長(zhǎng)則電流波

22、紋的幅度越大。因此,pwm的周期應(yīng)該盡量短,而pwm的周期等于(tpm1mod+1)乘以tpm1的工作時(shí)鐘的周期,所以應(yīng)該使tpm1的工作時(shí)鐘的頻率盡量高,而且tpm1mod的值不宜設(shè)得太大。設(shè)置完pwm的工作時(shí)鐘頻率和模值(tpm1mod)后,還要計(jì)算出各個(gè)階梯電流所對(duì)應(yīng)的占空比,即value寄存器的值,計(jì)算公式如下:把算出的數(shù)值做成查找表放在flash存儲(chǔ)器中。兩個(gè)線圈的電流相位相差60度,而,因此把由上式計(jì)算得到的一組數(shù)字的挨次循環(huán)移動(dòng)4個(gè)位置就得到另一個(gè)線圈的電流對(duì)應(yīng)的查找表。因?yàn)閜wm的占空比只能控制平均電流的大小,而電流的方向由其他設(shè)置打算,所以程序中這兩個(gè)表的數(shù)字都取肯定值,它們

23、的定義如下:static const word wacosinetable =256, 246, 221, 180, 127, 65, 0, 65, 127, 180, 221, 246,256, 246, 221, 180, 127, 65, 0, 65, 127, 180, 221, 246;static const word washiftcostable =127, 180, 221, 246, 256, 246, 221, 180, 127, 65, 0, 65,127, 180, 221, 246, 256, 246, 221, 180, 127, 65, 0, 65;與分步方式程

24、序相像地,本文把這24個(gè)階梯叫做24個(gè)相位,用一個(gè)靜態(tài)局部變量bphase來(lái)保存步進(jìn)電機(jī)當(dāng)前所處的相位,步進(jìn)電機(jī)每走一個(gè)微步,相位就加1(逆時(shí)針轉(zhuǎn))或者減1(順時(shí)針轉(zhuǎn)),然后在兩個(gè)查找表中取出相應(yīng)的數(shù)值寫到tpm1的兩個(gè)通道的value寄存器中。為了實(shí)現(xiàn)電流的方向變幻,需要在電流過(guò)零對(duì)應(yīng)的相位時(shí)轉(zhuǎn)變pwm輸出的極性和銜接線圈另一極的gpio口輸出的電平,在程序中用switchcase結(jié)構(gòu)來(lái)完成這個(gè)任務(wù),代碼如下:void movestepper1micro(void)static byte bphase;if(bdirection = 1)if(bphase = 0)bphase = 23;e

25、lsebphase-;switch(bphase)case 17:vitstepper_ln = 1; /設(shè)置左線圈負(fù)極gpio口輸出高電平,并tpm1c0sc = 0x24; /設(shè)置pwm極性為低有效,使電流方向?yàn)樨?fù)break;case 21:stepper_rn = 1; /設(shè)置右線圈負(fù)極gpio口輸出高電平,并tpm1c1sc = 0x24; /設(shè)置pwm極性為低有效,使電流方向?yàn)樨?fù)break;case 5:stepper_ln = 0; /設(shè)置左線圈負(fù)極gpio口輸出低電平,并tpm1c0sc = 0x28; /設(shè)置pwm極性為高有效,使電流方向?yàn)檎齜reak;case 9:stepp

26、er_rn = 0; /設(shè)置右線圈負(fù)極gpio口輸出低電平,并tpm1c1sc = 0x28; /設(shè)置pwm極性為高有效,使電流方向?yàn)檎齜reak;default:;wcurrentposition+;else if(bdirection = 0xff)if(bphase = 23)bphase = 0;elsebphase+;switch(bphase)case 6:stepper_ln = 1; /設(shè)置左線圈負(fù)極gpio口輸出高電平,并tpm1c0sc = 0x24; /設(shè)置pwm極性為低有效,使電流方向?yàn)樨?fù)break;case 10:stepper_rn = 1; /設(shè)置右線圈負(fù)極gpi

27、o口輸出高電平,并tpm1c1sc = 0x24; /設(shè)置pwm極性為低有效,使電流方向?yàn)樨?fù)break;case 18:stepper_ln = 0; /設(shè)置左線圈負(fù)極gpio口輸出低電平,并tpm1c0sc = 0x28; /設(shè)置pwm極性為高有效,使電流方向?yàn)檎齜reak;case 22:stepper_rn = 0; /設(shè)置右線圈負(fù)極gpio口輸出低電平,并tpm1c1sc = 0x28; /設(shè)置pwm極性為高有效,使電流方向?yàn)檎齜reak;default:;wcurrentposition-;tpm1c0v = wacosinetablebphase;tpm1c1v = washift

28、costablebphase;轉(zhuǎn)動(dòng)速度控制因?yàn)楸粶y(cè)量的輸入信號(hào)的變幻是隨機(jī)的,有時(shí)快有時(shí)慢,為了讓儀表實(shí)時(shí)、直觀地顯示出輸入信號(hào)的變幻,驅(qū)動(dòng)程序就必需對(duì)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)速度舉行適當(dāng)?shù)目刂啤?梢哉f(shuō),一個(gè)汽車儀表做得好不好,很大程度上就看它對(duì)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)控制得好不好。通常,儀表對(duì)輸入信號(hào)舉行周期性的定時(shí)測(cè)量,因此對(duì)步進(jìn)電機(jī)目標(biāo)位置(指針位置)的設(shè)定也是每隔一段時(shí)光舉行一次的。在程序中給這個(gè)間隔時(shí)光定義了一個(gè)宏,放在stepper.h頭文件中,以便按照應(yīng)用程序的需要作修改,宏定義如下:define stepper_update_interval 256 /單位:毫秒,必需在(8,512)內(nèi)這里把指針

29、位置的更新間隔時(shí)光限定在8到512毫秒之間是由于:1. 儀表是用來(lái)給人看的,而人眼并不能看清變幻十分快的東西,所以對(duì)指針位置更新得太快就沒(méi)有實(shí)際意義,徒然增強(qiáng)cpu的處理負(fù)擔(dān)而已。2. 如下文將要提到的,本程序用法的定時(shí)器所能達(dá)到的最大中斷間隔時(shí)光為512毫秒,為了簡(jiǎn)化定時(shí)器的中斷服務(wù)程序,減小cpu的負(fù)荷,所以限定指針位置的更新間隔時(shí)光不要超過(guò)512毫秒。為了讓儀表的指針擺動(dòng)得越發(fā)平穩(wěn)、自然,最好能讓電機(jī)在下一次設(shè)定目標(biāo)位置前的那一刻剛好轉(zhuǎn)動(dòng)到本次設(shè)定的目標(biāo)位置。為此就要計(jì)算出電機(jī)在這一段時(shí)光里的平均旋轉(zhuǎn)速度,也就是每個(gè)分步或微步的平均間隔時(shí)光。當(dāng)所需的平均速度較大時(shí),如前所述,還需要對(duì)電機(jī)

30、舉行加減速的控制。為了實(shí)現(xiàn)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)速度控制,在定時(shí)器的每次中斷里只讓電機(jī)轉(zhuǎn)動(dòng)一個(gè)分步/微步,然后用一定的算法計(jì)算出這一步到下一步之間應(yīng)該間隔的時(shí)光,以重新設(shè)置定時(shí)器的溢出時(shí)光。在本驅(qū)動(dòng)程序中,定時(shí)器選用的是tpm2模塊的通道0,對(duì)其相關(guān)的寄存器的設(shè)置解釋如下:初始化:scgc1_tpm2 = 1; /使能tpm2模塊的時(shí)鐘tpm2mod = 0; /設(shè)置tpm2的計(jì)數(shù)器為自由運(yùn)行模式tpm2sc = 0x0f; /挑選總線時(shí)鐘為時(shí)鐘源,預(yù)分頻系數(shù)為128把預(yù)分頻系數(shù)設(shè)置為128是為了讓定時(shí)器的溢出時(shí)光能夠盡可能大,削減中斷對(duì)cpu造成的負(fù)擔(dān)。當(dāng)總線時(shí)鐘頻率為16mhz時(shí),此定時(shí)器能達(dá)到的

31、最大中斷間隔時(shí)光是512毫秒。啟動(dòng)定時(shí)器:tpm2c0v = tpm2cnt + 2;tpm2c0sc = 0x50;設(shè)置通道0為輸出比較模式,比較全都時(shí)產(chǎn)生中斷,但比較結(jié)果不輸出到管腳上(相關(guān)管腳仍然由gpio控制)。由于啟動(dòng)定時(shí)器時(shí)步進(jìn)電機(jī)還沒(méi)有開(kāi)頭轉(zhuǎn)動(dòng),所以給比較值寄存器(tpm2c0v)設(shè)置的值是計(jì)數(shù)器(tpm2cnt)當(dāng)前的值加2,即讓它盡快地產(chǎn)生一次中斷。然后在每次中斷產(chǎn)生后,在中斷服務(wù)程序里讓步進(jìn)電機(jī)轉(zhuǎn)動(dòng)一步,并給tpm2c0v設(shè)置一個(gè)新的值,即按照所需的間隔時(shí)光給tpm2c0v增強(qiáng)一定的數(shù)值。為了對(duì)步進(jìn)電機(jī)舉行加減速控制,我們需要知道它啟動(dòng)時(shí)第一步所需的間隔時(shí)光和最大轉(zhuǎn)速時(shí)每一

32、步所需的間隔時(shí)光。步進(jìn)電機(jī)啟動(dòng)時(shí)第一步所需的間隔時(shí)光的最小值(tss)可以由下面的公式計(jì)算得到:式中,d是步距,即每走一步輸出軸轉(zhuǎn)過(guò)的角度;fss是啟動(dòng)頻率,即啟動(dòng)時(shí)允許的輸出軸的最大轉(zhuǎn)速,單位是(度/秒)。從vid29系列步進(jìn)電機(jī)的數(shù)據(jù)手冊(cè)上可以查到,fss等于125(度/秒),在分步方式下d等于(1/3)度。代入上式,可以算出tss等于(1/375)秒,約等于2667微秒。在程序中定義max_partial_step_time為400,當(dāng)在中斷服務(wù)程序里把tpm2c0v的值增強(qiáng)400后,下一次比較中斷產(chǎn)生的時(shí)光和本次中斷之間的間隔就為3200微秒,大于tss且還有一定的裕量。步進(jìn)電機(jī)達(dá)到最大轉(zhuǎn)速時(shí)每一步

溫馨提示

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

評(píng)論

0/150

提交評(píng)論