新聞中心

        EEPW首頁 > 模擬技術(shù) > 設計應用 > 軟開關(guān)設計:典型電路及軟件代碼

        軟開關(guān)設計:典型電路及軟件代碼

        作者: 時間:2018-08-23 來源:網(wǎng)絡 收藏

        簡介:何為?是相對于硬開關(guān)而言。硬開關(guān)顧名思義,電源的開斷完全取決于硬件,是物理層上的開合;而,則是必須借助于軟件,準確地說是借助軟件來進行關(guān)閉。

        本文引用地址:http://www.104case.com/article/201808/387605.htm

        兩者各有優(yōu)劣。前者因為是物理層的操作,可以講電源和系統(tǒng)部分完全阻隔,所以關(guān)閉時漏電流非常小,但缺陷是關(guān)閉時無法給予軟件任何通知信息;而后者的關(guān)閉只是電平的操作,關(guān)閉后無法將電源部分與系統(tǒng)部分隔離,因此相對而言,漏電流會比較大,但優(yōu)點在于,關(guān)閉是由軟件進行控制,所以能在關(guān)閉前做好相應的準備工作。正是因為此特性,故電子設備來說采用硬開關(guān)的設計非常少,更多的是軟開關(guān)。舉個簡單的例子,我們常用的家用電腦就是軟開關(guān)設計。試想加入電腦采用的是硬開關(guān)的設計,會是什么結(jié)果?結(jié)果估計就如同我們在正常使用電腦時,突然將插頭給拔掉一樣。這樣,對于電腦的設備,特別是硬盤而言,所造成的損害是不可估量的。

        軟開關(guān)設計 硬件篇

        對于軟開關(guān)而言,在我們按下那一瞬間,因為還沒有給CPU上電,不存在任何程序執(zhí)行的可能,所以注定“打開”這一個操作只能用硬件完成。當系統(tǒng)跑起來以后,此時軟件已經(jīng)開始運作,我們就能通過對GPIO進行操作來關(guān)閉設備。綜上所述,如果要實現(xiàn)軟開關(guān),我們必須具備兩個GPIO口。一個為DETECT_KEY,作為輸入,用來檢測按鍵是否按下;另一個為GPIO_SHDW,作為輸出,用來控制電源的閉合。

        現(xiàn)在,我們來看一個典型的軟開關(guān)電路(圖一,以下講解都以電路圖的標號為指代):

        該電路很簡單,對外的節(jié)點有四處,分別如下:

        PWR_ON:用來控制系統(tǒng)的電源。當其為high時,系統(tǒng)正常供電。

        VDD33D:直接接3.3V電壓

        GPIO_SHDW:當其為low時關(guān)閉系統(tǒng)電源

        DETECT_KEY:檢測按鍵S1的狀態(tài)。

        我們現(xiàn)在根據(jù)開機到關(guān)機的過程來一步一步來分析該電路:

        1.未開機,S1未按下。

        此時GPIO_SHDN為low,直接控制了Q1和Q2的控制腳(PIN1),令VDD33D的電壓無法輸出到POW_ON端。而D1因為S1未按下,該二極管也處于阻隔狀態(tài),S1端的VDD33D也無法輸送到POW_ON端。故整個系統(tǒng)還處于關(guān)閉狀態(tài)。

        2.S1按下,開機。

        S1按下,二極管D1導通,S1端的VDD33D電壓輸送到PWR_ON端,系統(tǒng)開始啟動。系統(tǒng)啟動時,將GPIO_SHDN置high。此時PWR_ON已經(jīng)輸入了R2,R3端的VDD33D電壓,D1兩邊電壓基本上處于平衡狀態(tài),D1相當于斷開,S1端的電壓無法加載到PWR_ON。

        3.S1放開,系統(tǒng)正常運行。

        S1放開,D1不可能再導通,而此時電壓已經(jīng)主要是從R2,R3端的VDD3D輸入,令PWR_ON一直保持high狀態(tài),故系統(tǒng)一直處于正常運行狀態(tài)。

        4.S1按下,系統(tǒng)正常運行。

        因為S1按下,導致Q3導通,拉低R6端下方的電壓,此時DETECT_KEY這個GPIO口檢測到電平為low,軟件開始進入計時狀態(tài)。

        5.S1放開。

        因為S1已經(jīng)放開,Q3不再導通,R6下端電壓恢復,DETECT_KEY檢測到電平為high。此時軟件和閾值做比較,如果超過預定的閾值,則關(guān)閉系統(tǒng);否則,將本次操作忽略。在這里之所以和閾值進行比較,是出自于防抖的需要。因為在實際使用中,可能R6端會有微小的極為短暫的電壓降,如果軟件不設置閾值,檢測到該電壓降就會關(guān)閉,這對于產(chǎn)品而言是不允許的。

        軟開關(guān)設計 軟件篇

        相對于硬件來說,軟開關(guān)的軟件代碼更為簡單,只需要檢測DETECT_KEY即可。該功能的實現(xiàn)主要是通過GPIO,而wince并沒有對GPIO做上層定義,并且每款CPU的GPIO的操作方式又各自不同,所以本文無法給出一個完整可用的代碼,只能用偽代碼作為示例講解。雖然是偽代碼,但對于了解其流程還是有一定的意義。

        void Power_On()

        {

        ...

        //設置GPIO_SHDN為high

        SetGPIO_HIGH(GPIO_SHDN);

        ...

        }

        DWORD PWR_IntrThread(PVOID pParam)

        {

        ....

        //使能中斷

        EnableInterrupt();

        //初始化中斷

        InterruptInitialize(btnSysIntr, hNotifyEvent, 0, 0)

        while(TRUE)

        {

        //等待中斷事件

        dwRet = WaitForSingleObject(hNotifyEvent, INFINITE);

        if(dwRet == WAIT_OBJECT_0)

        {

        //中斷處理完畢,讓中斷再次進入處理

        InterruptDone(btnSysIntr);

        //再次等待中斷處理事件

        dwRet = WaitForSingleObject(hNotifyEvent, 1000);

        if(dwRet == WAIT_TIMEOUT)

        {

        //當其位WAIT_TIMEOUT時,意味著為長按,進入poweroff函數(shù)

        EnterPowerOff();

        }

        }

        }

        ....

        }

        void EnterPowerOff()

        {

        ...

        while(TRUE)

        {

        if(IsGPIOHigh(GPIO_DETECT_KEY) != FALSE)

        {

        //S1已經(jīng)松開,跳出循環(huán)

        break;

        }

        }

        //關(guān)閉系統(tǒng)電源

        SetGPIO_LOW(GPIO_SHDN);

        ...

        }

        這里唯一需要注意的是EnterPowerOff函數(shù),在這里必須要檢測S1是否已經(jīng)松開。如果還沒有松開S1就將GPIO_SHDN置為LOW,因為S1端還有VDD33D電壓輸入到PWR_ON端,所以系統(tǒng)還是無法關(guān)閉。



        關(guān)鍵詞: 軟開關(guān) 電路設計

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 扬中市| 湘潭县| 常山县| 蒙城县| 花垣县| 浦县| 凌源市| 志丹县| 岳普湖县| 屯留县| 周宁县| 松阳县| 沅江市| 濉溪县| 望江县| 长丰县| 秦皇岛市| 邮箱| 尼木县| 休宁县| 昌图县| 武定县| 惠水县| 亳州市| 论坛| 邵东县| 伽师县| 江安县| 榆社县| 海南省| 东乡族自治县| 安多县| 阿鲁科尔沁旗| 曲阳县| 甘南县| 玉环县| 襄樊市| 江油市| 来凤县| 科技| 海城市|