历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2019年01月29日 | 基于STM32F103内部AD测量电池电压

2019-01-29 来源:eefocus

STM32的ADC介绍:

       STM32 拥有 1~3 个 ADC ( STM32F101/102系列只有1个ADC),这些ADC可以独立使用,也可以使用双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值


STM32 的 ADC 最大的转换速率为 1Mhz,也就是转换时间为 1us(在 ADCCLK=14M,采样周期 1.5 个 ADC 时钟下得到),不要让 ADC 的时钟超过 14M,否则将导致结果准确度下降


STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换


STM32的ADC通道与GPIO对应表:


基于STM32F103内部AD测量电池电压,硬件电路如下:


根据电路,GPIO PA5作为电池电压测量端口:


1、GPIO以及ADC初始化;


void Power_init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    ADC_InitTypeDef  ADC_InitStructure;

 

    /*V_BAT*/

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

 

    RCC_ADCCLKConfig(RCC_PCLK2_Div6);

    ADC_DeInit(ADC1);

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立工作模式

    ADC_InitStructure.ADC_ScanConvMode = DISABLE;   //非扫描模式

    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//单次转换模式

    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

    ADC_InitStructure.ADC_NbrOfChannel =1;

    ADC_Init(ADC1,&ADC_InitStructure);

    ADC_Cmd(ADC1,ENABLE); //使能ADC1

    ADC_ResetCalibration(ADC1); //使能复位校准

    while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束

    ADC_StartCalibration(ADC1); //开启AD校准

    while(ADC_GetCalibrationStatus(ADC1));//等待校准结束

}

2、获取ADC值,转化成电池电压值


//获取某个通道的ADC值

float Get_Adc(BYTE ch)

{

    uint16_t adc;

    float Vbat;

    ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5);

    ADC_SoftwareStartConvCmd(ADC1, ENABLE);

    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));

    return ADC_GetConversionValue(ADC1);

}

//将通道5的值计算电池电压值

float Power_Get_VBAT(void)

{

    float adc;

    adc = Get_Adc(5);

    adc = adc + Get_Adc(5);

    adc = adc + Get_Adc(5);

    adc = adc + Get_Adc(5);

    adc = adc / 4;

    g_VBat  = (adc * 2) * 3.3 / 4096 ;//电阻1/2分压

    return g_VBat;

}

注:使用PA5作为电压值采集端口,根据上表,ADC采样通道为通道5。


推荐阅读

史海拾趣

General Instrument Optoelectronics公司的发展小趣事
在控制电路中优化音频信号的生成和处理算法,使音色更加丰富和自然。
Alliance Memory公司的发展小趣事
检查电源电路是否正常,电源是否稳定。
Dolphin Interconnect Solutions Asa公司的发展小趣事

Dolphin Interconnect Solutions ASA自创立之初,便以技术革新为核心驱动力。公司不断投入研发资源,开发出了基于PCI Express的I/O和clustering产品,这些产品在市场上取得了显著的成功。随着技术的不断进步,Dolphin又成功地将产品扩展到更广泛的领域,如云计算、大数据处理等,进一步巩固了其在电子行业的地位。

Eurofarad公司的发展小趣事

Eurofarad始终将技术创新作为公司发展的核心动力。随着科技的不断进步,Eurofarad不断投入研发资源,推动电子元件技术的创新。公司成功研发出了一系列具有创新性的产品,如陶瓷电容器、塑料薄膜电容器、云母电容器等。这些产品不仅具有更高的性能和更长的使用寿命,而且更符合市场的需求,为Eurofarad赢得了更多的市场份额。

EWC Controls公司的发展小趣事

在电子行业中,EWC Controls公司选择了工业自动化控制这一细分领域作为切入点。通过深入了解行业需求和痛点,公司专注于研发和生产符合市场需求的高品质产品。例如,在食品加工行业,EWC Controls公司针对温度、湿度等关键参数的控制需求,开发出了一套高效稳定的控制系统,帮助食品加工企业提高了生产效率和产品质量。这种深耕行业、专注细分领域的策略使得EWC Controls公司在市场中逐渐崭露头角。

ALLTHREAD公司的发展小趣事

随着产品质量的不断提升,ALLTHREAD开始积极拓展市场。他们与多家国际知名电子企业建立了合作关系,共同开发适用于不同应用场景的螺栓产品。通过国际合作,ALLTHREAD不仅提升了自身的技术水平,还进一步扩大了市场份额。

问答坊 | AI 解惑

新颖的单电极触摸式开关电路

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 …

查看全部问答>

分享:经典的Code VisionAVR错误!千万小心!!

大家请看下面的程序: void Show_BMP(unsigned int Width,unsigned int Height) { unsigned long int position; position=0x4d200+0x3e+Width/7+Height*408; ... ... }   以上程序的写法绝对没有任何语法错误!!Code ...…

查看全部问答>

一次倒霉的MP3维修记(接排线高手转)

开机检测,不是充电电路问题,该机采用ATJ2085方案,可以充电,但是开机后,立马显示电池电量低,电池电压正常,检查ATJ2085的第31脚,电量检测脚,发现所连接的两个电阻有一个虚焊,加焊后,检测OK。 准备装机,装好后,结果还是开不 ...…

查看全部问答>

MSP430 系列单片机资料 7 册

全集锦 与大家分享 [ 本帖最后由 wzt 于 2010-4-25 23:23 编辑 ]…

查看全部问答>

也发一个关于中断相应时间的问题,SDLC通信

wince 下我要用AM85C30实现同步通信(SDLC),问题是这个芯片接收FIFO 3字节,发送没有缓冲! 比如我要用1Mbps通信,中断频率就要1M/8=125k/s, 接收的状况要好一些,3字节的FIFO可以把中断频率降到125k/3=42k/s, 发送就更郁闷了,完全是125k/s ...…

查看全部问答>

ISP下载问题

我用的是RS232做的下载线,但不知道是怎么回事,一直提示不能连接。请问ISP下载程序与哪些信号有关呢?与PSEN、与时钟信号有关系没有?我测试了一下,我的XTAL2信号频率是11.0592,但是波形有一点变形了,而且VP-P变到6V多了。我用的是P89C51RD2单 ...…

查看全部问答>

请教直接驱动TFT的固件库在哪有下载

版主:     您好,使用STM32F有一段时间了,感觉STM32的性价比较高,最近在了解使用FSMC驱动rgb接口的相关内容,在ST官方网站上下载了与之相关的AN3241文档,看到有个基于STM3210E-EVAL的demo板的支持直接驱动TFT液晶的函数库,我 ...…

查看全部问答>

CC1101 30dBm资料,欢迎大家下载讨论

[local]1[/local][localimg=600,450]3[/localimg]…

查看全部问答>

退耦电容/去耦电容的作用及选择知识

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 …

查看全部问答>

adc采样问题

本人想用ADC模块采集干电池电压,然后用SCI模块进行软件显示,可惜一直未能成功。 采样用的是周期中断,SCI用的查询模式,可是最后编译一直显示.out文件无法连接,求大神指教…

查看全部问答>