國營七八五廠第三研究所 王 凱 韓力立
采用STM32控制L6470步進電機驅動器
國營七八五廠第三研究所 王 凱 韓力立
常用的步進電機控制器,根據不同的運動方式需要由單片機發出不同頻率的和數目的脈沖信號到專用控制芯片,而ST公司的數字控制電機驅動芯片L6470內部數字控制系統可實現完備的運動曲線控制方案,只需要使用單片機發出命令告訴它要怎樣運動即可,簡化了電路和程序。
數字控制內核;微步;STM32;SPI接口
步進電機是將電脈沖信號變為電機角位移的或機電執行元件,步進驅動器接收到一個脈沖,電機旋轉一個固定的角度,非常適合單片機控制,因此可以用單片機控制脈沖的數量來控制電機的旋轉角度,控制脈沖的頻率來控制電機的旋轉速度,而改變電機電流的方向可以改變電機的旋轉方向。
ST公司的L6470省去了單片機的這些工作,單片機只要通過命令告訴L6470以什么樣的速度運行到什么位置停止,電機就會在L6470數字內核的控制下按指定方式運行,這些只要發送一個函數命令即可,剩下的就交給L6470去完成。
如圖1所示,整個系統由4部分組成,電源、單片機(MCU)、L6470、電機,其中電源的24V給L6470的功率驅動電路供電,24V經過DC-DC模塊轉換為3.3V分別給單片機和L6470的數字控制部分供電。單片機通過SPI接口控制L6470,而L6470把各種狀態位反饋回單片機。上位機可以通過串口命令控制電機。
L6470是ST公司生產的新一代兩相步進電機驅動芯片,可以在8~45V的寬電壓下工作,峰值電流7A(平均電流最大3A)。內部集成兩個低導通電阻的DMOS全橋電路和數字控制內核,可以高效地驅動步進電機,精確的片上電流檢測電路有完備的電流控制能力和過電流保護。獨特的控制系統可以把單步細分為最多128微步,使運動效果更平滑穩定。數字控制內核通過配置制定寄存器能夠按照用戶定義設置加速、減速、勻速和運動到目標位置等運動方案。具有完備的過熱、欠壓、過流、當機、反電動勢補償等保護方案。所有的命令和數據寄存器都由一個標準的SPI接口訪問和控制。
單片機通過SPI接口可以向L6470發送以下4種不同的運動控制命令。
恒速命令:讓電機以設定的加減速度旋轉到恒定的速度。
絕對位置命令:設定電機以指定路徑或最小路徑旋轉到指定位置,然后停止。
運動命令:讓電機按指定的方向運動指定步進數目
停止命令:使電機停轉。
以上4種命令配合加減速控制,可以實現復雜的運動控制方案,不再需要單片機來計算脈沖頻率、脈沖數目,脈沖時序等參數。
L6470內部一共有25個可用寄存器,每個寄存器對應某種控制功能或狀態位,單片機通過SPI接口訪問或改寫這些寄存器地址里面的內容。
有的是用于控制的,主要有:絕對位置、電氣位置、運行速度、最大/最小速度、加/減速度、步進單位、過電流門檻、保持/運行/加速/減速PWM功率周期、振蕩器頻率、PWM頻率。
有的是用于狀態檢測的,比如過流、過壓、欠壓、過熱、失步等警告。
這些參數的設置需要參考《L6470數據手冊》和所用步進電機的參數值,比如步進電機的轉速、扭矩、相位電阻、力矩-頻率特性曲線等。
通常情況下,步進電機驅動電路是電流式控制設計,電流控制器監測并控制繞組電流強度,因為電源電壓變化、停轉等會導致電流有很大變化,而且,隨著轉速提高或減小,電機的反電動勢(BEMF)的變化也會導致繞組電流的變化。L6470可以通過在電機繞組上施加電壓來控制相電流。雖然不能直接控制相電流的幅度,但是,相電流與相電壓的大小、負載、轉矩、電機電學特性和轉速密切相關。有效輸出電壓與電機電源電壓和補償系數Kval的積成正比。

圖1 系統原理框圖

圖2 補償因子計算

