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

?

面向步進(jìn)電機(jī)控制的RISC-V微控制器的設(shè)計與實現(xiàn)

2021-12-21 03:08:26釧,劉昱,曾
重慶大學(xué)學(xué)報 2021年11期
關(guān)鍵詞:指令集微控制器寄存器

唐 釧,劉 昱,曾 林

(1.天津大學(xué) 微電子學(xué)院,天津 300072;2.北京智芯微電子科技有限公司,北京 100089)

步進(jìn)電機(jī)是一種將輸入的電脈沖信號轉(zhuǎn)化為相應(yīng)角位移的機(jī)電元件,具有運動精確、易于控制、響應(yīng)迅速等特點,廣泛應(yīng)用于自動控制等領(lǐng)域[1]。步進(jìn)電機(jī)控制器一般以數(shù)字信號處理器(Digital Signal Processor, DSP)芯片和ARM架構(gòu)的微控制器(MCU)為核心[2-4],其優(yōu)點在于硬件結(jié)構(gòu)成熟,功能設(shè)計完備。但是,這種方案的基礎(chǔ)軟硬件平臺的版權(quán)大多屬于商業(yè)公司,有嚴(yán)格的使用限制或源碼不公開以及需要版稅等問題。在嵌入式軟核處理器中,具有代表性的有Intel公司的NIOSⅡ軟核和Xilinx公司的MicroBlaze軟核[5-6],在滿足性能的同時,也簡化了開發(fā)流程,但是都局限于自家廠商的開發(fā)套件,通用性不高,并且無法更改軟核內(nèi)部的結(jié)構(gòu),不利于深入研究和開發(fā)。

為了構(gòu)建步進(jìn)電機(jī)控制技術(shù)方案,設(shè)計了基于RISC-V指令集架構(gòu)的微控制器。一方面,RISC-V開源指令集具有免費開放、架構(gòu)精簡、模塊化、可擴(kuò)展等優(yōu)勢[7];另一方面,將處理器、存儲器、總線以及其他IP核集成到單一的FPGA芯片上,能夠減少系統(tǒng)的物理組件數(shù),方便不同應(yīng)用領(lǐng)域的差異化設(shè)計。目前,國內(nèi)外關(guān)于RISC-V處理器在電機(jī)控制器中的應(yīng)用相對較少[8-9],且大部分都集中在商用領(lǐng)域。

1 RISC-V微控制器設(shè)計

1.1 RISC-V指令集介紹

開源指令集,比如OpenRISC、OpenSPARC和MIPS R6等,由于指令集設(shè)計的不完備、碎片化以及運營模式等原因無法廣泛持續(xù)地生存下去。美國加州大學(xué)伯克利分校的研究人員,設(shè)計RISC-V開源指令集[10-11]。RISC-V指令集具有模塊化、架構(gòu)精簡、安全、無需向后兼容、可擴(kuò)展等特點。RISC-V官方詳細(xì)比較了指令集設(shè)計的衡量標(biāo)準(zhǔn),相比其他指令集架構(gòu),在成本、簡潔性、性能、架構(gòu)和具體實現(xiàn)的分離、提升空間、程序大小、易于編程/編譯/鏈接等方面,RISC-V均具有一定優(yōu)勢[12-13]。RISC-V指令集由基本的整數(shù)指令集“I”和可選的擴(kuò)展指令集組成。I指令集包括RV32I、RV32E、RV64I或RV128I,數(shù)字前綴表示以位為單位的地址空間。RV32E是RV32I面向嵌入式系統(tǒng)設(shè)計的簡化版本,其整數(shù)寄存器的數(shù)目從32個減少到16個。擴(kuò)展指令集包括整數(shù)與除法指令“M”、原子操作指令“A”、單精度(32比特)浮點指令“F”、雙精度(64比特)浮點指令“D”、壓縮指令“C”等[14-15]。RISC-V這種模塊化的設(shè)計使得在不同的場景中,可以選擇配置不同的指令集組合來滿足應(yīng)用需求,不管是小面積、低功耗的嵌入式場景,還是高性能計算領(lǐng)域,RISC-V均能有一席之地。

