X



トップページ電気・電子
1002コメント367KB

Arduino初心者熱烈大歓迎質問スレ part33

■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2021/12/07(火) 10:52:54.82ID:015O2ewy
http://www.arduino.cc/

【質問者心得】
・スレに一応目を通してから質問しましょう
・回答者はエスパーではありません。状況が分かるように詳しく書きましょう
 詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです
【回答者心得】
・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう
・節度ある初心者さんには、特に優しくね

前スレ
Arduino初心者熱烈大歓迎質問スレ part31
https://rio2016.5ch.net/test/read.cgi/denki/1623898761/
Arduino初心者熱烈大歓迎質問スレ part32
https://rio2016.5ch.net/test/read.cgi/denki/1633840724/

過去スレ
Arduino初心者熱烈大歓迎質問スレ part30
https://rio2016.5ch.net/test/read.cgi/denki/1613577696/
Arduino初心者熱烈大歓迎質問スレ part29
http://rio2016.5ch.net/test/read.cgi/denki/1601349163/
Arduino初心者熱烈大歓迎質問スレ part28
https://rio2016.5ch.net/test/read.cgi/denki/1591734520/
Arduino初心者熱烈大歓迎質問スレ part27
http://rio2016.5ch.net/test/read.cgi/denki/1585316143/
Arduino初心者熱烈大歓迎質問スレ part26
http://rio2016.5ch.net/test/read.cgi/denki/1579146318/
Arduino初心者熱烈大歓迎質問スレ part25
http://rio2016.5ch.net/test/read.cgi/denki/1568358922/
Arduino初心者熱烈大歓迎質問スレ part24
http://rio2016.5ch.net/test/read.cgi/denki/1554776918/
Arduino初心者熱烈大歓迎質問スレ part23
http://rio2016.5ch.net/test/read.cgi/denki/1541233445/
Arduino初心者熱烈大歓迎質問スレ part22
http://rio2016.5ch.net/test/read.cgi/denki/1534549073/
Arduino初心者熱烈大歓迎質問スレ part21
http://rio2016.5ch.net/test/read.cgi/denki/1527252804/
Arduino初心者熱烈大歓迎質問スレ part20
http://rio2016.5ch.net/test/read.cgi/denki/1514503488/
Arduino初心者熱烈大歓迎質問スレ part19
http://rio2016.2ch.net/test/read.cgi/denki/1500745528/
Arduino初心者熱烈大歓迎質問スレ part18
http://rio2016.2ch.net/test/read.cgi/denki/1485192244/
0591774ワット発電中さん
垢版 |
2022/01/25(火) 23:49:29.30ID:GNQ0Tzj7
>>590
USBシリアルが有ればpyupdiと言う手もあるかな。
0592774ワット発電中さん
垢版 |
2022/01/26(水) 00:53:31.12ID:v188HROv
>>591
あいにくそれも持ってないんです。
自分で改造して作れる代物ではないですよね?
百均のケーブルなんかを改造....
とかできないですよね...
0593774ワット発電中さん
垢版 |
2022/01/26(水) 04:46:10.73ID:WEeLKiNm
回路は合っているのかな。
俺は回路定数違っててはまったことがある
0595774ワット発電中さん
垢版 |
2022/01/26(水) 17:58:47.38ID:v188HROv
>>593
あ!抵抗値がちょっと違いました!
4.7kのとこが5.1k?になってます。
これってやっぱり合わせるべきですか?
0599774ワット発電中さん
垢版 |
2022/01/26(水) 21:14:52.96ID:YvBR0er1
VinがVref-1LSBの電圧の時に1023になる。
まあ実際にはVinにVrefの電圧入れても1024は表現出来ないので、ADCの値は1023になる。でもそれは線形な範囲を越えてるということだと思う。
0600774ワット発電中さん
垢版 |
2022/01/26(水) 21:17:21.76ID:bEsUhlws
>>597
ゲイン誤差、オフセット誤差が無い逐次比較型ADCの出力を1023と1024で計算した場合の誤差は
最大値付近で約−0.5LSBか+0.5LSBの差だと思うのでどちらで計算しても変わらない

