智能平衡移動機器人(MATLABSimulink版·微課視頻版)課件 5.4-5.10 ePWM-總結_第1頁
智能平衡移動機器人(MATLABSimulink版·微課視頻版)課件 5.4-5.10 ePWM-總結_第2頁
智能平衡移動機器人(MATLABSimulink版·微課視頻版)課件 5.4-5.10 ePWM-總結_第3頁
智能平衡移動機器人(MATLABSimulink版·微課視頻版)課件 5.4-5.10 ePWM-總結_第4頁
智能平衡移動機器人(MATLABSimulink版·微課視頻版)課件 5.4-5.10 ePWM-總結_第5頁
已閱讀5頁,還剩63頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

合肥工業大學基于模型設計的智能平衡移動機器人第五章

基礎實驗5.4ePWM5.5eCAP5.6SCI5.7SPI5.8IdleTask模塊5.9WatchDog模塊介紹5.10總結目錄5.4ePWM脈沖寬度調制(PWM)是一種對模擬信號電平進行數字編碼的方法,廣泛應用在從測量、通信到功率控制與變換的許多領域中。PWM的控制方法:采樣控制理論中有一個重要結論:沖量相等而形狀不同的窄脈沖加在具有慣性的環節上時,其效果基本相同,如下圖所示。PWM控制技術對半導體開關器件的導通和關斷進行控制,使輸出端得到一系列幅值相等而寬度不相等的脈沖,用這些脈沖來代替正弦波或其他所需要的波形。按一定的規則對各脈沖的寬度進行調制,既可改變逆變電路輸出電壓的大小,也可改變輸出頻率。5.4ePWM

TMS320F28069有19路脈寬調制輸出引腳(這些引腳需要軟件進行配置,類似于前面的普通GPIO的配置),這19路脈寬調制輸出引腳包括16路增強型PWM(ePWM)和3路普通PWM(ECap模塊復用),16路增強型PWM中又有8路可以配置為高分辨率的PWM(HRPWM)。8組PWM模塊,每一組又有2路PWM,分別是PWMA和PWMB。

一個ePWM模塊包括:Time-base(TB)module(時基模塊),Counter-compare(CC)module(計數器比較模塊),Action-qualifier(AQ)module(比較方式預設模塊),Dead-band(DB)module(死區模塊),PWM-chopper(PC)module(斬波模塊),Event-trigger(ET)module(事件觸發模塊),Trip-zone(TZ)module(行程區模塊)等七個模塊。

本次應用案例利用的是EPWM1模塊,以下通過三個例子來對PWM的功能進行說明。方法一

ePWM模塊輸入時鐘,直接由系統時鐘而來,使用的時候可以根據用戶需要進行分頻。在ePWM的設置界面,在General選項卡中,配置為ePWM1模式,對PWM模塊進行初始化配置,時鐘周期單元選擇:Clockcycles,計數模式選擇:Up-Down計數,如圖所示。

5.4.1ePWM_單路輸出

在ePWMA選項卡配置使能ePWMA,當計數等于0的時候不動作,等于比較寄存器CAU的值的時候復位,等于比較寄存器CAD的值的時候置高,其他時間不動作。ePWMB、死區時間、事件觸發以及錯誤聯防均不配置,如圖所示。對CounterCompare的配置:將CMPAunits設置為Percentage百分比;比較寄存器CMPA設置成Specifyviadialog內部指定為50。通過以上配置,可以得到模型。方法二在General選項卡中,配置為ePWM1模式,對PWM模塊進行初始化配置,時鐘周期單元選擇:Seconds,計數模式選擇:Up-Down計數,關閉同步功能,分頻系數TBCLK和HSPCLKDIV均為1(不對系統時鐘分頻),如圖所示。5.4.2ePWM_雙路互補輸出

在上述配置完成,并完成模型的搭建后,將模型編譯下載到主控板,然后在CCS中打開模型生成的工程文件,先單擊【編譯】按鈕

,再單擊【調試】按鈕

,然后將途中的兩個變量添加到Expressions中,單擊【運行】按鈕

