STM32F4のバッテリバックアップを使いたいと思い、Vbatにコンデンサを接続してみた。
回路はこんな感じ。
VDDからダイオード経由でVbatに接続、Vbatから抵抗経由でキャパシタに接続。
本来はVbatに0.1uFを接続するべきだが、今回使用したマイコンボード(STBee F4mini)にはすでに実装済みなので回路図上では省略している。
電解コンデンサは内部抵抗が小さいから、ダイオード経由でVDDに直結すると大きな突入電流が発生する可能性がある。適当なRを挟むが、470Ωなら入手性も高いだろうし、電流も7mA程度で、丁度いい。数値に特に意味はないので、300-1kΩ程度であれば問題ないはず。
D1を定電流素子としてR1を省略してもいいが、次に述べる理由によってある程度のRがあったほうがいい。
Vbatは過渡的にVDDと接続されることがあるらしいので、Vbatとキャパシタを近い場所(低い抵抗値)で接続すると、キャパシタが放電状態のときにVbatが地絡状態となる可能性があるため、Vbatとキャパシタの間に抵抗が入るような構成にしている。D1とVbatの間にRを入れれば放電時のRによる損失を防げるが、その場合は過渡的な状態への対策が必要になる。
SRAM素子のバックアップではR1をバイパスするようにダイオードを入れる例もあるが、STM32のバックアップ電流は極めて小さいので(数十マイクロアンペアのオーダー)、R1による電圧降下は無視できる程度のはず(数mV程度)。ダイオードを入れても順方向電圧が抵抗の降下電圧を上回るはずだから、抵抗単体で十分と判断した(回路もシンプルに済む)。
電圧履歴は以下のようになる。
デジオシの10倍で観測しているため、入力抵抗は10MΩ、3.3Vに対して0.33uA程度のリークとなる。Vbatの消費電流より1桁小さいので、今回は誤差として無視する(プローブを外した場合は消費電流が減るので、バックアップ時間が伸び、大抵は安全側に振れる)。
充電はほぼ瞬時に完了し、3.1V付近から1.7V付近まで降下するのに670秒程度かかっている。
今回使用したダイオードは1N4148のはずで、これは順方向電圧が1V程度ある。ただし微小電流領域では300mV前後まで小さくなるので、数分の充電で3.3Vに対して3.1V程度まで充電される。
電解コンデンサ1個で、おおよそ11分程度、バックアップできていることがわかる。
ただし今回はRTCをONにし、バックアップSRAMをOFFにしているから、場合によっては更に消費電流が大きくなるし、温度によっては消費電流や自己放電が大きくなる可能性もある。
例えばメインの電池交換時や、瞬断へのバックアップであれば数百uFでも十分だろうが、数日から数ヶ月程度のバックアップを行いたい場合はEDLCや一次リチウムイオン電池が選択肢になる(その場合は異なる回路が必要になる)。
電解コンデンサ1個とはいえ、470uFともなるとかなりの大きさになるので、実際に使う場合はバックアップ用の小型EDLC等を使うべきだろう。今回は評価目的で手持ち部品を流用したのと、あまりに大きな容量では放電時の評価が大変ということもあって、電解コンデンサを使用した(今回想定している用途的に、数十秒程度バックアップできれば十分だから、という理由もある)。
おまじない
オシロで1箇所プローブしただけで、ちゃんと評価したわけじゃないので、電気特性の問題の有無や、確実にバックアップを行いたい場合は各自適切に評価すること。