历史上的今天
返回首页

历史上的今天

今天是:2024年11月09日(星期六)

正在发生

2020年11月09日 | 基于MSP430单片机的SVS(电源电压监控器)模块设计

2020-11-09 来源:elecfans

电源电压监控对于单片机来说,也是经常要用的模块。当需要稳定的工业级产品时,经常要对电源电压监控,以保证单片机系统工作于正常环境或范围中。MSP430F16x提供了一个现成的电源电压监控器模块SVS,方便检测电源电压或者是外部电压,可以设置为电压过低时复位 或置标志位。本程序即完成SVS的设置使用的程序库(msp430f14x没有此模块)。


硬件介绍:

MSP430单片机含有的SVS模块可以很方便的监控电源电压或外部电压。

电源电压监控器(SVS)是用于监控AVCC电源电压或外部电压。 SVS的可配置当电源电压或外部电压下降到低于用户选择的电压级别时设置一个标志,或产生POR复位。


SVS模块有以下特点:可以监控AVCC电压;可选择产生复位信号;可软件设置SVS比较器输出信号;低电压标志可以被锁定或被用户程序访问;有14个可供选择的电压门限;可以监控外部输入电压。SVS模块可以很方便的监控电源电压或系统的其他电压,可以产生复位信号或是置标志位。


SVS模块仅有一个8位的寄存器,使用十分方便。寄存器SVSCTL:

高四位VLDx用来设置监控电源电压的门限、关闭SVS或者选择监控外部输入电压。具体含义如下:

    0000 SVS is off     0001 1.9 V 检测AVCC是否低于1.9v,以下类似
    0010 2.1 V          0011 2.2 V
    0100 2.3 V          0101 2.4 V
    0110 2.5 V          0111 2.65 V
    1000 2.8 V          1001 2.9 V
    1010 3.05           1011 3.2 V
    1100 3.35 V         1101 3.5 V
    1110 3.7 V
    1111 检测由SVSIN引脚输入的电压是否低于1.2 V.

当高四位是 0时,SVS模块是关闭的;1-14分别是对电源电压监控的14个门限电压;15时,监控外部电压,门限电压是1.2v。


PORON位设置是否启动电压低于门限时,单片机复位:1 复位 0 置标志位SVSFG

SVSON位,这位和其他模块的ON位不太一样,SVSON位仅仅指示当前SVS模块是否打开,而不是用来开关模块的。


SVSOP位,这位是设置SVS内部比较器输出值:0 输出低电平 1 输出高电平。


SVSFG位,标志位 指示是否检测到低电压 仅PORON 为0时有效 出现低电压后置1;改为不会自动清零,必须软件清零。


另外,SVS模块值得一提的是:SVS门限电压已经设置回差带:每个SVS的水平已经滞后AVCC,接近临界值时,以减少小型电源电压的变化的敏感性。 SVS的操作和SVS /掉电互操作如图:

如图:为防止电压在门限附近变动时,SVS过于敏感,每个门限附近都有回差带。这样SVS模块用起来更好用。


程序实现:

程序主要是对SVS模块寄存器SVSCTL的设置和检测。首先是设置SVS函数:

void SVSSetup(char voltageLevel,char reset)
{
    SVSCTL = voltageLevel << 4;
    /*if(voltageLevel == 0x15)            //外部输入 打开对应功能口
    {
        P6SEL |= BIT7;                    //不需要,当用SVSIN时,自动从此脚检测
    }*/
    if(reset <= 1)
    {
        SVSCTL |= reset << 3;
    }
}

voltageLevel:这个参数和寄存器SVSCTL的高四位VLDx意思完全一样,程序仅仅是把它移动到高四位赋值给寄存器SVSCTL,reset参数对应PORON位,也是直接赋值给对应位完成设置。


检测是否有低于门限电压的情况出现:

char SvsFlg()
{
    return (SVSCTL&SVSFG);
}

这个函数更简单,仅仅把标志位SVSFG的值返回,以便用户判断是否出现了低于门限的情况出现。


标志位清零:

/****************************************************************************
* 名    称:ClearSvs
* 功    能:电源电压监控器的过低标志
* 入口参数:sync:同步 1:阻塞运行直到该函数电压恢复正常 0:不阻塞,清除即返回
* 出口参数:无
* 说    明: 若传入参数为0 不阻塞 则如果电压没有恢复到正常范围 则标志会立即被
            单片机重新置位(1)
****************************************************************************/
void ClearSvs(char sync)
{    if(!sync)
    {
        SVSCTL &=~ SVSFG;
        return;
    }
    while(SVSCTL&SVSFG)
        SVSCTL &=~ SVSFG;   //清除标志 直到电压正常
}

