SDK应用_MD14_ETMR触发PTU延时触发ADC转换
-
- 前言
- 需求1:在eTMR硬件触发后需要延时一段时间后再进行ADC采样;
- 需求2:在一个etmr周期内需要多个硬件触发点且触发点需要自定义(不是mid或mod等位置)进行ADC采样;
- 需求3:在etmr硬件触发ADC采样后使用DMA进行ADC数据的传输;
基于以上需求,本demo 选用eTMR+PTU模块(可编程触发单元)+ADC+DMA的ADC采样方案,在eTMR模块计数开始时(即init trig)触发PTU工作,再通过PTU配置不同的通道进行不同的延迟时间触发ADC采样,最后使用DMA通道进行ADC采样数据的传输;
PTU模块可以根据外部触发对ADC采样进行可编程的延时,PTU设置的延时时间结束后会自动触发ADC采样,PTU模块介绍如下图;

2. 基础工程配置
型号:YTM32B1MD14
配置工具版本:3.0.0
SDK版本:1_4_0
2.1 功能要求
以PWM频率为16Khz为例,则PWM周期值为1/16k=62.5us,如下任选三个触发点进行ADC采样,共采集3个通道:
在PWM计数开始后延时3.34us,采集1次ADC电压
在PWM计数开始后延时16.67us,采集1次ADC电压
在PWM计数开始后延时41.67us,采集1次ADC电压
2.2 配置eTMR模块
MD14的FAST_BUS_CLK默认是120Mhz,分频配置为2分频(具体分频值根据频率进行计算,注意不能超过最大计数),配置eTMR在初始值时生成触发信号;

配置输出16Khz的PWM;

2.3 配置TMU模块
配置TMU通道,一个触发通道,两个监控通道(后两个通道无实际用途,测试使用,实际项目可不配置);

2.4 配置PTU模块
PTU时钟固定是FAST BUS CLOCK = 120M(详情参考IPC章节);
由于PWM的频率是16K,周期是62.5us,且PTU的MOD值(计数值大值)为16位=65535,所以PTU时钟可以与etmr保持一致,这样每个cnt计数的时间也是一致的:
故PTU配置如下:
Prescaler divider = 2
Multiplication factor = 1
频率为:PTU_TIM = 120MHz /(21) = 60MHz,1个cnt计数值为:1/MHz = 0.0167us;

2.5 配置ADC模块
ADC配置分为两套:中断方式和DMA方式;
中断方式:配置3个采样通道,一次触发采一个通道,PWM一个周期共3次触发刚好采样3个ADC通道各一次,使用中断方式进行ADC读值;

DMA方式:配置3个采样通道,每次触发采集整个序列即配置的全部3个通道,使用DMA方式进行ADC读值;

3. 代码编写
3.1 PTU通道属性配置
3.1.1. 设计PTU总周期值
PTU和etmr的时钟源都是Fast_bus,且配置的两者时钟分频值也一致,故两者单个cnt计数值相同;
16Khz的PWM周期值为:1/16k = 62.5us
PTU频率为:120MHz /(21) = 60MHz
单个CNT计数值为:1/60MHz = 0.0167us
PTU总计数周期:62.5us/0.0167us = 3750 count,PTU周期和计时精度与eTMR保持一致
3.1.2. 计算PTU通道延迟
延时3.34us(ch0): 3.34us / 62.5us * 3750 = 200
延时16.67us(ch1):16.67us / 62.5us * 3750 = 1000
延时41.67us(ch2):41.67us / 62.5us * 3750 = 2500
3.1.3. 配置PTU通道参数
定义:PTU_PERIOD_COUNT = 3750
定义:PTU_BASE_COUNT = 0,表示PWM的计数值起始值为0,与PWM的init计数值保持一致;
定义:PTU_OFFSET_COUNT0 = 200,配置PTU_CH0从PTU接收eTMR的trigger到触发ADC采样的时间间隔
定义:PTU_OFFSET_COUNT1 = 1000,配置PTU_CH1从PTU接收eTMR的trigger到触发ADC采样的时间间隔
定义:PTU_OFFSET_COUNT2 = 2500,配置PTU_CH2从PTU接收eTMR的trigger到触发ADC采样的时间间隔

3.2 PTU通道使能
使能PTU通道0-2,配置工具无此配置项,需在工程中手动配置;

3.3 PTU模块初始化

3.4 ADC两种方式配置介绍
DMA方式:

中断方式:

4. 实验验证
将代码下载进芯片,逻辑分析仪监测PWM(eTMR_CH0)、PTE10(TMU_OUT4)和PTE11(TMU_OUT5);- 运行中断方式代码:

中断正常进入,采样值也可通过watch正常观测;


通道2对应的是PWM的周期,16Khz;
通道0对应的是eTMR初始化值的触发信号,每个周期开始时,即cnt=0时触发;
通道1对应的是ADC通道转换完成信号,可以看到每个周期有三个完成信号,对应3个PTU延时通道配置;
可以看到通道0到通道1第一和第三个信号之间的距离为4.17us和42.52us,与我们计算值的3.34us和41.67us都是0.85us的差值,属于正常测量误差,即我们的配置已经正常生效; - 运行DMA方式代码:

代码正常运行,ADC采样结果持续刷新,不会进中断;


同ADC中断方式观测结果:etmr每个周期都能触发一次trig信号给到PTU,每个etmr周期PTU都会有三个不同位置的延时触发ADC采样,与预期配置一致;
可以看到通道0到通道1第一和第二个信号之间的距离为4.19us和17.52us,与我们计算值的3.34us和16.67us都是0.85us左右的差值,属于正常测量误差,即我们的配置已经正常生效;
demo代码:PWM_ADC_HW_PTU_DMA.zip
-
H HAIYANG 被引用 于这个主题
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...