国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

結合STM32和FPGA的步進電機運動控制系統(tǒng)設計

2020-02-28 04:05陳祖霖
關鍵詞:上位編碼器脈沖

陳祖霖, 沈 英, 吳 靖

(福州大學機械工程及自動化學院, 福建 福州 350108)

0 引言

步進電機是一種簡單、 穩(wěn)定性良好的機電元件, 可以將電脈沖信號轉換為角位移輸出, 電機位移輸出的大小與脈沖嚴格同步, 具有瞬間啟動, 精確定位操作等特點[1]. 步進電機轉動的位移由驅動脈沖的數(shù)量決定, 而轉動的速度快慢通過脈沖頻率的高低來表示, 因其只存在周期性的誤差, 沒有累積誤差而深受歡迎. 使用單片機、 DSP等處理器對步進電機實現(xiàn)自動化控制, 能夠更好地應用和服務于生活的各領域, 如數(shù)控系統(tǒng)、 醫(yī)療器械、 機械臂等, 但此類系統(tǒng)的資源消耗大且存在實時性差的問題. 現(xiàn)場可編程門陣列(field-programmable gate array, FPGA)是完全基于硬件的可編程, 相比于單片機FPGA具有多線程、 運行速度快等優(yōu)點, 使其在電機控制系統(tǒng)的應用越來越廣泛[2].

本研究主要以光學及精密機械檢測系統(tǒng)中的光學位移臺為例, 結合單片機與FPGA技術設計一種步進電機運動控制系統(tǒng), 光學位移臺主要用于光學元件的位移, 使得在光學測試系統(tǒng)中達到調光、 調焦的目的. 通過對上位機和運動程序的設計, 使得光學位移臺能夠實現(xiàn)速度、 位移的控制, 達到精準定位, 運行平穩(wěn)及低噪聲等控制要求. 采用FPGA可以同步或異步控制多個步進電機運動, 因此通過上位機界面可以控制多個光學位移臺的運行. 光學位移臺可以與其他種類的臺子組成多維電動調整臺. 步進電機控制系統(tǒng)借助增量式編碼器完成電機位置的反饋, 實現(xiàn)了閉環(huán)控制, 其中微處理器STM32作為控制系統(tǒng)數(shù)據收發(fā)的轉換模塊, FPGA作為步進電機運動控制的核心模塊. STM32和FPGA能各行其是, 完成系統(tǒng)對電機運動狀態(tài)的控制及反饋. 經過仿真和測試, 該控制系統(tǒng)的穩(wěn)定性良好, 達到所設定的要求. 本研究對系統(tǒng)的軟硬件分模塊進行說明, 實現(xiàn)對單路步進電機的控制, 為多路步進電機控制系統(tǒng)的開發(fā)提供了一定的參考.

1 控制系統(tǒng)的整體框架與介紹

圖1 控制系統(tǒng)結構框圖Fig.1 Control system block diagram

本系統(tǒng)使用的FPGA為Cyclone IV系列, 基于VS(visual studio)軟件設計了上位機人機交互界面; 利用串口通信, STM32F103把從上位機接收到的命令, 通過自帶的FSMC(flexible static memory controller)接口, 將命令轉化成FPGA能接收的方式. 控制系統(tǒng)結構框圖如圖1所示.

在人機交互界面進行步進電機運行參數(shù)的設置, 發(fā)送命令實現(xiàn)步進電機的啟停、 速度等級選擇、 加減速、 方向控制等狀態(tài)轉化. FPGA采用異步復位, 同步釋放方式, 通過上位機復位按鈕發(fā)送復位指令即可實現(xiàn)FPGA的系統(tǒng)復位, 增加了系統(tǒng)復位的可靠性. 應用Verilog編寫偶數(shù)分頻器, 實現(xiàn)脈沖的輸出; 采用編碼器完成電機的位置閉環(huán)控制, 在電機運行時, 可將電機運行的狀態(tài)數(shù)據反饋到上位機. 因此結合STM32和FPGA不需要復雜的硬件電路, 就可以實現(xiàn)合理的資源分配, 通過上位機達到實時控制步進電機運動狀態(tài)的目的, 提高整個系統(tǒng)數(shù)據傳遞與電機運行的穩(wěn)定性和準確性.