由于SVSFG标志位不会在处理后自动被清除,所以必须软件清零。这个函数有两种工作方式,同步阻塞等待,直到电压恢复正常后才返回和清零后即返回。


程序实现比较简单,但能够完成SVS的功能。下面介绍如何使用本程序库。


使用示例:

使用程序库的方式还是和以前一样:工程中加入SVS.c文件,源文件中加入对SVS.h的文件包含。

main.c主要内容如下:

#include//430寄存器头文件
#include#include "Lcd12864.h"
#include "SVS.h"

/****************************************************************************
* 名    称:main主程序
* 功    能:设置串口,输出信息,从串口读计算机键盘输入数据,测试串口收发
* 入口参数:无
* 出口参数:无
* 说    明:复位测试时 每次电压调低再调正常 液晶显示的数据加1
            不复位时 每次调低 输出一个电压过低。
****************************************************************************/
void main()
{
    // Stop watchdog timer to prevent TIme out reset
    WDTCTL = WDTPW + WDTHOLD;
    ClkInit();
    LcdInit();
    
    /*//======== 电压过低时复位测试============
    __no_init char ff;      //复位不初始化

    SVSSetup(0x0A,1);       //检测电源电压 3.05v 低于3.05v时单片机复位
    ff++;                   //此变量 每次复位加1
    printf("%d",ff);        // 电压调低(<3.05v)再调高,显示变量将加1
    */
    SVSSetup(0x0A,0);       //测电源电压 3.05v 低于3.05v时单片机 不复位
                            //0x0A 改为0x0f 则对P6.7电压监控 检测是否低于1.2v
    while(1)
    {
        if(SvsFlg()) 
            printf("电压过低");
        //SVSFG位必须 软件清零,如果电压没有回到3.05以上,
        //位的值立即被单片机置为1
        ClearSvs(1);        //清除标志 直到恢复正常电压
    }
}

本程序使用12864液晶来显示电压过低的情况:复位时,设置一个__no_init变量,每次复位加1,可以看到电压调低后,显示数字被加1.不复位置,显示电压过低。这里使用的是12864的底层驱动和printf函数移植,比之前做了稍微更改,这些在注释中说明的已经很详细了,这里不在细说。

推荐阅读

史海拾趣

Hexawave公司的发展小趣事

当涉及到采用算术逻辑单元(ALU, Arithmetic Logic Unit)组成的二进制加减电路时,网友们可能会提出多种问题,这里列举一些常见问题及其解答:

1. ALU 如何实现二进制加法?

回答
在二进制加法中,ALU 使用全加器(Full Adder)或一系列的全加器(对于多位二进制数)来实现。每个全加器接受三个输入:两个加数位(A 和 B)以及一个来自低位的进位(Cin)。它产生两个输出:一个和位(Sum)和一个向高位的进位(Cout)。通过级联多个全加器,可以完成多位二进制数的加法。

2. ALU 如何实现二进制减法?

回答
二进制减法可以通过加法来实现,利用“补码”的概念。具体地,将减数取反加一(即求其二进制补码),然后将该补码与被减数相加。结果的正负由最高位(符号位)决定,其余位表示数值大小。ALU 内部可以包含专门的电路来处理这种补码加法,从而间接实现减法。

3. ALU 如何处理进位和借位?

回答
在加法中,进位(Carry)是从低位向高位传递的,每个全加器都会输出一个进位信号给下一个高位的全加器。在减法(通过补码加法实现)中,由于使用了加法器,进位的概念仍然适用,但在某些情况下,它可能被视为“借位”的相反操作,尤其是在直观理解减法过程时。不过,从电路设计的角度来看,ALU 内部处理的是加法操作,包括进位。

4. ALU 如何支持更复杂的算术运算,如乘法和除法?

回答
ALU 通常支持基本的算术运算(加、减)和逻辑运算。对于乘法和除法,ALU 可能不支持直接计算,或者仅支持部分乘法和除法的简化版本(如移位操作,可以视为乘以2的幂或除以2的幂的简化形式)。复杂的乘法和除法运算通常需要额外的硬件单元(如乘法器和除法器)来执行,这些单元可能作为ALU的补充或与之并行工作。

5. ALU 的设计如何影响计算机的性能?

回答
ALU 的设计对计算机的性能有直接影响。更快的ALU 能够更快地完成算术和逻辑运算,从而提高整个计算机的处理速度。此外,ALU 的指令集和设计的灵活性也会影响其能够执行的操作种类和效率。现代CPU中的ALU通常非常高效且灵活,能够执行多种复杂的算术和逻辑操作,以满足现代应用程序的需求。

安谱隆(Ampleon)公司的发展小趣事

