电源电压监控对于单片机来说,也是经常要用的模块。当需要稳定的工业级产品时,经常要对电源电压监控,以保证单片机系统工作于正常环境或范围中。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函数移植,比之前做了稍微更改,这些在注释中说明的已经很详细了,这里不在细说。
上一篇:ZigBee实现多用户智能电表
下一篇:基于MSP430单片机的超低功耗待机解决方案
推荐阅读
史海拾趣
随着国内市场的逐渐饱和,Bellnix开始将目光投向海外市场。公司制定了国际化战略,通过设立海外分公司、建立销售网络等方式,积极拓展海外市场。同时,Bellnix还加强与国际同行的交流与合作,引进先进的技术和管理经验,提升公司的国际化水平。这些举措使Bellnix在国际市场上取得了显著成绩,为公司的发展注入了新的动力。
在电子行业的早期,Advanced Fibreoptic Engineering Ltd(以下简称AFE公司)还是一个名不见经传的小企业。然而,随着技术的不断进步,AFE公司凭借其在光纤技术领域的深厚积累,成功研发出了一种具有划时代意义的新型光纤材料。这种材料不仅传输速度快,而且损耗极低,极大地提高了数据传输的效率和质量。这一技术突破迅速为AFE公司赢得了市场认可,公司的订单量激增,业绩逐年攀升。
随着技术的推广和应用,AFE公司的光纤产品逐渐在通信、医疗、工业等多个领域得到广泛应用。公司不仅在国内市场占据了一席之地,还积极拓展海外市场,与国际知名企业建立了稳定的合作关系。凭借卓越的产品性能和良好的市场口碑,AFE公司逐渐在电子行业中崭露头角,成为了光纤技术领域的佼佼者。
以上是第一个故事的示例,若您想要探索更多关于AFE公司的发展故事,请输入继续。
(注:由于我无法实时获取具体公司的实际发展故事,以上故事为虚构内容,仅用于展示故事编写风格和结构。如果您需要真实、具体的故事,请提供更多关于AFE公司的信息,以便我能为您编写更贴近实际的内容。)
得力公司最初以文具制造起家,但在电子科技快速发展的时代,公司意识到必须转型升级以适应市场需求。于是,得力决定进军专业门槛高、技术壁垒深的打印机产业。经过数年的科研攻坚,得力成功研发出首台激光工程机,并在随后几年内,发展成为国内唯一一家同时掌握激光、喷墨打印核心技术研发、生产能力的企业。这一跨越不仅展现了得力公司在科技创新方面的决心和毅力,也为其在电子行业树立了新的里程碑。
随着技术的不断进步和产品的日益成熟,AVG开始积极寻求市场扩张的机会。公司先后进入多个国家和地区,通过设立分支机构和与当地企业建立合作关系,逐步扩大了市场份额。同时,AVG还注重品牌建设和提升,通过参加国际电子展会、举办技术研讨会等活动,提高了品牌知名度和影响力。这些举措使得AVG在全球电子行业中的地位逐渐提升。
作为一家以技术创新为核心竞争力的公司,EnOcean始终致力于研发更先进、更高效的无线无源传输技术。通过不断投入研发资源,EnOcean在能量转换效率、数据传输速率等方面取得了显著进展。同时,公司还积极探索新的应用领域和市场机会,以保持其在电子行业中的领先地位。
以上五个故事概述了EnOcean公司在电子行业中发展的主要历程和关键事件。通过这些故事,我们可以看到EnOcean凭借其在无线无源传输技术方面的持续创新和卓越性能,成功在全球市场上赢得了广泛认可和应用。
GH-719微波感应位移模块是利用多普勒雷达(Doppler Radar)原理设计的微波移动物体探测器,微波频率10.525GH,直接加直流6-20V电源即可工作。 GH-719微波感应位移模块信号处理采用单片机程序分析,可靠性高。电路板上有16级灵敏度调整 ...… 查看全部问答∨ |
|
分辨率是和图像相关的一个重要概念,它是衡量图像细节表现力的技术参数。但分辨率的种类有很多,其含义也各不相同。正确理解分辨率在各种情况下的具体含义,弄清不同表示方法之间的相互关系,是至关重要的一步。下面对几种常见的图像输入/输出分辨 ...… 查看全部问答∨ |
|
在ITU656标准的文档中,并没有看到该标准是否支持逐行信号。而TW8811和TW8816芯片的介绍中,提到可以支持隔行和逐行的ITU656格式。“Interlaced and progressive ITU 656 inputs are supported.”,有哪位同行知道这一点,帮助确认一下ITU656是否支 ...… 查看全部问答∨ |
谁有IMP813L的中文资料?谁知道在Protel99里如何选择元件库? 在Protel99里想找到IMP813L对应用的是那个元件库,但找了半天没找着谁知道呀? 还有谁有IMP813L的资料(中文最好)能给传一份吗?谢谢!我的EMIL:ycangmsw@163.com 在次感谢!… 查看全部问答∨ |
keil 3.24自带的stm32库是2.01版本的,我在st网站上下载的是2.03版本。我把keil目录下的.c和.h文件都替换为2.03版本的,stm32f10x_vector.s和cortexm3_macro.s文件也采用st的2.03版本,编译起来速度特别慢,两三秒编译一个c文件。没替换 ...… 查看全部问答∨ |
|
刚做好的STM32F107开发板,带以太网,USBOTG有图 下载 (201.35 KB) 2009-8-25 20:14 下载 (208.75 KB) 2009-8-25 20:14 金牛-STM32-107嵌入式开发板 STM32F107功能: STM32F107是意法半导体推出全新STM32互连型(Connectivity)系列微控制器 ...… 查看全部问答∨ |