你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L151定时器上升沿触发ADC采样:低电平期间多出现一次采样动作

[复制链接]
Neo2023 提问时间:2024-4-12 13:52 / 已解决

使用定时器触发ADC采样PWM正脉冲时刻的负载电压电流,触发ADC的定时器用的就是产生PWM的定时器,设置为上升沿触发,测试发现每个PWM周期内ADC被触发了两次,一次是PWM上升沿的时候,另一次是PWM低电平的时候,不知道为什么每个PWM周期内会触发第二次采样?

此外,如何确保ADC采样到PWM正脉冲的中间时刻呢?

测试波形 CH1: 定时器产生的其中一路PWM波形(两路PWM交替开启)

CH2: ADC采样完成DMA中断函数-连续反转GPIO输出的波形

image.pngimage.png

配置如下:

定时器4:产生两路PWM信号驱动负载,同时将输出触发设置为 Update Event触发ADC采样 image.png

ADC: 三个通道连续采样,由定时器4的上升沿触发,DMA循环模式搬运采样结果到内存-开启DMA中断

image.png

image.png

image.png

DMA中断:连续反转GPIO,便于用示波器观测采样时机

image.png

收藏 评论5 发布时间:2024-4-12 13:52

举报

5个回答
butterflyspring 最优答案 回答时间:2024-4-12 14:32:46
DMA 通常会有传输一半中断,和传输完成中断。

通常比较合适的做法是将代码放在完成中断的回调函数里。

所以放在 IRQhandler 里面很可能执行了两次。

不妨调试看看是不是这个原因。
xmshao 回答时间:2024-4-12 16:05:15
感觉有些基础概念要厘清。


你到底是基于PWM的比较事件触发ADC 还是基于ADC的周期性更新事件触发ADC;


你提到的上沿是模糊的说法,PWM输出可以自由配置,即使相同CCR和ARR值不同的输出模式,上下沿的位置会不同;


你现在到底是连续采样还是基于定时器触发才采样,基于你现在的配置,就是每次定时器更新事件触发3次采样。


你用到DMA完成中断,这个中断跟你一轮完成的数据个数有关,假设你现在传输3个数据为一轮,即发生三次采样后发生完成中断;
Neo2023 回答时间:2024-4-12 16:22:27

xmshao 发表于 2024-4-12 16:05
感觉有些基础概念要厘清。</p>
<p>

您好,

我的目的是每次定时器触发3个通道的ADC采样(每次触发每个通道都要采样一次),预期的采样时间是PWM输出为正的那段时间里(最好是正中间)。

Neo2023 回答时间:2024-4-12 17:08:20

butterflyspring 发表于 2024-4-12 14:32
DMA 通常会有传输一半中断,和传输完成中断。</p>
<p>通常比较合适的做法是将代码放在完成中断的回调函数里。

谢谢!确实是这个原因导致的。

Zona 回答时间:2024-5-10 17:44:14

butterflyspring 发表于 2024-4-12 14:32
DMA 通常会有传输一半中断,和传输完成中断。</p>
<p>通常比较合适的做法是将代码放在完成中断的回调函数里。

你好,我这里请教几个稍有偏离的问题,希望不会太麻烦你:

传输一半中断,是有什么用处?

是否可以关闭这个传输一半中断?

谢谢~

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版