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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版