本文主要介紹了一種基于STM32的混合式步進電機控制方案,STM32產(chǎn)生PWM(脈寬調(diào)制信號),利用PWM完成DAC轉(zhuǎn)換,通過PWMDAC的輸出電壓實現(xiàn)對步進電機的多細分控制。該設(shè)計相比利用DAC數(shù)模轉(zhuǎn)換芯片的設(shè)計方案具有電路簡單,費效比高的優(yōu)點,而且可實現(xiàn)步進電機十六分之一步的驅(qū)動控制,精度較高。
1、硬件設(shè)計
硬件設(shè)計框圖如圖1所示,主要由PC上位機給STM32F103發(fā)送控制命令,通過STM32F103控制A3988,從而驅(qū)動兩個步進電機轉(zhuǎn)動。其中,STM32F103是意法半導體公司生產(chǎn)的基于ARMCortex—M3內(nèi)核的微控制器,內(nèi)核架構(gòu)先進,性能優(yōu)越,主頻可達72MHz,執(zhí)行效率高,具有較高的運算能力及數(shù)據(jù)處理功能,擁有豐富的外設(shè)接口,在硬件設(shè)計中,上位機與STM32F103之間的RS—422串行通信,就是通過外接MAX3079電平轉(zhuǎn)換芯片來實現(xiàn)的。
圖1硬件設(shè)計框圖
STM32F103控制定時器產(chǎn)生PWM,通過LPF(低通濾波器)實現(xiàn)PWM的DAC轉(zhuǎn)換,并由PWMDAC來提供A3988的4個基準電壓,設(shè)計中,定時器TIM1的輸出通道在經(jīng)過濾波器后與A3988的參考電壓VERFx接口相連,PC0~3,PB12~15,PB6~9為通用GPIO輸出端口,接A3988的邏輯控制信號輸入腳I0x、I1x和Phasex,PC0~3和PB12~15分別置低,Phasex用于控制流過電機各相電流的方向。選用的步進電機的步距角為0.9,額定電流為0.5A。
2、多細分控制原理分析與實現(xiàn)
2.1、多細分控制原理分析
選用電機為兩相步進電機,假設(shè)為A、B相,通過兩相的電流在相位上相差為90,控制流過兩相的電流大小和方向就可以控制電機轉(zhuǎn)動。A3988是一個4DMOS全橋脈寬調(diào)制電機驅(qū)動器,可以同時驅(qū)動兩個步進電機,每個全橋輸出電流最大可達到1.2A。流過電機的每一相電流可以通過UREFx,I0x,I1x,Phasex和接SENSEx引腳的電阻Rx進行控制。工作電流通過公式(1)可以得到。
ITripMax=UREFx/(3RSx)(1)
由式(1)可知,最大電流ITripMax是由UREFx和RSx共同決定,UREFx為PWM-DAC的輸出的電壓,其最大值為1.1V,RSx選用1歐的電阻。
ITrip=(%ITripMax/100)ITripMax(2)
式(2)中,ITrip為實際輸出的電流,邏輯接口I0x,I1x控制%ITripMax,由A3988的用戶文檔可知,當I0x,I1x控制邏輯都為低時,實際輸出電流就等于最大電流,由上述公式可知,ITrip最大輸出約為367mA。
為實現(xiàn)步進電機多細分控制,必須能夠控制流過步進電機的兩相電流,在參考電壓UREFx一定的情況下,使用邏輯接口I0x,I1x,Phasex僅可實現(xiàn)步進電機整步、半步和四分之一步的驅(qū)動控制,這樣的細分控制并不能滿足設(shè)計需求,為了得到更多的細分,設(shè)計采用動態(tài)改變UREFx的方法來輸出動態(tài)變化的電流,通過對UREFx的多細分控制,來實現(xiàn)對ITrip的多細分,從而實現(xiàn)對步進電機多細分控制。
UREFx由PWM-DAC輸出,其值在0~1.1V變化,將其按0~π的正旋曲線32等分得到32個電壓值,令PWM-DAC輸出的值為這32個值,從而對應(yīng)得到0~1.1V的32個電壓值和按正弦規(guī)律變化的32個電流值,通過Phasex控制電流方向,可實現(xiàn)步進電機1/16步的驅(qū)動控制。
2.2、PWM實現(xiàn)DAC轉(zhuǎn)換的原理及設(shè)計
雖然大容量的STM32F103具有內(nèi)部DAC,但是更多的型號是沒有DAC的,本文中所用到的STM32F03就沒有DAC外設(shè)功能。不過STM32所有的芯片都有PWM輸出,因此,可以用PWM+LPF來實現(xiàn)PWM-DAC輸出,從而節(jié)省成本。
PWM本質(zhì)上是一種周期一定而高低電平的占空比可以調(diào)制的方波信號,實際電路中典型的PWM波形如圖2所示。
圖2典型的PWM波形
圖2的PWM波形可以用分段函數(shù)表示為式(3)。
式(3)中,T是STM32定時器TIM1的計數(shù)頻率(最高可達72MHz)的倒數(shù),N是PWM波一個周期的計數(shù)脈沖個數(shù),也就是STM32的ARR—1的值,n是PWM波一個周期中高電平的計數(shù)脈沖個數(shù),也就是STM32的CCRx的值,VH和VL分別是STM32產(chǎn)生PWM波的高低電平電壓值,高電平為3.3V,低電平為0V,k為諧波次數(shù),t為時間。將式(3)展開成傅里葉級數(shù),得到式(4)。
從式(4)可以看出,式(4)中第1個方括弧為直流分量,第2項為1次諧波分量,第3項為大于1次的高次諧波分量。直流分量與n成線性關(guān)系,并隨著n從0到N,直流分量在0~3.3V變化。這正是電壓輸出的DAC所需要的。因此,如果能把式中除直流分量外的諧波過濾掉,則可以得到從PWM波到電壓輸出DAC的轉(zhuǎn)換,即:PWM波可以通過一個低通濾波器進行解調(diào)。其中,第2項的幅度和相角與n有關(guān),頻率為1/(NT),其實就是PWM的輸出頻率。該頻率是設(shè)計低通濾波器的依據(jù)。如果能把1次諧波很好過濾掉,則高次諧波就基本不存在了。
選用RC二階低通濾波器實現(xiàn)PWM波的解調(diào),電路設(shè)計如圖3所示。
圖3二階低通濾波器調(diào)理電路
當N取值為256時,PWM-DAC的分辨率為log2(N)=8位,在8位分辨條件下,要求1次諧波對輸出電壓的影響不要超過1個位的精度,也就是3.3/256=0.01289V。由式(4)可知,一次諧波的最大值是2×3.3/π=2.1V,所以,RC濾波電路要提供至少-20lg(2.1/0.01289)=-44dB的衰減。
當STM32的定時器TIM1的計數(shù)頻率是72MHz,分辨率為8的時候,PWM頻率為72/256=281.25kHz。如果是1階RC濾波,則要求截止頻率為1.77kHz,如果為2階RC濾波,則要求截止頻率為22.34kHz。相比之下,2階濾波器的信號抑制能力更強,濾波效果更好。由分析可知,2階RC濾波截止頻率計算公式為:
7.96×10-5,可確定電路參數(shù)值,令R1=R2=2.4kΩ,C1=C2=3300pF,可計算出圖3的截止頻率為21.9kHz,略小于22.34kHz,符合設(shè)計需求。PWM波調(diào)制后,輸出的直流分量最大值為3.3V,而UREFx可操作的電壓的范圍是只有0~1.5V,可利用一個2.4kΩ的電阻R3與濾波器串聯(lián),從而實現(xiàn)對直流分量的分壓調(diào)理。
3、軟件設(shè)計
軟件設(shè)計主要是電機驅(qū)動軟件的相關(guān)設(shè)計,通過對定時器的控制,實現(xiàn)電機的轉(zhuǎn)動方向和速度的調(diào)節(jié),其次是PC上位機控制軟件設(shè)計,主要利用C++Bulider平臺開發(fā),完成對步進電機的測試。
3.1、PWM信號產(chǎn)生的設(shè)計
STM32F103中的7個定時器,每個定時器均有4個獨立可編程通道輸出的PWM信號。選用高級定時器TIM1,它由APB2總線提供時鐘,設(shè)置為72MHz,向上(增)計數(shù),自動裝載寄存器ARR—1的值為256,所以,PWM波的占空比的取值范圍為0~256,不同占空比的取值存儲在每個通道的捕獲比較寄存器CCRx中,編程時,通過改變寄存器CCRx的值來改變PWM波的占空比。占空比值的計算如式(6)所示。
這樣就得到正旋曲線0~π范圍內(nèi)的32個點對應(yīng)的占空比的值。將得到的占空比的值放在定義的數(shù)組Sequence[32]內(nèi),通過查表的方法,使定時器TIM1輸出占空比變化的PWM波,通過濾波器后產(chǎn)生UREFx的波形如圖4。
圖4PWM產(chǎn)生UREFx波形圖
從圖中可以看出,輸出信號UREFx波形達到了預期目標。由于選擇了合適的濾波器參數(shù),PWM波和UREFx幾乎不存在大的相位差。
3.2、Phasex信號產(chǎn)生的設(shè)計
Phase1~Phase4用于控制流過電機各相電流的方向,當Phase1為1時,電流從OUT1A流向OUT1B流向,當Phase1為0時,電流從OUT1B流向OUT1A,其他三相控制原理相同,下面就以Phase1為例加以闡述。
STM32F103通過PB6來控制Phase1信號,配置PB6為推挽輸出端口,在UREFx奇數(shù)次周期時,將PB6置1,偶數(shù)次周期時,PB6置0,在0~2π區(qū)間內(nèi),PB6將變化兩次。Phase1信號變化如圖5所示。
圖5Phase1信號變化波形
通過Phasex信號對電流方向的控制,可實現(xiàn)實際輸出電流ITrip以2π為周期的正弦曲線變化,在0~2π共產(chǎn)生64個電流值,從而實現(xiàn)了步進可實現(xiàn)步進電機十六分之一步的驅(qū)動控制。
3.3、步進電機正反轉(zhuǎn)和變速控制
由于通過步進電機A、B相的電流在相位上相差為90,當A相超前B相時,電機正轉(zhuǎn),而當B超前A時,則電機反轉(zhuǎn)。所以,控制流過A、B相電流的相位差,即可實現(xiàn)對步進電機的方向控制,也就是控制輸入?yún)⒖茧妷旱南辔徊?。在軟件設(shè)計時,定時器TIM1通過查表法輸出PWM波,在占空比數(shù)組的初始下標取值時,讓A、B相對應(yīng)的PWM輸出相差90。例如,當A相對應(yīng)的PWM輸出的初始占空比為Sequence[0]時,B相為Sequence[16],這樣使得輸入各相的參考電壓在相位上相差了90。
在步距角已知的情況下,通過控制相鄰兩個取值的變化時間間隔,便可以控制電機的轉(zhuǎn)動速度,時間間隔越小,轉(zhuǎn)動速度越高,時間長則轉(zhuǎn)速低。為了得到兩個取值變化之間精確的時間間隔,設(shè)計通過定時器TIM2進行精確的定時控制,TIM2中ARR—1的取值通過等分0~π2正弦曲線的辦法計算得到,在這里不再贅述,定時器產(chǎn)生定時中斷,中斷響應(yīng)中改變PWM占空比的值,實現(xiàn)了速度10級可調(diào)??芍诓竭M電機實現(xiàn)變速控制時,Phasex和UREFx的頻率都發(fā)生了變化。
本文導航
- 第 1 頁:基于STM32步進電機多細分控制的設(shè)計
- 第 2 頁:實驗測試
- STM32(347763)
- 步進電機(145854)
- a3988(2687)
評論
查看更多