はじめに
これまでM5stamp C3Uなどのマイコンを電池で駆動させる際、昇圧回路を用いて5Vを作り出していたのですが、実は単3電池1.5V×4では最大で6.4Vくらいまで上振れてしまい、このままでは昇圧の意味がないだけでなくマイコンが過電圧で壊れる危険がありました。よって電池の残量が少なくなったものを使用し昇圧回路に入る前の電圧を5V以下になるよう調整していました。
これでは使い勝手が悪いため、降圧回路も使用して電池BOXの出力電圧によって降圧、昇圧回路を切り分けるプログラムをCH32Vを用いて実現しようと思ったのが今回の目的です。
今回使用するもの
- M5stamp C3U
昇降圧回路からの出力電圧で稼働する端末として使用します。
|
- CH32V003J4M6
秋月電子通商で販売しています。
https://akizukidenshi.com/catalog/g/g118062/
- マイコンDIP変換基板および基板用リードフレーム
CH32V003J4M6の販売ページに適した製品のリンクが掲載されています。それを選べば失敗はしないです(秋月マジ便利)。マイコンのDIP変換基板は「SOP8(1.27mm)DIP変換基板」というものを選び、基板用リードフレームはブレッドボードに差し込めるものなら何でもいいと思います。
- WCH-LinkEエミュレーター
CH32Vシリーズマイコンにプログラムを書き込むなら必須アイテムになります。こちらもCH32V003J4M6の販売ページに製品リンクが掲載されています。
https://akizukidenshi.com/catalog/g/g118065
- XCL103使用5V出力昇圧DCDCコンバーターキット
型番 :AE-XCL103-5V0
メーカー :秋月電子通商
以前からM5stamp C3Uを動かすのに使用していた昇圧回路です。
- 自作降圧回路
次の段落で回路図を記載します。
- その他リレーなど
自作降圧回路
電源から決まった電圧を取り出す手段としてリニアレギュレータとスイッチングレギュレータの2つの方式があります。素人調べですが簡単に特徴を書きます。
リニアレギュレータ
- 降圧のみ可能。
- ノイズが小さく、出力電圧が安定している。
- 降圧分のエネルギーを熱に変換するため変換効率は悪く、入出力電圧によっては放熱設計が必要。
スイッチングレギュレータ
- 回路設計により降圧と昇圧どちらも可能。
- スイッチングノイズが発生するため、出力電圧の微小変動が発生。
- 変換効率は95%と一般的には高く、リニアレギュレータより発熱は低い。
今回降圧回路としてリニアレギュレータを選定しました。リニアレギュレータを初めて触るのと、昇圧側ではスイッチングレギュレータを使用しているため、切り替え先として異なる変換方式にチャレンジしたかったからです。
電気回路は以下の通りです。
リニアレギュレータの取扱説明書を参考にコンデンサを選定しました。取説では最低1.0μF以上と記載されていたため、コンデンサ自体の誤差も考慮し1.5μFと少し大きめのものにしました。
また2つの保護ダイオードも追加しています。
上記図面のD1はレギュレータに逆電流が流れるのを防止するものです。出力部のコンデンサに電荷がたまっている状態でVin側でショートが発生するとVinがVoutより低下する可能性があります。D1がないとVoutからVinの方向へレギュレータを通して本来とは逆方向に電流が流れてしまいます。D1があると電流はダイオード側に流れるため、レギュレータに逆流した電流が流れることを防止できます。
D2は他のレギュレータ(ここではスイッチングレギュレータ)から出力される電流が流入しないように防止するダイオードです。
はんだ付けしたものは下の写真のようになりました。
備忘録ポイント
稼働確認を行ったところ、Vinが6.3Vに対しVoutは4.2Vと5Vより少し減圧してしまいました。原因はD2として配線した保護ダイオードの順方向電圧Vfによって減圧していたことと思われます。D2の直前までは5V近い電圧が発生していました。今回使用した保護ダイオードはただの整流ダイオードを使用しましたが、本来はVfが比較的低くスイッチング特性が早いという特長を持ったショットキーバリアダイオードのほうが保護ダイオードとして適していると後で調べてわかりました。現状のVoutでもM5stamp C3Uは動くので降圧回路はこのまま使用します。ショットキーバリアダイオードを使用するのは次以降の降圧回路の課題とします。
降昇圧回路配線
ブレッドボード上でCH32V、降圧回路、昇圧回路、M5stamp C3Uを配線して実現しました。
電気回路は以下の通りです。
<プログラム書き込み時>
<プログラム実行時>
今回も前回に引き続きシリアルモニタを使用するので、プログラム書き込みと実行で配線を若干変える必要があります。
電気図面の説明を簡単にします。
まず電池BOXからの電圧は可変抵抗を通り、ここで入力電圧を調整します。可変抵抗を経て分圧回路を使用してCH32Vの7ピンにアナログ電圧を入力します。入力された電圧の値によって3ピンから出力を行いリレーを切り替えます。リレーによって可変抵抗を通った電源が”koh”もしくは”sho”どちらかのVinに入力され、調整された電圧がM5stamp C3Uへ供給される仕組みとなっています。
“koh”が自作した降圧回路、”sho”が昇圧回路です。昇圧回路側には自作降圧回路で追加したD2にあたる保護ダイオードがなかったためVout後に保護ダイオードを接続します。ここではショットキーバリアダイオードを使用しました。
以下が配線写真です。
プログラム
M5stamp C3Uでは内蔵LEDを虹色に光らせるプログラムを流しておきます。プログラムは以下の通りです。
//rainbow.ino
#include <Adafruit_NeoPixel.h>
#define LED_PIN 2
#define MAX_BRIGHTNESS 255
Adafruit_NeoPixel pixels(1, LED_PIN);
int rgbValues[] = {MAX_BRIGHTNESS, 0, 0}; // 0=Red, 1=Green and 2=Blue
int upIndex = 0, downIndex = 1;
void setup()
{
pixels.begin(); // initialize the pixel
pixels.setBrightness(5); //明るさを設定
}
void loop()
{
rgbValues[upIndex] += 1;
rgbValues[downIndex] -= 1;
if (rgbValues[upIndex] > MAX_BRIGHTNESS)
{
rgbValues[upIndex] = MAX_BRIGHTNESS;
upIndex = upIndex + 1;
if (upIndex > 2)
{
upIndex = 0;
}
}
if (rgbValues[downIndex] < 0)
{
rgbValues[downIndex] = 0;
downIndex = downIndex + 1;
if (downIndex > 2)
{
downIndex = 0;
}
}
pixels.setPixelColor(0, pixels.Color(MAX_BRIGHTNESS - rgbValues[0], MAX_BRIGHTNESS - rgbValues[1], MAX_BRIGHTNESS - rgbValues[2]));
pixels.show();
delay(5);
}
次にCH32V側のプログラムについて説明します。
//kohsho.ino
//満タン時(6.46V)1000
//5V 774
//4V 619
#define ADC_PIN A2
void setup() {
delay(5000); //UART初期化前に5秒待機(プログラム書き込みのため)
Serial.begin(115200);
AFIO->PCFR1 &= 0xFFFF7FFF; //PA2を使用するときだけに必要なおまじない
pinMode(ADC_PIN,INPUT_ANALOG);
pinMode(PA2, OUTPUT);
Serial.println("Ready");
}
void loop() {
uint16_t adc;
adc = analogRead(ADC_PIN);
if(adc<750){
digitalWrite(PA2, HIGH);
Serial.println("mode change");
Serial.println(adc);
delay(1000);
}else{
digitalWrite(PA2, LOW);
Serial.println(adc);
}
}
プログラムの説明をします。
void setup内でSerial.begin(115200);
の前に5秒間待機時間を持たせています。これは前回の投稿でも使用したようにプログラム書き込みのための時間稼ぎです。
void loop内でA2からのアナログ電圧を読み取り、約4.8V以下になったらシリアルモニタに”mode change”文字列を表示させ、PA2に出力してリレーを作動させます。チャタリング防止としてmode change中は1秒delayを設けています。4V以上であればリレーは作動せず入力電圧に応じた数字がシリアルモニタに表示されます。
備忘録ポイント
当初PA2からのリレーの操作どころかLEDの点滅すらできず、出力操作ができませんでした。調べたところPA1やPA2はビットの初期設定が「1」になっているため、使用するには「0」にする必要があるそうです(詳しいことはわかりません)。
この時参考にしたサイトを記載します。
https://gijin77.blog.jp/archives/cat_424221.html
そこで上記プログラム上ではvoid setup内でAFIO->PCFR1 &= 0xFFFF7FFF;
を追記することで使用できるよう対応しました。
結果
可変抵抗器を調整することでリレーやマイコンに流れる電圧を調整しました。電圧によってリレーが作動し降圧回路と昇圧回路を切り替えることもできました。
ただし昇圧モードの時、M5stamp C3UのLED挙動がおかしくなりました。降圧モードの時は正しく七色に変化していたのですが、昇圧モードになってから赤色しか点灯しなくなりました。
原因の究明
テスタを使用して電圧を測定すると急激に電圧が降下していることがわかりました。昇圧回路に問題があるのではないかと考え、CH32Vを使用せず昇圧回路と電池残量が少なくなった電池(昇圧回路に5V以下の電源を供給するため)とM5stamp C3Uを使い、単に昇圧回路からの電圧でM5 stamp C3Uを七色に光らせるプログラムを稼働させてみました。すると同様に電圧の降下が見られました。
これまでの昇圧回路を用いたプログラムはしてきましたが、どれも短時間のみの確認やdeep sleepモードを使用した省電力のプログラムでしか確認していませんでした。今回自作した降圧回路は出力電圧5V(実際には4.2V)で出力電流は最大500mAとなるように設計しました。しかしこれまで使用してきた昇圧回路は秋月電子通商HPの仕様書を見ると最大で200mAまでしか出力できず、さらに消費電流が高くなると効率も悪化するといった特徴もあります。
昇圧回路を取り除いて検証しました。出力電圧によってリレーを切り替える機能はそのままに、降圧モードは降圧回路を通してM5 stamp C3Uへ出力し、昇圧モードは電池の電力を直接出力する回路を組んで実行しました。
<降圧モード>
<昇圧(電池ダイレクト)モード>
※下の写真は切り替わった後さらに可変抵抗器を回し、M5 stamp C3Uのプログラム挙動が正しく動く限界まで電圧を下げたものです。
昇圧(電池ダイレクト)モードでもM5 stamp C3Uは虹色に点灯しました。
M5 stamp C3Uの消費電力は最大で500mAとなるようです。もしかすると今回のM5 stamp C3Uのプログラムの消費電流では、これまで使用してきた昇圧回路が使用できないようです。
次回は昇圧回路の見直しを行って実施します。