0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

STM32单片机 来源:STM32单片机 2023-10-26 15:18 次阅读

**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 配置

wKgaomU6EzCAWfw5AAInklhBFsk120.jpg

图1. TIM1 CH1 PWM

2.1.2. GPDMA CH12 配置

选用 GPDMA 通道 12,并配置为循环模式:

wKgZomU6EzCAerhVAAPOxQvJEsA120.jpg

图2. GPDMA CH12

2.1.3. GPDMA Linked List 配置

创建 Linked List Queue,并配置为搭配 GPDMA 2D 功能通道使用。创建两个节点,TN1, TN2,并使用循环模式,指定首个循环节点为 TN1。

wKgaomU6EzCAdWZeAADifVzLGPs423.jpg

图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 工程。

wKgZomU6EzCAVJpiAAFjZfU5VU4417.jpg

图4. Linked List Node1

TN2 节点配置,与 TN1 节点类似,用于切换到第二组数据产生第二种波形

wKgZomU6EzCAFHgZAAFXpheqJ3M564.jpg

图5. Linked List Node2

2.2. 测试代码

wKgaomU6EzCAbArFAAHo5WB52Go549.jpg

GPDMA Linked List 模式执行流程

wKgZomU6EzCANhsAAABfbe_y3EQ015.jpg

图6. Linked List 执行过程及期望输

03

PWM滤波输出

在 U575 NUCLEO 板上测试,结果如下:

wKgZomU6EzCAQFK0AATY_Zm02Ok639.jpg

图7. 实际输出

从实测结果来看,滤波后的正弦波频率,波形持续时长都符合预期。另外,与通过额外 TIM 计时来切换 PWM 输出的方式相比,使用 Linked List repeat 这种方式,正弦波与固定电平输出之间切换更平滑。

wKgaomU6EzCAX6PEAANLej_RDE8997.jpg

图8. 额外 TIM 计时来切换 PWM 输出

04

小结

通过使用 GPDMA Linked List 模式,使用 2D addressing repeat 功能,能方便实现这种多种波形切换的应用场景。如 Node1 与 Node2 使用不同的数据长度和重复次数,则可得到不同时长的两种波形;通过增加更多 Node,则可得到多种不同波形。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    158

    文章

    7335

    浏览量

    174834
  • 正弦波
    +关注

    关注

    11

    文章

    562

    浏览量

    54336
  • 计数器
    +关注

    关注

    32

    文章

    2127

    浏览量

    93030
  • PWM波
    +关注

    关注

    0

    文章

    98

    浏览量

    16706
  • stm32cubemx
    +关注

    关注

    5

    文章

    260

    浏览量

    14452

原文标题:实战经验 | Timer 结合 DMA 2D 通道实现不同波形输出

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32 TIMER+DMA输出PWM异常案例的问题解析

    有人使用STM32U575的TIMER加上DMA做PWM输出。具体就是利用某TIMER的一个通道的比较事件触发
    的头像 发表于 09-28 09:04 4273次阅读
    STM32 <b class='flag-5'>TIMER+DMA</b><b class='flag-5'>输出</b>PWM异常案例的问题解析

    STM32U5系列TIMER+DMA+DAC应用演示

    有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件触发DMA,并通过DMA传输内存数据到DAC输出寄存器,进而产生相应的DAC输出
    的头像 发表于 01-24 09:10 540次阅读
    STM32U5系列<b class='flag-5'>TIMER+DMA</b>+DAC应用演示

    STM32F051C8 PA0不能以DMA的方式输出PWM,没有正确波形输出是哪里出了问题?

    启动timer2 PWM,用示波器检测不到输出波形; 使用STM32F030C8 ,同样的配置和WS2812B的应用代码,更换为PA6(对应的timer3,channel1)能够正常
    发表于 03-13 06:20

    CC2541 Timer+ADC+DMA编程心得

    T1CTL中的DIV[1:0]设置为2Timer1如何去触发ADC呢?这里有两种方法:1、配置Timer1的中断,在“比较捕获通道0中断”中去软件触发ADC的采样;
    发表于 02-19 18:06

    第60章 如何在对话框上绘制2D图形

    ,如果大家想在对话框上面绘制2D图形的话,可以将STemWin的2D绘制函数放在对话框回调函数中的WM_PAINT消息中实现。 这里跟大家讲一下如何利用uCGUIBulder4.0在对话框上面绘制简单的横线和竖线。60.1.1
    发表于 10-18 11:33

    stm32+LT768实现2d图形以及图片加速显示程序

    `上个月拿到了STM32+LT768的开发板+LCD显示屏,学会了用stm32驱动lt768实现2d图形加速和硬件图形加速,用来显示图形或者图片很方便,推荐给大家。下面放上LT768的一些特色功能
    发表于 04-02 00:09

    DAC+DMA+TIMER输出正玄波通道1一直是高电平

    1_Stream6,TIM6触发DMA1_Stream5,ARR都为14(低于15都一样);同样还是通道一有同样的问题,二通道2却正常输出
    发表于 03-15 07:48

    隐式2D解析

    《Fundamentals of Computer Graphics》翻译(三):隐式2D直线
    发表于 09-03 12:19

    2D区域调光的优点是什么

    背光区域调节技术2D区域调光的优点2D区域调光面临的难题及机遇
    发表于 02-26 08:21

    LTDC应用中最基本的汉字显示和2D图形显示功能实现

    第41章 STM32F429的LTDC应用之LCD汉字显示和2D图形显示本章教程为大家讲解LTDC应用中最基本的汉字显示和2D图形显示功能实现。目录第41章 STM32F429的LTDC应用之LCD
    发表于 08-10 07:24

    使用STM32F4的DMA输出波形

    DMA通道STM32F407有两个DAM,每个DMA有8个数据流,每个数据流有8个通道DMA输出
    发表于 11-30 12:51 12次下载
    使用STM32F4的<b class='flag-5'>DMA</b><b class='flag-5'>输出</b><b class='flag-5'>波形</b>

    stm32F4的ADC+DMA+Timer实现2MHz连续采样。1LSB分辨率,极低噪声。

    1. stm32F4的ADC+DMA+Timer实现原理stm32F4的ADC参数
    发表于 12-20 19:48 56次下载
    stm32F4的ADC+<b class='flag-5'>DMA+Timer</b>,<b class='flag-5'>实现</b>2MHz连续采样。1LSB分辨率,极低噪声。

    基于STM32F446的PWM输出程序

    CH2、CH3、CH4采用比较切换模式结合DMA输出PWM波形,其中各通道的CCR值通过DMA
    发表于 03-02 15:04 856次阅读

    TIM DMA burst输出变频PWM波形

    电子发烧友网站提供《TIM DMA burst输出变频PWM波形.pdf》资料免费下载
    发表于 09-19 17:06 2次下载
    TIM <b class='flag-5'>DMA</b> burst<b class='flag-5'>输出</b>变频PWM<b class='flag-5'>波形</b>

    实战经验 | Timer 结合 DMA 2D 通道实现不同波形输出

    产生正弦波形时,需要结合 GPDMA 来实现。在 STM32U5 系列中,GPDMA 共有 16 个独立通道,其中 12-15 通道还具有
    的头像 发表于 10-26 15:20 525次阅读
    实战经验 | <b class='flag-5'>Timer</b> <b class='flag-5'>结合</b> <b class='flag-5'>DMA</b> <b class='flag-5'>2D</b> <b class='flag-5'>通道</b><b class='flag-5'>实现</b>不同<b class='flag-5'>波形</b><b class='flag-5'>输出</b>