2 系統(tǒng)硬件設計

2.1 通信模塊

微處理器STM32與上位機用串口(usart)進行通信, STM32負責接收上位機發(fā)送的命令、 數(shù)據并進行轉換, 然后發(fā)送給FPGA, 從而實現(xiàn)對步進電機的控制[3]. 同時STM32通過FSMC總線接收來自FPGA關于電機運行的反饋數(shù)據, 并通過串口通信在上位機界面顯示出來. STM32與FPGA能實現(xiàn)多種方式的通信, 如USART、 SPI、 IIC等, 本研究使用高速數(shù)據采集及傳輸?shù)腇SMC總線進行并行通信[4].

圖2 FSMC總線通信圖Fig.2 FSMC bus communication diagram

FSMC是一種靈活的靜態(tài)存儲控制器, 單片機上有FSMC的接口, 通過數(shù)據線和地址線完成數(shù)據的發(fā)送和接收. 大規(guī)模FPGA設計基于SRAM結構, 對于外部SRAM的控制一般有: 地址線(A0~A18)、 數(shù)據線(D0~D15)、 寫信號(WR)、 讀信號(RD)、 片選信號(CS). 本研究使用3根地址線, 使用16根數(shù)據線一次傳輸2個字節(jié). STM32與FPGA采用FSMC總線通信如右圖2所示.

2.2 驅動模塊

驅動器用于將FPGA發(fā)送的電脈沖信號轉換為角位移. 當驅動器接收一個電脈沖信號時, 就會驅動步進電機轉動一個步距角. 二相混合式步進電機的步距角為1.8°, 大小與驅動器所設定的細分數(shù)有關, 本研究設定驅動器為32細分, 因此細分后的步距角為0.056 25°, 轉動一圈需要6 400個脈沖. 細分數(shù)的設定有利于減小電機的低頻振蕩和運行時的噪音. 步進電機的驅動器與FPGA采用的是共陰極接法, PUL+接脈沖信號、 DIR+接方向信號, 使信號能從ENA+接入, 將PUL-、 DIR-、 ENA-接公共地.

3 系統(tǒng)軟件設計

在步進電機控制系統(tǒng)中, 微處理器STM32應用Keil uvision5編程軟件和C語言進行程序的設計編寫; 步進電機運行程序是基于Quartus II軟件和Verilog語言設計編寫的; 人機交互界面是借助Visual Studio軟件以C#語言為基礎進行設計的.

3.1 分頻器的設計

分頻器利用一個高穩(wěn)定和高準確度的基準頻率產生一系列等間隔的離散頻率信號. 步進電機的持續(xù)運轉要通過一系列的脈沖來驅動, 通過對分頻器的設計可產生連續(xù)不斷的脈沖信號和獲得需要的脈沖頻率. 定義步進電機運行的脈沖頻率為f(Hz), 分頻系數(shù)為p(即p分頻), 兩者關系如下式所示:

(1)

圖3 分頻器設計流程圖Fig.3 Divider design flow chart

3.2 狀態(tài)機設計

步進電機在進行加減速時, 通過控制單位時間內輸出的脈沖數(shù)來改變其脈沖頻率[5]; 如在加速過程脈沖頻率會不斷增大, 對應的脈沖周期相應減小, 通過分頻技術可以得到想要的脈沖頻率.

圖4 Mealy狀態(tài)機模型Fig.4 Meary state machine model

脈沖頻率的變化通過有限狀態(tài)機(finite-state machine, FSM)完成程序設計; 本研究使用三段式Mealy(米勒)狀態(tài)機, 包括2個時序邏輯的always塊和一個組合邏輯的always塊, 通過設置現(xiàn)態(tài)(cstate)和次態(tài)(nstate)兩參數(shù)完成加減速過程狀態(tài)之間的轉移和脈沖輸出. 圖4為Mealy狀態(tài)機模型.

步進電機加減速包含加速、 勻速、 減速這三個階段; 當電機接收到加減速命令后, 以設定的起始脈沖頻率加速到最大速度點, 然后進行勻速運動, 達到減速點時減速至起始頻率后停止[6]. 定義在加減速過程中步進電機的位移即脈沖數(shù)為Pulse_num, 起始分頻系數(shù)aTmax=a, 最大轉速時分頻系數(shù)aTmin=b, 每頻率段的脈沖數(shù)(位移)為n, 設定每發(fā)出n個脈沖分頻系數(shù)減2, 程序上這樣設定aT=aT-2, bT=2×(aT-2)+1. 由于aT與bT在程序運行時是并行的, 因此aT的值為前一狀態(tài)保留的值. 加速階段的脈沖數(shù)Accel_num計算如下:

(2)

勻速階段的脈沖數(shù)為Uni_num計算如下:

Uni_num=Pulse_num-2×Accel_num

(3)

因此, 對于給定的脈沖總數(shù), 系統(tǒng)運行時都會按照程序中的設定, 對三個階段所需要的脈沖數(shù)進行分配. 步進電機轉向的控制, 主要由方向信號的高低電平來決定的; 所設計的控制系統(tǒng)默認電機為逆時針方向轉動即dir=0, 當方向信號變?yōu)楦唠娖郊磀ir=1時, 電機為順時針方向轉動.

3.3 例化模塊

模塊化設計是FPGA最基本的理念, 一個較為復雜的控制系統(tǒng)往往包含多個子模塊, 采用例化的方式可將各模塊的輸入和輸出進行連接. 因此在FPGA中實例化控制系統(tǒng)的各功能模塊, 有利于代碼的簡化和修改, 使系統(tǒng)在實時性和靈活性等方面有很大提高, 有利于實現(xiàn)步進電機運動狀態(tài)的控制[7]. 現(xiàn)對電機運行采用模塊的例化, 實現(xiàn)層次化設計. 將電機運行分成4個.v文件來實現(xiàn), 頂層文件drive_1.v, 負責例化模塊并連線; 速度選擇模塊sel_speed.v, 包含4個不同的速度等級; 加減速模塊T_speed.v, 通過有限狀態(tài)機實現(xiàn)加減速運動的控制; 閉環(huán)控制模塊closed_loop.v, 防止電機丟步. 系統(tǒng)經例化處理后, 綜合結果的頂層模塊圖見圖5 .

3.4 編碼器模塊設計

閉環(huán)步進電機的補償, 補償值為編碼器測得的實際步數(shù)與設定步數(shù)的差值; 在電機到達停止點時由驅動器完成補償脈沖. 增量式光電編碼器與電機相連, 當電機接收驅動脈沖轉動時, 便帶動了碼盤轉動, 從而產生了轉角信號[8]. 光電編碼器中A、 B是相位差為90°的脈沖波; Z信號用于調零, 編碼器每旋轉一圈時產生一個脈沖信號.

在一個編碼器周期內, A、 B信號共有4次的跳變沿, 因此為了提高編碼器的精度, 采用4倍頻技術. 電機正轉時, 每檢測到一次跳變沿, 設置可逆計數(shù)器counter加1; 電機反轉時, 每檢測到一次跳變沿, 則可逆計數(shù)器counter減1. 以步進電機正轉為例, A信號超前B信號90°, 相對的電平信號變化為10-11-01-00, 如圖6所示.

4 仿真和調試

4.1 FSMC通信仿真

