你(们)好
有1 kHz,±12 V PWM信号,占空比10 %~53,3。 此信号在0和3.3 伏之间(用于使用ADC进行读数)。 此PWM也由MCU通过计时器生成。 我需要持续测量信号(无论是否使用PWM)。
读取ADC值的最佳方法是什么? 我需要读取ADC两端的电压(上升和下降边缘)当PWM信号处于活动状态时,我需要测量 上升和下降边缘。 但是Sametime,我需要在没有PWM的情况下继续测量信号。
(其EV的控制先导信号)
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你(们)好
有1 kHz,±12 V PWM信号,占空比10 %~53,3。 此信号在0和3.3 伏之间(用于使用ADC进行读数)。 此PWM也由MCU通过计时器生成。 我需要持续测量信号(无论是否使用PWM)。
读取ADC值的最佳方法是什么? 我需要读取ADC两端的电压(上升和下降边缘)当PWM信号处于活动状态时,我需要测量 上升和下降边缘。 但是Sametime,我需要在没有PWM的情况下继续测量信号。
(其EV的控制先导信号)
感谢菲兹的澄清。
有一个工作周期的PWM信号±3,~3,1个10 %。 此信号在0和3.3 伏之间(用于使用ADC进行读数)。 [/引述]好的,那么PWM @ 10 % 占空比的最小"接通"时间似乎是100usec。 不是在上升或下降边缘后立即执行测量,而是在50 usec (20kHz)速率下连续"过度采样"时会怎样? 这种情况的缺点是它将消耗CPU带宽的一大部分。
所以,我想,为了减少CPU的工作量,ADC10有一个窗口比较器模式,它将根据测量值是高于ADC10HI还是低于ADC10LO阈值来生成单独的中断。
下面是一个图表,显示了我所描述的内容。
下面 是一个代码示例,显示如何处理ADC窗口比较器中断。 然后,我将考虑以下问题。 由于您真正关心的是在每次转换后只进行一次测量,因此可以使用下面的方案将CPU中断数限制为每个转换只能进行一次。 完全披露-这只是一个想法,而不是我实际尝试过的。 您可能需要调整一些事项才能使其正常工作。
设置
- 确保设置了适当的HI和LO阈值
- 清除所有中断标志并启用ADC10HIIE和ADC10LOIE
- 我相信您会设置"重复单通道模式"并将ADC10MSC位设置为执行连续采样
采样和ISR处理程序
- 示例1 -电压> ADC10HI阈值
- ADC10HIIFG现在设置为1。
- ADC10 ISR的CPU矢量和ISR的ADC10HI部分执行以下操作:
- 清除ADC10HIIFG
- 读取ADC结果
- 禁用ADC10HIIE以防止后续ADC10HI中断。
- 启用ADC10LOIE
- 示例2 -电压> ADC10HI阈值
- ADC10HIIE = 0 SO,ADC10LOIFG和ADC10HIIFG = 0,CPU未中断
- 示例#3-电压< ADC10LO阈值
- ADC10LOIFG现在设置为1。
- ADC10 ISR的CPU矢量和ISR的ADC10LO部分执行以下操作:
- 清除ADC10LOIFG
- 读取ADC结果
- 禁用ADC10LOIE以防止后续ADC10LO中断
- 启用ADC10HIIE
- 示例4 -电压< ADC10LO阈值
- ADC10LOIE =0 SO,ADC10LOIFG和ADC10HIIFG =0且CPU未中断
- 样本#5... -重复此序列
希望这能有所帮助。 请告诉我任何一种方法。