1.2 微控制器的整體結(jié)構(gòu)及流水線設(shè)計

設(shè)計的微控制器采用基于RISC-V指令集架構(gòu)的32位處理器內(nèi)核,存儲模塊包括指令存儲(Instruction RAM)、數(shù)據(jù)存儲(Data RAM)和用于存放內(nèi)核啟動代碼的Boot ROM,微控制器使用AXI作為系統(tǒng)高速總線,通過總線協(xié)議轉(zhuǎn)換橋可連接到APB子系統(tǒng)。AXI總線連接了SPI Slave以及JTAG調(diào)試接口,APB總線掛載了PLIC和CLINT中斷接口以及UART、PWM、GPIO、SPI等常見的外設(shè)模塊。微控制器的具體結(jié)構(gòu)如圖1所示。

圖1 微控制器結(jié)構(gòu)示意圖Fig. 1 Schematic diagram of microcontroller structure

為了使微控制器的各個模塊正常工作,在硬件設(shè)計中通過總線分發(fā)模塊設(shè)置各個模塊的地址區(qū)間,對不同模塊的地址進(jìn)行分配。通過在板級支持包BSP文件中定義與硬件模塊相同的地址,在軟件開發(fā)過程中,通過基地址加地址偏移量的方法配置底層寄存器,能夠有效地配置系統(tǒng)各個模塊的工作方式,設(shè)置和使用不同的外設(shè)功能。微控制器的地址映射如表1所示。指令存儲和數(shù)據(jù)存儲的大小可以設(shè)置,默認(rèn)為64 kB。在外設(shè)區(qū)域,每個普通的外設(shè)單元占4 kB的地址空間,并預(yù)留了足夠的空間方便擴(kuò)展其他需要的外設(shè)。

表1 微控制器的地址分配

設(shè)計的32位RSIC-V處理器具有四級流水線結(jié)構(gòu),單發(fā)射順序執(zhí)行,支持RV32IM整數(shù)和乘除法指令集的配置組合。處理器流水線結(jié)構(gòu)如圖2所示。

圖2 處理器流水線結(jié)構(gòu)圖Fig. 2 Processor pipeline diagram

該處理器的流水線結(jié)構(gòu)為“取指”、“譯碼”、“執(zhí)行”、和“訪存及寫回”4個階段。在取指階段,IFU取指單元通過生成的地址控制信號訪問指令存儲或者外部存儲,Lite BPU采用簡單的靜態(tài)分支預(yù)測對指令的跳轉(zhuǎn)地址進(jìn)行判斷,地址生成邏輯“PC_REG”產(chǎn)生待取指令的地址信號送入譯碼模塊。譯碼模塊主要是由組合邏輯電路組成,將取指階段發(fā)送過來的指令按照RISC-V指令編碼規(guī)則分解出各個指令字段,得到指令類型、操作數(shù)寄存器等信息,在寄存器文件模塊中實現(xiàn)了32個32位的整數(shù)通用寄存器,其中X0被預(yù)留為常數(shù)0,處理器可以同時對2個寄存器進(jìn)行讀操作和1個寄存器進(jìn)行寫操作。在執(zhí)行模塊中,通過對具體指令和操作數(shù)的解析后派遣給不同的運算單元模塊去執(zhí)行。主要有以下幾種:算術(shù)邏輯運算單元ALU模塊,整數(shù)乘除法單元MULDIV模塊,處理異常狀態(tài)寄存器的CSR模塊以及自定義指令運算單元CUSTOM模塊。通過運算單元復(fù)用一條數(shù)據(jù)通路的設(shè)計,減小了這部分的面積開銷。訪存及寫回模塊主要用于Load和Store指令的地址生成,對指定地址的內(nèi)存進(jìn)行讀或?qū)?,與數(shù)據(jù)存儲進(jìn)行數(shù)據(jù)交互,并將不同運算單元執(zhí)行的結(jié)果寫回到寄存器文件中??刂颇K不屬于流水線階段,主要控制整個流水線的暫?;蚯宄僮?。

2 步進(jìn)電機(jī)控制系統(tǒng)設(shè)計

