2023年10月07日

RP2040のBrown-out Reset

今回はRaspberry Pi Picoに搭載されるRP2040のBrown-out Reset(BOR)の設定方法について紹介します。BORは電源投入時や急激な負荷変動等で電源が不安定になった場合にマイコンを強制的にリセットさせることが可能です。電源が不安定になった際にマイコンをリセットさせないと意図しない処理が行われたり、初期化処理が正しく行われないということが生じます。RP2040のBORはデフォルトで0.860Vの設定がされているため、特別な理由がない限りは設定変更は不要です。電源変動が大きい環境で使用する場合などで動作を安定化させる際に必要に応じて変更します。

RP2040のCPUのコア電圧はデフォルトで1.1Vとなっています。これに対して、BORの設定はデフォルトで0.860Vとなっています。BORの設定はコア電圧よりも少し低い電圧に設定する必要がありますが、近づけすぎると少しの電圧変動でも頻繁にリセットがかかってしまいます。逆にBORの設定電圧を下げすぎると、リセットはかからないものの、電圧変動によってマイコンの処理が正しく行われず、動作が不安定になる可能性が高くなります。そのため、デフォルトの0.860Vから下げて設定することは避けるべきです。なお、RP2040のCPUのコア電圧はデフォルトで1.1VはVREG_AND_CHIP_RESET_BASEのVREG_AND_CHIP_RESET_VREG_OFFSET に値が格納されています。


今回はデフォルトの0.860Vから1.032Vに上げる場合を紹介します。BOR関連の定義は下記のヘッダで定義されているため、ヘッダに追加します。
#include "hardware/structs/vreg_and_chip_reset.h"
#include "hardware/regs/addressmap.h"

BOR定義の構造体がヘッダ内で定義されているため、構造体を利用します。BORの電圧の抜粋は下記の通りです。

// 1001 - 0.860V (default)
// 1010 - 0.903V
// 1011 - 0.946V
// 1100 - 0.989V
// 1101 - 1.032V
// 1110 - 1.075V
// 1111 - 1.118V


下記のコードを入れ込むことで1.032Vに変更することが可能です。必要に応じて3行目の0b1101の部分を設定したい電圧に変更してください。

vreg_and_chip_reset_hw_t *vcr;
vcr = vreg_and_chip_reset_hw;
vcr->bod = (0b1101 << VREG_AND_CHIP_RESET_BOD_VSEL_LSB) | VREG_AND_CHIP_RESET_BOD_EN_RESET;


当然ですが、コア電圧が1.1Vのため、コア電圧よりも高い0b1111の1.118Vに設定するとその瞬間にリセットがかかります。RP2040のBORについて、あまり情報がなかったため、紹介しました。ロボット制御やモータ制御等の場合、モータの急激な動きで電源電圧が低下し、マイコンが不安定になる場合があります。そのような場合に電源やモータのコンデンサを強化することはもちろんですが、BORの閾値電圧を少し高めに設定することで安定化できる場合があります。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック