你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的Timer 结合 DMA 2D 通道实现不同波形输出

[复制链接]
STMCU小助手 发布时间:2023-10-27 16:14
01问题背景
客户需要使用 MCU 输出正弦波,但受限于 MCU DAC 数量不足,建议尝试使用 PWM加滤波方式产生正弦波。同时要求正弦波与固定电平交替输出。因此可用一个 TIM 输出PWM,同时用另一个 TIM 来定时切换输出正弦波或固定电平。
9 ?/ j9 z" t) Q0 y: y. W/ D
使用 TIM 输出 PWM 产生正弦波形时,需要结合 GPDMA 来实现。在 STM32U5 系列中,GPDMA 共有 16 个独立通道,其中 12-15 通道还具有 2D addressing/ repeat 功能。因此也可以使用一个 TIM 加 GPDMA 的一个 2D 通道实现 PWM 波形切换功能。

" F# w5 T) k$ {
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 h. U0 l* y! {% w9 f4 k' ]( R
2.1. STM32CubeMX 生成测试工程
: F1 C3 X) v. \
2.1.1. TIM1 CH1 PWM 配置
2 D; L# w3 q$ H. w1 g( V
微信图片_20231027161312.png
1 {' \5 n0 w7 M- @
图1. TIM1 CH1 PWM
, T: G3 B0 L, S' o& ?: z
2.1.2. GPDMA CH12 配置

. g" k; u" N' M2 Z, ]
选用 GPDMA 通道 12,并配置为循环模式:

% b+ ]2 P5 R. I
微信图片_20231027161309.png
* H2 ?) k6 M/ G, _" c
图2. GPDMA CH12

# u& A8 P( @' h7 a# P
2.1.3. GPDMA Linked List 配置
# j7 u! m. E# O$ o0 V$ v
创建 Linked List Queue,并配置为搭配 GPDMA 2D 功能通道使用。创建两个节点,TN1, TN2,并使用循环模式,指定首个循环节点为 TN1。

5 Q$ Y3 L' I) J( L, H
微信图片_20231027161305.png
# A2 f6 v8 ~1 h9 e" O/ v# i% H0 _
图3. Linked List
3 E& M5 ^, q% h7 Y; z4 R$ M7 F
TN1 节点配置,由此节点结合 TIM 来产生 PWM,并滤波成正弦信号:
(1)TIM1 更新事件作为 DMA 请求
(2)使能 2D 功能,一个 block 传输完成后,回退到数组起点,重新传输
(3)使能 Repeat 功能,重复 block 传输 1000 次
首先使能了 TrustZone 架构,然后将 LPGPIO 映射到了非安全区,并且配置了 DMA 链表功能,使用 LPTimer 作为触发,自动地修改 LPGPIO 的寄存器,从而达到在低功耗模式下,GPIO自动切换的功能。但遇到了 LPDMA 的配置问题,并且程序无法跳转到 Non-Secure 工程。
/ x2 ~4 `6 v9 Q: b
微信图片_20231027161301.png $ _. f' x% @0 ]0 \4 q" e: M) `
图4. Linked List Node1
: z) x. N( b4 W0 B- a8 |/ w9 s
TN2 节点配置,与 TN1 节点类似,用于切换到第二组数据产生第二种波形

' ], ]5 d: L& D' |; M' t9 N$ ?% U) d
微信图片_20231027161258.png 4 e% ~3 A6 k8 {# g
图5. Linked List Node2

$ ^8 {0 o4 p6 g( A4 s
2.2. 测试代码
" r) A. h/ E9 T$ s4 g8 j4 h0 t# @
微信图片_20231027161255.png 8 X6 G$ v2 U9 b# W7 @/ K8 {& a! J
' m% X/ O1 Q8 ~8 E% _' I
GPDMA Linked List 模式执行流程

/ N/ Q. }7 q1 O% g- m6 l7 m% C
微信图片_20231027161252.png ; r8 p1 Y3 g4 {5 a4 }4 Y8 T
图6. Linked List 执行过程及期望输

& C( x1 l# G$ B/ ~
03PWM滤波输出

) x' z/ |: A  y+ }: X" Z) ]( O
在 U575 NUCLEO 板上测试,结果如下:

* D) Y, G7 J9 ~  M
微信图片_20231027161248.png
! r' f2 M  [: k. |0 W8 C3 B/ ?
图7. 实际输出
" H! z& b( @8 X1 \+ `3 Z: A
从实测结果来看,滤波后的正弦波频率,波形持续时长都符合预期。另外,与通过额外 TIM 计时来切换 PWM 输出的方式相比,使用 Linked List repeat 这种方式,正弦波与固定电平输出之间切换更平滑。
# h: T  T' j$ ?: O: K
微信图片_20231027161244.png # X3 M3 T5 C9 o9 |, T5 I
图8. 额外 TIM 计时来切换 PWM 输出

( u' l; u; O+ s: _3 Q* K
04小结
通过使用 GPDMA Linked List 模式,使用 2D addressing repeat 功能,能方便实现这种多种波形切换的应用场景。如 Node1 与 Node2 使用不同的数据长度和重复次数,则可得到不同时长的两种波形;通过增加更多 Node,则可得到多种不同波形。

- H: g: M& w. m- x2 N5 h( Z8 J2 O转载自: STM32单片机+ g' ~6 \# U) t/ \7 |
如有侵权请联系删除8 X# p& y% V$ ^; y
( _0 h, p- t$ Z- G6 L
: i$ _, \/ U) S: g( E' L1 Q# z
赞 收藏 评论2 发布时间:2023-10-27 16:14

举报

2个回答
STMWoodData 回答时间:2023-10-27 17:30:57

学习学习

xu@xupt 回答时间:2023-11-2 14:58:49

学习啦~~

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版