2.1 系統(tǒng)硬件結(jié)構(gòu)設(shè)計

文中步進(jìn)電機(jī)控制系統(tǒng)主要由上位機(jī)和下位機(jī)兩部分構(gòu)成,如圖3所示,上位機(jī)系統(tǒng)由PC機(jī)組成,可以通過USB轉(zhuǎn)UART與微控制器通信,通過USB轉(zhuǎn)JTAG向微控制器下載程序或者代碼調(diào)試等,下位機(jī)系統(tǒng)以Artix-7 FPGA實現(xiàn)的RISC-V微控制器作為主要控制模塊,分別連接電機(jī)驅(qū)動器、步進(jìn)電機(jī)、編碼器以及正交編碼脈沖(QEP,Quadrature Encoder Pulse)檢測電路等模塊。這種模塊化的系統(tǒng)結(jié)構(gòu)可以降低整體的耦合度,提高系統(tǒng)的可移植性以及錯誤排查效率。

圖3 系統(tǒng)結(jié)構(gòu)設(shè)計圖Fig. 3 System structure

在系統(tǒng)硬件結(jié)構(gòu)中,通過微控制器的PWM外設(shè)來生成相應(yīng)數(shù)目和頻率的脈沖,控制電機(jī)的運行速度和轉(zhuǎn)動方向。驅(qū)動器主要由控制級驅(qū)動電路和功率驅(qū)動電路兩部分構(gòu)成,其中,控制級驅(qū)動電路主要用于分配脈沖信號給步進(jìn)電機(jī)的各相繞組,功率級驅(qū)動電路用于提供高電壓、大電流給步進(jìn)電機(jī)。為了驗證步進(jìn)電機(jī)系統(tǒng)工作的準(zhǔn)確性,采用了增量式光電編碼器來檢測步進(jìn)電機(jī)轉(zhuǎn)子位置。

2.2 PWM模塊設(shè)計

為了準(zhǔn)確控制步進(jìn)電機(jī)的運動,利用PWM脈寬調(diào)制技術(shù)生成相應(yīng)數(shù)目和頻率的脈沖。設(shè)計中的PWM模塊支持3個子模塊,分別為PWM0、PWM1、PWM2。其中,PWM0是寬度8 bit的比較器,而PWM1和PWM2寬度為16 bit,工作原理和特性完全相同。每個PWM支持4個可編程的比較器(PWMCMP0-PWMCMP3),每個比較器可以產(chǎn)生對應(yīng)的1路PWM輸出和中斷,文中的微控制器最多可以支持12路PWM輸出通道。PWM的可配置寄存器如表2所示。

表2 PWM寄存器和功能

PWM模塊掛載在APB總線上,以32位對齊的訪問方式讀寫內(nèi)部寄存器,通過對PWMCFG寄存器各比特域的賦值來開啟或關(guān)閉特定功能,可以選擇不同的PWM脈沖以及生成方式。PWMCOUNT寄存器反映的是PWM計數(shù)器的值,使用后會在每個時鐘周期加1,達(dá)到預(yù)先設(shè)定的值后,計數(shù)器歸0;假如沒有預(yù)設(shè)值,計數(shù)到最大值即全1后溢出歸0。當(dāng)PWM計數(shù)器歸0后,可以設(shè)置寄存器使其重新開始計數(shù)或者停止。當(dāng)PWMCOUNT的值大于PWMS的值時,PWM輸出信號為高電平;反之,信號為低電平。如圖4所示,假設(shè)采用2 bit寬的PWMS,當(dāng)PWMS計數(shù)器計數(shù)至最大值3時,溢出歸0并重新開始計數(shù)。此時,PWM計數(shù)周期為4。當(dāng)PWMCMP0分別配置為0、1、2、3時,PWM輸出的脈沖信號波形。

圖4 PWM脈沖信號輸出波形Fig. 4 Output waveform of PWM pulse signal

通過設(shè)置PWMCFG寄存器,配置PWM0和PWM1的2個通道各產(chǎn)生不同頻率和占空比的脈沖,在PWM的輸出引腳端同時對4個通道用邏輯分析儀進(jìn)行測量,如圖5所示,PWM輸出端均得到了準(zhǔn)確的頻率和占空比的脈沖,PWM功能驗證正確。

