工程师笔记|TIM DMA burst 输出变频 PWM 波形

发布者:RadiantBreeze最新更新时间:2024-07-10 来源: elecfans关键字:TIM  DMA  burst  PWM  波形 手机看文章 扫描二维码
随时随地手机看文章

1.问题背景

客户需要 MCU 输出一组变频的 PWM 波形来控制外围器件,并且不同频率脉冲的个数也不同。STM32U5 芯片拥有 TIM1/TIM8 高级定时器,还有通用定时器TIM2/TIM3/TIM4/TIM5 以及 TIM15/TIM16/TIM17。


TIM 模块中,可通过修改 ARR 寄存器的值来修改 PWM 的频率。如果使用 TIM1/TIM8 或者 TIM15/TIM16/TIM17,则可以通过修改 RCR 与 CCR 寄存器,来控制脉冲个数及占空比。由于要同时修改多个 TIM 寄存器,需要使用 TIM 的 DMA burst 功能来实现此需求。


2.TIM DMA burst

STM32 片内部分 TIMER 在产生单个定时器事件情况下可以基于特定硬件机制触发多个 DMA 请求,这样产生多个连续的 DMA 传输来实现对多个 TIMER 寄存器的批量访问。


这就是所谓的 TIM DMA burst 功能,这里有两个专用寄存器:

TIMx_DCR :DBSS : 触发 DMA burst 的事件源DBL : DMA burst 传输个数 DBA : DMA burst 传输的 TIM 寄存器基地址索引


TIMx_DMAR :TIM DMA Burst 时,DMA 访问此寄存


3.产生 PWM

本文使用 TIM1 来产生 PWM,在 U575 NECLEO 板上测试,MCU 主频为 100MHz。


使用两个频率分别对应 TIM 寄存器组的值如下:ARR/ RCR/ CCR1

uint32_t pulse1[3] = {1000, 2, 500} ;

uint32_t pulse2[3] = {5000, 1, 2500} ;


即输出 3 个 pulse1 的脉冲后,再输出 2 个 pulse2 脉冲,这样交替输出。


3.1.1. TIM1 配置

TIM1 配置如下,使能寄存器预装载功能。


3de6edb0-8514-11ed-bfe3-dac502259ad0.png


3.1.2. GPDMA 配置

使用 GPDMA 通道 12 的 linked list 模式,并配置为循环模式:


3df8049c-8514-11ed-bfe3-dac502259ad0.png


Linked List 配置中,创建一个 list queue,并添加两个 list node,选择 GPDMA 来执行此 list queue,同样配置为循环模式,指定循环起始节点为 TN1,如下图。


3e112e22-8514-11ed-bfe3-dac502259ad0.png


Linked List 节点配置中,使用 TIM1 update 事件来产生 DMA 请求,指定 DMA 目的地址为 TIMx_DMAR 寄存器,源地址为 pulse1 数组地址。TN2 只需将 pulse1 修改为 pulse2即可。


3e2a4d62-8514-11ed-bfe3-dac502259ad0.png


3.1.3. TIM DMA burst

在 CubeMX 生成代码后,添加以下代码,将 TIM 与 DMA 通道绑定,并配置TIMx_DCR 寄存器:


3e430de8-8514-11ed-bfe3-dac502259ad0.png


3.1.4. 测试结果

测试结果如下图,可以看到两个频率的 PWM 波形交替输出,且脉冲个数也符合需求:


3e5ae9c2-8514-11ed-bfe3-dac502259ad0.png


本篇工程师笔记主要通过在TIM 模块中,修改 ARR 寄存器的值来修改 PWM 的频率满足客户需要 MCU 输出一组变频的 PWM 波形控制外围器件的需求。


关键字:TIM  DMA  burst  PWM  波形 引用地址:工程师笔记|TIM DMA burst 输出变频 PWM 波形

上一篇:基于Gokit3微信宠物屋与机智云的物联网智能家居
下一篇:STM单片机中的按键消抖和FPGA消抖

推荐阅读最新更新时间:2024-11-04 02:25

