Spresenseのメインボードと拡張ボードを組み合わせて使用しております。  
HPADCを使用した場合の電圧値への変換式を教えてください。  
各入力ゲイン(-6,0,6,12,14)に対しての変換式をお願いします。  
[![HPで公開されている特性グラフ：この変換式をお願いします。](https://i.stack.imgur.com/XjRVC.png)](https://i.stack.imgur.com/XjRVC.png)
CC BY-SA 4.0
2021-06-02T07:14:14.820
76268
2021-06-14T09:27:58.317
45608
question
spresense
Spresense SDKで提供されているadc_monitorのサンプルプログラムについて
ADC値が符号付き16bit(signed short)の値となって取得される(それをvalとする)。  
Vref電圧が5.0Vで、それを27KΩと10KΩで抵抗分圧して1.4Vを入力している。  
[https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_ad変換器の使用方法](https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_ad%E5%A4%89%E6%8F%9B%E5%99%A8%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95)  
デシベルとゲインの関係は以下のように表される。  
y [dB]＝20 * log10(N) [倍]  
-6dB->1/2倍, 0dB->1倍, 6dB->2倍, 12dB->4倍, 14dB->6倍

電圧Vppに対して取得される電圧への換算式は次のようになると思います。

V=(Vpp/10^(dB/20)*(val+32768)/65536 + (1.4-Vpp/10^(dB/20))/2) * (27+10)/10

理想的には、Vpp=0.7V、-6dB設定で0~5V(=Vref)が-32768~32767になることですが、  
抵抗誤差や配線抵抗、入力電圧の精度などによりズレがあります。  
ズレるのは元々容量結合を意図したADCのように見えるのでそれもあるかと思います。  
[https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_より微小な信号をad変換する場合](https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_%E3%82%88%E3%82%8A%E5%BE%AE%E5%B0%8F%E3%81%AA%E4%BF%A1%E5%8F%B7%E3%82%92ad%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88)

参考にArduino環境でどうしているのかをみてみると、  
上限/下限値をもとにリニアにmap()関数でマップしているようです。  
<https://github.com/sonydevworld/spresense-arduino-
compatible/blob/master/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.0/cores/spresense/wiring_analog.c#L607>

個体でのバラつきもありそうですし、実測値からmapして計算するのがリーズナブルな気がします。
CC BY-SA 4.0
2021-06-14T09:27:58.317
77549
2021-06-14T09:27:58.317
31378
76268
answer