各位大神好,本人现在在做一个STM32L151+ACS722电流检测的项目。但ACS722芯片网上案例较少,测下来会遇到采样的电压不准确的问题。
我的项目会有五个等级的电流传到ACS中,传入芯片的最大电流等级0.27A,最小等级电流才0.09A。我用示波器测量了下,ACS722出来的电压是基于1.66V左右,50HZ的正弦交流电压,峰峰值最大200mV内的电压。我采样由ACS722传出来的电压,然后写了个方均根算法计算一个周期内的电压有效值,程序中未启用DMA,但测量下来发现五个等级对应的有效值几乎差不多,不清楚是什么原因,程序和示波器截图见下
这是我ADC配置,单通道采样,精度2的12次方,不采用DMA,AC采样频率是16MHZ,转换周期4Cycles
void ADC_Config(u8 ADC_Channel)
{
ADC_InitTypeDef ADC_InitStructure; //
RCC_HSICmd(ENABLE); //
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; //
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //
ADC_InitStructure.ADC_NbrOfConversion = 1; //
ADC_Init(ADC1, &ADC_InitStructure); //
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1 ,ADC_SampleTime_4Cycles);//
ADC_DelaySelectionConfig(ADC1, ADC_DelayLength_Freeze);
/* Enable ADC1 Power Down during Delay */
ADC_PowerDownCmd(ADC1, ADC_PowerDown_Idle_Delay, ENABLE); //
ADC_Cmd(ADC1,ENABLE); //
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
{
}
}