圖5 PWM輸出脈沖信號測試Fig. 5 Test diagram of PWM output pulse signals

2.3 正交編碼脈沖(QEP)檢測模塊設(shè)計

為了驗證步進(jìn)電機(jī)系統(tǒng)工作的準(zhǔn)確性,通過增量式光電編碼器來檢測步進(jìn)電機(jī)的轉(zhuǎn)子位置。編碼器固定在步進(jìn)電機(jī)轉(zhuǎn)軸上,當(dāng)電機(jī)旋轉(zhuǎn)時,編碼器輸出2路正交的A、B方波脈沖以及用于基準(zhǔn)點定位的脈沖信號Z。QEP檢測模塊主要由載有上拉電阻及濾波電容的功能板、光耦隔離模塊以及GPIO端口連線組成。由于該編碼器是開漏輸出的,需要接上拉電阻才能連接到GPIO端口。濾波電容用來濾除編碼器輸出端產(chǎn)生的部分雜波。光耦隔離模塊用來實現(xiàn)模擬信號和數(shù)字信號的隔離,避免編碼器的輸出信號與控制模塊的引腳連線產(chǎn)生干擾信號。QEP模塊的主要工作原理是:利用GPIO端口檢測A或B相脈沖的上升沿,通過脈沖相位來判斷電機(jī)轉(zhuǎn)動方向,在上升沿進(jìn)行觸發(fā)并根據(jù)方向信號判定增或減計數(shù)。

3 系統(tǒng)仿真與測試

3.1 微控制器的FPGA實現(xiàn)和軟件測試

對于設(shè)計的微控制器平臺能夠通過編寫C代碼方便地實現(xiàn)外圍設(shè)備的控制功能,并且在FPGA中能夠?qū)Ω鱾€組成模塊進(jìn)行修改和優(yōu)化。利用Vivado軟件完成對微控制器在FPGA上的實現(xiàn),整個微控制器系統(tǒng)的資源占用情況如表3所示。其中,PWM模塊所占用的LUT數(shù)目為356,消耗資源數(shù)較少,滿足步進(jìn)電機(jī)控制器的應(yīng)用需求。

表3 FPGA資源占用表

通過選取不同的嵌入式軟核,將蜂鳥E203、RI5CY和Cortex-M3內(nèi)核在FPGA(-1等級)中的資源消耗、最高頻率以及Coremark跑分結(jié)果與文中處理器內(nèi)核進(jìn)行對比,內(nèi)核消耗資源和性能對比如表4所示。

表4 不同軟核處理器的比較

相比RISC-V架構(gòu)的內(nèi)核即蜂鳥E203和RI5CY,CoreMark執(zhí)行結(jié)果表明,文中處理器內(nèi)核在單位頻率的計算能力上有一定提升。相比ARM架構(gòu)的Cortex-M3內(nèi)核,在FPGA實現(xiàn)的最高運行頻率提高了14.3%,電路資源消耗減小了58.7%,在使用FPGA資源不多的情況下,實現(xiàn)了較高的運行頻率和單位頻率計算能力。

系統(tǒng)的軟件開發(fā)在Ubuntu環(huán)境下進(jìn)行,開發(fā)步驟如下:首先,使用命令行運行腳本文件,通過RISC-V GNU工具鏈對C語言程序進(jìn)行編譯;然后,編寫OpenOCD的底層驅(qū)動文件,使得GDB調(diào)試工具通過JTAG接口連接到RISC-V微控制器;最后,將程序下載到硬件平臺中,對其實際運行情況進(jìn)行測試。在UART通信、LED點燈以及中斷控制等一系列功能測試后,均觀察到正確的實驗結(jié)果,說明微控制器的軟硬件功能設(shè)計正確。板級驗證成功后,生成內(nèi)存配置文件(MCS)寫入FLASH中,由于FLASH掉電不丟失的特性,上電即可運行MCU系統(tǒng),使用時無需反復(fù)寫FPGA,使得軟件編程更方便。

3.2 步進(jìn)電機(jī)控制系統(tǒng)測試與分析