,可以看到TBPRD、CMPA的值,如圖所示。可以將主控板的PWM1A引腳連接到示波器的信號線,主控板和示波器記得要共地,便能觀測到輸出的PWM的頻率是否為1kHz,占空比是否為50%。注意要單擊Expressions的實時刷新按鈕,否則數據不會變化。在General選項卡的配置和在ePWMA選項卡配置同單路輸出的方法一,因為要輸出兩路互補的PWM所以這里使能ePWM1B配置與ePWM1A相反,如圖所示。對CounterCompare的配置:將CMPAunits設置為Clockcycles(時鐘周期);比較寄存器CMPA設置成Inputport由外部輸入,初始值設為0,對CMPB的操作一樣,如圖所示在上述配置完成,并完成模型的搭建后,將模型編譯下載到主控板,然后在CCS中打開模型生成的工程文件,先單擊【編譯】按鈕,再單擊【調試】按鈕,然后將圖中的三個變量添加到Expressions中,單擊【運行】按鈕,可以看到TBPRD、CMPA、CMPB的值,如圖所示。可以將主控板的PWM1A引腳和PWM1B引腳分別連接到示波器的信號線,主控板和示波器記得要共地,便能觀測到兩路PWM的頻率是否都為1kHz,占空比是否分別為60%和40%,波形是否互補。注意要單擊圖右上方的實時刷新按鈕,否則數據不會變化。PWM中斷配置在雙路互補輸出的PWM實驗的基礎上改動。在前面的配置不變的情況下,在EventTrigger選項卡中,使能ePWM中斷,并配置為在第一個事件發生時就進入中斷,其他設置默認。配置如圖所示。5.4.1ePWM_中斷在上述配置完成后,調用C28xHardwareInterrupt模塊,將PWM1中斷的CPU級中斷號3以及PIE級中斷號1寫入,其余配置默認,如上圖所示。中斷函數中,使用StateFlow搭建了一個簡單的邏輯功能模塊,使LED燈每一秒翻轉一次。其中計數器計數最大值為1000,如上圖所示。該模型的系統時鐘為80MHz,定步長為0.5s。完成上面的配置之后,將生成的代碼下載到開發板上,可以看到在PWM波產生的同時,LED2燈在以1Hz的頻率閃爍,LED1燈以每0.5s的頻率閃爍,如圖所示5.5eCAPeCAP基本介紹TMS320F28069的捕獲單元模塊能夠捕獲外部輸入引腳的邏輯狀態(電平的高或低、電平翻轉時的上升沿或下降沿),并利用內部定時器對外部事件或者引腳狀態變化進行處理。控制器給每個捕獲單元模塊都分配了一個捕獲引腳,在捕獲引腳上輸入待測波形,捕獲模塊就會捕獲到指定捕獲的邏輯狀態,所以捕獲單元可以用于測量脈沖周期以及脈沖的寬度。TMS320F28069上面有4路增強型捕捉模塊eCAP,CAP模塊是應用定時器來實現事件捕獲功能,主要應用在速度測量,脈沖序列周期測量等方面。eCAP模塊包括以下資源。可分配的輸入引腳。32bit時間基準(計數器)。4個32bit時間窗捕獲控制寄存器。獨立的邊緣極性選擇。輸入信號分頻(2~62)。

4個捕獲事件均可引起中斷。5.5eCAPeCAP模塊可以設置為捕捉模式或者是APWM模式,一般而言前者比較常用,因此在這里只對第一種情況進行分析介紹。在捕捉模式下,一般可以將eCAP模塊分為以下幾個模塊:事件分頻、邊沿極性選擇與驗證、中斷控制。1)事件分頻輸入事件信號可通過分頻器分頻處理(分頻系數2~62),或直接跳過分頻器。這個功能通常針對輸入事件信號頻率很高的情況下適用。2)邊沿極性選擇與驗證4個獨立的邊沿極性(上升沿/下降沿)選擇通道;Modulo4序列發生器對Eachedge(共4路)進行事件驗證;CAPx通過Mod4對事件邊沿計數,CAPx寄存器在下降沿時被裝載。32bit計數器(TSCTR)此計數器為捕捉提供時鐘基準,而時鐘的計數則是基于系統時鐘的。當此計數器計數超過范圍時,則會產生相應的溢出標志,若溢出中斷使能,則產生中斷。3)中斷控制

中斷能夠被捕獲事件所(CEVT1-CEVT4,CTROVF)觸發,計數器(TSCTR)計數溢出同樣會產生中斷。事件單獨地被極性選擇部分以及序列驗證部分審核。這些事件中的一個被選擇用來作為中斷源送入PIE。設置CAP中斷的過程可表述如下。(1)關閉全局中斷。(2)停止eCAP計數。(3)關閉eCAP的中斷。(4)設置外設寄存器。(5)清除eCAP中斷標志位。(6)使能eCAP中斷。(7)開啟eCAP計數器。(8)使能全局中斷。4)eCAP模塊原理的加深理解

