STM32
直播中

人走了

9年用户 906经验值
擅长:制造/封装 光电显示
私信 关注
[问答]

STM32L151定时器上升沿触发ADC采样,为什么每个PWM周期内会触发第二次采样?

使用定时器触发ADC采样PWM正脉冲时刻的负载电压电流,触发ADC的定时器用的就是产生PWM的定时器,设置为上升沿触发,测试发现每个PWM周期内ADC被触发了两次,一次是PWM上升沿的时候,另一次是PWM低电平的时候,不知道为什么每个PWM周期内会触发第二次采样?
此外,如何确保ADC采样到PWM正脉冲的中间时刻呢?
测试波形CH1: 定时器产生的其中一路PWM波形(两路PWM交替开启)
CH2: ADC采样完成DMA中断函数-连续反转GPIO输出的波形

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

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



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





回帖(2)

胡毅秉

2024-5-24 15:29:40
DMA 通常会有传输一半中断,和传输完成中断。

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

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

不妨调试看看是不是这个原因。
举报

刘辉

2024-5-24 16:52:25
根据您的描述,您的STM32L151定时器在PWM周期内触发ADC采样两次,一次在PWM上升沿,另一次在PWM低电平。这可能是由于以下几个原因:

1. 定时器配置问题:请检查定时器的配置,确保它只在一个PWM周期内触发一次ADC采样。检查定时器的预分频器、自动重载寄存器和捕获/比较模式寄存器的设置。

2. ADC触发源设置问题:请检查ADC的触发源设置,确保它是正确配置为定时器触发。在ADC的配置寄存器中,设置正确的触发源和触发边缘。

3. DMA中断问题:您提到使用DMA中断函数来反转GPIO输出。请检查DMA中断函数的实现,确保它不会意外地触发额外的ADC采样。

为了确保ADC采样到PWM正脉冲的中间时刻,您可以尝试以下方法:

1. 调整定时器的捕获/比较模式寄存器,以确保ADC在PWM正脉冲的中间时刻触发。

2. 使用定时器的输入捕获功能来测量PWM信号的周期和占空比,然后根据这些信息计算PWM正脉冲的中间时刻,并在该时刻触发ADC采样。

3. 如果可能,使用另一个定时器来生成一个与PWM正脉冲中间时刻同步的触发信号,然后将该触发信号用作ADC的触发源。

最后,请确保您的硬件连接和软件实现都是正确的,以避免意外的触发和采样。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分