皆さま こんにちは。
今回はローパワーマイコンの消費電流を測定してみました。
投稿時の開発環境を記しておきます。
PC:Windows10 OS
IDE: STM32CubeIDE Version1.3.0
Configurator: STM32CubeMX Version5.6.0
マイコン: STM32L010F4P6
Board: 自作のボード
使用するプロジェクト
STM32 ゼロから始めるローパワーマイコン デバッガーでLチカ 前編 および後編でつくったプロジェクトを使いました。
データシートによる消費電流の確認
データシートの Table19 をのせておきます。
外付け水晶がないので、MSI, HSI について測定し比較してみることにしました。
赤線を引いた部分の電流を測定してみます。
VCORE がペリフェラルなどに加える電圧で、この電圧を下げることで消費電流を抑えることができるようになっています。
ただしRange3だとフラッシュへの書き込みができなくなる等の制限があります。
レジスタに値を書くことで、以下の3つから電圧を選択することができます。
Range3 : 1.2V
Ragge2 : 1.5V
Ragne1 : 1.8V
デフォルトでは Ragne1 の 1.8V が設定されています。
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
/** Configure the main internal regulator output voltage
*/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
SystemClock_Config()内の “PWR_REGULATOR_VOLTAGE_SCALE1” の SCALEn の n が Ragneの値になっていて、ここを 2 や 3 にかえることで VCORE を変更することができます。
それと Clock Configuration で表に合わせた周波数fHCLKを選択してビルドし、プログラムを動かして電流を測定しました。
周波数の設定に関してわからない方は 水晶とクロックとRTC の記事を参照してください。
ディジタルのテスターを J1-1 ピンとマイコンの 16番ピンの間に入れて、電流を測定しました。
追加するコード
Lチカするコードは消費電流測定の妨げになるので不要です。
何もないと動いているのかすらわからないので、以下のようにレジスタを読むコードだけを書きました。
PWR->CRレジスタを読むことでレンジが正しく設定されているか確認することができます。
__IO uint32_t cr;
while (1)
{
cr = PWR->CR;
}
レジスタのアクセスについて確認したい方は レジスタへのアクセス の記事を参照してください。
これは PWR_CR レジスタの VOS で確認でき、設定した値に対するリード値は以下の通り正しく読めました。
0x1800 : Range3 (1.2V)
0x1000 : Range2 (1.5V)
0x0800 : Range1 (1.8V)
比較した結果
結果を表にまとめましたのでご覧ください。
clock | Range | fHCLK[MHz] | IDD[mA] | IDD(測定値)[mA] |
---|---|---|---|---|
MSI | 3 | 4.2 (4.192) | 0.505 | 0.347 |
HSI | 2 | 16 | 2.2 | 2.96 |
HSI | 1 | 32 | 5.4 | 5.14 |
Range2 の消費電流が最大値より大きいのが気になりますが、電流を測定しておくと相場がわかって何となく安心ですね。
参考になったでしょうか。
お疲れさまでした。
コメントを書く