痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 5280|回復: 8

單晶片量得的a/d值如何換算成真實電壓?

[複製鏈接]
發表於 2012-5-13 08:11:25 | 顯示全部樓層 |閱讀模式
8bit單晶片內建10bit a/d,單晶片只有整數運算不能算小數,此單晶片有硬體乘法指令可把2個8bit相乘暫放到16bit暫存器,但不能8bit乘16bit,也不能16bit乘16bit,且無硬體除法指令。
實際量得讀值1000時實際電壓19.353v,假設讀值831,換算可轉成16bit或轉成32bit,也可儘量用內建硬體乘法
1、讀值831,怎麼算最快速?
2、讀值831,怎麼算很慢但不失準確度?
發表於 2012-5-13 12:51:06 | 顯示全部樓層
發表於 2012-5-13 13:43:25 | 顯示全部樓層
不知你的放大倍數是多少?
8 bits的10進位最大值為255,10 bits的值為1023.
若是10bits的基本單位為0.001V,最大值為1.023V,放大20倍為1.023V x 20 = 20.46V,
若是ADC的值為1000,放大20倍為20.00V,那你的19.353的值,其倍數是如何算,亦或只是電表所測得的值,10bits 在10位數裡只有4位數長度.
0.001V x 20 x 831 = 16.62V
  
不知你是否知道一些乘法與除法的基本原理,例如:A=5(0000 0101),B=7(0000 0111)

把A除以2的動作為,5(0000 0101) --> 5(0000 0010),將A往右移一位就是除以2,5/2=2,右邊被移走的值變成 1000 0000,保留以做進一步應用(這是小數點的值).
把B除以2的動作為,7(0000 0111) --> 7(0000 0011),將A往右移一位就是除以2,7/2=3,右邊被移走的值變成 1000 0000,保留以做進一步應用(這是小數點的值).

把A乘以2的動作為,5(0000 0101) --> 5(0000 1010),將A往左移一位就是乘以2,5x2=10,左邊被移走的值,若有進位就變成 0000 0001,保留以做進一步應用(這是進位,其值為512).
把B乘以2的動作為,7(0000 0111) --> 7(0000 1110),將B往左移一位就是乘以2,7x2=14,左邊被移走的值,若有進位就變成 0000 0001,保留以做進一步應用(這是進位,其值為512).
 樓主| 發表於 2012-5-13 14:20:25 | 顯示全部樓層
8bit單晶片內建10bit a/d,內建參考電壓是1.1v,故本來就不能整除。況且內建參考電壓準度差但精度佳每顆不同,故還是要運算校正成原值。
且我也知道1k+19k構成的取樣電阻最省事,但smd 1%精密電阻在19k附近阻值根本無整數值可買,都是17k5、21k3之類,故這裏也需小數換算。
位移等於乘2,除2這我也知道,但mcu指令位移只限8bit暫存器你10bit a/d根本不實用,實際量得讀值1000時實際電壓19.353v是用電錶量的
1、讀值831,怎麼算最快速?
2、讀值831,怎麼算很慢但不失準確度?
3、分壓電阻買不到整數阻值,你們都怎麼解決?用精密可調電阻代替嗎?精密度會不會過幾天跑掉?
發表於 2012-5-15 08:57:41 | 顯示全部樓層
可以用兩顆電阻串並聯成您要的阻值,
網路上有計算機可挑出誤差最小的來用.
http://www.qsl.net/in3otd/parallr.html

E12:
    18000+1000 = 19000        (0 %)

E24:18000+1000 = 19000        (0 %)
    16000+3000 = 19000        (0 %)

E96:16900+2100 = 19000        (0 %)
    16200+2800 = 19000        (0 %)
    11500+7500 = 19000        (0 %)
發表於 2012-5-15 10:03:38 | 顯示全部樓層
just4elect 發表於 2012-5-13 02:20 PM static/image/common/back.gif
8bit單晶片內建10bit a/d,內建參考電壓是1.1v,故本來就不能整除。況且內建參考電壓準度差但精度佳每顆不 ...

這些問題是 MCU 算法的核心技術問題, 除了你自己, 估計沒人可以幫你解決, 除非公開完整的軟硬件設計資料, 人家才能幫你想.

不過參考的方向是有的, 例如, 你把自己設計的資料現用筆寫成最簡算式, 再想辦法優化成MCU的算法, 除此並無捷徑.

舉例, 沒有32BIT CPU的時候, 人家 24 BIT / 2, 一樣可以用任何 4 BIT / 8BIT MCU 完成, 沒有除法指令的一樣可以. 俺做過的實驗, 例如 除10求10進制數值的方法, 有興趣就看看吧
http://blog.yahoo.com/_75UIOHG2UVM5RMBLG4ZZVVJLTA/articles/382365
發表於 2012-5-15 12:27:21 | 顯示全部樓層
本帖最後由 scottwang 於 2012-5-15 02:15 PM 編輯
just4elect 發表於 2012-5-13 02:20 PM static/image/common/back.gif
8bit單晶片內建10bit a/d,內建參考電壓是1.1v,故本來就不能整除。況且內建參考電壓準度差但精度佳每顆不 ...


>且我也知道1k+19k構成的取樣電阻最省事,但smd 1%精密電阻在19k附近阻值根本無整數值可買,
>都是17k5、21k3之類,故這裏也需小數換算。

Oldhan已提供方法,也是一般常用的方法,有時候要用3或4個去處理.

>位移等於乘2,除2這我也知道,但mcu指令位移只限8bit暫存器你10bit a/d根本不實用,
>實際量得讀值1000時實際電壓19.353v是用電錶量的

這個並非不實用,而是你要去了解,如何用兩個暫存器構成16bits運算,或者一個暫存器和兩個位址,去構成16bits運算.

8 bits 變 16bits.
http://www.8052.com/math

此網有許多的資源.
http://www.8052.com/

評分

1

查看全部評分

發表於 2012-5-15 19:06:27 | 顯示全部樓層
對初學者的我來說,有點怕!! 看起來好複雜!! 我習慣用 C 好像還沒遇到這樣複雜的問題, AD 好麻煩!!
發表於 2012-5-15 22:17:30 | 顯示全部樓層
待測電壓先經過opa做增益調整,硬體做法應該最快.....

若一定要用軟體來調整,可將運算程式做成副程式,再複雜的運算也沒問題,
若是用C更簡單,連浮點都算得出來。

所以這跟用幾BIT的CPU無關,以前計算機都是用4 BIT單晶片做出來的,
不也一樣可以計算到小數點以下好幾位數?
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-12-24 08:29 AM , Processed in 0.060105 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.