近期接触到STM32L0系列MCU,为了发挥超低功耗特性使用的也是干电池供电,想要获取当前干电池组的电量。 起初的方案设计是在MCU的IO口找一路ADC,使用分压方式直接让MCU采集电量,之后在查找资料如何实现时发现了参考电压的问题,步步深入后发现原来还有一种解决方案,即使用内部参考电压直接演算出VDDA的供电,在此做个记录并分享
对ADC工作比较重要的电压一般就两个,VDDA供电让ADC运行,VREF+提供ADC转换的参考电压值。经查阅该型号的数据手册,直接通过供电给VREF+的方式定ADC的基准电压是不可行的,于是下图中也标注了芯片生产制造时已经根据一定环境测试出了一个精准的电压值,此值存储在内存地址如图所示处,这个VREFINT_CAL下面会用到。
查阅ADC的编程手册,发现了如下公式,基本意思就是在VDDA不能准确知道的情况下,使用VREFINT和ADC获取内部参考电压的模拟值计算出VDDA的过程。怎么获得VREFINT_DATA呢,手册中已说明内部参考电压已经连接到了ADC_IN17通道上,无需外部连接,那么我们只要打开这一路的ADC转换就可以像正常获取ADC转换值一样获得VREFINT的AD转换值。
公式里的NREFINT_CAL和VREFINT_DATA都有了,代入计算可以算的VDDA的值,经本人实际测量有0.1V左右的误差,对我来说这还不够精准,只能说提供了这个途径让我们不用外接线路可以实时获得MCU供电电压了(在VDDA和VCC相同时)。
/**********************************************************小分割*********************************************************/
于是回到最初的方案,使用IO口采样电压的模拟值,打开PA1对应的ADC通道,在正常获得了正常AD转换值后怎么办呢,数据手册是个好东西! 它又一次给了我们答案......让我们上图
好了,大体意思就是公式里的VDDA如果不知道,那可以用内部参考电压计算的值代替VDDA计算通道上获取的电压值,剩下的两个参数为实际从通道获得的AD值ADC_DATAx和用户自己配置的ADC最大分辨率输出值full_SCALE,这两个值都很好得知,在此不做阐述(如有需要可以评论处提问),这样IO口处的电量值就被计算出误差在0.0x,已达到需要的标准。
两种方式都做了说明,在此记录一下,与君分享
关键字:MCU 内部参考电压
引用地址:
MCU内部参考电压妙用
推荐阅读最新更新时间:2024-03-16 16:22
51单片机教程:按键输入、矩阵按键(按键巧用)proteus仿真+keil
IO口原理 (P1口最简单,所以这里只介绍P1,其他IO口原理类似) P1口原理 可以看到的是P1口的工作原理比较简单,首先用P1口做输入输出较为好理解。 1、内部总线:就是内部P1.X位寄存器的值,比如说内部总线P1.0上电压为0V,那么对应P1.0=0;内部总线P1.0上电压为5V,那么对应P1.0=1; 2、P1.X引脚:对应单片机引脚接口 3、读锁存器:读锁存器为1,允许读锁存器。为0,不允许读锁存器。 4、读引脚:为0不允许读引脚,为1允许读引脚 5、写锁存器:提供一个上升沿锁存数据(写数据到单片机IO口上时自动提供一个脉冲) 几个核心问题: 1、读锁存器与读引脚区别是什么? 读锁存器:读锁存器Q的电平 读引脚:
[单片机]
基于51单片机的出租车计价器
一.硬件方案 本设计基于STC89C52单片机、1302时钟芯片准确计时、LCD1602液晶显示、24c02芯片可以掉电存储数据、3v直流电机模拟发动机工作。当无乘客时液晶可以显示时间(年月日时分秒),时间可以按键设置,此时电机不工作;当有乘客时电机工作,可以通过按键开始计费系统工作,有清零键,收费可以修改(包括起价费、超过起价费每公里或分钟收费、白天和夜晚收费标准),可以切换白天和夜晚收费标准,可以按照分钟或公里收费切换。 主要由51单片机最小系统、DS1302时钟芯片准确计时、LCD1602液晶显示、24c02芯片可以掉电存储数据、3v直流电机模拟发动机工作;如图: 二.设计功能 (1)当无乘客时液晶可以显示时间(年月
[单片机]
51单片机之寄存器-3.3单片机串口通信之发送与接收
本节主要讲解单片机的通信。通信主要是指单片机与外界设备交流,也就是通过导线传送或者接收信息。举个例子来说明,你想把仓库A中的货物通过货车配送到仓库B,一共有8个箱子,每辆货车一次只能运送1个箱子。显然,如果只用一辆货车,那么需要8次运送完毕,如果使用8辆货车,那么一次就运送完了。同样,在单片机通信中也是如此。这个货车就是信息传输通道。货车数量越多,传输越快。如果只有一辆货车那么就是串行通信,如果是八辆货车就是并行通信。很明显,货车数量越多,运送的速度越快,但是成本越高。因此根据CPU与外设之间连线结构和数据传送方式的不同,可将通信分为并行通信和串行通信两种基本方式。很容易可以看出并行通信的特点是数据同时传送,速度快,效率高,但成本也
[单片机]
用于Freescale HCS12系列MCU的通用编程器设计
为了实现飞思卡尔公司HCS12系列MCU的在线编程,通过软件架构和可移植性的方法设计了一个通用编程器。通过早期做的很多HCS12系列MCU芯片的编程实验,获得了它们的共性和差异性,通过软件设计的方法实现了对HCS12微控制器的在线编程,并侧重于研究编程器的通用性和高速下载特性。编程器具有通用性和使用便捷性。 随着Flash技术在微处理器上的广泛应用,单片机在开发和应用手段上有了革命性的变化,从传统的仿真器(ICE)到目前流行的JTAG等。设计人员仍然在不断地寻找一种移植性更高、更易操作、费用更低的开发手段。随着微处理器制造工艺的提高,一些高端微处理器(如CPU12/16/32、PowerPC、ColdFire等)内部已经包
[单片机]
51单片机定时器的应用
interrupt中断的关键字,n是中断号提供中断程序的入口地址。 0-INT0 1-T0 2-INT1 3-T1 4-串行中断 5-T2 直接访问寄存器和端口 定义 sfr P0 0x80 sfr P1 0x81 sfr ADCON; 0xDE sbit EA 0x9F 操作 ADCON = 0x08 ; P1 = 0xFF ; io_status = P0 ; EA = 1 ; 在使用了interrupt 1 关键字之后,会自动生成中断向量 在 IS
[单片机]
51单片机MAX7219程序
该程序已使用过,免调试。 #include reg52.h #include intrins.h #define byte unsigned char //#define N_NOP _nop_();//_nop_();_nop_(); /////////////////////////////////////////////////////// //MAX7219 //////////////////////////////////////////////////////////////////// //管脚,变量和常数定义;DEFINE #define Model_addr 0x09 // X9 H #d
[单片机]
ZigBee-CC2530单片机 - 1路硬件PWM控制舵机角度(精度为1us)
程序源码 #include ioCC2530.h typedef unsigned char uchar; typedef unsigned int uint; //系统时钟初始化 void SystemClockInit() { CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振稳定为32M CLKCONCMD &= ~0x07; //设置系统主时钟频率为32MHZ } //定时器1输出PWM void Timer1PwmInit() { uint value; CLKCONCMD |= 0x28;
[单片机]
芯圣电子HC89S003A系列MCU简述
HC89S003A系列是芯圣兼容STM8S系列Flash单片机,内置增强型8051内核,拥有16K的Flash内存以及256Bytes+768Bytes的RAM;HC89S003A系列拥有丰富的外设资源,包括5个16位的定时/计数器、3组12位带死区控制以及1路8位的PWM、16+2路12位的ADC、1个SPI、2个UART、1个IIC以及独立的CRC模块;HC89S003A系列还支持2.0~5.5V的工作电压与-40℃~+105℃的工作温度。 以下为该系列目前在售的型号及对应参数: 此外,HC89S003A系列支持引脚全映射,使其在硬件兼容方面有着得天独厚的优势,可以适用于绝大多数的应用领域,例如消防安防,LED驱动电源
[单片机]