配置好eCAP模塊的引腳后,外部事件由引腳輸入,首先通過模塊的分頻部分,分頻系數為2~62,也可以選擇跳過分頻部分,此功能主要是針對輸入事件信號頻率很高的情況。經過分頻后的信號(通常頻率會降低),送至邊沿及序列審核部分,邊沿審核即設置為上升沿或下降沿有效,序列審核則是指分配當前對哪個寄存器(CAP1~CAP4)作用的問題,之后就是中斷執行控制部分。

在實驗5.4中知道了如何配置TMS320F28069的ePWM模塊使其輸出PWM波形,而本實驗則是通過利用捕獲模塊功能來測量配置的PWM波的占空比是否正確。實驗時,只需要將ECAP1引腳用杜邦線先后與EPWM1A引腳和EPWM1B連接起來,即可完成實驗。其原理圖如圖所示。

【第一步】在Solver中設置定步長為0.5秒,在HardwareImplementation中配置系統時鐘為90MHz,LSPCLK低速時鐘外設4分頻,eCAP的ECAP1pinassignment引腳選擇GPIO5,如圖所示。

【第二步】初始化好十個全局變量,如圖所示。用來實現對一方波信號的頻率、周期、占空比的測量。(1)t1表示第一個捕捉事件發生時計數器的值。(2)t2表示第二個捕捉事件發生時計數器的值。(3)t3表示第三個捕捉事件發生時計數器的值。(4)T1表示t2-t1的差也就是測試方波的高電平時間對應的計數值。(5)T2表示t3-t1的差也就是測試方波的整個周期對應的計數值。(6)CLK表示系統時鐘周期,Duty表示實際方波的占空比,Frequence表示方波的頻率,Period表示方波的周期,Flag表示檢測完成標志位。

【第三步】生成兩路頻率為10kHz,一個是占空比為50%的PWM,另一個是占空比為60%的PWM,如圖所示。

【第四步】設置eCAP模塊,中斷中配置如圖所示,使用的是eCAP1模塊,配置為連續控制模式,并在第三次事件之后停止計數并重置,第一次事件的觸發極性為上升沿,第二次事件的觸發極性為下降沿,第三次觸發極性為上升沿,計數時間的數據類型為無符號的32位整形。中斷配置為捕捉到第三次事件之后觸發中斷。在eCAP輸出接上demux模塊,并將輸出的值賦予t1,t2,t3。

【第五步】計算T1,T2并對Flag置位,表示一次檢測完畢,如圖所示。

【第六步】封裝子系統,配置硬件中斷,根據ECAP1的中斷向量號(它屬于CPU中斷的第四組下的PIE中斷第1個),配置C28x硬件中斷模塊,如圖所示。

