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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版