在独立发展后,安谱隆不断推出创新产品,巩固其在射频市场的地位。2015年12月,安谱隆推出了基于0.5μm工艺、额定功率为10至200W的GaN on SiC射频功率晶体管。这一产品的推出不仅展示了安谱隆在射频技术方面的领先实力,也为其在移动通信、广播电视等领域的应用提供了强有力的支持。

Elpress AB公司的发展小趣事

在追求经济效益的同时,Elpress AB也注重可持续发展和环境保护。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,Elpress AB还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了Elpress AB的社会责任感,也为公司的长期发展奠定了坚实的基础。

Belden Wire and Cable公司的发展小趣事

1902年,Joseph C. Belden在美国伊利诺伊州芝加哥创立了Belden公司。在创立初期,公司主要生产电线和电缆产品,并逐渐在行业内崭露头角。1905年,经过大量的实验和研究,Belden公司成功研发出“Beldenamel”绝缘材料,这种灵活的搪瓷绝缘材料极大地提升了线缆的性能和可靠性,为公司的早期发展奠定了坚实的基础。

Federal Custom Cable公司的发展小趣事

在电缆产品性能和质量得到提升的同时,Federal Custom Cable也积极开拓新的市场领域。他们深入了解不同行业对电缆的需求特点,针对不同行业推出了一系列定制化的电缆产品。这些产品广泛应用于通信、医疗、航空等领域,并赢得了客户的一致好评。同时,Federal Custom Cable还加强了品牌建设和市场推广力度,提高了品牌知名度和美誉度。

CSR plc(剑桥硅晶无线电)公司的发展小趣事

除了自主研发和收购外,CSR plc还积极与其他企业进行技术合作与转让。例如,2012年7月,三星电子以3.1亿美元的价格收购了CSR Plc的无线技术部门,包括该部门的310名员工和相关的21项技术专利。这次技术合作不仅为CSR plc带来了可观的收益,也推动了整个行业的技术进步和发展。

通过以上五个故事,我们可以看到CSR plc在电子行业中的发展历程充满了创新与挑战。从初创时期的音频技术突破,到后来的多元化发展、重要收购和技术合作,CSR plc不断适应市场变化,拓展业务领域,最终在电子行业中取得了显著的地位和成就。

问答坊 | AI 解惑

欧姆龙PLC中断问题

欧姆龙PLC如何实现中断,从那里进入及退出,请高人指点!…

查看全部问答>

Keil C51 几类重要库函数 (2)

8. 第八章 dScope for Windows使用详解 1. 第一节 概述 1. 1. 主窗口(Mainframe Window) 可设置其它各种调试窗口,设置断点、观察点,修改地址空间,加载文件等等; 2. 2. 调试窗口(DEBUG Window) 支持用户程序的各种显示方式,可连续运行 ...…

查看全部问答>

请问在wince里怎样用wifi发送特定数据

请问在wince里怎样用wifi发送特定数据 有人说就是socket编程,我没想明白,难道系统会自动调用wifi? 还请各位前辈指点迷津!…

查看全部问答>

ST选型

请问谁清楚ST的哪个8位机有2个PWM,3个定时器,10路ADC,34个I/O(含10个AD口) ,是用来做电源的。wendellyang@163.com…

查看全部问答>

热电堆 信号选择

小弟最近想做一个用于微波炉的温度测量的红外探测模块。由于以前都没有做过项目,所以经验非常少,现在我苦于热电堆型号的挑选。         网上看了看有这些:SC0067、SC0070、10TP583T、OTP系列(如OTP-537F2、OTP- ...…

查看全部问答>

关于硬盘无刷电机的驱动

小弟在研究硬盘电机的驱动,我曾试过用小功率管9013,8050,8550等等来搭成达林顿管子,但是驱动电机的时候发热严重,而且明显有气无力...虽然能转...在网上找了很久,想用场效管IRF540N来驱动,但是不知道电路如何搭建...求各位高手,走过路过的能 ...…

查看全部问答>

8962 lwip 如何实现不同网段连接啊

求助,哪位告诉能指点下, 在8962上面使用lwip 如何实现不同网段的能够连接啊???就是公司网络 192.168.1.12的电脑 可以 ping通 192.168.2.2的电脑但是我的板子 192.168.1.10 ping不同 192.168.2.2的电脑…

查看全部问答>

差分放大器低通滤波器设计

有没谁用差分放大器做个低通滤波器的?请指点小弟一下,谢了...…

查看全部问答>

大三学生方向分流,求好心人指点

大三嵌入式又要分方向了, ARM 、 PCL、 单片机,感觉吧....就是没感觉,有没有前辈给这三个方向的发展,优缺点,就业情况分析一下啊? 小弟先谢谢了....!!!   …

查看全部问答>