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

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

3天内不再提示

应用笔记(三)| 运用DMA 功能实现高级定时器和ADC 的同步触发采样

武汉芯源半导体有限公司 ? 2022-08-03 10:09 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


前言

在做 BLDC 电机控制时,需要 ADC 的采样时刻和定时器产生的 PWM 波形相配合,才能获取准确的采样值, 本文介绍了 CW32F030 系列芯片通过运用 DMA 功能实现高级定时器和 ADC 的同步触发采样的功能。

▇PWM 输出实现

1.1 输出端口的配置

根据 GPIO 复用功能分配表(完整表格请参阅 CW32F030 用户手册中表 9-2 GPIO 复用功能分配表),选取期 望输出互补 PWM 波形的引脚,如本例中 PA8、PA9、PA10、PB13、PB14、PB15,如下表所示:

▼ GPIO 复用功能分配表

poYBAGLH8pCAa8hnAAITz5bwEAw203.png

PA8 和 PB13 组成一对互补输出通道 CH1,PA9 和 PB14 组成一对互补输出通道 CH2,PA10 和 PB15 组成一 对互补输出 CH3。

步骤如下:

1. 将相关的 GPIO 设置为输出;

2. 将 GPIO 配置为 ATIM 的比较输出复用功能。

代码如下:

poYBAGLH8peANMwFAAH-kcB7Yac843.jpgpoYBAGLH8paAYVuGAAFzlRiairQ143.jpg

1.2 ATIM 的配置

ATIM 包含一个 16 位的计数器 / 定时器和 7 个比较单元。7 个比较单元中,有六个具有捕获功能,并且这 6 个捕获 / 比较单元可以成对使用,组成互补输出的功能。

本文以产生一个驱动 BLDC 电机所需的 20kHz 的三路互补输出的 PWM 波形为例,选取 ATIM 的时基信号为 PCLK。

本例中 PCLK 为 64MHz,并通过 ATIM 的预分频器进行 16 分频后,以 4MHz 频率进行计数。

为方便设定 ADC 的采样时间,ATIM 采用中央对齐模式计数,设置 ATIM 的自动重载寄存器(ARR)为 100, 则 ATIM 的将先从 0 累加至 99,再从 100 递减至 1,故计数周期为 2 倍的 ARR 寄存器的值,即 PWM 的频率 为 20kHz。

通过设置 ATIM 的控制寄存器(CR)的 COMP 位为 1,使得 PWM 以互补的方式输出,CH1A 和 CH1B 的脉宽 由通道 1比较 /捕获寄存器 A(CH1CCRA)决定,CH1B的输出脉宽不再由通道 1比较 /捕获寄存器 B(CH1CCRB) 决定,CH1CCRB 仍可用于设定 CH1B 比较匹配的值。CH2A 和 CH2B,CH3A 和 CH3B 与之类似。

在设置输出 PWM 互补输出时,可以对互补通道加入死区时间,由死区时间寄存器(DTR)控制。

ATIM 配置输出 3 对互补带死区的 PWM 波形,详细配置代码如下:

pYYBAGLH8paAeIqyAAWa4osRGKU706.jpg

pYYBAGLH8paAVPS2AAJGDHN-JQg656.jpgpoYBAGLH8paAODqQAAJJLuXceZQ777.jpg

▼ 产生的 PWM 波形如下:

pYYBAGLH8paAeKq3AACw75bb_hc950.jpg

1.3 ADC 的配置

1.3.1 序列采样

当需求的采样通道小于等于 4 路时,可以通过 ADC 的序列采样模式实现,并且可以通过 ATIM 的通道 1~3 比 较 / 捕获寄存器 B 中任意一个寄存器设定 ADC 的采样时刻,这些操作都可以由硬件自动完成,减轻了 CPU 的工作量。

以采样 AIN0~AIN3 这 4 路输入为例,设定采样时刻为 ATIM 计数达到 ARR 时,其参考代码如下:

poYBAGLH8paAOByfAAT7R9TK3iE555.jpgpYYBAGLH8paAdhe6AAGxvncQTnQ916.jpg

上述方法完全由硬件实现,不需要 CPU 和中断的参与,执行效率非常高,不足的地方是采样通道限制为 4 路。

1.3.2DMA 扩展采样

如果需要对超过 4 路的模拟量进行采样,则需要结合 DMA 的功能,以实现较少的 CPU 参与。其思路如下:

1. ADC 配置为单通道单次转换,完成转换后硬件触发 DMA;

2. DMA 的 CH1 用于将 ADC 的转换结果传输到 RAM 中,本例中将采样 6 个 ADC 通道,因此传输次数 CNT 为 6,源地址固定为 ADC 的 RESULT0 寄存器,目的地址需要递增;

3. DMA 的 CH2 用于更改 ADC 的采样通道,当 ADC 转换完成后,从 RAM 中取 ADC 的通道配置参数,自 动配置 ADC 的寄存器值,因此源地址为 RAM,地址递增,目的地址为 ADC 的通道控制寄存器;

4. DMA 的 CH3 用于再次启动 ADC,因为 ADC 配置为单次转换,当转换完成后,ADC 自动停止转换,所 以需要通过 DMA 向 ADC 的转换启动寄存器置位,以再次启动 ADC 转换;

5. DMA 的 CH1 传输完成后,ADC 的 6 路转换也完成了,并且转换结果也被传输到 RAM,可通过 CH1 的 传输完成中断,将 DMA 的参数重新配置,就实现了多路 ADC 的循环采样;

6. 通过 ATIM 的比较通道 4,去触发 DMA 的 CH4,向 ADC 的转换启动寄存器置位,启动 ADC。

其参考代码如下:

? ADC 的配置:

pYYBAGLH8paARtQRAAMcK9hJb6Y016.jpg

ADC 配置为单次单通道采样,采样完成后可触发 DMA。

? DMA 的配置:

pYYBAGLH8paAJikiAAYOoHUrzqs126.jpgpoYBAGLH8paAD5xOAARHvCmLtSc418.jpg

? ATIM 需要在之前的配置上增加通道 4 的设置,增加的代码如下:

poYBAGLH8paATj-SAAQDVbmzYBA751.jpgpYYBAGLH8paAB7oDAADKtq7nGRA067.jpg

