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

AD采集的值没有太大变化,可能是有哪些原因呢?

[复制链接]
watercici 提问时间:2018-10-13 11:04 /
现象:我现在用AD采集电压值,但是电压从3.3V增加到4.7V了,可是AD采集的值还是没有太大变化,基本在0x0800左右变化,换算成相应的模拟值,一直在1.0V左右。
我的AD用的是STM32内部的12位的,其具体设置:
希望大家给些思路,大概可能由哪些原因造成的,(我的这个程序之前没有问题,只是在原来的程序上新加了部分功能,可是AD这部分程序都没有变化)谢谢。
  1. void init_adcl(void)
  2. {
  3.         ADC_InitTypeDef adc_obj;       
  4.         GPIO_InitTypeDef gpio_obj;
  5.         DMA_InitTypeDef dma_obj;
  6.         NVIC_InitTypeDef NVIC_InitStructure;
  7.         //peirph clock
  8.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);

  9.         //NVIC config                                  
  10.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  11.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
  12.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  13.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  14.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  15.         NVIC_Init(&NVIC_InitStructure);
  16.        
  17.         /*DMA1 channel1 configuration*/
  18.         DMA_DeInit(DMA1_Channel1);        //½«DMA µÄͨµÀ1 ¼Ä´æÆ÷ÖØÉèΪȱʡֵ
  19.         dma_obj.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMAÍâÉèADC »ùµØ
  20.         dma_obj.DMA_MemoryBaseAddr = (u32)&adc_value;//DMA ÄÚ´æ»ùµØÖ·
  21.         dma_obj.DMA_DIR = DMA_DIR_PeripheralSRC;//ÄÚ´æ×÷ΪÊý¾Ý´«ÊäµÄÄ¿µÄµØ
  22.         dma_obj.DMA_BufferSize = ADC1_DATA_SIZE;//DMA ͨµÀµÄDMA »º´æµÄ´óС   
  23.         dma_obj.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //ÍâÉèµØÖ·¼Ä´æÆ÷
  24.         dma_obj.DMA_MemoryInc = DMA_MemoryInc_Enable;        //ÄÚ´æµØÖ·¼Ä´æÆ÷µÝÔö
  25.         dma_obj.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //Êý¾Ý¿í¶ÈΪ16 λ
  26.         dma_obj.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//Êý¾Ý¿í¶ÈΪ16 λ
  27.         dma_obj.DMA_Mode = DMA_Mode_Normal;           //Õý³£¹¤×÷ģʽ
  28. //        dma_obj.DMA_Mode = DMA_Mode_Circular;
  29. //        dma_obj.DMA_Priority = DMA_Priority_High;
  30.         dma_obj.DMA_Priority = DMA_Priority_VeryHigh;
  31.         dma_obj.DMA_M2M = DMA_M2M_Disable;
  32.        
  33.         DMA_Init(DMA1_Channel1 , &dma_obj);
  34.        
  35.         /*Enable DMA1 channel1*/
  36.         DMA_Cmd(DMA1_Channel1 , ENABLE);       
  37.         DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);  //ÅäÖÃDMA·¢ËÍÍê³Éºó²úÉúÖжÏ

  38.         //periph clcok
  39.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  40.         //gpio config
  41.         gpio_obj.GPIO_Pin =        GPIO_Pin_8;
  42.         gpio_obj.GPIO_Mode = GPIO_Mode_AIN;
  43.         GPIO_Init(GPIOB , &gpio_obj);

  44.         ADC_DeInit(ADC1);//½«ÍâÉè ADC1 µÄÈ«²¿¼Ä´æÆ÷ÖØÉèΪȱʡֵ
  45.         /*ADC1 configuration*/
  46.         adc_obj.ADC_Mode = ADC_Mode_Independent; //ADC ¹¤×÷ģʽ:ADC1 ºÍADC2¹¤×÷ÔÚ¶ÀÁ¢Ä£Ê½
  47.         adc_obj.ADC_ScanConvMode = DISABLE; //½ûֹɨÃèģʽ
  48.         adc_obj.ADC_ContinuousConvMode = ENABLE; //Ä£Êýת»»¹¤×÷ÔÚÁ¬Ðøת»»Ä£Ê½
  49.         adc_obj.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //Íⲿ´¥·¢×ª»»¹Ø±Õ
  50.         adc_obj.ADC_DataAlign = ADC_DataAlign_Right;//ADC Êý¾ÝÓÒ¶ÔÆë
  51.         adc_obj.ADC_NbrOfChannel = 1;
  52.         ADC_Init(ADC1 , &adc_obj);

  53.         RCC_ADCCLKConfig(RCC_PCLK2_Div8); //9Mhz
  54.         //ÉèÖÃÖ¸¶¨ADC µÄ¹æÔò×éͨµÀ£¬ÉèÖÃËüÃǵÄת»¯Ë³ÐòºÍ²ÉÑùʱ¼ä                 
  55.         ADC_RegularChannelConfig(ADC1 , ADC_Channel_9 , 1 , ADC_SampleTime_1Cycles5);
  56.         /*Enable ADC1 DMA*/
  57.         ADC_DMACmd(ADC1 , ENABLE);
  58.         /*Enable ADC3*/
  59.         ADC_Cmd(ADC1 , ENABLE);
  60.         /*¸´Î»Ð£×¼¼Ä´æÆ÷*/
  61.         ADC_ResetCalibration(ADC1);
  62.         while(ADC_GetResetCalibrationStatus(ADC1));
  63.        
  64.         ADC_StartCalibration(ADC1);
  65.         while(ADC_GetCalibrationStatus(ADC1));
  66.        
  67.         ADC_SoftwareStartConvCmd(ADC1 , ENABLE);

  68. }
复制代码
收藏 评论6 发布时间:2018-10-13 11:04

举报

6个回答
wenyangzeng 回答时间:2018-10-13 13:17:13
这个采样周期1Cycles也太短了吧。

ADC_SampleTime_1Cycles5

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

huangyanga 回答时间:2018-10-13 13:39:36
用的什么主控呢,确定PB8是ADC_Channel_9?

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

watercici 回答时间:2018-10-13 13:43:17
本帖最后由 watercici 于 2018-10-13 14:59 编辑
huangyanga 发表于 2018-10-13 13:39
用的什么主控呢,确定PB8是ADC_Channel_9?

STM32F103RB  PB8没有AD映射。
watercici 回答时间:2018-10-13 13:44:06
wenyangzeng 发表于 2018-10-13 13:17
这个采样周期1Cycles也太短了吧。

ADC_SampleTime_1Cycles5

之前没问题的时候就是这个采样周期,我也试过将周期改大,但效果还是一样的
watercici 回答时间:2018-10-13 18:06:10
结贴:谢谢楼上的提醒,的确是通道分配错了,PB8没有ADC映射,是电路设计出错了
watercici 回答时间:2018-10-13 18:06:37
watercici 发表于 2018-10-13 13:43
STM32F103RB  PB8没有AD映射。

您说的对,谢谢!

所属标签

相似问题

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