基於 SemiDrive E3110 SSDK PTG1.1 PWM&ICU 的場景應用

關鍵字 :SemiDriveE3110

一、應用場景

①應用需求

有圖(1)所示的應用場景,E3110 輸出周期為 100ms,占空比 1% 的 PWM 波給 Sensor, Sensor 在檢測到 PWM 波形上升沿後輸出一個電壓,給 E3110做 Adc 採集。且在檢測到上升沿後 0.28ms – 0.35ms 這個時間區間內,輸出電壓最精確。

②解決方案

 針對以上需求,計劃採用圖(2)所示的解決方案

解決方案說明:

        PWM 採用 CMP-A channel,參考計數器 G0 工作頻率為 250MHZ,即一個計數為 4ns,輸出通道 A0 的比較時間 CMP00 在計數值達到 22500000 時觸發,電平上拉,即低電平持續 90ms。A1 通道設置為 22500000 + 80000 時觸發 CMP10 事件,即比 A0 滯後 0.32ms 上拉。在 G0 計數值達到25000000 時觸發OVF 事件,此時 A0, A1 同時下拉,這時就可以得到 圖(2)所示的 PWM 波形。

        A0 輸出的 PWM 通過 XTRG 路由給 GPIO,連接到 Sensor,A1 輸出的 PWM 波形通過 XTRG 輸出給 E3110 內部 eTIMER 的 CPTA 通道做捕獲,在檢測到上升沿時候觸發 eTIMER 中斷,在中斷處理函數中做 ADC 採樣。

 

 

二、操作方法與演示

        ①下載補丁鏈接:https://pan.baidu.com/s/1rov3QeazEiG7ioGNzNfP5g  提取碼:lw0d

        ②補丁文件如圖(3)所示:

  • 將 etimer 文件夾替換掉 drivers\taishan\etimer 路徑下在文件夾
  • 將 icu 文件夾添加到 examples\taishan\drivers 路徑
  • 將h 文件 添加到 include\driver\taishan\etimer
  • 將c, pinmux_cfg.h, pwm_cfg.c 文件替換掉 boards\e3_176_ref\sf\configs 路徑下對應的文件
  • 將c 文件替換掉 drivers\taishan\epwm 路徑下對應的文件
  • 將c 文件替換 examples\taishan\drivers\pwm 路徑下對應的文件

 

 ③  .mk 和 Kconfig文件修改

        Etimer 和 icu 文件夾有新增的文件,對應文件夾以及上級文件夾下的 Kconfig 和 rules.mk 需要修改,這裡不做詳細說明,讀者參考其他模塊書寫語法自行添加。

④配置修改

雙擊根目錄下的 setup-env 批處理文件,在命令行窗口輸入 sh tools\menuconfig.sh -b e3_176_ref -p ref -c sf 命令。按照圖(4)打開所需的編譯選項。

      



⑤編譯工程:輸入 sh build.sh -b e3_176_ref -p ref 編譯工程。圖(5)

 

⑥下載鏡像:使用Semidrive sd tools 下載工具,將編譯後的鏡像 boards\e3_176_ref\build\ref\gcc\ospi_e3_176_ref.pac 下載到開發板。圖(6)

⑦ demo 運行:啟動開發板,依次輸入  epwm_app 0,icu_app。列印結果如圖(7)

 

三、代碼說明

①epwm 代碼修改:

  • c 和 pinmux_cfg.h 將 GPIO_S0, GPIO_S1 設置為 XTRG IO mux,用於 PWM 波輸出
  • c 將 ePWM CMP 通道 A 配置為單比較模式,雙路輸出。修改見圖(8)

  • c 針對 0.28ms – 0.35ms 做了驅動修改,在 sdrv_epwm_cmp_val_upd()函數中,對 A1 的比較計數值在 A0 的基礎上加 80000。見圖(9)。注意:由於底層驅動的改動,其他 PWM 的配置將不能使用單比較模式雙通道輸出模式,X1 Channel會出現波形不正確。如有需要,建議將此應用場景的需求重新定義一個函數。原有的保持不變。

  • c 用於配置並啟動 PWM 輸出。關鍵代碼見圖(10)

  • PWM 輸出測試如圖(11)。符合預期。

② eTimer ICU 功能代碼修改

  • etimer 文件夾中 c 文件為新增加代碼,用於 eTimer ICU 功能實現的用戶 API。sdrv_etimer.c 和

sdrv_etimer.h 用於實現 low level driver,相比較 SSDK PTG3.0, 有一些功能沒有實現,因此這兩個文件也有少許改動。

  • h 為針對 ICU 功能的頭文件,為新增文件。導出 etimer_icu_drv.c 中的 API 函數。
  • icu 文件夾為新增文件夾,主要是增加 c 文件,用於實現 eTimer ICU 捕獲功能。見圖(12)說明。


參考文獻:

  1. 12.pdf
  2. 0.pdf
  3. 12.pdf
歡迎在博文下方留言評論,我們會及時回復您的問題。如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com
作者:Sim Guo / 郭夕峰

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論