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