目錄預覽
1、問題背景
2、產生PWM
3、PWM濾波輸出
4、小結
01
問題背景
客戶需要使用 MCU 輸出正弦波,但受限于 MCU DAC 數量不足,建議嘗試使用 PWM加濾波方式產生正弦波。同時要求正弦波與固定電平交替輸出。因此可用一個 TIM 輸出PWM,同時用另一個 TIM 來定時切換輸出正弦波或固定電平。
使用 TIM 輸出 PWM 產生正弦波形時,需要結合 GPDMA 來實現。在 STM32U5 系列中,GPDMA 共有 16 個獨立通道,其中 12-15 通道還具有 2D addressing/ repeat 功能。因此也可以使用一個 TIM 加 GPDMA 的一個 2D 通道實現 PWM 波形切換功能。
02
產生PWM
本文按以下配置產生 PWM,在 U575 NUCLEO 板測試:
(1)MCU 主頻:100MHz
(2)PWM 頻率 2MHz(周期 500ns),脈寬可調范圍 0~50 個計數時鐘,
(3)每個正弦波周期(10us)對應 20 個 PWM 脈沖,各 PWM 脈寬用計數時鐘表示分別為:25, 33, 40, 45, 49, 50, 49, 45, 40, 33, 25, 17, 10, 5 , 1 , 0 , 1 , 5 , 10, 17
(4)將步驟 3 中的正弦波重復 1000 次,對應 10ms 的連續正弦波形
2.1. STM32CubeMX 生成測試工程
2.1.1. TIM1 CH1 PWM 配置
圖1. TIM1 CH1 PWM
2.1.2. GPDMA CH12 配置
選用 GPDMA 通道 12,并配置為循環模式:
圖2. GPDMA CH12
2.1.3. GPDMA Linked List 配置
創建 Linked List Queue,并配置為搭配 GPDMA 2D 功能通道使用。創建兩個節點,TN1, TN2,并使用循環模式,指定首個循環節點為 TN1。
圖3. Linked List
TN1 節點配置,由此節點結合 TIM 來產生 PWM,并濾波成正弦信號:
(1)TIM1 更新事件作為 DMA 請求
(2)使能 2D 功能,一個 block 傳輸完成后,回退到數組起點,重新傳輸
(3)使能 Repeat 功能,重復 block 傳輸 1000 次
首先使能了 TrustZone 架構,然后將 LPGPIO 映射到了非安全區,并且配置了 DMA 鏈表功能,使用 LPTimer 作為觸發,自動地修改 LPGPIO 的寄存器,從而達到在低功耗模式下,GPIO自動切換的功能。但遇到了 LPDMA 的配置問題,并且程序無法跳轉到 Non-Secure 工程。
圖4. Linked List Node1
TN2 節點配置,與 TN1 節點類似,用于切換到第二組數據產生第二種波形
圖5. Linked List Node2
2.2. 測試代碼
GPDMA Linked List 模式執行流程
圖6. Linked List 執行過程及期望輸
03
PWM濾波輸出
在 U575 NUCLEO 板上測試,結果如下:
圖7. 實際輸出
從實測結果來看,濾波后的正弦波頻率,波形持續時長都符合預期。另外,與通過額外 TIM 計時來切換 PWM 輸出的方式相比,使用 Linked List repeat 這種方式,正弦波與固定電平輸出之間切換更平滑。
圖8. 額外 TIM 計時來切換 PWM 輸出
04
小結
通過使用 GPDMA Linked List 模式,使用 2D addressing repeat 功能,能方便實現這種多種波形切換的應用場景。如 Node1 與 Node2 使用不同的數據長度和重復次數,則可得到不同時長的兩種波形;通過增加更多 Node,則可得到多種不同波形。
完整內容請點擊“閱讀原文”下載原文檔。
原文標題:實戰經驗 | Timer 結合 DMA 2D 通道實現不同波形輸出
文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
-
單片機
+關注
關注
6039文章
44583瀏覽量
636505 -
STM32
+關注
關注
2270文章
10910瀏覽量
356605
發布評論請先 登錄
相關推薦
評論