滞回比较器(施密特触发器)在软件中的应用-电池电压显示

1、单限比较器和滞回比较器的区别

        在单限比较器中,输入电压在阈值电压附近的任何微小变化,都会引起输出电压的跃变。不管这种微小变化是来源于输入电压还是来源于外部干扰。因此,虽然单限比较器很灵敏,但是抗干扰能力差。在单限比较器中加入正反馈,反相输入端接输入电压,可以做成滞回比较器。它具有惯性,看上去反应比较“慢”,对微小变化不敏感,有一定的抗干扰能力,因此称为滞回比较器。

        单限比较器只有一个阈值,当输入信号超过这个阈值时,输出状态会改变。一旦输入信号回到阈值以下,输出状态会立即改变回来。如果在一些敏感的场合可能会造成信号不稳定。

        滞回比较器具有内部的正反馈回路,这意味着输出状态取决于输入信号的历史状态。当输入信号超过设定阈值时,输出状态会改变,并且会保持在这个状态,直到输入信号降低到另一个设定的阈值才会再次改变。

        滞回比较器可以减少由于输入信号的微小波动而引起的输出状态的不稳定性,因此常用于抗干扰性能要求较高的应用中,如传感器信号处理和开关控制等。

2、电池电压测量

(1)采用单限比较器方式实现

        采样单限比较器方式实现如果电池电压处于临界值,或者大负载开关时,可能造成电池图标闪烁,一会显示两格,一会显示三格。

BBU_BAT_E FUNC_BBU_BatStatusGet(void)
{
    float adc_data = 0;

    VccVoltage = BSP_ADC_VccVoltage();
    //The "4" in the formula is obtained from the hardware, and the partial voltage resistance is 3M and 1M

    adc_data = (float)BSP_ADC_DataGet(BSP_ADC_BAT)*100*VccVoltage/4096*4.1f;
    /*
     0 ~~~~~~~~~2.52~~~~~ 3.1 ~~~~~ 3.4 ~~~~~~ 3.8~~~~~~~ 4.2
     \   CLOSE      \ NULL    \   LOW    \   MID      \  HIGH   \
    */
    if(adc_data > 380)// >3.8
    {    
        return BAT_HIGH;
    }
    else if(adc_data > 340)//3.4~3.8
    {
        return BAT_MID;
    }
    else if(adc_data > 310)//3.1~3.4
    {
        return BAT_LOW;
    }
    else if(adc_data > 252)//2.52~3.1
    {
        return BAT_NULL;
    }
    else
    {
        return BAT_CLOSE;
    }
}

(2)采用滞回比较器实现

        采用滞回比较器方式实现比较可靠,输出状态在电压发生变化后不会立即改变状态,而会在改变到一定阈值后才会发生改变,阈值取值合适,电池状态就不会在临界值发生跳变了。

#define CLOSE_VALUE 252
#define NULL_VALUE 252
#define LOW_VALUE 310
#define MID_VALUE 340
#define HIGH_VALUE 380
#define VOL_HYSTERESIS 10 /* hysteresis comparator*/

BBU_BAT_E FUNC_BBU_BatStatusGet(void)
{
    float adc_data = 0;


    VccVoltage = BSP_ADC_VccVoltage();
    //The "4" in the formula is obtained from the hardware, and the partial voltage resistance is 3M and 1M

    adc_data = (float)BSP_ADC_DataGet(BSP_ADC_BAT)*100*VccVoltage/4096*4.1f;
    /*
     0 ~~~~~~~~~2.52~~~~~ 3.1 ~~~~~ 3.4 ~~~~~~ 3.8~~~~~~~ 4.2
     \   CLOSE      \ NULL    \   LOW    \   MID      \  HIGH   \
    */
    if(adc_data > (HIGH_VALUE+VOL_HYSTERESIS))// >3.8
    {    
        BatStatus = BAT_HIGH;
    }
    else if((adc_data<HIGH_VALUE)&&(adc_data > (MID_VALUE+VOL_HYSTERESIS)))//3.4~3.8
    {
        BatStatus =  BAT_MID;
    }
    else if((adc_data<MID_VALUE)&&(adc_data > (LOW_VALUE+VOL_HYSTERESIS)))//3.1~3.4
    {
        BatStatus =  BAT_LOW;
    }
    else if((adc_data<LOW_VALUE)&&(adc_data > (NULL_VALUE+VOL_HYSTERESIS)))//2.52~3.1
    {
        BatStatus =  BAT_NULL;
    }
    else if(adc_data < NULL_VALUE)
    {
        BatStatus =  BAT_CLOSE;
    }

    return BatStatus;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习Redis缓存

学习Redis缓存 NoSQL和SQL的区别缓存缓存作用缓存成本添加Redis缓存 Redis特征Redis中数据结构Redis通用命令String类型Key的层级格式Hash类型Redis的Java客户端 NoSQL和SQL的区别 缓存 缓存就是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;一般读写性比较高…

10款有趣的前端源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 自毁按钮动画特效 自毁按钮动画特效 点击打开盒子可以点击自毁按钮 进而会出现自毁…

使用Python+selenium3.0实现第一个自动化测试脚本

这篇文章主要介绍了使用Pythonselenium实现第一个自动化测试脚本&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化&#xff0c;记录一下学习过程。…

Linux驱动学习—中断

1、中断基础概念 1.1 什么是中断 CPU在正常运行期间&#xff0c;由外部或者内部引起的时间&#xff0c;让CPU停下当前正在运行的程序&#xff0c;转而去执行触发他的中断所对应的程序&#xff0c;这就是中断。 响应中断的过程&#xff1a; <1>中断请求 <2>中断…

Spring Cloud之OpenFeign异常处理

简易原理图 原理基于请求头传递错误消息&#xff0c;利用aop和全局异常拦截机制实现。 服务提供者 远程调用本地方法b&#xff0c;throw异常出来FeignExceptionAspect AOP拦截处理异常到请求头中&#xff0c;继续throwGlobalExceptionHandler处理&#xff0c;返回响应Respons…

1868_C语言单向链表的实现

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/c_basic: little bits of c. 1868_C语言中简单的链表实现 简单整理一下链表的实现&#xff0c;这一次结合前面看到的一些代码简单修改做一个小结。 主题由来介绍 以前工作之中链表的使用其实不多&#xff0c;主要是…

C++动态内存分配(动态内存分配函数)栈区

内存拷贝函数&#xff1a; void *memcpy(void *dest,const void *src,size_tn);#include<string.h>功能&#xff1a;从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest内存地址的起始位置 分配内存使用new 例如&#xff1a;salarynew int[num]; 最后需要释放…

三、Qt核心与Qt类库

一、Qt核心&#xff1a;元对象系统 1、Qt核心特点 Qt对标准C进行了扩展&#xff0c;引入了一些新的概念和功能元对象编译器&#xff08;MOC&#xff09;是一个预处理器&#xff0c;先将Qt的特性程序转为标准C程序&#xff0c;再由标准C编译器进行编译Qt为C语言增加的特性在Qt…

Android学习(三):在Android虚拟机中运行项目

Android学习&#xff08;三&#xff09;&#xff1a;在Android虚拟机中运行项目 一、前期准备 在系统环境变量中添加ANDROID_SDK_HOME&#xff0c;把值指定到一个其他目录。就可以把Android AVD(虚拟机)创建在指定目录下。修改环境变量后&#xff0c;如果Android Studio是在运…

Java Swing手搓童年坦克大战游戏(I)

前言 业余偶尔对游戏有些兴趣&#xff0c;不过这样的时代&#xff0c;硬件软件飞速进步&#xff0c;2D游戏画面都无比精美&#xff0c;之前的8bit像素游戏时代早就过去了&#xff0c;不过那时候有许多让人印象深刻的游戏比如魂斗罗、超级玛丽、坦克大战(Battle City)等等。 学…

1866_FreeRTOS的存储管理方案heap_4分析

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_FreeRTOS: learning notes about FreeRTOS. 1866_FreeRTOS的存储管理方案heap_4分析 对FreeRTOS的heap_4进行分析拆解&#xff0c;按照文学式编程的方式重新组织成个人笔记。 主题由来介绍 free以及malloc这样的存…

辗转相除法求最大公约数

介绍 辗转相除法&#xff08;又称欧几里德算法&#xff09;是一种求最大公约数的算法。它基于这样一个事实&#xff1a;两个数的最大公约数等于较大数和较小数余数的最大公约数。即两个数相除&#xff0c;再将除数和余数反复相除&#xff0c;当余数为0时&#xff0c;取当前除法…

Python异常捕获和处理语句 try-except-else-finally

目录 try-except-else-finally语句 1. 基本用法 2. 多个异常处理 3. 处理所有其他异常 4. 多个except子句 5. 使用else子句 6. 使用finally子句 7. 使用as关键字 实例 例1 例2 例3 例4 例5 例6 例7 例8 结论 try-except-finally语句 在Python中&#xff0c;try-e…

概率论与数理统计 知识点+课后习题

文章目录 &#x1f496; [学习资源整合](https://www.cnblogs.com/duisheng/p/17872980.html)&#x1f4da; 总复习&#x1f4d9; 选择题&#x1f4d9; 填空题&#x1f4d9; 大题1. 概率2. 概率3. 概率4. P5. 概率6. 概率密度函数 F ( X ) F(X) F(X)7. 分布列求方差 V ( X ) …

【STM32】STM32学习笔记-DMA直接存储器存储(23)

00. 目录 文章目录 00. 目录01. DMA简介02. DMA主要特性03. 存储器映像04. DMA框图05. DMA基本结构06. DMA请求07. 数据宽度与对齐08. 数据转运DMA09. ADC扫描模式DMA10. 附录 01. DMA简介 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F…

Hive11_Rank函数

Rank 1&#xff09;函数说明 RANK() 排序相同时会重复&#xff0c;总数不会变 DENSE_RANK() 排序相同时会重复&#xff0c;总数会减少 ROW_NUMBER() 会根据顺序计算 2&#xff09;数据准备 3&#xff09;需求 计算每门学科成绩排名。 4&#xff09;创建本地 score.txt&…

C语言程序设计——数学运算

基本运算符 运算符说明例子赋值运算符a b;、-、*、/、()基本四则运算a (a c) * d;%取余运算符a b % 2&、^、~、l位运算a ~b l c>>、<<左移和右移a b >> 2 在c语言的数学运算中&#xff0c;所涉及到的符号如图所示&#xff0c;在使用过程中应该了…

编程语言的发展趋势和未来方向

1、编程语言的未来&#xff1f; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走向又将如何呢&#xff1f; 方…

宋仕强论道之华强北后山寨手机时代(三十六)

今天继续讲华强北山寨手机&#xff0c;跟手机配套周边产品。华强北&#xff0c;作为中国电子产品的集散地和创新中心&#xff0c;一直以来都是电子产品和数码产品的聚集地。在早期&#xff0c;赛格市场以其走私、翻新的电脑和电脑周边产品而闻名。赛格大厦以前5楼以上都是做电脑…