这种方法可以实现多于 4个模拟通道的采样,采样结果自动保存在内存中,并且仅在最后一个通道采样完成后, 进入一次中断服务程序对 DMA 的配置进行复位,所以 CPU 的开销是比较小的,而且可以通过 ATIM 的比较 通道 4 灵活设置采样时机。

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

    关注

    48

    文章

    7966

    浏览量

    156048
  • 单片机
    +关注

    关注

    6068

    文章

    45032

    浏览量

    652230
  • mcu
    mcu
    +关注

    关注

    146

    文章

    18028

    浏览量

    369166
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    无法配置 ADC1 来触发 DMA 传输,怎么解决?

    您好,我无法配置 ADC1 来触发 DMA 传输,以便将 ADC 结果复制到缓冲区中并避免使用 ADC1 中断。 根据用户手册,我发现应该使
    发表于 07-21 06:57

    STM32F723ZET6使用ADC捕获标准正弦波并通过USB主动上报,正弦波重新拟合后存在凹陷峰怎么解决?

    捕获5KHZ频率的正弦波,使用的是100khz定时器2溢出事件触发ADC采样采样144cyc,使用DM
    发表于 06-20 07:22

    普源示波器高级触发功能案例分析

    一、引言 在电子测量领域,示波器的触发功能如同“信号捕手”,决定着波形捕获的精准度与效率。普源示波器(如DHO1204U、MSO5000系列等)不仅具备基础触发模式(边沿触发、脉冲
    的头像 发表于 05-29 09:36 ?158次阅读

    24位同步采样ADC软硬件替换ADS1274动态应变应用方案

    24位同步采样ADC软硬件替换ADS1274动态应变应用方案
    的头像 发表于 04-28 09:52 ?368次阅读
    24位<b class='flag-5'>同步</b><b class='flag-5'>采样</b><b class='flag-5'>ADC</b>软硬件替换ADS1274动态应变<b class='flag-5'>器</b>应用方案

    MCU定时器/计数

    架构与功能特性? 定时器类型与配置? 高级控制定时器?:支持互补PWM输出与刹车功能,适用于电机驱动等高精度控制场景。通用
    的头像 发表于 04-27 13:54 ?345次阅读

    STM32使用外部中断触发ADC采样DMA搬运出现两次进入DMA中断的异常情况,怎么解决?

    STM32使用外部中断触发ADC采样DMA搬运出现两次进入DMA中断的异常情况,使用的HAL库+MX配置的,示波器观察波形
    发表于 03-14 12:46

    STM32H723使用DMA方式实现定时器输入捕获只能执行一次吗?

    目的:我们希望在 STM32H723 平台上以 DMA 模式实现定时器输入捕获,而不中断当前问题:使用 Cube MX 配置相关参数,只使用 TIM4 的 CH2 作为输入采集直接模式,Slave
    发表于 03-12 08:21

    请问什么是同步采样ADC?要实现同步采样要满足什么条件?

    请问什么是同步采样ADC?要实现同步采样要满足什么条件? 谢谢!
    发表于 01-17 07:49

    STM32H743的高精度定时器触发ADC采样

    目前做的是移相全桥,配置出一对可以移相互补的PWM波,目前已经能够产生了,但是,还是想要在滞后桥臂导通时采集数据,即在后桥臂开启时使用hrtim中的ADC触发采样,我这个就是在master
    发表于 01-09 15:49

    tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?

    使用芯片内部ad采样,ad时钟配置为最高100mhz,采样时间配置15时钟周期。timer 200k触发采样,使能dma中断,在
    发表于 12-13 16:56

    ADS131A04如果想实现多个设备的同步触发采样,应该如何实现呢?

    的standby模式,也是如此。这点非常奇怪,如果想实现多个设备的同步触发采样,应该如何实现呢?主要复位可能会消耗4.5ms,希望在
    发表于 12-04 07:13

    详解CKS32F107xx系列的定时器同步功能

    CKS32F107xx系列部分定时器在内部是相连的,可用于定时器同步或链接,方便用户配置不同的同步模式,以便在电机控制、数据采集和PWM信号生成等应用中,
    的头像 发表于 11-26 17:51 ?1098次阅读
    详解CKS32F107xx系列的<b class='flag-5'>定时器</b><b class='flag-5'>同步</b><b class='flag-5'>功能</b>

    ADC3583是否支持多片同步ADC采样同步)?

    使用其内部的抽取滤波时,利用SYNC信号可以实现多片ADC3853的输出IQ数据的同步。——利用这种方式能否满足我的需求(虽然抽取会降低数据采样
    发表于 11-18 06:17

    高级定时器PWM输入模式的配置方法

    我们将向大家介绍高级定时器的另一个常见应用——PWM输入模式。在本节课中,我们将先围绕输入捕获模式展开,并重点描述PWM输入模式和涉及的寄存,最后通过一个实验例程去介绍PWM输入模式的配置方法。
    的头像 发表于 11-08 16:48 ?4535次阅读
    <b class='flag-5'>高级</b><b class='flag-5'>定时器</b>PWM输入模式的配置方法

    运用MSPM0的DMA和Event功能实现ADC多路周期性采样

    电子发烧友网站提供《运用MSPM0的DMA和Event功能实现ADC多路周期性采样.pdf》资料
    发表于 09-06 15:01 ?15次下载
    <b class='flag-5'>运用</b>MSPM0的<b class='flag-5'>DMA</b>和Event<b class='flag-5'>功能</b><b class='flag-5'>实现</b><b class='flag-5'>ADC</b>多路周期性<b class='flag-5'>采样</b>