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