FSMC通信使用讀寫模式A, 因此FPGA通過模式A的時序完成數(shù)據的寫入和讀取. 微處理器STM32的FSMC接口支持8/16/32位數(shù)據寬度, 進行數(shù)據傳輸?shù)膶嶒灒?在FPGA對應的地址上寫入16位數(shù)據寬度, 如表1所示.

表1 STM32向FPGA寫入數(shù)據表

在FPGA程序代碼里設置db為16位inout類型數(shù)據, 即從端口內部看, 可以對端口進行賦值即輸出數(shù)據, 也可以從此端口讀入數(shù)據即輸入. 設置assign db=rd?indata:16’hzzzz, rd(讀信號)為wire型變量, 當rd=1時, 可以進行數(shù)據的輸出, rd=16’hzzzz時, 表示高阻”Z”狀態(tài), 輸出受限制. 微處理器STM32向FPGA寫入數(shù)據時, 片選信號csn為低電平有效, 寫信號wrn為低電平有效; 當wrn顯示為低電平時, 在ab上的地址0~7 h分別寫入數(shù)據db為1 000~1 007 h, 實現(xiàn)了STM32對FPGA給定地址寫入給定數(shù)據.

應用嵌入式邏輯分析儀SignalTap實時顯示從微處理器發(fā)送來的數(shù)據, 如圖7所示. 在進行命令發(fā)送時, 當上位機發(fā)出命令后, 微處理器STM32通過串口實現(xiàn)數(shù)據的接收并進行轉換, 通過FSMC總線把轉換后的命令發(fā)送給FPGA, FPGA接收到發(fā)送來的命令后, 開始執(zhí)行相關的運行模塊, 控制步進電機的運行狀態(tài).

圖7 SignalTap數(shù)據傳輸實時仿真圖 Fig.7 SignalTap data transmission real-time simulation diagram

4.2 輸出脈沖仿真

實驗所用的FPGA為ALIENTEK新起點EP4CE10開發(fā)板, 系統(tǒng)時鐘為50 MHz, 即一個時鐘周期為20 ns,應用Modelsim對FPGA的輸出脈沖實現(xiàn)聯(lián)合仿真. 本研究設定4個速度等級, 本次以分頻系數(shù)為25 000的輸出脈沖為例進行仿真實驗, 為了節(jié)省仿真時間, 把分頻系數(shù)25 000縮小2 500倍即為10, 在程序中設置參數(shù)aT=8’d4、 bT=8’d9, 運行程序仿真結果如圖8所示. 在一個脈沖周期內, 高電平的時間為100 ns即5個時鐘周期, 低電平也為100 ns, 因此輸出的脈沖占空比為50%, 為偶分頻. 為了實現(xiàn)步進電機的不同速度等級, 可采用設置不同的分頻系數(shù)來獲得不同的脈沖頻率.

步進電機一個脈沖運行一步, 在電機加減速階段, 單位時間內的位移會發(fā)生變化. 因此在每個頻段都設置相同的位移, 即在加速時, 位移一定, 隨著速度的增大, 所用的時間減??; 在減速時, 隨著速度的減小, 所用的時間變長. 程序中設置位移為2個脈沖, 起始的分頻系數(shù)設為15, 脈沖數(shù)為30個, 用Modelsim進行加減速仿真, 結果如圖9所示.

從圖9可以得出, 在進行加減速時分為3個階段: 在加速階段, 脈沖頻率每隔2個脈沖增大一次, 即對應圖中左邊部分脈沖寬度減小, 脈沖數(shù)為6個; 勻速階段的脈沖頻率不變, 即對應圖中間部分脈沖寬度不變, 脈沖數(shù)為18個; 減速階段脈沖頻率為每2個脈沖減小一次, 即對應圖中右邊部分脈沖寬度增大, 脈沖數(shù)為6個; 當步進電機的脈沖頻率降到起始頻率即分頻系數(shù)為15時, 輸出脈沖數(shù)為零, 步進電機停止運行. 因此, 輸出脈沖的仿真結果表明, 在加減速運行時能夠準確的達到設定的脈沖數(shù).