keil+env在STM32H743上实现pwm呼吸灯
一、工具 keil+Env+STM32CubeMX 二、在Env中勾选本工程需要的pkgs 在RT-Thread Components—- Device Drivers下勾选 Using hardware timer device drivers和Using PWM device drivers 勾选完成后保存、退出更新,再返回此界面查看是否已经更新好(勾好) 最后使用 scons —target=mdk5生成新的工程 会发现工程中多出了一个关键性的文件drv_pwm.c 三、修改配置文件 在 rtconfig.h 中可以查看 RT_USING_HWTIMER 和 RT_USING_PWM 的设备驱动宏定义。 s
[单片机]
keil+env在STM32H743上实现<font color='red'>pwm</font>呼吸灯
单片机控制的步进电机PWM控制程序
8051单片机控制步进电机的C51语言编写的PWM控制程序 #include intrins.h #include stdio.h #include math.h #include UPSD3200.H #include upsd_pwm.h #define uint unsigned int #define uchar unsigned char PSD_REGS PSD8xx_reg _at_ csiop; #define KEYIO (~(PSD8xx_reg.DATAIN_A)) & 0x07 sbit CP=P4^7; sbit U_D=P1^1; void init_system(); // 系统初
[单片机]
LabVIEW中的波形图(WaveformChart)详解
所谓曲线就是一组X与Y对应数值的图形化显示。通常曲线图中的Y值代表了数据值,而X值则代表了时间。波形图控件(waveform chart)可以在Controls工具面板的Modern Graph子面板中找到。这个控件是一个专门用来显示一个或多个数据曲线的数值类型的指示器控件。这个控件经常在循环结构中使用,用来保留与显示以前采集到的数据,并追加新产生的数据,将这些数据以连续更新的方式进行显示。在波形图控件中,Y值表示了新产生的数据,X值表示了时间(通常,每次循环就产生一组新的Y值,而X值则表示了一个循环的时间)。在 LabVIEW中只有一种波形图控件,不过这个控件有三种数据刷新模式。下图就是一个多曲线波形图的例子。 波形
[测试测量]
LabVIEW中的<font color='red'>波形</font>图(WaveformChart)详解
基于FPGA的数字示波器波形合成器研究
引言 波形刷新率是评判数字示波器性能优劣的重要指标之一,它直接体现了示波器抓取波形细节的能力,刷新率越高意味着捕获异常的能力越强。目前国内示波器的最高波形刷新率在200000wfms/s左右,而高于200000wfms/s的基本上依赖进口。国内示波器刷新率做不高的主要原因有2个: ①波形合成技术和国际先进水平相比,差距还比较大; ②波形存储采用外部存储器。 本文通过对示波器波形合成技术的深入研究,提出一种基于FPGA的高刷新率的波形合成器,刷新率可达到400000wfms/s,该波形合成器已经成功应用在高刷新率示波器中。 1、波形三维映射模型 波形数据的三维信息包括:时间,幅度和幅度命中次数。在现代DSO中,可将多次触发后
[测试测量]
基于FPGA的数字示波器<font color='red'>波形</font>合成器研究
STM32定时器产生不同频率的PWM
STM32产生PWM是非常的方便的,要需要简单的设置定时器,即刻产生! (1)使能定时器时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); (2)定义相应的GPIO: /* PA2,3,4,5,6输出- Key_Up,Key_Down,Key_Left,Key_Right,Key_Ctrl */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU
[单片机]
STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收
参考资料: 1、ST HAL库官网资料 2、https://blog.csdn.net/u014470361/article/details/79206352#comments 一、STM32CubeMX配置外部时钟 注意在进行外部时钟配置时,即“High Speed Clock”和“Low Speed Clock”需配置成“Crytal/Ceramic Resonator(低温/陶瓷谐振器)”不能配置为 BYASS Clock Source(时钟脉冲源) ,否则系统起不来。 二、SWD下载接口配置 如果用HAL库不进行SWD或JTAG配置,单片机只能进行下载一次程序,要进行第二次或更多次程序下载,需要按复位键(如
[单片机]
STM32CubeMX HAL库串口+<font color='red'>DMA</font>数据发送不定长度数据接收
数字示波器是应对当今高要求测量挑战的主要角色
  对于从事电子设备设计、制造或维修的人员来说,数字示波器是一个*的工具。在如今快节奏的世界里,工程师们需要的工具来快速准确地解决其测试挑战。数字示波器作为工程师的眼睛,是应对当今高要求测量挑战的主要角色。      示波器早已成为检测电子线路最有效的工具之一,通过观察线路关键节点的电压电流波形可以直观地检查线路工作是否正常,验证设计是否恰当。这对提高可靠性极有帮助。当然对波形的正确分析判断有赖于工程师自身的经验。      数字示波器的用途并不局限在电子领域。通过合适的传感器,数字示波器可以测量各种现象。传感器是响应物理刺激(如声音、机械压力、压强、光线或热量)生成电信号的装置。麦克风是将声音转换为电信号的传感器。      数
[测试测量]
Intersil推出业内最高效、灵活的单芯片解决方案:ISL6446A双路PWM/线性控制器
美国 加州、MILPITAS --- 2013年3月12日 — 全球高性能模拟混合信号半导体设计和制造领导厂商Intersil公司(纳斯达克全球交易代码:ISIL)今天宣布,推出一种新的双路PWM +线性控制器---ISL6446A,为各种宽带和网络应用提供了业内最灵活、高效的电源解决方案。 ISL6446A集成了两个用于同步降压的PWM控制器和一个线性控制器以及其全面的控制、监测和保护功能。它使设计人员能够将4.5V - 24V直流输入轻松转换为多达三路输出电压,并具有全面的保护功能。每路输出都可通过可调整软启动功能进行独立控制。ISL6446A在整个输入和输出负载范围上都具有超高效率,用户能够轻松地设计出电流高达25A的两通
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多开源项目推荐
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved