• 383查看
  • 0回复

[芯片硬件] 定时器触发ADC时可能遇到的几种情形

[复制链接]


该用户从未签到

发表于 27-4-2024 10:11:25 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


有人使用STM32G4芯片开发产品,其中有TIM8触发ADC1的操作。TIM8采用中心对齐计数模式,RCR=3,即每4次溢出产生1次更新事件。如下图所示,现在要求在每个计数周期的上坡段基于通道5、通道6的OCREF信号上升沿来触发ADC两次。ADC用到2个注入通道,工作在间断转换模式,即每来1次触发就转换1个通道,循环进行。

下面实验的两个ADC通道针对同一内部模拟信号进行分时采样,并基于ADC中断提取转换结果。【下图闪电符号表示定时器OCREF信号沿对ADC的触发】

定时器触发ADC时可能遇到的几种情形w2.jpg

使用STM32CubeMx对TIM8的时基参数配置如下【注意绿色箭头所指的TRGO2】:

定时器触发ADC时可能遇到的几种情形w3.jpg

利用STM32CubeMx对ADC的配置如下:

定时器触发ADC时可能遇到的几种情形w4.jpg

保持上面TIM8和ADC1基本配置不变,并令TIM8工作在单脉冲模式,RCR=3的条件,我们通过调整部分用户代码顺序和CCR5/CCR6的参数,可能遇到下面几种情形。

第一种情形,先启动ADC,之后启动TIMER。

HAL_ADCEx_InjectedStart_IT(&hadc1);

HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);

CCR5和CCR6的参数如下图配置。

定时器触发ADC时可能遇到的几种情形w5.jpg

这里TIM8的RCR=3,工作在单脉冲模式,最后得到了我们预期的4个正确结果。

第二种情形,基于第一种情形的全部配置,我们仅将其中的CCR5/CCR6参数做调整,让二者的值尽可能贴近点。最后我们发现只能得到2个正确结果。

定时器触发ADC时可能遇到的几种情形w6.jpg

明明4次触发,怎么只得到2个ADC结果呢?

原因是第一次通道5上沿信号触发ADC后,当通道6的上沿信号第二次来触发ADC时,此时ADC的前次转换还在进行中,使得第二次触发失效了。即每个上坡段实际上只有1次有效触发,最终2个计数周期下来自然只有2个转换结果。【下图黄色圈住的事件发生在前次触发的ADC过程中而失效】

定时器触发ADC时可能遇到的几种情形w7.jpg

第三种情形,配置跟第一种情形基本一样,并避开第二种情形中CCR5/CCR6参数值过于贴近的配置。但用户代码跟第一种情形有点不一样,即像下面写法,先启动TIMER,然后启动ADC。

HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1);

HAL_ADCEx_InjectedStart_IT(&hadc1);

CCR5/CCR6的参数配置如下图所示,最后我们却只得到3个正确的ADC结果。

定时器触发ADC时可能遇到的几种情形w8.jpg

这里的3个结果又是怎么出来的呢?

原因在于第一次TIMER触发信号产生时,ADC的启动准备尚未完成,导致第一次触发无效,而后面的3次触发不再存在ADC尚未启动的情形,所以后面3次触发都得到有效转换。3个结果就是这么来的。结合代码和下图示意来理解。

定时器触发ADC时可能遇到的几种情形w9.jpg

我在上面抛砖引玉似地介绍了基于TIMER的OCREF信号触发ADC可能遇到的情形,希望给相关同仁一些提醒、启示或参考。在使用定时器触发ADC时,注意定时器触发事件与ADC启动准备的前后关系、ADC转换时间与相邻两次的触发间隔的长短关系等等。

我们知道,TIMER触发ADC,既可以基于OCREF的边沿事件,也可以基于定时器的其它定时事件,比方更新事件、比较事件,使用这些定时事件触发ADC跟使用OCREF信号触发ADC还略有不同,我们在应用时也须加以注意。




该用户从未签到

发表于 12-3-2025 02:22:10 | 显示全部楼层
定时器触发ADC时可能遇到以下几种情形:

1. 触发频率不稳定:由于定时器计数模式的特性,若外部干扰或内部时钟偏差导致计数频率波动,可能影响到ADC的触发频率。
2. 触发时序问题:在每次计数周期的上坡段基于通道5、通道6的OCREF信号上升沿触发ADC,若信号沿变化延迟或抖动,可能导致ADC触发时序错乱。
3. 数据同步问题:在两个ADC通道分时采样同一内部模拟信号时,若采样时刻存在偏差,可能导致数据同步性问题。

针对您使用的STM32G4芯片和TIM8配置,建议优化定时器时钟源、合理配置ADC注入通道的转换顺序和采样时间,确保稳定的触发和准确的采样。同时,注意处理可能的干扰和抖动问题,确保数据准确性。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 12-3-2025 02:22:10 | 显示全部楼层
基于您给出的描述和要求,使用STM32G4芯片的TIM8触发ADC1时,可能会遇到以下几种情形:

1. 定时器溢出触发:每4次溢出产生一次更新事件,确保ADC转换在正确的时间点启动。
2. OCREF信号上升沿触发:在计数周期的上坡段,基于通道5、通道6的OCREF信号上升沿来触发ADC。这确保了精确的采样时刻。
3. ADC转换模式:采用间断转换模式,每次触发转换一个通道。这要求正确配置ADC的注入通道以支持这种模式。
4. 分时采样:两个ADC通道针对同一内部模拟信号进行分时采样。要确保采样间隔和时序正确,以避免信号波动影响采样结果。
5. ADC中断处理:基于ADC中断提取转换结果,要求正确处理中断服务程序(ISR),以确保数据处理的实时性和准确性。

使用STM32CubeMx配置TIM8时基参数时,应确保定时器参数(如预分频器、计数器值等)与ADC触发要求相匹配,以实现精确的定时和触发。同时,还需注意ADC的配置参数(如转换周期、分辨率等)以满足应用需求。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 12-7-2025 01:02 , Processed in 0.280562 second(s), 37 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.