在使用ST MCU开发过程中,有人问如果电源电压是变动的,询问有无办法用比较简洁的办法对电源电压进行监测,或者说电源电压波动情况下能否检测出其它待测的AD输入电压。

这里跟大家分享交流一个方法。就是在没有其它外来参考电压,用芯片电源电压VDD作为ADC的参考电压,同时该电源电压又在一定范围内变动的情况下【这个范围就是在保证芯片正常工作的范围】,利用MCU芯片内部自带基准电压对电源电压进行监测。

在我印象中【ST MCU系列和型号太多了,记不住】,几乎每颗ST MCU芯片内部都有个相对稳定且不受电源电压一定范围内波动影响的基准电压。这里以STM8L15x 芯片为例来介绍。

STM8L151系列芯片内部有个参考输出电压,ST的技术手册里命名为VREFINT。

该内部参考电压的值即使芯片电源电压在工作范围内波动时,它基本维持不变即1.224V,而且该电压信号可以通过指令控制直接连接到ADC的某个AD通道而求得该电压对应的AD值。

这里提前厘清下:该内部参考电压VREFINT并非ADC的参考电压,ADC的参考电压依然是VDD。即使VDD有所波动,这个VREFINT电压恒定不变,对于ADC电路而言,它只是个测试点。这里经常有人犯迷糊,把VREFINT内部基准参考电压跟ADC模块的参考电压混为一谈。

在某一固定的ADC参考电压情况下,所有被测电压点的AD转换值与该点电压值保持同一比例关系,换句话说,对于ADC参考电压固定情况下,各点的电压与ADC值与成线性关系。

下面图形是8L15X芯片分别在3个不同参考电压下的AD转换曲线示意图,这里参考电压接不同的VDD。下面三根斜线分别是VDD为2.8V、3.2V、3.6V时的AD转换曲线示意图。那根黄色垂直虚线是表示内部VREFINT电压(1.22V)所在的位置。

不难理解,对于不同的参考电压,同一待测电压【VREFINT】1.22V所测得的AD转换值是不一样的,从上面图也可以直观的看出。这里AD的参考电压就是VDD,显然VDD越大,1.22V  VREFINT电压对应的AD转换值越小。

对于某一个参考电压来说,如果能测得1.22V所对应的AD转换值,假设记为Val_AD1.2 那参考电压VDD对应的AD转换值自然是此时该AD的满量程值,记为 Val_Full,位,就是1024,如果是12位,那就是4096】。

不管VDD怎么变动,某时刻的VDD对应的满量程值Val_Full跟内部基准电压【VREFINT】1.22V的AD转换值Val_AD1.2 的线性比例关系总是存在的。即有:

VDD:Val_Full = 1.22 : Val_AD1.2      【Val_AD1.2 为实时测得值】

那么VDD = (1.22 / Val_AD1.2) * Val_Full

这样你就可以达到监测芯片供电VDD的电压之目的了。当然你也可以利用上述原理和类似条件做别的应用,比如说电源电压一定范围内波动情况下还是可以检测出其它待测点的电压。

【以上所述是个思路或方法,供参考借鉴。】

利用ST MCU内部基准参考电压监测电源电压及其它的更多相关文章

  1. 利用ST MCU内部的基准参考电压监测电源电压及其它

    源: 利用ST MCU内部的基准参考电压监测电源电压及其它

  2. 转发: 关于ST MCU的UID详细说明

    https://www.stmcu.org.cn/article/id-327990 ST MCU芯片中的绝大部分都内置一串96位唯一标识码[unique ID].时不时有人问起这个东西,尤其最近感, ...

  3. ST MCU的UID

    ST MCU芯片中的绝大部分都内置一串96位唯一标识码[unique ID].时不时有人问起这个东西,尤其最近感,觉询问它的人甚是热闹.这里跟大家一起简单分享下. 上面说了ST MCU芯片中的绝大部分 ...

  4. EFM32JG系列MCU内部温度传感器使用方法

    在很多电子类应用场合中,我们经常需要采集产品工作的周围环境温度,一般采取的方式有两种: 1)外加温度传感器 2)采用MCU内部温度传感器 外加温度传感器会增加产品的成本以及布板空间,所以在很多场合,我 ...

  5. AD芯片的基准参考电压问题

    基准参考电压的精度一般非常高的! AD芯片 : AD9226的基准参考电压  误差一般是  千分之一! 我之前用万用表测量AD9226的参考电压大概是1.89V(这款AD的正确参考电压应该是2V),所 ...

  6. 利用InfluxDB和Grafana搭建数据监测的仪表盘

    InfluxDB的介绍及安装 InfluxDB是支持持续写入的时序数据库,常用于监测系统所需要的数据的存储. 官网的详细安装步骤 https://docs.influxdata.com/influxd ...

  7. 利用.net的内部机制在asp.net中实现身份验证

    知识点: 在ASP.NET中,任何页面都是继承于System.Web.UI.Page,他提供了Response,Request,Session,Application的操作.在使用Visual Stu ...

  8. 微控制器(MCU)架构介绍

    微控制器(MicroController)又可简称MCU或μC,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM.RAM.CPU.I/O集合在同一个芯片中, ...

  9. Scalaz(28)- ST Monad :FP方式适用变量

    函数式编程模式强调纯代码(pure code),主要实现方式是使用不可变数据结构,目的是函数组合(composability)最终实现函数组件的重复使用.但是,如果我们在一个函数p内部使用了可变量(m ...

随机推荐

  1. For all entries in

    Today I read about a blog explaining very detailedly on how to correctly use the key words FOR ALL E ...

  2. 用 C# 编写 NEO 智能合约

    工具 -> 扩展和更新安装 NeoContractPlugin 插件 打开 Visual Studio 2017,打开 工具, 扩展和更新 ,在左侧点击 联机 ,搜索 Neo,安装 NeoCon ...

  3. 【linux基础】vim快速移动光标至行首行尾、第一行和最后一行

    前言 使用vim的过程中想要快速移动光标至行首.行尾.第一行.最后一行或者某一行,本文对此简单介绍. 具体操作 1.快速至当前行的行首: 1) Home键:  2) 数字0:  3) 符号^; 2.快 ...

  4. Python中的filter()函数的用法

    转载自:脚本之家 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的时,filter()把传入的函数依次作用于每个元素 ...

  5. 配置apache-maven-3.6.0时所遇到的坑(二)

    在命令行窗口中输入:mvn  -v    或 直接    mvn    时出现如下问题: The JAVA_HOME environment variable is not defined corre ...

  6. Thread_run()方法

    cas 1: package threadTest; public class ThreadTest { public static void main(String[] args) { Thread ...

  7. 质因子分解(Pollard_Rho法)

    LL Pollard_Rho(LL n, LL c) { LL x, y, d; LL i = , k = ; x = y = rand() % n; do { i++; d = gcd(n + y ...

  8. acm 2001

    格式化输出 //////////////////////////////////////////////////////////////////////////////// #include<i ...

  9. ionic1页面间传递参数的问题

    1.  $scope.routeinfo是我要传递的参数--到scheddulcontent这个页面去: $state.go( "scheddulcontent" , { 'rou ...

  10. 如何取消noarch.rpm包

    有一次部署zabbix服务器,不小心rpm -ivh zabbix的el7版本的rpm了,但是我的系统是centos6.5的,所以就尴尬了 rpm -ivh http://repo.zabbix.co ...