會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



« 1 (2)


Re: 使用ADC時配合FVR的問題
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1007
等級: 28; EXP: 8
HP : 0 / 677
MP : 335 / 22521
離線
你做了量測且有資料...是第一步

要能利用資料來分析問題...是第二步

算了一下,看起來好像有很多問題...

附加檔案:



jpg  ADC_volt.jpg (48.93 KB)
3491_5bbbf3e7645c3.jpg 486X208 px

10月09日 08:19:06
轉換PDF檔 列印


Re: 使用ADC時配合FVR的問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14504
等級: 73; EXP: 6
HP : 1081 / 1801
MP : 4834 / 76234
離線
如果工作電壓是 3.8V,那就用 3.8V 當作參考電壓來轉換。沒有說參考電壓一定要 2.048V 的。

用 3.8V 做參考電壓轉換一個 LSB 的電壓值為 3.8V/1024 = 3.7mV
主要是看這最小的解析 3.7mV 符不符合你的應用。

10月09日 10:16:01
轉換PDF檔 列印


Re: 使用ADC時配合FVR的問題
資深會員
註冊日期:
2013/10/22 15:08
來自 香港
所屬群組:
註冊會員
文章: 212
等級: 13; EXP: 58
HP : 0 / 314
MP : 70 / 4600
離線
回應有關jason680的計算結果

在最初發佈的測量資料確實是有問題,因為測試用的程式碼在設定上有誤,才導致測量值比期望值還要少一半的情況。後來再發表的才比較上接近期望值,雖然誤差還是有點大就是了...


回Ryang

現階段程式碼改寫的形式還是在計劃中,所以關於工作電壓下限還是耳整的可能。我不是要斬腳趾避沙蟲,而是後來有考慮到專案有部分周邊是有著比較高的工作電壓下限要求,也就是在VDD下降到一定水平的時候,程式碼就要強制MCU暫停測量直到VDD回升到合理水平。

10月09日 23:42:46
轉換PDF檔 列印


Re: 使用ADC時配合FVR的問題
資深會員
註冊日期:
2013/10/22 15:08
來自 香港
所屬群組:
註冊會員
文章: 212
等級: 13; EXP: 58
HP : 0 / 314
MP : 70 / 4600
離線
今次再利用4.096V的FVR測試,以LM35DZ輸出0.25V為準。


5.13V
FVR:3A 3A 3A 3A
VDD:2E 2E 2E 2E
FVR測值23.2度
VDD測值23.0度
(1)、22.4度(2)

4.54V
FVR:3A 3A 3B 3A
VDD:35 35 35 35
FVR測值23.2度
VDD測值23.4度
(1)、25.8度(2)

3.96V
FVR:40 40 40 40
VDD:40 40 40 40
FVR測值25.6度
VDD測值24.7度
(1)、31.2度(2)


使用的測量值算法:

FVR:
(ADC/1024)*4096
(1)(ADC/1024)*mVDD
(2)(ADC/1024)*5000

(1)是按照當前VDD高低計算
(2)是以固定5V做參考值

雖然VDD的電壓值同樣可以透過讀取FVR取得,不過輸出值是跟電壓高低成反比,需要經過一系列轉換才可使用,故上述mVDD值僅作快速計算時使用。

實際計算時要先取得VDD的ADC值,以下為部分對應值:

5V
= 209
4.75V
= 220
4.5V
= 233
4.25V
= 246
4V
= 262
3.75V
= 279

mVDD
= (8192/V_ADC)*128

參考來源見https://edeca.net/pages/measuring-pic- ... components-using-the-fvr/

但從上述數據看出,如以VDD作為VREF+,無論從實際VDD還是固定5V的作為計算指標,還是會因為VDD變低而得出的越來越大的計算值。

在3.96V的情況下,使用FVR的顯然已經失準,而使用VDD的亦毫無意外的變得越來越不準確。從這些測量的數值看,使用4.096V的FVR測量仍存在1至2度的誤差(當然如果算式有誤還請指正),且不見得有比2.048V或1.024V的準確很多,加上每一度之間的數值空間越來越窄(1.024V > 2.048V > 4.096V),即是準確度會隨著FVR輸出值提升而變得更低。

此外還有在ADC輸入加設18kohm的下拉電阻做對照測試,發現兩者數據基本上沒有什麼分別,只是有加設下拉電阻所得出的數值會比較穩定。

針對這個誤差的問題,或許也要用到跟Temperature indicator一樣的調整方法才行(即是AN1333)。

10月10日 04:03:16
轉換PDF檔 列印


Re: 使用ADC時配合FVR的問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14504
等級: 73; EXP: 6
HP : 1081 / 1801
MP : 4834 / 76234
離線
看起來你需要的是一個穩定的 Vcc,在使用一個穩定的 Vcc 當參考電壓源,鄉心專換出來的數值是很正確的。
如果你使用的是一個會變動的 Vcc,且這變動會低於 固定的參考電壓源 (4.096V , 3.72V) 這一定會有問題的。

如果將參考電壓輸入到 ADC 的腳位,這時就可以作為 Vcc 掉電的偵測或是做為 Vcc 的電壓監控。看起來你需要一個掉電的偵測功能來決定是否可在過低的 VCC 的情況下停止 ADC 的轉換。參考底下的圖片,使用 Fix 參考電壓作為 ADC 的輸入,利用軟體判斷轉出的結果來決定是否掉電了或何時要關閉 ADC 的轉換。

