在线时间0 小时
UID319355
ST金币0
蝴蝶豆0
注册时间2008-5-24
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
我用STM32自带的的ad测量一个直流24V电压,如果系统上电后在接入24V时,测量的数据比较稳定,如果上电前就接入24V,测量的数据变化的很大,我采用分压电阻,后面加了一个跟随器,有高手知道怎么处理吗?
以下是我AD处理函数:
/*********************************************************************/
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
/* Configure PA.00 (ADC Channel0) as analog input */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // ADC1和ADC2工作在独立模式 ;
ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 模数转换工作在扫描模式(多通道)模式 ;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 模数转换工作在连续模式 ;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 转换由软件而不是外部触发启动 ;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // ADC数据右对齐 ;
ADC_InitStructure.ADC_NbrOfChannel = 1; // 顺序进行规则转换的ADC通道的数目 1 ;
ADC_Init(ADC1, &ADC_InitStructure);
// 设置指定ADC的规则组通道1,设置它们的转化顺序和采样时间为55.5周期 ;
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1,ADC_SampleTime_239Cycles5);
ADC_DMACmd(ADC1, ENABLE); // 使能指定的ADC的DMA请求 ;
ADC_Cmd(ADC1, ENABLE); // 使能指定的ADC ;
ADC_ResetCalibration(ADC1); // 重置指定的ADC的校准寄存器 ;
while(ADC_GetResetCalibrationStatus(ADC1)); // 获取ADC重置校准寄存器的状态 ;
ADC_StartCalibration(ADC1); // 开始指定ADC的校准程序 ;
while(ADC_GetCalibrationStatus(ADC1)); // 获取指定ADC的校准状态 ;
ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 使能指定的ADC的软件转换启动功能 ;
}
/********************************************************************/
/*************************************************************
* 函数名: u16 ReadADC()
*功能描述:读取ADC的值,并进行软件滤波
*参数输入:无
*输出参数:电压值,返回数据为电压扩大100倍,24.33->2433
*************************************************************/
u16 ReadADC()
{
u8 i,j,num=80;
u16 value_buf[150];
float ad_value[150],temp=0 ,sum=0;
for(i=0;i |
-
|