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

    文章

    8255

    浏览量

    162457
  • 单片机
    +关注

    关注

    6074

    文章

    45341

    浏览量

    663683
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18618

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32A030微控制定时器

    CW32A030 微控制内部集成多达四个通用定时器个基本定时器和一个高级控制定时器。 1
    发表于 12-04 06:47

    CW32L010+定时器介绍

    :一组,专为低功耗应用而设计,能够在保持低功耗的同时实现定时功能高级控制PWM定时器:一组,支持PWM输出和
    发表于 12-01 07:53

    CW32L0开发板学习记录四,高级定时器ATIM学习

    一:CW32L0系列几种定时器介绍: CW32L010 微控制内部集成一个通用定时器个基本定时器、一个低功耗
    发表于 12-01 07:35

    CW32定时器及中断介绍

    可以由硬件自 动执行触发信号的滤波操作,还能令触发事件产生中断和 DMA 请求。 低功耗定时器:CW32L083 内部集成 1 个 16 位低功耗
    发表于 12-01 07:08

    CW32的ADC视线,DMA扩展采样思路

    如果需要对超过 4 路的模拟量进行采样,则需要结合 DMA功能,以实现较少的 CPU 参与。其思路如下: 1.ADC 配置为单通道单次
    发表于 11-13 08:09

    定时器同步之并行模式

    事件作为 TRGOUT 源,用于触发两个从定时器。TMR3 和 TMR4 作为从定时器,开启挂起模式用于与主定时器进行同步。并且使能 TMR
    发表于 09-22 09:56

    定时器触发3路ADC同时采样指定次数

    示例目的 控制 3 路 ADC 相等时间间隔,采样 N 次。 注:本应用笔记对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。 支持
    发表于 09-10 16:06

    STM32F405RGT6 ADC2+TIM4触发+DMA(DMA2_Stream2_CH1)+DMA中断会死机,怎么解决?

    ADC_SoftwareStartConv(ADC2);//使能指定的ADC2的软件转换启动功能 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitSt
    发表于 08-04 07:16

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

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

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

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

    MCU定时器/计数

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

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

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

    请问什么是同步采样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