所以系統使用了一個不穩定的供電系統,這對類比電路及ADC轉換都會造成負面的影響。

附加檔案:



jpg  擷取.JPG (53.68 KB)
16_5bbeb7d224bbf.jpg 604X457 px

10月11日 10:39:14
轉換PDF檔 列印


Re: 使用ADC時配合FVR的問題
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1007
等級: 28; EXP: 8
HP : 0 / 677
MP : 335 / 22521
離線
如果VDD電壓會改變...
1. FVR當Vref

2. 先讀FVR,再讀ADC input
http://www.microchip.com.tw/modules/n ... t_id=72749#forumpost72749

兩者個有優缺點...

另外,依照你量測結果來看...
誤差有正有負,可能有以下幾個問題...
1. 程式 計算公式有問題
沒看程式,無法得知
2. 電源雜訊
沒想到或沒設備,則無法量測得知.
3. 輸入雜訊
沒想到或沒設備,則無法量測得知.
4. 量測問題...
要量5.12, 3.79, 3.96, 0.25V 需要有小數三位及有按時校正的電表
如果電表只到小數第二位,本身就會有最後一位跳動,誤差10mV
(例:5.12V=>5.13V, 5.13-5.12 = 0.01= 10mV)
10mV 對 Vref = 5V來說 有2LSB誤差
10mV 對 Vref = 4.096來說 有2.5LSB誤差
10mV 對 Vref = 2.048來說 有5LSB誤差

10月11日 21:26:59
轉換PDF檔 列印


Re: 使用ADC時配合FVR的問題
資深會員
註冊日期:
2013/10/22 15:08
來自 香港
所屬群組:
註冊會員
文章: 212
等級: 13; EXP: 58
HP : 0 / 314
MP : 70 / 4600
離線
一個星期了,先回個follow up...

LM35的輸出精確度倒不是只有整數這麼差...

經過多次測試後,我已將部分使用LM35的專案當中的LM358電路移除,變相就是MCU可以直接讀取LM35,並同時更新程式,配合FVR,節省了不少空間和執行時間之餘結果出來還不錯,準確度亦比更新前的高,但數值跳動幅度比在之前麵包板上測試的還是大一點。

而部分同樣有使用LM35配合LM358的,因為該MCU不是Enhanced mid-range(使用16F685),該固定參考電壓亦只有0.6V一個選項,但因為沒有打算更換MCU,LM358的電路仍得繼續使用。

因為程式碼冗長而且還在修改中,我寫流程代替。以下流程中R和Q為unsigned int全域變數,為數據收集器。

直接讀取LM35的Enhanced mid-range的作業流程如下:
1.先透過快速讀取AN輸入64次取得平均值,放入Q
2.連續讀取16次AN輸入,每讀取一次後加入到暫存器A(區域變數)
3.將這個暫存器A收集到的總數值除以16
4.將暫存器A的結果加到R
5.當R收集過64次之後,將除以64的結果加到Q,之後將R歸零(步驟2-4不斷重複)
6.每次Q有新的數值加入後都要除以2以取得最新平均值
7.將Q的結果顯示出來(重複步驟5-6)
步驟1的函數只執行一次,而步驟2的則會重複執行

經LM358讀取LM35的Mid-range作業流程:
1.先透過快速讀取AN輸入64次取得平均值,放入Q
2.讀取一次AN輸入,放到A
3.因為A並非每次都準確,如果A數值超過Q平均值+/-20的話,A就取+/-20後的值,否則不用更動
4.將數值加入到R
5.當R收集過64次之後,將除以64的結果加到Q,之後R歸零(重複步驟2-4)
6.每次Q有新的數值加入後都要除以2以取得最新平均值
7.將Q的結果顯示出來(重複步驟5-6)
步驟1的函數只執行一次,而步驟2的則會重複執行

步驟3的偽代碼:

UB
=Q+20;
LB=Q-20;

A=ADCread(LM35_CHN);
if(
A>UB){
  
A=UB;
}
else
if(
A<LB){
  
A=LB;
}
R+=A;


LM35的輸出經LM358後是放大了約5倍,在伏特計測量下是看到穩定的電壓,可是從MCU讀取到的數值來看就完全不是這一回事。以LM35輸出0.275V為例,經LM358後就是1.375V,但MCU經LM358讀取到的ADC值可以低至224,高至367,這些極大誤差的數值基本上就是完全沒有可靠性可言。在作業流程中第3步中,除了上述的方法,另一個考慮的方法就是直接取用Q的值代替。

程式碼更新前數據收集需求量為200,收集器要使用到long,但平均值沒有比收集64次的更準,而且使用的空間還很多,所以才有這個修改的動機。收集最多64次的話,就不需要用到long,int就夠(1023 x 64 = 65472),還可免去使用編譯器提供的32位元除法函數(375 words大小),而且使用2的指數做乘除更只需要移動位元的操作(除以16所需的空間比除以20的小)。

此外還有一些乘除法上取巧的地方,例如計算華氏:

T x 9
/5 + 32
= T x 1.8 + 32
= (2-0.2)T + 32
= 2T - T/5 + 32

10月20日 14:44:40
轉換PDF檔 列印



« 1 (2)



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project