harper2xs 发表于 2019-10-31 21:29:15

STM32F407通过外部中断调用软件AD转换出现的问题


u16 Get_Adc(u8 ch)   
{

      ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_3Cycles );                                    

      ADC_SoftwareStartConv(ADC1);               

      while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));

      return ADC_GetConversionValue(ADC1);      



void EXTI0_IRQHandler(void)
{
          adcx=Get_Adc(ADC_Channel_5);
          temp=(float)adcx*(3.3/4096);
          printf("\ntemp=%lf\r",temp);
          EXTI_ClearITPendingBit(EXTI_Line0);      
}      

初始化函数略

外部中断上升沿触发,如图那个脉冲信号,待测信号与同步信号有几十纳秒的延迟。实际检测中发现,AD采集结果接近2V,而实际待测信号用示波器观察只有600Mv,但是改变待测信号大小变化趋势是相同的。同样,用此程序测量直流信号却是准确的。程序思路检查很多遍感觉没有问题,百思不得其解。各位大佬可以帮忙看看吗?

glenxu 发表于 2019-10-31 21:29:16

mylovemcu 正确!用示波器检查因为有长线延迟和电路电容等影响,看不到最大值或上升(过冲)的脉冲,但STM32线路短,响应快,测到了这个变化。这个好像叫上升沿的振铃效应,一般简单的电路都存在,有感性的下降沿也存在,属于正常,多采点数据,可以做频谱分析了;P

mylovemcu 发表于 2019-11-1 09:28:16

脉冲信号会有尖峰电压可能检测到了尖峰电压

harper2xs 发表于 2019-11-1 10:09:06

mylovemcu 发表于 2019-11-1 09:28
脉冲信号会有尖峰电压可能检测到了尖峰电压

从示波器上看没有那么大的尖峰电压啊,就算是尖峰这个差距也太大了吧

harper2xs 发表于 2019-11-1 10:10:36

mylovemcu 发表于 2019-11-1 09:28
脉冲信号会有尖峰电压可能检测到了尖峰电压

并且,即使触发中断后加入很长时间的延时,采的值与示波器显示的波形都有很大差距

harper2xs 发表于 2019-11-1 10:14:26

mylovemcu 发表于 2019-11-1 09:28
脉冲信号会有尖峰电压可能检测到了尖峰电压

待测信号不是脉冲信号,脉冲信号仅用来触发外部中断

harper2xs 发表于 2019-11-1 11:06:34

glenxu 发表于 2019-11-1 10:36
mylovemcu 正确!用示波器检查因为有长线延迟和电路电容等影响,看不到最大值或上升(过冲)的脉冲,但STM3 ...

void EXTI0_IRQHandler(void)
{
          delay_us(50);
          adcx=Get_Adc(ADC_Channel_5);
          temp=(float)adcx*(3.3/4096);
          printf("\ntemp=%lf\r",temp);
          EXTI_ClearITPendingBit(EXTI_Line0);      
}
你确定是振铃效应?我在开启AD采样之前加入延时,AD采集的值与示波器看到的值依然差距很大

butterflyspring 发表于 2019-11-6 11:20:59

在AD转换前翻转一个IO作为触发信号,这时应该比较准确的量测触发时刻和电平。另外外部串联的电阻和ADC的参考电压也要确保正常:)
页: [1]
查看完整版本: STM32F407通过外部中断调用软件AD转换出现的问题