圖3 軟件流程
KVAL=((KVAL_X+BEMF_COMP)×VSCOMP×K_THERM)×microstep
其中KVAL_X是當前Kval值,BEMF_COMP是反電動勢補償因子,VSCOMP是輸入電壓,K_THERM是線圈電阻補償因子,microstep是當前設置的微步數。
當然可以利用ST公司提供的dSPIN evaluation tool可以方便地求出Kval值,只要你把電機的各個參數代入數據框,點擊一下evaluate按鍵就可以求出L6470的各個補償因子和對應寄存器值。
本設計所用的MCU為STM32F103C6T6,是ST公司最新的基于ARMv7內核的32位處理芯片,ARMv7內核有A,R,M這3個系列,R系列為軍工產品,M為中低端的民用消費產品,STM32F103C6T6屬于cortex-M3系列。
STM32F103C6T6性能:
這款STM32F103C6T6是TQFP-48封裝,具有32K FLASH ROM,10K SRAM,3個16位定時器,USART、I2C、I2S、SPI、USB、CAN等接口一應俱全,所有的IO口都可以作中斷使用,內核頻率高達72MHz,比同價格甚至更貴的51芯片1~2M的內核頻率高出幾十倍。
STM32采用KEIL MDK編程環境進行軟件設計,如果原先掌握了51芯片的編程,STM32很容易上手,而且ST公司為開發者提供了豐富的固件庫,所有的功能開發者不再需要接觸底層的寄存器,直接調用高級函數就可以了,節省了開發時間,保證了設計質量。
L6470通過SPI接口和STM32F103C6T6通訊,SPI是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鐘線SCK,一條數據輸入線MOSI,一條數據輸出線MISO,用于CPU與各種外圍器件進行全雙工、同步串行通訊。
STM32F103C6T6芯片擁有完備的SPI固件庫,使用固件庫要經過以下幾步設置:
● 使能SPI接口要用到的IO口控制時鐘和SPI模塊控制時鐘;
● 配置IO口輸入輸出工作方式,這里設置為復用推挽模式;
● 配置SPI工作模式;
● 使能SPI模塊。
經過配置以后就可以使用SPI庫函數控制L6470,下面是典型的L6470控制函數。
● void dSPIN_Peripherals_Init(void)
——初始化單片機和L6470連接的用于SPI通訊的4個GPIO端口的工作模式,初始化單片機內部SPI模塊的工作模式。
● void dSPIN_Regs_Struct_Reset(dSPIN_RegsStruct_TypeDef* dSPIN_RegsStruct)
——按照L6470寄存器表的默認值初始化L6470相應寄存器的參數值,這些參數值合并為一個寄存器結構體的數據類型,用指向結構體的指針訪問它們。
● void dSPIN_Struct_Value(void)
——按用戶定義設置寄存器的各個參數。
● void dSPIN_Set_Param(dSPIN_Registers_TypeDef param,uint32_t value)
——把參數寫入其對應寄存器地址,具體對應寄存器要寫什么參數值要結合《L6470數據手冊》和所用的步進電機的參數值。
● uint32_t dSPIN_Get_Param(dSPIN_Registers_TypeDef param)
——讀取對應寄存器地址內的參數。
● void dSPIN_Run(dSPIN_Direction_TypeDef direction,uint32_t speed)
——向L6470發送RUN指令,參數為方向和速度值
● void dSPIN_Move(dSPIN_Direction_TypeDef direction,uint32_t n_step)
——向L6470發送MOVE指令,參數為方向和步進數目
● void dSPIN_Go_To(uint32_t abs_pos)
——向L6470發送GO_TO指令,參數為運動到的絕對位置
● void dSPIN_Soft_Stop(void),void dSPIN_Hard_Stop(void),void dSPIN_Soft_HiZ(void),void dSPIN_Hard_HiZ(void)
——發送停止指令,有軟停止,即減速到0,硬停止,即緊急制動,軟高阻,即減速到0再關閉MOS橋,硬高阻,即緊急制動并關閉MOS橋。
● uint16_t dSPIN_Get_Status(void)
——讀取狀態寄存器狀態標志
單片機初始化完成后,開始對L6470進行電機初始工作參數設置,然后就可以發命令讓電機執行相應的動作,同時還可以隨時接收串口的命令改變電機狀態。
下面的程序是一個電機運行的例子:

本系統主要以高性能的STM32F103C6T6為控制芯片,L6470驅動芯片實現電機控制,降低了設計難度,節省了設計成本,減小了驅動器的體積,采用微步功能提高了步進電機的運行穩定性,具有控制簡單、操作靈活的特點,L6470自有的各種電機檢測和保護功能提高了控制系統和電機的安全性和壽命,可以廣泛用在打印機、傳真機、機器人等精密控制領域。
[1]劉軍.例說STM32[M].北京航空航天大學出版社,2011,4.
[2]SPI Block Guide[EB/OL].Motorola Ltd.[2003.5].http://www.motorola.com.
[3]Jose Yiu,宋巖(譯).Cortex-M3權威指南[M].北京航空航天大學出版社,2009,2.
[4]王永虹.STM32系列ARM Cortex-M3微控制器原理與實踐[M].北京航空航天大學出版社,2008,3.
[5]L6470 datasheet[EB/OL].ST Ltd.[2011.5].http://www.st.com/dspin.
[6]ST:STM32中文參考手冊.第10版.[EB/OL].STLtd.[2011.5].http://www.st.com.
王凱(1977—),男,四川成都人,學士,國營七八五廠第三研究所工程師。