OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13885|回复: 4

请教STM32F030F4P6怎么使用内部参考电压?

[复制链接]

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-1-14
在线时间
6 小时
发表于 2014-7-25 16:26:31 | 显示全部楼层 |阅读模式
5金钱
大家好,最近我在做一个精密的放大电路,需要12位的ADC,看中了STM32F030F4P6,ADC位数高,价格便宜。现在我碰到了一个问题,就是想使用它内部的参考电压,因为外接电压接了其他的负载,因此肯定抖动不小的,想使用内部的参考电压为ADC提供一个抖动较少的参考电压。但看了数据手册,感觉非常疑惑,手册中提到:1 channel for internal reference voltage (VREFINT),The internal voltage reference (VREFINT) provides a stable (bandgap) voltage output for the ADC and Comparators. VREFINT is internally connected to the ADC_IN17 input channel. The precise voltage of VREFINT is individually measured for each part by ST during production test and stored in the system memory area. It is accessible in read-only mode.
我比较疑惑了,内部参考电压接到ADC_IN17,怎么使用它呢?和AVR单片机内部的选择参考电压大不相同啊。求大神指点,谢谢!
我看到网上有人这样说:

具体方法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:

Vchx = Vrefint * (ADchx/ADrefint)

其中Vrefint为参照电压=1.20V。

不知道这样对不对呢?

最佳答案

查看完整内容[请看2#楼]

http://www.51hei.com/bbs/dpj-40944-1.html 这上面讲的比较清楚,因为内部参考电压1.2V比较稳定,不断通过内部通道ADC_IN17获取到ADC转换值, 然后根据公式:(1.2/ADC转换值) * 4096(12位精度) 就可以得到VDDA的电压值,从而检测电源,另外如果是想测试其他通道的电压值,直接读取对应通道的ADC转换值以后进行相乘就好了:(1.2/ADC转换值) * 其他通道ADC转换值 代码: [mw_shl_code=c,true]/** * @brief ADC ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2014-7-25 16:26:32 | 显示全部楼层
本帖最后由 229382777@qq.com 于 2016-4-3 14:34 编辑

http://www.51hei.com/bbs/dpj-40944-1.html
这上面讲的比较清楚,因为内部参考电压1.2V比较稳定,不断通过内部通道ADC_IN17获取到ADC转换值,
然后根据公式:(1.2/ADC转换值) * 4096(12位精度)      就可以得到VDDA的电压值,从而检测电源,另外如果是想测试其他通道的电压值,直接读取对应通道的ADC转换值以后进行相乘就好了:(1.2/ADC转换值) * 其他通道ADC转换值
1.png
2.png
3.png

代码:
[mw_shl_code=c,true]/**
  * @brief  ADC Configuration
  * @param  None
  * @retval None
  */
static void ADC_Config(void)
{
  ADC_InitTypeDef     ADC_InitStructure;
  GPIO_InitTypeDef    GPIO_InitStructure;
  
  /* GPIOC Periph clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  
  /* ADC1 Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  
  /* Configure ADC Channel 0 as analog input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* ADCs DeInit */  
  ADC_DeInit(ADC1);
  
  /* Initialize ADC structure */
  ADC_StructInit(&ADC_InitStructure);
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
        ADC_Init(ADC1, &ADC_InitStructure);
       
        /* Convert the ADC1 Channel 0 with 239.5 Cycles as sampling time */
  ADC_ChannelConfig(ADC1, ADC_Channel_Vrefint , ADC_SampleTime_239_5Cycles);
        ADC_VrefintCmd(ENABLE);
       
  /* 得到基准电压校准值 */
        VREFINT_CAL = *(__IO uint16_t *)(0X1FFFF7BA);
       
        /* ADC Calibration */
  ADC_GetCalibrationFactor(ADC1);
       
        /* Enable the ADC peripheral */
  ADC_Cmd(ADC1, ENABLE);     
  
  /* Wait the ADRDY flag */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
  
  /* ADC1 regular Software Start Conv */
  ADC_StartOfConversion(ADC1);
}

// 主函数
int main(void)
{
        delay_ms(200);
        ADC_Config();
        UART1_Init();
       
        while(1)
        {
                VREFINT_DATA =ADC_GetConversionValue(ADC1);
                VDDA_VAL = (3.3*VREFINT_CAL)/VREFINT_DATA;
                printf("\n\rVDDA:%.3fV\n\r",VDDA_VAL);
                while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
                delay_ms(1000);
        }
}[/mw_shl_code]



我的博客:http://blog.csdn.net/itdo_just
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-25 23:23:19 | 显示全部楼层
帮顶.....
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-1-14
在线时间
6 小时
 楼主| 发表于 2016-12-6 10:53:09 | 显示全部楼层
229382777@qq.co 发表于 2014-7-25 16:26
http://www.51hei.com/bbs/dpj-40944-1.html
这上面讲的比较清楚,因为内部参考电压1.2V比较稳定,不断通 ...

非常感谢,受益终身!
回复

使用道具 举报

0

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2015-9-29
在线时间
81 小时
发表于 2019-1-31 10:18:00 | 显示全部楼层
受教,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 13:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表