三相永磁同步無刷電機驅動電路形式有幾種,其中比較高效的是上三下三六路輸出形式。 下圖為其中一種一相的驅動電,其它二路與之相同。其中CH1為高電平導通,CH1N為低電平導通,這樣做是為了避免單片機在復位時,驅動引腳同時為相同電平,導致上下管同時導通,導致損壞開關管。 關于三相六路驅動無刷電機的時序,可以自行百度,本文只討論如何用STM32的高級定時器產生控制時序。 1.設定定時器的輸出引腳,用STM32CubeMX。用這個軟件可以不關注芯片型號,可移植性很強。配置如下圖. 在引腳配置圖中設定輸出引腳后,首先要設定引腳的GPIO狀態。需設定為全部輸出管為截止狀態,這樣就保證驅動開關管在上電復位至配置好GPIO期都不會導通。接下來要配置PWM輸出,這是驅動時序的重點。Stm32的高級定時器功能很多,使用起來比一般的定時器配置要復雜。用作產生控制無刷電機的六步換相時序,需要用到其中的三個模塊:時基產生模塊,PWM信號生成模塊和三路互補輸出模塊。時基產生模塊與PWM模塊與其它單機的定時器區別不大,也很容易設置。三路互補輸出比較復雜,這里依照我的理解寫出來供參考。先看下輸出電路框圖輸出電路控制位有好幾位,只有使用好它們的組合控制功能,才能輸出想要的時序。 1.DBTR->MOE 主輸出使能位。當為0時,定時器斷開。引腳狀態為GPIO設定的狀態。 設為1時,輸出才會接入輸出引腳。這時的引腳輸出狀態由比較器的輸出模式,CCER相應位的值,以及OSSI位的值決定。還有一種情況是,DBTR->OSSR為1時,PWM信號已經輸出(電機已經啟動),這時MOE由1變0(等同輸入剎車信號),這時先輸出一個死區時間,在死區時間的電平為GPIO配置,然后各輸出引腳電平等同CR2的OSIx,OSIxN位的設置。 2.在MOE=1時,pwm輸出連至輸出引腳,CCRM1和CCRM2中的OCMx[2:0]設定四種輸出模式(強制高,強制低,PWM模式1,PWM模式2),CCER中的CCxP,CCxNP設定每一相中上下開關管的驅動輸出極性。CCxE,CCxNE為輸出允許位,設1接到定時器輸出,設0為GPIO設定的狀態。如果DBTR->OSSI位為1時,當CCxE,CCxNE為0時,引腳輸出為“低電平”經過CCxP,CCxNP相位選擇后的電平。OSSI在一般情況下設為0。例如:需要在A相的上開關管輸出PWM,C相的下開關管導通,各輸出寄存器配置: CCMR1=0x0060,CCMR2=0x0040,CCER=0X0401.接著MOE位置1。
3.三相同時換相,使能換相預裝載位(設定CR2->CCPC位為1),然后預先設定好下相的輸出信號。在要換相時,設EGR->COMG位為1,三相導通狀態可按預先設定的同時轉換。
|