软开关设计:典型电路及软件代码_第1页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软开关设计:典型电路及软件代码何为软开关?软开关是相对于硬开关而言。硬开关顾名思义,电源的开断彻低取决于硬件,是物理层上的开合;而软开关,则是必需借助于软件,精确地说是借助软件来举行关闭。两者各有优劣。前者由于是物理层的操作,可以讲电源和系统部分彻低阻隔,所以关闭时漏十分小,但缺陷是关闭时无法赋予软件任何通知信息;而后者的关闭只是电平的操作,关闭后无法将电源部分与系统部分隔离,因此相对而言,漏电流会比较大,但优点在于,关闭是由软件举行控制,所以能在关闭前做好相应的预备工作。正是由于此特性,故设备来说采纳硬开关的设计十分少,更多的是软开关。举个容易的例子,我们常用的家用电脑就是软开关设计。试想加

2、入电脑采纳的是硬开关的设计,会是什么结果?结果估量就犹如我们在正常用法电脑时,骤然将插头给拔掉一样。这样,对于电脑的设备,特殊是硬盘而言,所造成的伤害是不行估计的。软开关设计 硬件篇对于软开关而言,在我们按下那一眨眼,由于还没有给cpu上电,不存在任何程序执行的可能,所以注定“打开”这一个操作只能用硬件完成。当系统跑起来以后,此时软件已经开头运作,我们就能通过对gpio举行操作来关闭设备。综上所述,假如要实现软开关,我们必需具备两个gpio口。一个为detect_key,作为输入,用来检测按键是否按下;另一个为gpio_shdw,作为输出,用来控制电源的闭合。现在,我们来看一个典型的软开关(图

3、一,以下讲解都以的标号为指代):该电路很容易,对外的节点有四处,分离如下:pwr_on:用来控制系统的电源。当其为high时,系统正常供电。vdd33d:挺直接3.3vgpio_shdw:当其为low时关闭系统电源detect_key:检测按键s1的状态。我们现在按照开机到关机的过程来一步一步来分析该电路:1.未开机,s1未按下。此时gpio_shdn为low,挺直控制了q1和q2的控制脚(pin1),令vdd33d的电压无法输出到pow_on端。而d1由于s1未按下,该也处于阻隔状态,s1端的vdd33d也无法输送到pow_on端。故囫囵系统还处于关闭状态。2.s1按下,开机。s1按下,二极

4、管d1导通,s1端的vdd33d电压输送到pwr_on端,系统开头启动。系统启动时,将gpio_shdn置high。此时pwr_on已经输入了r2,r3端的vdd33d电压,d1两边电压基本上处于平衡状态,d1相当于断开,s1端的电压无法加载到pwr_on。3.s1敞开,系统正常运行。s1敞开,d1不行能再导通,而此时电压已经主要是从r2,r3端的vdd3d输入,令pwr_on向来保持high状态,故系统向来处于正常运行状态。4.s1按下,系统正常运行。由于s1按下,导致q3导通,拉低r6端下方的电压,此时detect_key这个gpio口检测到电平为low,软件开头进入计时状态。5.s1敞开

5、。由于s1已经敞开,q3不再导通,r6下端电压复原,detect_key检测到电平为high。此时软件和阈值做比较,假如超过预定的阈值,则关闭系统;否则,将本次操作忽视。在这里之所以和阈值举行比较,是出自于防抖的需要。由于在实际用法中,可能r6端会有极小的极为短暂的电压降,假如软件不设置阈值,检测到该电压降就会关闭,这对于产品而言是不允许的。软开关设计 软件篇相对于硬件来说,软开关的软件代码更为容易,只需要检测detect_key即可。该功能的实现主要是通过gpio,而wince并没有对gpio做上层定义,并且每款cpu的gpio的操作方式又各自不同,所以本文无法给出一个完整可用的代码,只能用

6、伪代码作为示例讲解。虽然是伪代码,但对于了解其流程还是有一定的意义。void power_on()./设置gpio_shdn为highsetgpio_high(gpio_shdn);.dword pwr_intrthread(pvoid pparam)./使能中断enableinterrupt();/初始化中断interruptinitialize(btnsysintr, hnotifyevent, 0, 0)while(true)/等待中断大事dwret = waitforsingleobject(hnotifyevent, infinite);if(dwret = wait_object_

7、0)/中断处理完毕,让中断再次进入处理interruptdone(btnsysintr);/再次等待中断处理大事dwret = waitforsingleobject(hnotifyevent, 1000);if(dwret = wait_timeout)/当其位wait_timeout时,意味着为长按,进入poweroff函数enterpoweroff();.void enterpoweroff().while(true)if(isgpiohigh(gpio_detect_key) != false)/s1已经松开,跳出循环break;/关闭系统电源setgpio_low(gpio_shdn);.这里唯一需要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论