【第七步】標志位觸發,在Whlie(1)中觸發計算模塊,對輸入方波的頻率、周期、占空比進行計算,如圖所示。其中CLK=1/90000000。如圖所示為eCAP的simulink模型圖。在上述配置完成,并完成模型的搭建后,將模型編譯下載到主控板,然后在CCS中打開模型生成的工程文件,先點擊編譯,再點擊調試,然后將下圖的十個變量添加到Expressions中,再點擊運行前,我們先將ECAP3引腳用杜邦線與EPWM1A引腳連接起來。然后在點擊運行可以看到各個變量的值。要想看EPWM1B的數值,ECAP3引腳用杜邦線與EPWM1B引腳連接起來。只是這里有一點點誤差,是芯片自身問題。EPWM1A數據監測EPWM1B數據監測eCAP捕獲PWM脈沖5.6SCI通信,簡單來說就是信號的傳遞。SCI(SerialCommunicationInterface)意為“串行通信接口”,是相對于并行通信的,是串行通信技術的一種總稱,最早由Motorola公司提出的。它是一種通用異步通信接口UART,與MCS‐51的異步通信功能基本相同。SCI模塊用于串行通訊,如RS422、RS485、RS232.TMS320F28069上面有2個UART口,SCIA、SCIB。本實驗針對SCIB。電路原理圖5.6SCI在Solver中設置定步長為0.1秒,在HardwareImplementation中配置系統時鐘為90MHz,LSPCLK低速時鐘外設4分頻,SCI_B的字符長度為8位,波特率設為115000Hz,Tx的引腳設為GPIO58,Rx的引腳設為GPIO15,如圖所示。設置SCIReceive的SCImodule為B,其他的參數默認,此模塊負責接收串口助手發送過來的數據;SCITransmit的SCImodule為B,如圖所示,其他參數默認,此模塊負責發送數據給串口助手。搭建整個模型如圖所示,控制流程為:SCI接收到數據與53比較,如果等于53則輸出1,1大于0則輸出CounterLimited的數(Upperlimit設定為10,當累加到10變歸0重新計數),否則一直輸出2。在上述配置完成,并完成模型的搭建后,將模型編譯下載下載到主控板。將套件中附帶的USB線一端與電腦相連接,并將另一端插到智能平衡車套件中主控制板的USB插口處;確認主芯片正常供電;當用USB直接連接電腦時,要想看到系統識別串口,需要打開設備管理器,選擇TIXDS100ChannelB,右擊屬性,在高級選項卡中勾選加載VCP選項,拔掉USB連接線,再次插入時將顯示系統已經識別到COM口,可以打開串口調試工具進行下一步實驗。接下來打開串口獵人軟件。可以看見主要的幾個方框。選擇對應的端口號COM9,波特率115200,在沒有發送數據之前,數據接收界面一直顯示著2,說明搭建的模型是正確的,如圖所示。在左下角的方框中輸入35(十六進制),則數據接收顯示界面會一直顯示從0到10的數,如圖所示。在高級收碼工具欄下方的通道設置的來源選擇提取每一幀,然后單擊【啟動高級收碼】按鍵。便可以在歷史數據看見有從0~10的十進制數顯示,如圖所示。

在波形顯示界面將Y軸倍率設為10/格,周期為0.1/格,可以看見一個從0到10的階梯,如圖所示。實驗結果5.7SPISPI即SerialPeripheralInterface是高速同步串行輸入/輸出端口。SPI目前被廣泛用于外部移位寄存器、D/A、A/D、串行EEPROM、LED顯示驅動器等外部芯片的擴展。與前文介紹的SCI最大的區別是,SPI是同步串行接口。SPI接口的通信原理簡單,以主從方式進行工作。在這種模式中,必須要有一個主設備,可以有多個從設備。通過片選信號來控制通信從機,SPI時鐘引腳提供串行通信同步時鐘,數據從從入主出引腳輸出,從出主入引腳輸入。通過波特率寄存器設置數據速率。SPI向輸入數據寄存器或發送緩沖器寫入數據時就啟動了從入主出引腳上的數據發送,先發送最高位。同時,接收數據通過從出主入引腳移入數據寄存器最低位。選定數量位發送結束,則整個數據發送完畢。收到的數據傳送到SPI接收寄存器,右對齊供CPU讀取。

SPI的通信鏈接5.7SPI

【第一步】在Solver中設置定步長為0.05秒,在HardwareImplementation中配置系統時鐘為90MHz,LSPCLK低速時鐘外設4分頻,主要設置SPI_A的Enableloopback,將SIMOpinassignment、SOMIpinassignment、CLKpinassignment、STEpinassignment四個引腳配置如圖所示的I/O口。

【第二步】搭建占空比選擇子系統,如圖所示。

【第三步】選擇SPITransmit和SPIReceive的模塊為SPI_A,其他參數默認。

【第四步】配置PWM輸出,定時器周期為64000,計數方式為向上計數UP,不分頻。使能ePWM1A,當計數值等于定時器周期值PRD時置低,當計數值等于向上計數的CAU時置高,其他計數為Donothing不動作。

使能ePWM1B,當計數值等于定時器周期值PRD時置高,當計數值等于向上計數的CBU時置低,其他計數為Donothing不動作。

比較計數,選擇Clockcycles,CMPAinitialvalue、CMPBinitialvalue的值由外部輸入,初值為0,如圖所示。

【第五步】在上述配置完成,并完成模型的搭建后,如圖所示。選擇占空比為75%,將模型編譯下載到主控板。

【第六步】然后在CCS中打開模型生成的工程文件,先單擊【編譯】按鈕,再單擊【調試】按鈕,然后將圖中的兩個變量添加到Expressions中,單擊【運行】按鈕,可以看到TBPRD、CMPA,CMPB的值。可以將主控板的PWM1A引腳和PWM1B引腳分別連接到示波器的信號線,主控板和示波器記得要共地,便能觀測到兩路PWM的頻率是否都為1kHz,占空比是否分別為75%和25%,波形是否互補。

