:::


Browsing this Thread:   1 Anonymous Users






[PIC16F690] 問省電
#1
資深會員
資深會員


查看用戶資訊
各位先進:
小弟最近需要做省電的產品。
需要5V 驅動,選用的是PIC16F690,內部震盪。
每固定時間去完成某件事,做完就去睡覺。
每個Port 我都設定為輸出,並且空接(除了RA0),

我發現31K 的耗電量是 4M 的8-10 倍。

Why?

<pre>
main()
{
char bCount=0;
OSCCON =0b01100001; // 4M Hz
PORTA =0b00000000;
PORTB =0b00000000;
PORTC =0b00000000;
ANSEL =0b00000000; // AN2,AN1
ANSELH =0b0000; // AN11~AN8
TRISA =0b00000001;
TRISB =0b00000000;
TRISC =0b00000000;

for(;;)
{
bCount++;
UltraLowPowerSleep();
// About 1s WakeUp Once
}
}
</pre>

發表於: 2016/10/18 16:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: [PIC16F690] 問省電
#2
版主
版主


查看用戶資訊
說實在看 Data Sheet 還是無法正確指出原因。

我在想是不是自睡眠模式醒來以後因頻率的部銅導致執行的時間也不同所言生出來的耗電。

請確認一下睡醒後到下一次睡覺,這段期間需執行多少指令? 舉例說 4MHz 的執行只要一秒,但再 31KHz 就需要 待 129 秒的時間。再將兩個耗電量乘上時間後就會有差異出來。

發表於: 2016/10/20 10:03
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: [PIC16F690] 問省電
#3
資深會員
資深會員


查看用戶資訊
4M/31K = 約129倍
相同的工作指令,在頻率4M及31K上,兩者相差129倍的時間.

你的週期時間(工作+休眠)是固定的嗎?
||||_______||||_______
|||| ==> 表示工作時間
||||_______ ==> 工作+休眠 = 週期時間

例: 週期時間固定為1000ms(1秒)
||||______||||_______|||||______ ...

註: MCU工作時間,簡化為 取決於 頻率快慢
假設: 頻率4M 工作時間為 1ms
週期時間(固定1000ms) = 工作(1ms) + 休眠(999ms)
則 休眠/週期時間 = 999/1000 = 99.9%
相同的工作(指令)換成 頻率31K 工作時間為 約為129ms (= 1ms*129)
週期時間(固定1000ms) = 工作(129ms) + 休眠(871ms)
則 休眠/週期時間 = 871/1000 = 87.1%

假設: 4M 工作時間為 2ms
週期時間(固定1000ms) = 工作(2ms) + 休眠(998ms)
則 休眠/週期時間 = 998/1000 = 99.8%
換成 31K 工作時間為 約為258ms (= 2ms*129)
週期時間(固定1000ms) = 工作(258ms) + 休眠(742ms)
則 休眠/週期時間 = 742/1000 = 74.2%

假設: 4M 工作時間為 4ms
週期時間(固定1000ms) = 工作(4ms) + 休眠(996ms)
則 休眠/週期時間 = 996/1000 = 99.6%
換成 31K 工作時間為 約為516ms (= 4ms*129)
週期時間(固定1000ms) = 工作(512ms) + 休眠(488ms)
則 休眠/週期時間 = 488/1000 = 48.8%


休眠的學問大,休的好,省電又達到即時回應效果...
休不好,不是沒省電,就是得不到效果(反應過慢)...

休的好
例: 固定週期時間...
||||____________||||__________ 1ms(工作) + 999ms(休眠)
反應周期(最長)為1秒
若 1秒的反應時間太長(反應太慢),則可縮短為0.1秒(100ms,快10倍)
或0.2秒(200ms,快5倍),...
反應變快 休眠比率改變(耗電增加)
1000ms , 休眠比 = 999/1000 = 99.9%
100ms , 休眠比 = 99/100 = 99%
200ms , 休眠比 = 199/200 = 99.5%
都有99%以上

休不好
例: 固定週期時間...
||||____________||||__________ 129ms(工作) + 871ms(休眠)
反應周期(最長)為1秒
若 1秒的反應時間太長(反應太慢),則可縮短為0.1秒(100ms,快10倍)
或0.2秒(200ms,快5倍),...
反應變快 休眠比率改變(耗電增加)
1000ms , 休眠比 = 871/1000 = 87.1%
100ms , 休眠比 = 工作時間(129ms)比週期時間(100ms)還長(沒休眠)
200ms , 休眠比 = 71/200 = 35.5%
反應是加快了,但沒有省電效果...

註: 沒討論的事項...
1. 相同時間工作時間,不同頻率的功耗不同,
2. 不是固定週期時間(ex:外部事件觸發...)

發表於: 2016/10/20 13:09

Edited by jason680 on 2016年10月20日 14:02:45
程式是
依照寫出來(的code),跑出結果
不是依照你想出來的,得到結果

先有需求規格 後有解決方案
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: [PIC16F690] 問省電
#4
資深會員
資深會員


查看用戶資訊
感謝版主及傑森精彩的回覆
我身旁沒有微電流可以量測 31K 及 4M 對於每一MC 所耗用的功耗。
我只是用一低漏電電容,充飽電後到MCU完全不能動來觀察。
原先以為 31K 可以做完後睡覺,應該會比 4M 解省功耗。
但31K 在我的電路中撐不到1分鐘,4M 卻可以撐到5分鐘以上。
我沒時間去研究為什麼(被追殺了)。
只是顛覆我的舊思維。

發表於: 2016/10/20 13:41
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: [PIC16F690] 問省電
#5
版主
版主


查看用戶資訊
測量小電流可以用串電阻量壓降的方式測量。
以串1K歐姆為例,壓降0·01V則電流為10uA。

配合示波器更可測量到耗電的變化。

發表於: 2016/10/20 14:27

Edited by Ryang on 2016年10月20日 18:02:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: [PIC16F690] 問省電
#6
資深會員
資深會員


查看用戶資訊
想問一個問題,不管你用31k or 4M,睡覺之後如何叫醒?
你可以簡單用點燈來表示WORK跟SLEEP的DUTY CYCLE先看一下如何,
就能知道工作多久睡多久了,有一點要注意的是用速度快的頻率不見得平均耗電會比較大,因為工作時間比較短;而用低頻也不見得比較省電,原因是工作時間長,取得速度跟耗電之間的平衡就是你要去取捨的.

發表於: 2016/10/24 9:02
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]