國營七八五廠第三研究所 王 凱 韓力立
采用STM32控制L6470步進電機驅(qū)動器
國營七八五廠第三研究所 王 凱 韓力立
常用的步進電機控制器,根據(jù)不同的運動方式需要由單片機發(fā)出不同頻率的和數(shù)目的脈沖信號到專用控制芯片,而ST公司的數(shù)字控制電機驅(qū)動芯片L6470內(nèi)部數(shù)字控制系統(tǒng)可實現(xiàn)完備的運動曲線控制方案,只需要使用單片機發(fā)出命令告訴它要怎樣運動即可,簡化了電路和程序。
數(shù)字控制內(nèi)核;微步;STM32;SPI接口
步進電機是將電脈沖信號變?yōu)殡姍C角位移的或機電執(zhí)行元件,步進驅(qū)動器接收到一個脈沖,電機旋轉(zhuǎn)一個固定的角度,非常適合單片機控制,因此可以用單片機控制脈沖的數(shù)量來控制電機的旋轉(zhuǎn)角度,控制脈沖的頻率來控制電機的旋轉(zhuǎn)速度,而改變電機電流的方向可以改變電機的旋轉(zhuǎn)方向。
ST公司的L6470省去了單片機的這些工作,單片機只要通過命令告訴L6470以什么樣的速度運行到什么位置停止,電機就會在L6470數(shù)字內(nèi)核的控制下按指定方式運行,這些只要發(fā)送一個函數(shù)命令即可,剩下的就交給L6470去完成。
如圖1所示,整個系統(tǒng)由4部分組成,電源、單片機(MCU)、L6470、電機,其中電源的24V給L6470的功率驅(qū)動電路供電,24V經(jīng)過DC-DC模塊轉(zhuǎn)換為3.3V分別給單片機和L6470的數(shù)字控制部分供電。單片機通過SPI接口控制L6470,而L6470把各種狀態(tài)位反饋回單片機。上位機可以通過串口命令控制電機。
L6470是ST公司生產(chǎn)的新一代兩相步進電機驅(qū)動芯片,可以在8~45V的寬電壓下工作,峰值電流7A(平均電流最大3A)。內(nèi)部集成兩個低導(dǎo)通電阻的DMOS全橋電路和數(shù)字控制內(nèi)核,可以高效地驅(qū)動步進電機,精確的片上電流檢測電路有完備的電流控制能力和過電流保護。獨特的控制系統(tǒng)可以把單步細分為最多128微步,使運動效果更平滑穩(wěn)定。數(shù)字控制內(nèi)核通過配置制定寄存器能夠按照用戶定義設(shè)置加速、減速、勻速和運動到目標(biāo)位置等運動方案。具有完備的過熱、欠壓、過流、當(dāng)機、反電動勢補償?shù)缺Wo方案。所有的命令和數(shù)據(jù)寄存器都由一個標(biāo)準(zhǔn)的SPI接口訪問和控制。
單片機通過SPI接口可以向L6470發(fā)送以下4種不同的運動控制命令。
恒速命令:讓電機以設(shè)定的加減速度旋轉(zhuǎn)到恒定的速度。
絕對位置命令:設(shè)定電機以指定路徑或最小路徑旋轉(zhuǎn)到指定位置,然后停止。
運動命令:讓電機按指定的方向運動指定步進數(shù)目
停止命令:使電機停轉(zhuǎn)。
以上4種命令配合加減速控制,可以實現(xiàn)復(fù)雜的運動控制方案,不再需要單片機來計算脈沖頻率、脈沖數(shù)目,脈沖時序等參數(shù)。
L6470內(nèi)部一共有25個可用寄存器,每個寄存器對應(yīng)某種控制功能或狀態(tài)位,單片機通過SPI接口訪問或改寫這些寄存器地址里面的內(nèi)容。
有的是用于控制的,主要有:絕對位置、電氣位置、運行速度、最大/最小速度、加/減速度、步進單位、過電流門檻、保持/運行/加速/減速PWM功率周期、振蕩器頻率、PWM頻率。
有的是用于狀態(tài)檢測的,比如過流、過壓、欠壓、過熱、失步等警告。
這些參數(shù)的設(shè)置需要參考《L6470數(shù)據(jù)手冊》和所用步進電機的參數(shù)值,比如步進電機的轉(zhuǎn)速、扭矩、相位電阻、力矩-頻率特性曲線等。
通常情況下,步進電機驅(qū)動電路是電流式控制設(shè)計,電流控制器監(jiān)測并控制繞組電流強度,因為電源電壓變化、停轉(zhuǎn)等會導(dǎo)致電流有很大變化,而且,隨著轉(zhuǎn)速提高或減小,電機的反電動勢(BEMF)的變化也會導(dǎo)致繞組電流的變化。L6470可以通過在電機繞組上施加電壓來控制相電流。雖然不能直接控制相電流的幅度,但是,相電流與相電壓的大小、負載、轉(zhuǎn)矩、電機電學(xué)特性和轉(zhuǎn)速密切相關(guān)。有效輸出電壓與電機電源電壓和補償系數(shù)Kval的積成正比。
圖1 系統(tǒng)原理框圖
圖2 補償因子計算
圖3 軟件流程
KVAL=((KVAL_X+BEMF_COMP)×VSCOMP×K_THERM)×microstep
其中KVAL_X是當(dāng)前Kval值,BEMF_COMP是反電動勢補償因子,VSCOMP是輸入電壓,K_THERM是線圈電阻補償因子,microstep是當(dāng)前設(shè)置的微步數(shù)。
當(dāng)然可以利用ST公司提供的dSPIN evaluation tool可以方便地求出Kval值,只要你把電機的各個參數(shù)代入數(shù)據(jù)框,點擊一下evaluate按鍵就可以求出L6470的各個補償因子和對應(yīng)寄存器值。
本設(shè)計所用的MCU為STM32F103C6T6,是ST公司最新的基于ARMv7內(nèi)核的32位處理芯片,ARMv7內(nèi)核有A,R,M這3個系列,R系列為軍工產(chǎn)品,M為中低端的民用消費產(chǎn)品,STM32F103C6T6屬于cortex-M3系列。
STM32F103C6T6性能:
這款STM32F103C6T6是TQFP-48封裝,具有32K FLASH ROM,10K SRAM,3個16位定時器,USART、I2C、I2S、SPI、USB、CAN等接口一應(yīng)俱全,所有的IO口都可以作中斷使用,內(nèi)核頻率高達72MHz,比同價格甚至更貴的51芯片1~2M的內(nèi)核頻率高出幾十倍。
STM32采用KEIL MDK編程環(huán)境進行軟件設(shè)計,如果原先掌握了51芯片的編程,STM32很容易上手,而且ST公司為開發(fā)者提供了豐富的固件庫,所有的功能開發(fā)者不再需要接觸底層的寄存器,直接調(diào)用高級函數(shù)就可以了,節(jié)省了開發(fā)時間,保證了設(shè)計質(zhì)量。
L6470通過SPI接口和STM32F103C6T6通訊,SPI是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鐘線SCK,一條數(shù)據(jù)輸入線MOSI,一條數(shù)據(jù)輸出線MISO,用于CPU與各種外圍器件進行全雙工、同步串行通訊。
STM32F103C6T6芯片擁有完備的SPI固件庫,使用固件庫要經(jīng)過以下幾步設(shè)置:
● 使能SPI接口要用到的IO口控制時鐘和SPI模塊控制時鐘;
● 配置IO口輸入輸出工作方式,這里設(shè)置為復(fù)用推挽模式;
● 配置SPI工作模式;
● 使能SPI模塊。
經(jīng)過配置以后就可以使用SPI庫函數(shù)控制L6470,下面是典型的L6470控制函數(shù)。
● void dSPIN_Peripherals_Init(void)
——初始化單片機和L6470連接的用于SPI通訊的4個GPIO端口的工作模式,初始化單片機內(nèi)部SPI模塊的工作模式。
● void dSPIN_Regs_Struct_Reset(dSPIN_RegsStruct_TypeDef* dSPIN_RegsStruct)
——按照L6470寄存器表的默認值初始化L6470相應(yīng)寄存器的參數(shù)值,這些參數(shù)值合并為一個寄存器結(jié)構(gòu)體的數(shù)據(jù)類型,用指向結(jié)構(gòu)體的指針訪問它們。
● void dSPIN_Struct_Value(void)
——按用戶定義設(shè)置寄存器的各個參數(shù)。
● void dSPIN_Set_Param(dSPIN_Registers_TypeDef param,uint32_t value)
——把參數(shù)寫入其對應(yīng)寄存器地址,具體對應(yīng)寄存器要寫什么參數(shù)值要結(jié)合《L6470數(shù)據(jù)手冊》和所用的步進電機的參數(shù)值。
● uint32_t dSPIN_Get_Param(dSPIN_Registers_TypeDef param)
——讀取對應(yīng)寄存器地址內(nèi)的參數(shù)。
● void dSPIN_Run(dSPIN_Direction_TypeDef direction,uint32_t speed)
——向L6470發(fā)送RUN指令,參數(shù)為方向和速度值
● void dSPIN_Move(dSPIN_Direction_TypeDef direction,uint32_t n_step)
——向L6470發(fā)送MOVE指令,參數(shù)為方向和步進數(shù)目
● void dSPIN_Go_To(uint32_t abs_pos)
——向L6470發(fā)送GO_TO指令,參數(shù)為運動到的絕對位置
● void dSPIN_Soft_Stop(void),void dSPIN_Hard_Stop(void),void dSPIN_Soft_HiZ(void),void dSPIN_Hard_HiZ(void)
——發(fā)送停止指令,有軟停止,即減速到0,硬停止,即緊急制動,軟高阻,即減速到0再關(guān)閉MOS橋,硬高阻,即緊急制動并關(guān)閉MOS橋。
● uint16_t dSPIN_Get_Status(void)
——讀取狀態(tài)寄存器狀態(tài)標(biāo)志
單片機初始化完成后,開始對L6470進行電機初始工作參數(shù)設(shè)置,然后就可以發(fā)命令讓電機執(zhí)行相應(yīng)的動作,同時還可以隨時接收串口的命令改變電機狀態(tài)。
下面的程序是一個電機運行的例子:
本系統(tǒng)主要以高性能的STM32F103C6T6為控制芯片,L6470驅(qū)動芯片實現(xiàn)電機控制,降低了設(shè)計難度,節(jié)省了設(shè)計成本,減小了驅(qū)動器的體積,采用微步功能提高了步進電機的運行穩(wěn)定性,具有控制簡單、操作靈活的特點,L6470自有的各種電機檢測和保護功能提高了控制系統(tǒng)和電機的安全性和壽命,可以廣泛用在打印機、傳真機、機器人等精密控制領(lǐng)域。
[1]劉軍.例說STM32[M].北京航空航天大學(xué)出版社,2011,4.
[2]SPI Block Guide[EB/OL].Motorola Ltd.[2003.5].http://www.motorola.com.
[3]Jose Yiu,宋巖(譯).Cortex-M3權(quán)威指南[M].北京航空航天大學(xué)出版社,2009,2.
[4]王永虹.STM32系列ARM Cortex-M3微控制器原理與實踐[M].北京航空航天大學(xué)出版社,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—),男,四川成都人,學(xué)士,國營七八五廠第三研究所工程師。