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

STM32F103VE ADC某点电压不准

[复制链接]
mingda33 提问时间:2015-1-9 10:28 /
用 STM32F103VE 单片机的DMA测输入电压,在输入电压从0V升到2.5V过程中,单片机在0.82V左右部分测出来结果偏差大,以下是我的部分测试记录

万用表测试电压     单片机计算电压
      0.800                      0.800
      0.810                      0.810
      0.820                      0.817
      0.830                      0.819
      0.840                      0.840


请问有人遇到过吗?这个神奇的问题


收藏 评论7 发布时间:2015-1-9 10:28

举报

7个回答
mingda33 回答时间:2015-1-9 10:33:39

//DMA方式ADC转换
void AdcInit_DMA(void)
{

        //ADC相关管脚初始化
        GPIO_InitTypeDef GPIO_InitStructure;
        /* Configure PB.00 PB.01 (ADC Channel 08) as analog input -------------------------*/
        //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;   
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        /* Configure PA.00 PA.01  PA.07  PA.06 as analog input -------------------------*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* Configure PC.00-05 as analog input -------------------------*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        /* 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 = 16;
        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);
         
        /* ADC1 configuration ------------------------------------------------------*/
        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 = 16;
        ADC_Init(ADC1, &ADC_InitStructure);
       
        /* ADC1 regular channel14 configuration */
        ADC_RegularChannelConfig(ADC1, ADC_Channel_0,  1, ADC_SampleTime_71Cycles5);        //AD输出1通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1,  2, ADC_SampleTime_71Cycles5);        //AD输出2通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_2,  3, ADC_SampleTime_71Cycles5);        //AD输出3通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_3,  4, ADC_SampleTime_71Cycles5);        //AD输出4通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_5,  5, ADC_SampleTime_71Cycles5);        //AD输出5通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_6,  6, ADC_SampleTime_71Cycles5);        //AD输出6通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_7,  7, ADC_SampleTime_71Cycles5);        //AD输出7通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_8,  8, ADC_SampleTime_71Cycles5);        //AD输出8通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_9,  9, ADC_SampleTime_71Cycles5);        //AD输出9通道
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4,  10, ADC_SampleTime_71Cycles5);        //
        ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 11, ADC_SampleTime_71Cycles5);        //
        ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 12, ADC_SampleTime_71Cycles5);        //
        ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 13, ADC_SampleTime_71Cycles5);        //


        ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 14, ADC_SampleTime_71Cycles5);        //
        ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 15, ADC_SampleTime_71Cycles5);        //
        ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 16, ADC_SampleTime_239Cycles5);        //
       
       
        /* Enable ADC1 DMA */
        ADC_DMACmd(ADC1, ENABLE);
       
        /* Enable ADC1 */
        ADC_Cmd(ADC1, ENABLE);
       
        /* Enable ADC1 reset calibaration register */   
        ADC_ResetCalibration(ADC1);
        /* Check the end of ADC1 reset calibration register */
        while(ADC_GetResetCalibrationStatus(ADC1));
       
        /* Start ADC1 calibaration */
        ADC_StartCalibration(ADC1);
        /* Check the end of ADC1 calibration */
        while(ADC_GetCalibrationStatus(ADC1));
         
        /* Start ADC1 Software Conversion */
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);

    ADC_TempSensorVrefintCmd(ENABLE); //温度检测允许

        /* Enable ADC1 EOC interupt */
        ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
}
wenyangzeng 回答时间:2015-1-9 11:18:02
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;这里只有6个

你的ADC总共使用了14个通道,而你的DMA缓冲区却是16个通道,数据会出现交叉的。
拼命三郎 回答时间:2015-1-9 12:33:25
和外围电路也是有关系的
pythonworld 回答时间:2015-1-9 12:42:54
万用表精度是多少?是否有误差。
mingda33 回答时间:2015-1-24 22:42:09
不好意思,这段时间出差了,没有过来看。 表是5位半的。我测试了好几个板子,都是这个电压点不准,万用表测的结果是线性的,而单片机一到这个电压点就不准了,过了这个点又准了。关于通道的问题,因为这个底层不是我写的,我再研究一下,谢谢回复。
mingda33 回答时间:2015-1-24 22:42:58
外围很简单,我就弄了一个滑动变阻器,一边滑动,一边用万用表测电压,一边看单片机读出的电压
拼命三郎 回答时间:2015-1-25 02:33:26
stm32.jpg

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版