【第七步】在Simulink中選擇占空比為50%,重新編譯下載,然后在CCS中觀察數據,兩路PWM的占空比都為50%。

【第八步】在Simulink添加兩個Scope,如圖所示,選擇External模式,主控板連接USB轉TTL模塊,選擇對應的COM口,波特率115200,選擇占空比為75%,單擊【運行】按鈕,可以觀測Scope1的數據是否和Scope的數據一致,在運行狀態下可以改變占空比的大小,看Scope1的數據變化,如圖所示。5.8IdleTask模塊下圖為PreemptionFlag設置為的0,可以看到生成的代碼中出現了開關中斷的指令;而當PreemptionFlag設置為1的時候的代碼生成狀況,可以看到沒有開關中斷的指令。

在常規的MCU編程中,Whlie(1)使我們幾乎都會使用到的一個函數,他可以使一些對工作周期要求不高的外設以及功能進行循環的掃描執行,例如矩陣鍵盤或者OLED顯示等功能。在TI提供的硬件支持包中,也很人性化的提供了這個功能模塊——IdleTask。下圖為添加IdleTask模塊后生成的代碼。Voididletask_num1(void){DINT;Idle_num1_task_fcn();EINT;}Voididletask_num2(void){Idle_num2_task_fcn();}Voidenable_interrupts(){EINT;ERTM;}while(runModel){stopRequested=!(rtmGetErrorStatus(Ideltask_M)==(NULL));runModel=!(stopRequested);idletask_num1();idletask_num2();}5.8IdelTask模塊介紹

所以在使用的時候,可以根據自己的需要選擇。搭建如圖所示模型,左邊子系統是給GPIO31一個高電平,右邊子系統是給GPIO25一個低電平,電平不翻轉。編譯下載可以觀察主控板的LED1燈亮,LED2燈滅。下面為該模型生成的代碼,idle_num1_task_fcn()函數為右邊子系統生成的代碼,idle_num2_task_fcn()函數為左邊子系統生成的代碼。voididle_num1_task_fcn(void){/*Callthesystem:<Root>/GPIO_25*/{/*S-Function(idletask):'<Root>/IdleTask'*//*Outputandupdateforfunction-callsystem:'<Root>/GPIO_25'*//*S-Function(c280xgpio_do):'<S2>/GPIO25'incorporates:*Constant:'<S2>/Constant'*/{if(Ideltask_P.Constant_Value)GpioDataRegs.GPASET.bit.GPIO25=1;elseGpioDataRegs.GPACLEAR.bit.GPIO25=1;}/*EndofOutputsforS-Function(idletask):'<Root>/IdleTask'*/}}/*IdleTaskBlock:'<Root>/IdleTask'*/voididle_num2_task_fcn(void){/*Callthesystem:<Root>/GPIO_31*/{/*S-Function(idletask):'<Root>/IdleTask'*//*Outputandupdateforfunction-callsystem:'<Root>/GPIO_31'*//*S-Function(c280xgpio_do):'<S1>/GPIO31'incorporates:*Constant:'<S1>/Constant'*/{if(Ideltask_P.Constant_Value_a)GpioDataRegs.GPASET.bit.GPIO31=1;elseGpioDataRegs.GPACLEAR.bit.GPIO31=1;}/*EndofOutputsforS-Function(idletask):'<Root>/IdleTask'*/}}可以從Idletask.h頭文件代碼中看到當Constant_Value為0,LED2燈滅,Constant_Value_a為1,LED1燈亮。/*Parameters(defaultstorage)*/structP_Ideltask_T_{real_TConstant_Value;/*Expression:0*Referencedby:'<S2>/Constant'*/real_TConstant_Value_a;/*Expression:1*Referencedby:'<S1>/Constant'*/};P_Ideltask_TIdeltask_P={0.0,/*Expression:0*Referencedby:'<S2>/Constant'*/1.0/*Expression:1*Referencedby:'<S1>/Constant'*/}5.9WatchDog模塊介紹

意外難免會發生,部分意外發生的時候,系統程序跑飛或進入死循環,系統需要有一定自恢復的功能,這就需要看門狗。看門狗,又叫Watchdogtimer,從本質

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論