現実世界では実測するとオフセット誤差の影響で1023で計算した方が近い値になる
0602774ワット発電中さん
垢版 |
2022/01/26(水) 21:54:39.61ID:YvBR0er1
>>600
まあそういう考え方もあるけど、プログラムの中で1023で割るのは抵抗がある。
やはりここは1024じゃないと気持ち悪いです。
0605774ワット発電中さん
垢版 |
2022/01/27(木) 08:59:35.61ID:1ceqEEj3
1024にすべきかと
/1024 ならコンパイラがシフト演算に置き換えてくれるはず(たぶん)
0606774ワット発電中さん
垢版 |
2022/01/27(木) 10:12:50.71ID:qof6+JG8
ADC = Vin*1024/VREF  ( Vin = ADC*VREF/1024 )
ADC = Vin*1023/VREF  ( Vin = ADC*VREF/1023 )
どちらで計算するのかって話かと

ADC = (Vin*1024/VREF)-0.5  (Vin = (ADC+0.5)*VREF/1024)
↑非線形性・オフセット誤差・ゲイン誤差が無いならこれが良いんじゃない?
0607774ワット発電中さん
垢版 |
2022/01/27(木) 11:04:43.45ID:M4BoiA5j
これってアナログリファレンスがデフォルトかインターナルなら1023で問題ないんだよね?
エクスターナルの問題だよね?
0608774ワット発電中さん
垢版 |
2022/01/27(木) 11:10:03.56ID:/WdCiEe1
ADCは整数だから0.5足しても値は変わらないけど気持ちは判る。あと、1024で割るのに異存は無いってことだよね。

ちなみに、>>585のリンク先はトラ技に記事書いてる人のブログだから、そこらへんの素人では無いよ
0609774ワット発電中さん
垢版 |
2022/01/27(木) 11:13:13.64ID:/WdCiEe1
>>607
ん、入れ違いになった。
インターナルだろうが何だろうが、10ビットのADCの量子化感度は1024で割って求めるてことだよ。
0610774ワット発電中さん
垢版 |
2022/01/27(木) 11:15:49.15ID:m5nM+A+b
1023のとき測定電圧がVREFよりLSB一つ分小さいってデータシートに書いてあるんで常に1024にするのがメーカーの指示なんだろう
0611774ワット発電中さん
垢版 |
2022/01/27(木) 11:28:25.27ID:s/DDlU5l
約0.1パーセントの誤差か
ADCにも誤差はあるし
ノイズは乗るし
気が付かないよね
でもより正確なデータは必要だしやってみるかな
なんか変だなと思う事は多々あったから
0612(^p^;)
垢版 |
2022/01/27(木) 11:52:54.12ID:FtdRaxKJ
ぐぐった
LSB:Least Significant Bit, 最下位ビット≒量子化単位

・・・初めから量子化単位って言ってくれた方が判りやすいんじゃアルマイカ;
0613774ワット発電中さん
垢版 |
2022/01/27(木) 11:57:56.94ID:UkMxj5v3
0以上1量子化単位未満→0
1量子化単位以上2量子化単位未満→1
1023量子化単位以上1024量子化単位未満→1023
1024量子化単位以上→オーバーフロー→1023
それだけのことだろ。

0未満→0があるか。
0614774ワット発電中さん
垢版 |
2022/01/27(木) 12:12:57.72ID:qof6+JG8
VREF 5VでUNOのADCが1022を出力する電圧範囲
理論値 4.99023〜4.99511V
実測値 4.99003〜4.99535V (試験電圧約100uVで可変)

Vin = ADC*VREF/1024 だと4.99023V
Vin = ADC*VREF/1023 だと4.99511V
Vin = (ADC+0.5)*VREF/1024だと4.99267V

※小数点一部切り捨て
0618上位は・・・
垢版 |
2022/01/27(木) 14:06:16.25ID:FtdRaxKJ
最上位ビットは、参照電圧の半分以上かどうかだ。
第二位は、そのまた(残りの端数が)更に半分以上かどうかだ。
第三位は、そのまた(残りの端数が)更に半分以上かどうかだ。
・・・
第n位は、(上位桁を差し引いた)残りの端数が(1/2)^n 以上かどうかだ。
0621774ワット発電中さん
垢版 |
2022/01/27(木) 23:25:03.73ID:qof6+JG8
>>615
analogRead()の値から電圧を求めるとき
1023か1024の2択なら理論上1023の方が誤差が少ない

analogReadで取得した数値に0.5足して1024で割るのが理想

例えば基準電圧5VのUNOに4.5000Vを入力する
理論上analogRead()は921を出力する(921 = 4.49707〜4.50195V)

921*5/1023 = 4.50147(誤差 0.00147)
921*5/1024 = 4.49707(誤差 −0.00293)
(921+0.5)× 5 / 1024 = 4.49951(誤差 −0.00049)
※小数点第六位を四捨五入

おまけ http://codepad.org/Lmpcbid6 (誤差を乱数で計算)
0622774ワット発電中さん
垢版 |
2022/01/28(金) 00:06:25.21ID:2FveCX4b
アマで買った中華のProMicro返品して
再注文したら今度はなかなか届かないぞコノヤロー
0625774ワット発電中さん
垢版 |
2022/01/28(金) 09:26:35.11ID:lb5cHuR1
>>621
入力が4.5Vの時にADCの値が921になる理屈が判んない。計算式らしきものが文字化けしてるし。
ちなみに、入力2.5VならADCの値は512(0x200)になるはずだけど、これはどう説明するの?
なお、ADCの階段の位置を0.5LSBシフトする考え方は一理あるとは思う。
0626774ワット発電中さん
垢版 |
2022/01/28(金) 09:38:22.24ID:YZP9fX9b
うーん・・・(´〜`;)

>analogReadで取得した数値に0.5足して1024で割るのが理想

もしそうなら、analogReadの戻り値自体を、
AD化のしきい値をおのおの+0.5した値でADすればいいと思うし、
そうなっているんじゃないか(図のb)と期待したくなるんだががが・・・

ていうか0.000000001V入力時に1(=最小値0+LSB)が返るという解釈(図のa)なん?
0627774ワット発電中さん
垢版 |
2022/01/28(金) 09:39:06.64ID:XdAjyt5g
>>622
春節ってしってるかい?
やつら何よりもこれ、優先するんだぜ。
つまりそういうことよ。
0628774ワット発電中さん
垢版 |
2022/01/28(金) 09:39:31.07ID:1ZJLPQY6
少ない解像度で考えりゃわかる。2bit4階調0−3出力とかで。
あと、数値じゃなくて範囲で考えるとわかりやすい。
0629774ワット発電中さん
垢版 |
2022/01/28(金) 09:47:03.25ID:yJRch6Oc
m5stackだったかもしれないが
データシートにADCの誤差のグラフがあった
多分このグラフに沿って補正すれば理論通り1023でいいんじゃないかな
0631774ワット発電中さん
垢版 |
2022/01/28(金) 10:18:13.25ID:MSkrqMQw
2bitとかの低分解能A/Dコンバータで考えてみたらいいのでは。
5Vをリファレンスとして使うラダー型D/Aとコンパレータで逐次変換型A/Dを構成するとして、
D/Aに与える値と電圧の関係は、

0-0V
1-1.25V
2-2.5V
3-3.75V

になる。
入力電圧と、D/Aの電圧を比較して超える一番低い値がA/D結果になる。
0632774ワット発電中さん
垢版 |
2022/01/28(金) 10:41:01.09ID:kCWxuMB+
>>625
文字化けすまん (921 = 4.49707〜4.50195V)

>>入力2.5VならADCの値は512(0x200)になるはずだけど、これはどう説明するの?

入力電圧により1023で計算した方が正解に近い時と1024で計算した方が正解に近い時が存在する
2.5000V入力時にADCが512を出力すれば1024で計算すると誤差が0になり正確とも言える

しかし2.5000Vを入力した場合のADCは計算上512だけど以下を見てほしい
511 ( 2.495117 〜 2.500000 )
512 ( 2.500000 〜 2.504882 )
丁度境目なんだよね、つまり511と512の可能性が半々・・・・

512*5/1023 = 2.502443 , 511*5/1023 = 2.497556
512*5/1024 = 2.500000 , 511*5/1024 = 2.495117
(512+0.5)×5/1024 = 2.502441 , (511+0.5)×5/1024 = 2.497558
1024で計算すると誤差が0になる可能性半分、誤差が最大になる可能性が半分

ADCの計算方法は最大誤差を少なくする事が重要だと思うのよ(;´・ω・)
0636774ワット発電中さん
垢版 |
2022/01/28(金) 16:17:02.98ID:lb5cHuR1
>>632
ADCの変換特性を、階段のステップの先の延長線がゼロボルトになるイメージで考えてるみたいだけど、それではオフセットが発生する。
そこで、普通は階段の踏面の中央の延長線がゼロボルトになるように作られてる。(オフセット誤差ゼロなら)

先の例のADC結果が0x200となった場合で説明すると、この時のアナログの真値は2.5V±0.5LSBとなる。つまり1024で割って何ら問題無いよ。
0637774ワット発電中さん
垢版 |
2022/01/28(金) 17:52:00.38ID:MSkrqMQw
>>634
0から1023(の1024種の結果が得られる。)だから理論的には
5/1023が1デビになる?

この考え方だと1ビットのA/Dコンバータは、
0〜1だから理論的には
5V/1=5Vが1分解能ってことになるのかな?

1023説の人に聞きたいけど、一般的な、リファレンス5Vの電圧出力D/Aコンバータは、
デジタル値がNのときに
Vout = 5V×N/256
それとも
Vout = 5V×N/255
0639774ワット発電中さん
垢版 |
2022/01/28(金) 18:46:39.04ID:YlCORXNN
よく考えてみたら10bitの最下位を扱うスキルなんて無いやw
0640774ワット発電中さん
垢版 |
2022/01/28(金) 18:56:59.09ID:MSkrqMQw
>>638
1ビットのA/Dって早い話、HかLかなんだけど、
あなたの考え方だと、
2.3Vは0?それとも1?
2.7Vは0?それとも1?
もし、分解能が5Vなら、0は何Vから何Vで、1は何Vから何Vなんだい?

1024説で、5Vリファレンスの1ビットのA/Dを説明するなら、
1分解能は、5÷2=2.5Vで、
0V〜2.5VでA/D変換結果は0
2.5V〜5VでA/D変換結果は1
ということになるよ。
0641774ワット発電中さん
垢版 |
2022/01/28(金) 19:06:00.51ID:RtGCttfI
区間の端を代表値にするから0かVrefのどっちかだけ現れて気持ち悪さが発生するのよな
0642774ワット発電中さん
垢版 |
2022/01/28(金) 19:06:57.47ID:MSkrqMQw
5Vリファレンスの1ビットのD/Aとなると、0Vか5Vという認識になってもいいはず。
(1ビットでラダー抵抗を組むことはなさそうだし)
A/D、D/Aを対称で考えるなら、やっぱり8ビットとかの多ビットで考えないと混乱を招くかもしれないな。

なんにしても、この問題って、1024説が正しいことはみんなわかっていて、
わからないふりをしている人に対して、納得できるように説明しようと試みる人を困らせてるんだよね?
説明する側も、ほどほどでいいのでは。
0643774ワット発電中さん
垢版 |
2022/01/28(金) 19:09:35.35ID:MSkrqMQw
理想のD/A変換は、リファレンス電圧とD/A値から一つの電圧値が算出できるけれど、
理想のA/D変換においては、リファレンス電圧とA/D値をもとに算出できる元の電圧は
1分解能を持つ範囲だよ。
0644774ワット発電中さん
垢版 |
2022/01/28(金) 19:21:36.50ID:LrHT+Scp
>>637
2ビットだともっと分かりやすいかな
4種類数えられる
0から3まで数えられる
33パーセント
33パーセント
33パーセント
ゼロ
4種類あるが最初はゼロしか数えられない
数えられるのは3つしかない
だから理論的には/3
/1024の人はADCでスケッチ書いたことあるの?
0645774ワット発電中さん
垢版 |
2022/01/28(金) 19:28:10.14ID:MSkrqMQw
328Pのデータシートだと、

24.6.3 ADC Accuracy Definitions
An n-bit single-ended ADC converts a voltage linearly between GND and VREF in 2n steps (LSBs).
The lowestcode is read as 0, and the highest code is read as 2n-1.

つまり10ビットのA/Dコンバータでは、
GND〜VREFを1024ステップで直線的に変換し、最小コードは0で最大コードは1023だ、となってるよ。
0647774ワット発電中さん
垢版 |
2022/01/28(金) 19:34:15.84ID:MSkrqMQw
>0から3まで数えられる
>33パーセント
>33パーセント
>33パーセント
>ゼロ
>4種類あるが最初はゼロしか数えられない
>数えられるのは3つしかない
>だから理論的には/3

理論の展開がおかしい。/3を前提にしているから、33%がでてきてる。

>4種類あるが最初はゼロしか数えられない
「最初」が変換値0を表すのだとしたら、だけど、理想の10ビットA/D変換器があるとして
そこに現実的な信号をつないだら、マイナス値でも与えない限り、変換結果0は得られないですね。
0649774ワット発電中さん
垢版 |
2022/01/28(金) 19:38:45.56ID:MSkrqMQw
>2ビットで/4だと0が25パーセントなのでゼロにはならないよ
5Vリファレンスの正電圧入力の2ビットA/Dコンバータに
0V以上の電圧を与えたとき、変換結果として0が得られたら、
入力値は0V〜1.25Vなのだといえるよ。

A/D変換結果が0のときに、入力が0Vだと言うのはそもそもおかしい。
正確には範囲で表現するべきこと。
0650774ワット発電中さん
垢版 |
2022/01/28(金) 19:40:52.93ID:MSkrqMQw
>>648
>理論的にはと前置きしています
いやー。理論になってない、ってことを↓と書いてるんだけど。
>理論の展開がおかしい。/3を前提にしているから、33%がでてきてる。
0651774ワット発電中さん
垢版 |
2022/01/28(金) 19:41:51.67ID:MSkrqMQw
そもそも、なんで4段階のうちのひとつだけを不平等にして考えるんだろう。
>33パーセント
>33パーセント
>33パーセント
>ゼロ
0653774ワット発電中さん
垢版 |
2022/01/28(金) 20:12:06.67ID:tT/m2E+m
整数(int)にアナログ(5V)的な整合性を追及してもキモイことになるだけ
10ビットでアナログ的な辻褄合わせしたいなら
float/double使って1023でオペレーションするべきかな

どうせ量子化ノイズが-60デシベル程度あるんだし
気にしない気にしない
0654774ワット発電中さん
垢版 |
2022/01/28(金) 20:20:56.61ID:LrHT+Scp
1ビットに話を戻します
0はゼロ
0の範囲は0から4.9V
1の範囲は5V
量子化の段階でこうなると思います
1は5Vに達しないと1になりません
確かに0だからといって0Vとは限らないのは分かりました
正確さを帰すなら/1ではないでしょうか?
/2で2.5Vで1とするのは精度的に問題ではないですか?
アナログだからわざと曖昧にするために/2である必要があるのでしょうか
0657774ワット発電中さん
垢版 |
2022/01/28(金) 20:37:52.54ID:LrHT+Scp
>>656
そこまで突っ込む必要があるのでしょうか
桁数が変わるだけで5.00000000000Vで1に達する事には変わりありません
0658774ワット発電中さん
垢版 |
2022/01/28(金) 21:03:52.48ID:1AmMTrBr
>>654

> 1ビットに話を戻します
> 0はゼロ
> 0の範囲は0から4.9V
> 1の範囲は5V

ネタだよな。その仮定だと1の範囲は5以上10未満になるけど10はどっから出てきた?
0664774ワット発電中さん
垢版 |
2022/01/28(金) 22:17:30.31ID:LrHT+Scp
>>663
私はど素人のズブの初心者なので
私の言ってる事が正しいかどうか分かりません
どなたかズバっと答えていただけませんか
0665774ワット発電中さん
垢版 |
2022/01/28(金) 22:38:52.83ID:MSkrqMQw
1ビットは2値。その2値が等しい電圧範囲を持つなら、5Vリファレンスなら
A/D変換値0は0〜2.5V。1は2.5V〜5.0Vですよ。

>/2で2.5Vで1とするのは精度的に問題ではないですか?
上記の電圧範囲であることの、どこに精度の問題があるのでしょうか。
ID:LrHT+Scpさん
「逐次変換A/Dコンバータ」の仕組みはわかりますか?

>1023説の人に聞きたいけど、一般的な、リファレンス5Vの電圧出力D/Aコンバータは、
>デジタル値がNのときに
>Vout = 5V×N/256
>それとも
>Vout = 5V×N/255
↑これについては、どう考えますか?
いくつかの8ビットD/Aコンバータのデータシートを見た上で考えてほしいです。

>>652でも書きましたが、328Pのデータシートに書かれていることと、あなたの説の整合性は
取れていますか?

>どなたかズバっと答えていただけませんか
2ビットなら4段階なのでVref/4ですよ。
0666774ワット発電中さん
垢版 |
2022/01/28(金) 23:35:42.46ID:kCWxuMB+
>>636
>>ADC結果が0x200...の真値は2.5V±0.5LSB
これは間違いだと思う>632でも書いたがx200(512)を出力する電圧範囲は2.500000〜 2.504882
Vin = ADC * VREF / 1024 で計算してしまうと最大0.004882(1LSB)の誤差が生じる可能性がある
0667774ワット発電中さん
垢版 |
2022/01/28(金) 23:47:15.41ID:hIRs2uDu
>>665
2bit だと
0〜1.25Vで0
1.25〜2.5Vで1
2.5〜3.75Vで2
3.75V〜5Vで3
なので、
変換値x1.25+0.625 ± 0.625 ですかね。
でも、電圧に変換して表示したときに
最低が0Vでなくて0.625Vってのは気持ち悪い。
0668774ワット発電中さん
垢版 |
2022/01/28(金) 23:51:56.77ID:MSkrqMQw
気持ち悪いかどうかで、A/Dコンバータの性質を決めちゃだめです。
0669774ワット発電中さん
垢版 |
2022/01/29(土) 00:03:19.02ID:Q8X5eVOk
ググってグラフを見てきたらなんとなく分かってきた
文字だけ見てると分からない
実験して実際に波形を見てみる
みなさんありがとう
0671774ワット発電中さん
垢版 |
2022/01/29(土) 01:03:20.00ID:wX9UZJyh
ADCの精度に夢見過ぎな奴多いな
例えば10bitADCならよい製品でも諸々込みで±2LSBくらいの変換誤差は有る前提で考えないと、安物だともっと悪化する
実はVrefの精度も検討してなかったりして
0674774ワット発電中さん
垢版 |
2022/01/29(土) 08:45:12.28ID:9mcXJhXe
>>670
元のURL
http://ww1.microchip.com/downloads/en/appnotes/atmel-8456-8-and-32-bit-avr-microcontrollers-avr127-understanding-adc-parameters_application-note.pdf

これを見て昨日のID:MSkrqMQwを修正します。
Figure 2-8. Perfect ADC in Single-ended Mode (Adjusted Quantization)
だと、実際の値に合わせるために、0.5LSBずらしています。

これを2ビットのADCにあてはめると (面倒なのでリファレンス4Vにします)
変換値0:0〜0.5V
変換値0:0.5〜1.5V
変換値0:1.5〜2.5V
変換値0:2.5〜4V
こういうふうに作られているADCもある、ですかね。

https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf
Figure 24-13を見ると、変換値0の部分はアナログ値の範囲が半分になっています。

アナログデバイセズのAD7813だと、この0.5LSBの補正は意図していないように見えます。
https://www.analog.com/media/en/technical-documentation/data-sheets/AD7813.pdf
Figure 7. Transfer Characteristic

A/Dコンバータによってこのあたりの考え方は違うのでしょう。

実際の回路では、オフセットエラーを含め、電源レールに近いところは、ADCをドライブする回路も含めて直線性も
悪くなるので、ここの0.5LSBがどうなっているのか突き詰めても益は少ないと思います。

いずれにしても、分解能は Vref/1024 ですけど。
0675774ワット発電中さん
垢版 |
2022/01/29(土) 09:23:55.37ID:wX9UZJyh
>>674
>これを2ビットのADCにあてはめると >(面倒なのでリファレンス4Vにします)
>変換値0:0〜0.5V
>変換値0:0.5〜1.5V
>変換値0:1.5〜2.5V
>変換値0:2.5〜4V
>こういうふうに作られているADCもある、ですかね。

ねーよ
元の資料をどう解釈したらそんなことになるんだ
0676774ワット発電中さん
垢版 |
2022/01/29(土) 10:09:55.07ID:afD/MXkB
>>674
話が本質に近付いて来たね。ADCのオフセットをどう捉えるかがポイントだと思う。

元のURLとしてリンク貼ってくれた資料で説明すると、
https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf
の Fig24-10 Offset error がそのオフセットに該当すると思うんだけど、

その値はTable 29-15. の Offset error で規定されていて、
スペックでは 2LSB Typ. となっている。(1LSB Typ.となっている資料もある)
つまり。0.5LSBとか言ってる場合じゃないくらい大きなオフセットが現実にはある。

.たぶんこれは前段のアナログ回路も含んだ値だろうから、ADC自体のオフセットでは無さそうだけど
これくらいのオフセットは覚悟しなさいと言うことなんだろう。

そんなことで、正確な入力電圧を推定するためにはゲインとオフセットの補正は必須と言うことだね。

話を戻すと、ADCの感度は Vref/1024で計算すればOK。
これを1023とか言ってる人は、ゲインとオフセットの区別が付いていない人。まあよくいるんだけどね。
0678774ワット発電中さん
垢版 |
2022/01/29(土) 12:11:38.92ID:s3kwM2eJ
UNO(ATMEGA328)のADCを実測してみました

VREF 5000mV
1 > 11.25~16.12
2 > 16.12~21.01
3 > 21.01~25.97
2020 > 4980.16~4985.02
2021 > 4985.02~4990.01
2022 > 4990.01~4995.02

VREF 2000mV
1 > 4.14~6.09
2 > 6.09~8.03
3 > 8.03~10.07
2020 > 1991.15~1993.12
2021 > 1993.12~1995.10
2022 > 1995.10~1997.19
0680774ワット発電中さん
垢版 |
2022/01/29(土) 12:48:48.34ID:KMKi2dYY
難しいことは良くわからないのだけど
328Pのデータシートに書いてある10bitADCの説明だとADC=Vin×1024/Vrefなんで、
誤差とか無視した理想電圧でvinMAX=Vref=5Vってすると、5Vを1024で割った値に
VinとVrefの比率を掛けた値がADCに出てきますってことだよね

で、ADC=1024は10bitじゃ表せないので、ADCに実際に上がってくる値の最大は1023
この値は5V-5V/1024から5V以上の間を表すってことなので、ADCの値1に付き何Vかを
計算するのは5/1024で、値が0なら0から4,88mV、値が1なら4.89mvから9.77mV・・・
値が1023ならば4.99512V以上ってコードで作りこむことになるんだよねぇ?
0681774ワット発電中さん
垢版 |
2022/01/29(土) 12:50:38.97ID:x6ODnAkl
>>678
すごい助かる
ありがとう
つまり0は0Vではなく他と同じように幅があるから/1024ですね
0683774ワット発電中さん
垢版 |
2022/01/29(土) 12:52:58.35ID:x6ODnAkl
市販の測定器とかは厳密な数値が出ると思うんだけど
arduinoとかとはなんか違うの?
0685774ワット発電中さん
垢版 |
2022/01/29(土) 13:04:43.21ID:s3kwM2eJ
>>682
変換後(0-1024) = 変換元(0-100) × ( 1024 / 100 )
出力には小数点が含まれるので整数に直すには四捨五入するのが理想
0688774ワット発電中さん
垢版 |
2022/01/29(土) 13:18:42.66ID:0tDK0vDB
>>686
確かに広いですね
厳密な測定は補正が必要なのでしょう
とりあえず私は1024でざっくり行く事にしました
よほどの時間がないと全部の補正なんてできないし
0691774ワット発電中さん
垢版 |
2022/01/29(土) 14:09:17.74ID:s3kwM2eJ
UNO(atmega328)のanalogRead値から電圧を求めるとして
atmega328の内部で量子化補正が「有り・無し」場合

【量子化補正有り】
Vin = ADC * VREF / 1024 (誤差 小)
Vin = ADC * VREF / 1023 (誤差 大)
Vin = (ADC+0.5) * VREF / 1024 (誤差 中)

【量子化未補正】
Vin = ADC * VREF / 1024 (誤差 大)
Vin = ADC * VREF / 1023 (誤差 中)
Vin = (ADC+0.5) * VREF / 1024 (誤差 小)

実測値をみてると量子化未補正に思えるけど、データシート見てもその項目が発見できてない(俺の馬鹿!)
PICとかのデータシートはわかりやすいのに・・・( https://i.imgur.com/JOZ6gsx.png
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況