你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F105,ADC采集数据时,IO电压一样,采集数据不一样

[复制链接]
darren_liu 提问时间:2016-7-13 11:48 /
各位大神好

如题,STM32F105,DMA方式采集ADC数据,其中两路,IO口电压一样,但采集数据不一样。数据相差较大,且差值不固定。

请大神指导。


void SysInit_ADC(void)
{
         ADC_InitTypeDef ADC_InitStructure;
         RCC_ADCCLKConfig(RCC_PCLK2_Div2);
/* Enable ADC1*/
           RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
         ADC_DeInit(ADC1);
/* Initialize the ADCx according to the ADC_InitStructure members */
         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
         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_InitStructure.ADC_NbrOfChannel = 7;
         ADC_Init(ADC1,&ADC_InitStructure);
         ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_41Cycles5);
         ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_41Cycles5);
         ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_41Cycles5);
         ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_41Cycles5);
         ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_41Cycles5);
         ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 6, ADC_SampleTime_41Cycles5);
         ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 7, ADC_SampleTime_41Cycles5);
/* Enable ADC1 DMA */
           ADC_DMACmd(ADC1, ENABLE);
/* Enable ADC1 */
         ADC_Cmd(ADC1,ENABLE);
/* Enable ADC1 reset calibration register */   
           ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
           while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibration */
           ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
           while(ADC_GetCalibrationStatus(ADC1));
         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
void SysInit_DMA(void)
{
         DMA_InitTypeDef DMA_InitStructure;
         /* Enable DMA1 clock */
           RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
           /* DMA1 channel1 configuration ----------------------------------------------*/
           DMA_DeInit(DMA1_Channel1);
           DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
           DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADCConvertedValue;
           DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
           DMA_InitStructure.DMA_BufferSize = 7;
           DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
           DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
           DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
           DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
           DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
           DMA_InitStructure.DMA_Priority = DMA_Priority_High;
           DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
           DMA_Init(DMA1_Channel1, &DMA_InitStructure);
           /* Enable DMA1 channel1 */
           DMA_Cmd(DMA1_Channel1, ENABLE);
}

//******************************************************************************************
//AD采集
//每10MS调用
//******************************************************************************************
void ADC_Scan(void)
{
         Filter_Buf00[Filter_Pointer] = (u16)(ADCConvertedValue[0]>>2);
         Filter_Buf01[Filter_Pointer] = (u16)(ADCConvertedValue[1]>>2);
         Filter_Buf02[Filter_Pointer] = (u16)(ADCConvertedValue[2]>>2);
         Filter_Buf03[Filter_Pointer] = (u16)(ADCConvertedValue[3]>>2);
         Filter_Buf05[Filter_Pointer] = (u16)(ADCConvertedValue[4]>>2);
         Filter_Buf04[Filter_Pointer] = (u16)(ADCConvertedValue[5]>>2);
         Filter_Buf06[Filter_Pointer] = (u16)(ADCConvertedValue[6]>>2);
         Filter_Pointer++;
         if(Filter_Pointer >= 10) //去极值求平均        Filter_Remove_Extremum         
         {
                 Filter_Pointer = 0;
                 Aircondition.S_InTemp = Avr_Filter(Filter_Buf0,Filter_Remove_Extremum(Filter_Buf00));
         //        Aircondition.S_OutTemp = Avr_Filter(Filter_Buf1,Filter_Remove_Extremum(Filter_Buf01));
                 Aircondition.S_Def0Temp = Avr_Filter(Filter_Buf2,Filter_Remove_Extremum(Filter_Buf02));
         //        Aircondition.S_LNTemp = Avr_Filter(Filter_Buf3,Filter_Remove_Extremum(Filter_Buf03));
                 Aircondition.S_VOL = Avr_Filter(Filter_Buf4,Filter_Remove_Extremum(Filter_Buf04));
         //        Aircondition.S_PTC1Temp = Avr_Filter(Filter_Buf5,Filter_Remove_Extremum(Filter_Buf05));
         //        Aircondition.S_PTC2Temp = Avr_Filter(Filter_Buf6,Filter_Remove_Extremum(Filter_Buf06));
//                ADC_AnalogToDigtal();
         }
}
收藏 评论3 发布时间:2016-7-13 11:48

举报

3个回答
darren_liu 回答时间:2016-7-13 11:48:59
自己顶一下,大神速来盖楼。谢谢
stary666 回答时间:2016-7-13 16:05:13
换个试试看,,,,,,,,,,,,
darren_liu 回答时间:2016-7-13 17:13:39
stary666 发表于 2016-7-13 16:05
换个试试看,,,,,,,,,,,,

板子换过,电位器也换过,都有这个问题。引脚电压一样,应该是软件问题。但是ADC采集数据的程序都一样的,所以有点困惑

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版