發布日期:2022-07-14 點擊率:71
編程片上系統)是Cypress半導體生產的包含有8位微處理器核和數字與模擬混合信號陣列的可編程片上系統。其應用領域與8位的MCU相同。區別于8位的MCU,PSoC的數字周邊資源(如定時器、PWM、UART等等)和模擬周邊資源(放大器、比較器、濾波器等等)以數字模塊和模擬模塊的方式給出。不同型號的PSoC芯片的差異主要在于其擁有的數字模塊和模擬模塊的數量的不同。用戶可以根據自己的需要來定義這些模塊。所有這些預定義的模塊被稱之為用戶模塊。PSoC Designer也為用戶提供這些用戶模塊的API函數供用戶編程時調用。正因為PSoC可以同時處理模擬信號和數字信號并且它的數字模塊和模擬模塊資源可以由用戶配置,所以與MCU相比有更好的彈性和更高的集成度。這些性能使得它適合便攜式設備的應用。但便攜式設備的應用通常要求芯片有低的功耗,而PSoC由于內部的模塊資源比較多,所以正常情況下它的功耗可能較其他芯片會高一些。本文通過對功耗在PSoC內各資源的分配的分析和正確使用PSoC的SLEEP功能來介紹實施PSoC低功耗應用。
功耗在PSoC內各資源的分配
表1:PSoC 內資源功耗分配表。
表一給出了PSoC內所有資源的的功耗分配,它以電流消耗的方式來表示。除了CPU時鐘以外,表中的電流值都是對應一個單元或一個單位資源所消耗的電流。如果相同的資源有n個,則該類資源所消耗的電流要乘以n。例如,一個應用需使用4個時鐘頻率為3MHz的數字模塊,5個低功率等級/高運放偏置的模擬模塊、20個時鐘為的IO口、4個時鐘為的排總線、一個輸出緩沖器(高運放偏置),供電電源為,而CPU時鐘為12MHz,通過查表和計算我們可以得到芯片所消耗的電流I和功耗P分別是:
I=+4×+5×0.3+20×+4×+2.0=
P=I×V=×3.3=
從表中我們也可以得到如下一些關系:
功耗是正比于Vdd電壓;功耗是正比于CPU的時鐘頻率;數字模塊的功耗是正比于數字模塊的時鐘頻率;排總線功耗是正比于排總線的時鐘頻率;GPIO的功耗是正比于GPIO的時鐘頻率;模擬模塊功耗是正比于模擬塊的功率等級;參考電路和模擬輸出緩沖器功耗是正比于模擬資源的運放偏置;總的功耗是正比于所使用資源的數目,所使用的資源越多,功耗越大。
從以上關系式我們可以知道選擇合適的工作電壓和CPU時鐘頻率對降低功耗是非常重要的。在滿足應用的條件下,應盡可能選擇比較低的工作電壓和CPU時鐘頻率。模擬資源的功耗往往占用PSoC總的功耗一個相對大的比例。對于模擬資源,模擬的功率等級和運放偏置的設置對功耗的影響也比較大。同樣在滿足應用的條件下,應盡可能選擇較低的功率等級和運放偏置。對于沒有使用的模擬資源應該將它對應的功率等級設置成Off以切斷它的供電減少漏電。對于間斷使用的模擬資源,應該在不使用的時候將它對應的功率等級設置成Off,在需要使用的時候才把它打開,以盡量減少它的平均功耗。
用SLEEP方式降低功耗
便攜式設備通常會有很多的待機時間。對于便攜式設備用SLEEP方式降低功耗是所有嵌人式芯片降低功耗的最有效的方法之一。由于PSoC包含有一個SLEEP定時器,因此它允許用戶使用兩種方式使用SLEEP來降低功耗:它們是空閑方式和深度SLEEP。
1.空閑方式
PSoC在5V供電時處于SLEEP狀態時的電流消耗僅3μA。PSoC SLEEP定時器可在PSoC處于SLEEP狀態時提供定時中斷主動喚醒PSoC激活程序。SLEEP定時器可設置1秒、1/8秒、1/64秒和1/256秒。空閑方式的工作示意圖如圖1。
圖1:空閑方式示意圖。
待機時,它使PSoC在某一個固定的周期里喚醒PSoC一次,激活程序查尋是否有外部事件,或者掃描按鍵。如果有外部事或者按鍵被按,則使PSoC繼續處于激活狀態,處理事件。否則PSoC重新進入睡眠狀態。這時PSoC的平均電流為:
由上式可見,在空閑階段,只要激活的時間相對睡眠的時間足夠的短,平均功耗就很小。在進入SLEEP之前必須將SLEEP中斷打開:
INT_MSK0|=INT_MSK0_Sleep;
空閑時間的長短,除了標準的SLEEP定時器設置,也可以使用多個標準的SLEEP間隔來改變它的周期,如:
M8C_Sleep;
M8C_Sleep;
M8C_Sleep;
它的SLEEP時間間隔是3×(1/8)秒(假定SLEEP定時器設置1/8秒)。
2.深度SLEEP
相對空閑方式,深度SLEEP方式就是空閑方式中激活的時間等于零或幾乎等于零。即只要進入待機狀態,就使PSoC的功耗降到最低。喚醒必須通過復位或外部I/O口事件觸發I/O中斷來實現。如:
While(Idle = = 1)
{
M8C_ClearWDTAndSleep;
M8C_Sleep;
}
當PSoC激活時,置Idle為0,進入待機狀態時置Idle為1。在這種方式,通常將SLEEP中斷禁止。
無論是在空閑方式還是在深度SLEEP方式,在進入SLEEP方式之前,都必須注意以下幾點:
將所有的I/O口設置成高阻輸入或者Strong輸出模式,在Strong輸出模式,設置相應的電平使進出I/O口的電流為零。
將所有模擬資源的功率等級設置成off,切斷所有模擬資源的電源供給。
設置全局中斷允許:
M8C_EnableGInt;
清除所有現場的和待定的中斷請求:
INT_VC = 0;
5.如果Watchdog看門狗被使用,也可以暫時禁止它。或者如上面的程序不斷給它清零。需要說明的是,看門狗定時器共享SLEEP定時器,但時間是SLEEP定時器的3倍。
充電泵
大多數PSoC芯片都有一個充電泵電路。這對便攜式設備非常有用。因為便攜式設備通常使用電池供電。PSoC的充電泵可以使用戶的便攜式設備的電池電壓下降到時,PSoC芯片和設備仍然能工作,當然它也取決于負載電流的大小。
圖2:充電泵電路。
充電泵電路如圖2所示。它需要3個外部元件:一個電感L1,一個二級管D1和一個旁路電容C1。如果在全局資源的參數設置中設置Switch Mode Pump為On,那么當Vdd的電壓超過復位電壓后,充電泵電路就開始工作了。一旦電池電壓下降導致Vdd電壓低于參考電壓Verf,則充電泵電路就在SMP腳上輸出的脈沖信號,使由片內和片外共同組成的升壓電路工作。Vdd將上升到一個合適的電壓,PSoC將繼續正常工作。參考電壓Verf可以在全局資源的參數設置中設置,也可以通過設置寄存器VLT_CR的值來設置。它總是比低電壓檢測LVD的值要略微高一些。在SLEEP方式,充電泵電路也仍然工作。但這時PSoC的電流消耗會比正常的SLEEP方式的電流要大。對于有些精確的測量,如AD轉換,也可以短時間關掉充電泵電路,以減少該電路工作時在Vdd上產生的噪聲。
根據具體的應用,電感L1可選1~10μH,而電容C1的典型值為10μF,二級管可選擇肖特基二級管。
本文小結
由于PSoC里面的資源比較多,正常工作時它的功耗可能較其他芯片會高一些。但PSoC在SLEEP方式工作時有非常低的功耗,在5V供電時它的典型值是3μA,在供電時它的典型值是2μA。正確地使用PSoC的內部資源和采用合適的SLEEP工作方式,以及充電泵的使用,使得PSoC在便攜式設備的應用中能發揮更多的優勢。
作者:翁小平
資深主任應用工程師
賽普拉斯半導體
Email:wengxp@