4.3 系統(tǒng)的運行與調試

搭建電機運動控制系統(tǒng)所需要的實驗平臺, 進行實際的運行和調試, 如圖10所示. 在進行通信程序設計時, 應設置好步進電機運動過程所對應的狀態(tài)碼, 如表2所示. 在上位機設有數(shù)據的接收區(qū), 接收來自FPGA關于電機運行狀態(tài)的反饋數(shù)據, 接收模式設有兩種為十六進制hex和字符, 這里為方便顯示, 設為字符串接收模式. 打開上位機軟件進行操作, 配置串口號、 波特率和電機運行參數(shù), 設置完成后, 點擊運行, 步進電機就能按照設定的要求運轉. 步進電機接收到命令運行穩(wěn)定, 并通過FSMC總線成功向上位機發(fā)送運行狀態(tài)的反饋數(shù)據. 控制系統(tǒng)的上位機操作界面如圖11所示. 在數(shù)據接收區(qū)顯示, 地址1、 2、 3的數(shù)據為0, 表示系統(tǒng)復位完成, 將3個地址里的數(shù)據清零; 接收到的數(shù)據1: 3003 2:2000 3:4000, 查詢表2可知步進電機以速度等級4、 正向、 啟動; 系統(tǒng)復位后, 1:0 2:2003 3:0, 查詢表2可知步進電機進行加減速運動. 因此設計的上位機能夠準確地接收和發(fā)送命令, 控制步進電機運行.

表2 電機運行狀態(tài)編碼

圖12 電機位置閉環(huán)控制圖Fig.12 Motor position closed loop control diagram

步進電機在加減速運行時, 通過SignalTap實時測得的電機位置閉環(huán)控制圖如圖12所示, 圖中顯示編碼器計數(shù)cnt, 補償脈沖sup_pulse, 以及電機運行脈沖頻率freq. 在調試中設定目標脈沖數(shù)為set_p=256 160個; 從圖12中得到編碼器計數(shù)cnt=8 000, 因采用4倍頻, 計算出編碼器實際計數(shù)值為32 000, 實際測得的脈沖數(shù)actual_p=32 000×8即256 000個. 閉環(huán)控制采用步校驗, 在電機運行到達停止點之后補償160個脈沖, 實現(xiàn)電機位置的閉環(huán)控制. 因此經過調試, 控制系統(tǒng)達到光學位移臺的要求, 能實現(xiàn)速度和位移的精確控制, 通過上位機能準確地控制步進電機的運動狀態(tài), 進而控制光學位移臺平穩(wěn)的運行.

5 結語

本研究結合STM32和FPGA設計了一種步進電機控制系統(tǒng), 采用編碼器, 通過步校驗的方式實現(xiàn)電機位置的閉環(huán)控制. 此外, 借助Visual Studio進行UI設計, 提供了人機交互界面. 仿真和測試結果表明, 該控制系統(tǒng)穩(wěn)定性良好且控制精準, 步進電機運動的各項指標符合設定要求. 利用FPGA并行速度快的特點, 在本系統(tǒng)的基礎上可完成對多路步進電機控制系統(tǒng)的設計, 可移植性高, 因此具有廣泛的適應性和參考價值.

猜你喜歡
上位編碼器脈沖
基于非因果濾波和零點法的近斷層脈沖型地震動識別方法
WV3650M/WH3650M 絕對值旋轉編碼器
WDGP36J / WDGA36J編碼器Wachendorff自動化有限公司
他克莫司聯(lián)合超脈沖CO2點陣激光治療慢性濕疹的療效觀察
基于Beaglebone Black 的絕對式編碼器接口電路設計*
舞臺機械技術與設備系列談(二)
——編碼器
一場史無前例的樂隊真人秀
基礎油“上位”
基于脈沖反射法電纜故障定位脈沖源的設計
基于VC的PLC數(shù)據采集管理系統(tǒng)