STMCU小助手
发布时间:2023-2-14 18:37
|
1. 问题背景客户需要使用 MCU 输出正弦波,但受限于 MCU DAC 数量不足,建议尝试使用 PWM加滤波方式产生正弦波。同时要求正弦波与固定电平交替输出。因此可用一个 TIM 输出PWM,同时用另一个 TIM 来定时切换输出正弦波或固定电平。( {& Q* U; F/ {$ f1 f& N% M5 f 使用 TIM 输出 PWM 产生正弦波形时,需要结合 GPDMA 来实现。在 STM32U5 系列中,GPDMA 共有 16 个独立通道,其中 12-15 通道还具有 2D addressing/ repeat 功能。因此也可以使用一个 TIM 加 GPDMA 的一个 2D 通道实现 PWM 波形切换功能。4 A: x* _% ^" N4 ~" i' d% o' x ( s3 ?! @) ]/ v3 \/ l4 J' m & |* r% J. {7 {3 q9 S 2. 产生 PWM( {- O! c: T9 v) e: u$ x. |& l 本文按以下配置产生 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, 178 b! [! U9 |6 u7 w8 ?, j2 @ (4)将步骤 3 中的正弦波重复 1000 次,对应 10ms 的连续正弦波形. V7 ]$ X' D% D1 K1 x ! q7 }% m2 M! G4 B/ O9 b9 o& V 2.1. STM32CubeMX 生成测试工程) q5 I: x7 x9 ~1 ] 2.1.1. TIM1 CH1 PWM 配置) j+ p$ ]( i' B6 f 图1. TIM1 CH1 PWM, c9 S, g7 ?& z# M0 S) h) \ 4 {5 J% A& J. h' A. L }$ Z A) H9 }9 o" @) h2 w
2.1.2. GPDMA CH12 配置 选用 GPDMA 通道 12,并配置为循环模式: 图2. GPDMA CH12, r* Q! A4 V& U6 F. s. Y6 o8 Y2 F + f z; \. |! F d9 V4 x& e
5 ^& C: i# t9 A$ _ 2.1.3. GPDMA Linked List 配置 创建 Linked List Queue,并配置为搭配 GPDMA 2D 功能通道使用。创建两个节点,TN1, TN2,并使用循环模式,指定首个循环节点为 TN1。 ! v& e5 W4 R0 `) y# |- Y, u - s( a6 n' p& j/ f- S6 k* P
8 v( P s4 J; ?- A4 n. m) ], J( O X TN1 节点配置,由此节点结合 TIM 来产生 PWM,并滤波成正弦信号:+ i% n# _: g. X7 Y (1)TIM1 更新事件作为 DMA 请求 (2)使能 2D 功能,一个 block 传输完成后,回退到数组起点,重新传输 (3)使能 Repeat 功能,重复 block 传输 1000 次5 Y$ v5 K* z2 h r) F9 O' B $ F, d- a0 I- E0 s7 o
8 C; k J6 ~4 u TN2 节点配置,与 TN1 节点类似,用于切换到第二组数据产生第二种波形 t5 [' b2 {/ ] 4 N) x+ G! {3 g. o 完整版请查看:附件
Timer结合DMA 2D通道实现不同波形输出_v1.0.pdf
(1.08 MB, 下载次数: 0)
|
经验分享 | 通过STM32 TIMER的PWM功能模拟输出正弦波
SPI 32位宽DMA方式收发失败问题
多通道DMA传输为何有一路异常?
经验分享 | STM32N6 ADC DMA 传输失败案例分享
经验分享 | DMA发送函数只能第一次调用有效?
经验分享 | 使用EXIT0同步触发SPI的DMA发送话题
【开发经验】LAT1500 如何通过DMA配合CRC功能
我心中的ST中文论坛
经验分享 | 为什么重启ADC的DMA传输要先停掉ADC?
经验分享 | 使用GPIO+DMA+TIM模拟SPI通信演示
微信公众号
手机版