电子发烧友网 > 电源/新能源 > 正文

基于MSP430单片机的SVS(电源电压监控器)模块设计

2020年09月11日 16:20 次阅读
对于单片机来说,也是经常要用的模块。当需要稳定的工业级产品时,经常要对电源电压监控,以保证单片机系统工作于正常环境或范围中。MSP430千亿体育官网F16x提供了一个现成的电源电压监控器模块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)
{
    (!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 me 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函数移植,比之前做了稍微更改,这些在注释中说明的已经很详细了,这里不在细说。

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

【课程介绍】:朋友们大家好,本套视频教程由本人录制,现做为录播课程上传至电子发烧友网平台,感谢电子发烧友网让单片机学习的
发表于 2019-01-19 00:00 3017次阅读

基于比特表实现实时控制系统RTCS的任务调度算法...

在微机控制领域中,许多单片机应用系统是实时控制系统RTCS(Real Time Control Sy....
发表于 2020-09-11 17:57 52次阅读
基于比特表实现实时控制系统RTCS的任务调度算法...

必看干货:单片机节省内存的方法

来源:最后一个bug 作者:bug菌 首先聊一聊 大家都知道进行单片机编程和计算机编程有个最大的差别....
发表于 2020-09-11 17:13 19次阅读
必看干货:单片机节省内存的方法

单片机是控制电子产品的大脑

现如今,我们生活中的许多电器都使用了单片机。例如:手机、电视机、冰箱、洗衣机、以及按下开关,LED就....
发表于 2020-09-11 16:21 36次阅读
单片机是控制电子产品的大脑

片机实现延时的两种方法

来源:大鱼机器人 第一篇 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以....
发表于 2020-09-11 14:29 31次阅读
片机实现延时的两种方法

SAR ADC之间的性能比较和输入注意事项

我们继续讲解与逐次逼近寄存器 (SAR) 数模转换器 (ADC) 输入类型有关的内容。在之前的部分中....
发表于 2020-09-11 10:20 82次阅读
SAR ADC之间的性能比较和输入注意事项

PLC与单片机的区别及的选用

PLC目前大量地用单片机制成。可以说,PLC是单片机在继电控制系统中的一种应用.PLC所采用的梯形图....
发表于 2020-09-11 10:02 59次阅读
PLC与单片机的区别及的选用

基于高性能定点DSP芯片TMS320C62X的混...

TMS320C62X是美国德州仪器公司(TI)的新一代高性能定点数字信号处理器(DSP)芯片。基于D....
发表于 2020-09-11 08:39 31次阅读
基于高性能定点DSP芯片TMS320C62X的混...

LPC2478开发板板载外部闪存AT49BV642D-70TU, 一直用FlashMagic下载程序单片机, 用Image download util...
发表于 2020-09-10 22:53 18次阅读

单片机小器件大麻烦

来源:电工电气学习 做为中国武术流派中赫赫有名的拳种,太极拳那绝对是名头最响的!该拳种招式让人印象深....
发表于 2020-09-10 17:58 134次阅读
单片机小器件大麻烦

单片机与控制实验示意电路原理图设计

按照脉宽调制的原理,再添加一个快速的定时中断(0.1ms左右),在这个中断里面动态改变P1.1的输出....
发表于 2020-09-10 16:11 279次阅读
单片机与控制实验示意电路原理图设计

arm开发板哪款入门好

对于学习ARM,可以分成很多种:从ARM的芯片类型就有:ARM7、ARM9、ARM11、A8之类。
发表于 2020-09-10 15:57 223次阅读
arm开发板哪款入门好

arm单片机用什么编程_arm单片机的优点

 ARM单片机程序可以用汇编语言进行编写。除去协处理器(高级的arm单片机才具有)的指令,常用的指令....
发表于 2020-09-10 15:40 69次阅读
arm单片机用什么编程_arm单片机的优点

嵌入式、单片机是否有前途?

01 故事的起源 知乎上的TopSemic是一名2011年本科自动化专业毕业,他的经历是这样的大学时....
发表于 2020-09-10 11:16 151次阅读
嵌入式、单片机是否有前途?

想测单片机在不同低功耗模式下的电流和工作时间,了解到energy trace仿真可以实现,想找人一起交流,谢谢 ...
发表于 2020-09-09 20:15 101次阅读

基于单片机的占先式实时内核的设计与实现

开发一个占先式实时内核与一般软件的开发一样,必然要经过开发的分析、设计、编码、测试四个阶段。在嵌入式....
发表于 2020-09-09 18:21 311次阅读
基于单片机的占先式实时内核的设计与实现

51单片机的cpu主要由什么组成_51单片机的字...

51单片机的cpu主要组成部分有中央处理器( CPU )、内部数据存储器( RAM)、内部程序存储器....
发表于 2020-09-09 15:43 96次阅读
51单片机的cpu主要由什么组成_51单片机的字...

51单片机是什么_51单片机入门自学

51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列单片机的始祖是Intel的80....
发表于 2020-09-09 15:36 85次阅读
51单片机是什么_51单片机入门自学

基于FPGA CycloneⅡ系列EP2C35实...

扭振(即扭转振动)广泛存在于各种回转轴系中,如内燃机曲轴、发电机、齿轮传动链等。就内燃机轴系而言,严....
发表于 2020-09-09 14:11 191次阅读
基于FPGA CycloneⅡ系列EP2C35实...

让你的设备秒变“智能”,Wi-Fi+BLE双模模...

RISC-V是一个基于精简指令集原则的开源指令集架构,和大多数的指令集相比,RISC-V指令集能够自....
发表于 2020-09-08 16:19 0次阅读
让你的设备秒变“智能”,Wi-Fi+BLE双模模...

三大PID控制算法的C语言实现方案

微分先行PID控制的特点是只对输出量yout(k)进行微分,而对给定值rin(k)不进行微分。
发表于 2020-09-08 15:52 477次阅读
三大PID控制算法的C语言实现方案

Raspberry Pi与单片机的差别

两者用 C/C++ 编程的体验差别是很大的。最明显的是:单片机必须要在电脑上编译好固件,再把固件下载....
发表于 2020-09-08 14:56 165次阅读
Raspberry Pi与单片机的差别

单片机如何通过I/O口实现断电自关机

单片机应用系统中,常有用单片机的I/O口来实现自关机(彻底关机)的功能。一般用单片机的一个I/O口控....
发表于 2020-09-08 13:53 261次阅读
单片机如何通过I/O口实现断电自关机

单片机编程的思想具体做法

(一) 先声明一个概念,裸编程,我创造的名词,指的是在裸机上编写程序,裸机,在单片机领域就是指带着硬....
发表于 2020-09-08 13:50 151次阅读
单片机编程的思想具体做法

基于K9F2G08U0A的Nand Flash操...

由于K9F2G08U0A的总线宽度为8位,页大小为2048字节,需要5个寻址命令,所以NCON、GP....
发表于 2020-09-07 17:07 100次阅读
基于K9F2G08U0A的Nand Flash操...

单片机运行的必备条件_单片机的复位控制

要使单片机能够正常工作,一般指的是单片机最小系统,下面说说最小系统里一般具有的电路:
发表于 2020-09-07 16:56 113次阅读
单片机运行的必备条件_单片机的复位控制

一文解析单片机的发展情况

单片机是什么,单片机就是微控制器,一种通过运行编写的程序实现控制功能的芯片,广泛应用于马达控制、人机....
发表于 2020-09-07 11:48 524次阅读
一文解析单片机的发展情况

单片机入门级好资料    删繁就简-单片机入门到精通 资料来自网络资源 ...
发表于 2020-09-06 22:22 557次阅读

单片机实现多机通信的资料和程序

在单片机多机通信过程中,PC机将指令打包后发给智能接口单元(以下简称主单片机)。主单片机收到完整一包....
发表于 2020-09-06 11:27 186次阅读
单片机实现多机通信的资料和程序

单片机的外部结构和C语言编程基础说明

对于51系列单片机,现有四种编程语言支持,即汇编、pl/m,c和basic通常附在pc机上,是初学单....
发表于 2020-09-06 11:27 351次阅读
单片机的外部结构和C语言编程基础说明

一个单片机与PC机通信的程序

本文档的主要内容详细介绍的是一个单片机与PC机通信的程序。
发表于 2020-09-06 11:26 179次阅读
一个单片机与PC机通信的程序

8051系列单片机的原理和结构介绍

单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器)....
发表于 2020-09-06 10:53 177次阅读
8051系列单片机的原理和结构介绍

使用单片机实现液晶显示的程序说明

硬件电路:51最小系统,没有采用总线方式,直接的I/O形式,包括矩阵键盘,1602液晶,一个数码管,....
发表于 2020-09-06 10:53 126次阅读
使用单片机实现液晶显示的程序说明

DS18B20和51单片机连接的汇编程序免费下载

本汇编程序仅适合单个DS18B20和51单片机的连接,晶振为12MHZ左右
发表于 2020-09-06 10:52 471次阅读
DS18B20和51单片机连接的汇编程序免费下载

利用Small RTOS51实时操作系统实现多任...

在简单的单片机应用系统中,前/后台系统被广泛应用。其中应用程序是一个无限循环,循环中调用相应的函数完....
发表于 2020-09-05 12:21 751次阅读
利用Small RTOS51实时操作系统实现多任...

SDCC编译器和FreeRTOS实时操作系统的优...

FreeRTOS是为小型嵌入式系统开发的一个开放源代码、免费的实时操作系统内核。其内核大部分使用C语....
发表于 2020-09-05 12:16 736次阅读
SDCC编译器和FreeRTOS实时操作系统的优...

寄存器和内存条的基础实现电路方案

那么存储器应该如何工作呢,首先我们要决定数据存在哪儿,就是存储的地址,其次就是数据要稳定的存在,不能....
发表于 2020-09-05 11:29 217次阅读
寄存器和内存条的基础实现电路方案

基于单片机及实现的脉博血氧仪系统千亿体育官网

MSP430FR235x系列单片机是TI推出的超低功耗、低成本,具有丰富模拟信号链资源的16位RIS....
发表于 2020-09-05 10:38 296次阅读
基于单片机及实现的脉博血氧仪系统千亿体育官网

随着人工智能和传感器技术的发展,机器人已从工厂的结构化环境进入人们的日常生活环境,机器人不仅能自主完成工作,还...
发表于 2020-09-04 16:10 101次阅读

1,在使用中需要用到msp430afe253,软件是iar5.1的,在option中找不到我需要的afe253。看了iar用户手册,但我半吊子英...
发表于 2020-09-03 19:32 0次阅读

在对单片机操作时通常有三个步骤:首先是系统时钟选择,其次是单片机外设初始化,最后是主程序编写。要点亮LED灯...
发表于 2020-09-03 19:10 101次阅读

发表于 2020-09-03 17:13 0次阅读

经常有用户询问我们,北斗短报文设备的电池能够续航多少天呢?经过好几次帮用户计算后,我决定设计这个小软件来彻底解...
发表于 2020-09-03 17:07 103次阅读

STM32MP1 通用微处理器产品系列,系基于混合的 双Arm Cortex-A7核 和 Cortex-M4核架构产品。此系列产品在...
发表于 2020-09-03 15:21 101次阅读

例:让该端口输出高电平的语句是:SETB P1.0让该端口输出低电平的语句是:CLR P1.0 好了,现在我们将小灯接在...
发表于 2020-09-03 07:26 303次阅读
'+data.username+'
';*/ var login_content = ' 写文章
' + data.username + '
'; $('#login_area').html(login_content); var win_width = $(window).width(); if (win_width > 1000) { $("#mine").mouseDelay(200).hover(function () { $("#mymenu").show(); }, function () { $("#mymenu").hide(); }); } } else { var content = '登录'; $('#login_area').html(content); $(".special-login").click(function (e) { $.tActivityLogin(); return false; }); } }); } (function () { /* * 插入单点登录JS */ var setHost = 'https://passport.elecfans.com'; //设置域名 var script = document.createElement('script'); script.type = 'text/javascript'; script.src = setHost + '/public/pc/js/t.passport.js'; script.setAttribute("id", "sso_script"); script.setAttribute("data-ssoSite", setHost); script.setAttribute("data-ssoReferer", encodeURIComponent(location.href)); script.setAttribute("data-ssoSiteid", "11"); var body = document.getElementsByTagName("body").item(0); body.appendChild(script); })() /* * 推荐文章无图时样式修改 * */ $(".article .thumb").each(function () { if ($(this).find('img').attr('src') == "") { $(this).find('img').remove(); $(this).parent().css('padding-left', '0px'); } }); /*百度分享*/ window._bd_share_config = { common: { bdText: '',//自定义分享内容 bdDesc: '',//自定义分享摘要 bdUrl: window.location.href,//自定义分享url地址 bdPic: '' }, share: [{ "bdSize": 60 }] } with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?cdnversion=' + ~(-new Date() / 36e5)]; var add_url = '/d/article/write/'; // var check_allow = "{:U('Api/iscantalk')}"; var check_allow = "/d/api/iscantalk"; var click_items_length = $('.art_click_count').length; if (click_items_length > 0) { var id_str = ''; $('.art_click_count').each(function () { id_str += $(this).attr('data-id') + ','; }) // var url = "{:U('Api/getclickbyids')}"; var url = "/d/api/getclickbyids"; var id_data = 'id_str=' + id_str; $.ajax({ url: url, data: id_data, type: 'post', dataType: 'json', success: function (re) { if (re.list.length >= 1) { var list = re.list; for (var i in list) { var temp_id = list[i]['id']; var temp_span = $(".art_click_count[data-id=" + temp_id + "]") temp_span.html(list[i]['click']); } } } }) } $("#comContent").click(function () { if (now_uid == '') { $.tActivityLogin(); return false; } }); $("#comSubmit").click(function () { if (now_uid == '') { $.tActivityLogin(); return false; } }); $(function () { var follow_wrap = $(".author-collect"); var now_uid = "{$_super['uid']}"; var face_src = "{$_super['uface']}"; var getFollowNum = $(".followNum strong").html(); //关注 $(window).on('click', '.author-collect', function () { if (now_uid == '') { $.tActivityLogin(); return false; } if ($(this).attr('id') == 'follow') { $.post('/d/user/follow', { tuid: article_user_id }, function (data) { //返回的数据格式: if (data.status == "successed") { $(".followNum strong").html(++getFollowNum); follow_wrap.html('已关注').attr('id', 'cancelFollow').css('background', '#999'); var follow_user = ''; $('#follow_list').append(follow_user); } if (data.status == "failed") { alert(data.msg); } } ); } else { //取消关注 if ($(this).attr('id') == 'cancelFollow') { $.post('/d/user/cancelFollow', { tuid: article_user_id }, function (data) { //返回的数据格式: if (data.status == "successed") { follow_wrap.html('关注').attr('id', 'follow').css('background', '#f90'); $(".followNum strong").html(--getFollowNum); $('#follow_list .face').each(function () { var target_uid = $(this).attr('data-uid'); if (target_uid == now_uid) { $(this).remove(); } }) } if (data.status == "failed") { alert(data.msg); } } ); return false; } } }); });
千亿体育官网 千亿体育官网 千亿体育官网 千亿体育官网 千亿体育官网 千亿体育官网 千亿体育官网 千亿体育官网 千亿体育官网 千亿体育官网