9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ADCから現在の電源電圧を知る方法

Posted at

#はじめに
電源電圧にバッテリーなどを使用しているときに、マイコンからバッテリー電圧を知りたいことがあります。STM32でそれを行う方法です。

#基礎
STM32の中にはVrefintという基準電圧があります。これはSTM32F401REの場合は電源電圧がいくつであっても(もちろん動作保証範囲内です)以下の電圧に収まるようになっています。
image.png

またSTが工場出荷するときに、Vddを3.3VにしたときにVrefintをADCで計測して、その値をFLASH上に書き込んであります。
image.png

これを使って現在の電源電圧を計算する式がSTのレファレンスマニュアルに記載されています。残念ながらSTM32F401のリファレンスマニュアルには記載がなく、STM32F0x1のリファレンスマニュアルから引っ張ってきました。
image.png

#電源電圧を変える準備
ここの記事に詳細があります。
https://qiita.com/kotetsu_yama/items/2c5c38a708f45184a57b

#コード
以下のように修正します。

/* USER CODE BEGIN 0 */
uint32_t VrefValue;
float V;
__IO uint16_t *VrefCal = (__IO uint16_t*)0x1FFF7A2A;
/* USER CODE END 0 */
    /* USER CODE BEGIN 3 */
	  // Get ADC Value
	  HAL_ADC_Start(&hadc1);
	  HAL_ADC_PollForConversion(&hadc1,1000);
	  VrefValue = HAL_ADC_GetValue(&hadc1);
	  HAL_ADC_Stop(&hadc1);

	  // Get actual Vdd Voltage
	  V = 3.3f * (float)*VrefCal / (float)VrefValue;
	  __NOP();

  }
  /* USER CODE END 3 */

全コードはgithubにあげてあります。
https://github.com/kotetsuy/STM32forWindowsDemos/tree/master/ADCmesureVdd

#実験結果
電源を1.8Vにしたとき
1_8v.png
電源を2.4Vにしたとき
2_4v.png
電源を3.3Vにしたとき
3_3v.png

#おわりに
これでバッテリー駆動の時にバッテリー電圧を外部回路なしで計測できます。

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?