在步進(jìn)電機(jī)控制系統(tǒng)的性能測試實驗中,驅(qū)動對象是1臺步距角為1.8°、扭矩為1.2 N·m、額定電流為2.5 A、轉(zhuǎn)動慣量為300 g·cm2的兩相四線混合式步進(jìn)電機(jī),型號57BYG250B。該步進(jìn)電機(jī)主要應(yīng)用于低速工業(yè)控制領(lǐng)域,轉(zhuǎn)速不超過1 200 r/min。驅(qū)動器使用的是東芝公司TB67S109A芯片,是一種配備PWM斬波器的兩相步進(jìn)電機(jī)驅(qū)動器,外圍元件較少,提供高達(dá)4 A的峰值電流和DC40V的最大工作電壓。編碼器選用的是HN38-06-N型號的增量型旋轉(zhuǎn)編碼器,線數(shù)為600,即每轉(zhuǎn)一次產(chǎn)生600個脈沖,DC7-30V電壓供電。實驗原理如圖6所示,在實驗中驅(qū)動器的供電電壓為24 V,編碼器供電電壓為12 V。驅(qū)動器采用的是共陽極接法,將PUL+、DIR+、EN+與FPGA開發(fā)板的3.3 V相連,EN-、DIR-與GPIO相連,通過控制GPIO電平使能電機(jī)或者控制其正反轉(zhuǎn),PUL-與PWM脈沖輸出端相連,將輸出脈沖傳遞給驅(qū)動器。

圖6 實驗原理圖Fig. 6 Experimental schematic diagram

在系統(tǒng)測試中,先對每個組件進(jìn)行單獨測試,檢查無誤后,用杜邦線連接系統(tǒng)的各個模塊,連線完畢后如圖7所示。系統(tǒng)測試的程序流程為:硬件初始化后,配置外部中斷和計時器中斷,從串口終端發(fā)送控制命令,通過是否使能、正反轉(zhuǎn)、產(chǎn)生脈沖頻率以及運行時間的配置,設(shè)置PWM相關(guān)的寄存器,PWM產(chǎn)生相應(yīng)的輸出脈沖到步進(jìn)電機(jī)驅(qū)動器。然后開啟計時器,GPIO端口檢測編碼器輸出的A或B相脈沖上升沿信號,根據(jù)方向判斷邏輯得到電機(jī)轉(zhuǎn)動方向,并根據(jù)上升沿信號進(jìn)行計數(shù)。當(dāng)計時到設(shè)定值時,串口發(fā)送編碼器A或B相的累計脈沖總數(shù),程序結(jié)束。系統(tǒng)測試程序的主要流程如圖8所示。其中,定時部分是通過CLINT實現(xiàn)的,在計時器中斷開啟后,根據(jù)定時時間來設(shè)置mtimecmp比較寄存器,mtime計時器一直默認(rèn)計數(shù),當(dāng)其值大于或等于mtimecmp的值后,步進(jìn)電機(jī)停止運動,程序結(jié)束。

圖7 系統(tǒng)結(jié)構(gòu)組成圖Fig. 7 System connection diagram

圖8 系統(tǒng)測試程序流程圖Fig. 8 Flow chart of system test program

在實驗中,檢查系統(tǒng)的各個模塊并且連線無誤后通電,打開串口終端并設(shè)置波特率,將編譯后的主程序下載到微控制器中進(jìn)行測試。PWM模塊所在時鐘域的頻率為32 MHz,選擇PWM0的通道0作為脈沖產(chǎn)生通道,設(shè)置時鐘分頻系數(shù)為2使其產(chǎn)生31.25 kHz頻率的輸出脈沖。在1/32細(xì)分的測試實驗中,對編碼器輸出的A、B兩相脈沖用示波器多次測量得到,兩相脈沖輸出頻率范圍在2.89~2.95 kHz之間,編碼器頻率的理論值應(yīng)為2.93 kHz。該誤差是信號經(jīng)過各級設(shè)備時的傳輸誤差以及編碼器存在的固有誤差,在允許范圍以內(nèi)。

