今回はSTM32F103のAD変換を使用した際に
ちょっとした問題に遭遇したため紹介します。
TI製電流検知センサINA181A1の出力を
STM32F103のADCで読み込む際に
意図した電圧が読み込めてないことが分かりました。
シャント抵抗に10mΩを接続し、
0.3Aの電流を流しているので
60mVの出力が出ます。
※INA181A1はゲイン20倍
60mVの出力が出ていることは確認できましたが、
ADCで読み込むと6mVしか読み込めていない状況でした。
調査するとTI製電流検知センサINA181A1は全く問題がなく、
STM32F103のADCの初期化に問題があることが分かりました。
HAL_ADCEx_Calibration_Start
というADCのキャリブレーションを初期化時に実行すると
意図した60mVの出力を読み取ることができました。
可変抵抗などでざっくりとした値をAD変換で読み込む場合は
ADCのキャリブレーションをしなくとも問題ありませんが、
電流検知センサなどの微小な電圧を読み込む際には
ADCのキャリブレーションが必須です。
//ADの初期化
MX_ADC1_Init();
//ADのキャリブレーション
if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
{
/* Calibration Error */
Error_Handler();
}
{
/* Calibration Error */
Error_Handler();
}
思った以上に微小電圧の読み込む場合は誤差が出るので、
面倒でもADCのキャリブレーションは初期化時に行った方が良さそうです。