在1/32細(xì)分模式下,分別設(shè)置運行時間為1 s、10 s、1 min,對應(yīng)的理論脈沖數(shù)為2 929、29 296、175 781,3組實驗實際對應(yīng)的脈沖計數(shù)結(jié)果如圖9所示。實際結(jié)果和理論結(jié)果進(jìn)行誤差計算,如表5所示,實驗的相對誤差控制在千分之一量級以下。更改細(xì)分模式為1/16,此時驅(qū)動器輸出的頻率較大,步進(jìn)電機(jī)產(chǎn)生嘯叫聲且無法工作,所以更改PWM分頻系數(shù)為3,即PWM輸出頻率為15.625 kHz,在不同運行時間的實驗測試中,實驗誤差和1/32細(xì)分實驗近似相同。

圖9 編碼器脈沖計數(shù)示意圖Fig. 9 Schematic diagram of encoder pulse count

表5 實驗數(shù)據(jù)表

對于步進(jìn)電機(jī)運行時間長的失步情況,可采取步校驗設(shè)計,將圖8中的“停止運動”替換為“編碼器脈沖計數(shù)小于理論值,則補(bǔ)償相差的輸入脈沖數(shù)”,比如,在運行時間為1 min的實驗中,對其補(bǔ)償98個脈沖,即可實現(xiàn)位移的精確控制。經(jīng)過測試,該控制系統(tǒng)能夠準(zhǔn)確地控制步進(jìn)電機(jī)的運行步數(shù),滿足步進(jìn)電機(jī)低速控制場景的性能要求。

4 結(jié) 論

1)針對步進(jìn)電機(jī)控制系統(tǒng)的應(yīng)用要求,采用開源的RISC-V指令集設(shè)計32位的四級流水線處理器核,通過AXI和APB片上總線實現(xiàn)對外部設(shè)備的控制。

2)在單片F(xiàn)PGA中實現(xiàn)了RISC-V軟核處理器、總線、存儲器、外設(shè)和調(diào)試接口等模塊組成的微控制器,通過板級測試驗證了微控制器設(shè)計的正確性。與其他嵌入式軟核相比,文中設(shè)計的內(nèi)核在使用FPGA資源不多的情況下,實現(xiàn)了較高的運行頻率和單位頻率計算能力。

3)設(shè)計了PWM和QEP等模塊,結(jié)合FPGA核心板、驅(qū)動器、PC機(jī)等搭建了步進(jìn)電機(jī)控制系統(tǒng)。通過軟硬件仿真和實驗測試表明,系統(tǒng)的相對誤差控制在千分之一量級,通過步校驗設(shè)計控制效果更加精確。

猜你喜歡
指令集微控制器寄存器
3DNow指令集被Linux淘汰
電腦報(2021年49期)2021-01-06 18:36:55
Lite寄存器模型的設(shè)計與實現(xiàn)
物聯(lián)網(wǎng)技術(shù)在微控制器實驗教學(xué)中的應(yīng)用
電子制作(2017年14期)2017-12-18 07:07:58
分簇結(jié)構(gòu)向量寄存器分配策略研究*
實時微測量系統(tǒng)指令集及解析算法
什么是AMD64
Atmel針對新一代物聯(lián)網(wǎng)應(yīng)用發(fā)布全新32位微控制器
最新STM32設(shè)計工具增加對混合信號微控制器的支持
基于覆蓋率驅(qū)動的高性能DSP指令集驗證方法
意法半導(dǎo)體(ST)推出世界首款基于ARM Cortex-M7的STM32 F7系列微控制器
图木舒克市| 淮阳县| 麻江县| 南陵县| 靖安县| 酉阳| 社会| 贵州省| 庆云县| 宣城市| 璧山县| 灵宝市| 彝良县| 旌德县| 广德县| 正镶白旗| 余干县| 灵宝市| 曲松县| 仙桃市| 全州县| 沅江市| 凤山县| 广东省| 乌拉特后旗| 临洮县| 垫江县| 鄂托克旗| 平塘县| 杭锦旗| 凤台县| 贵州省| 高碑店市| 丹寨县| 赤峰市| 芦山县| 务川| 彝良县| 临颍县| 方城县| 安庆市|