Arduinoで可変電圧器【Seeeduino Xiao】
Arduino互換機の超小型マイコンSeeeduino Xiaoで、可変可能な小信号用電圧器を作ってみた。具体的には、0〜1000mVの範囲で約1mV間隔で可変できるものである。このような可変電圧器があると、回路実験にとても重宝する。Seeeduino XiaoならDACが内蔵されているのでとても簡単だ。皆さんも一台、可変電圧器を作ってみてはいかがだろうか。
はじめに
通常、Arduinoで電力を作り出すにはPWM信号のデューティ比を変化させるため、あくまでも擬似電圧にしかならない。しかし、Seeeduino XiaoではDACが標準で備わっているため、簡単にアナログ電圧を作れるのだ。
図の1番ピンがDACに割り当てられている。DACの分解能は10bit。 3.3V電源を可変抵抗で電圧を分圧し、アナログ入力で値を読み取って0〜1000mVの範囲でDACへ出力した。そして、アナログ入力で読み取った値はOLEDディスプレイを使って電圧表示させた。 OLEDディスプレイの詳しい使い方はこちらの記事を参考に。
配線
配線は図の通り。 可変抵抗は100kΩを使用した。可変抵抗の両端に3.3V電圧をかけ、真ん中のピンをA10に繋いだ。OLEDディスプレイには3.3V電源を供給し、SDA、SCLをSeeeduino Xiaoの割り当てピンに繋ぐ。
A0ピンとGNDを使って、電圧をかけたい対象に接続する。ただし、電流はたくさん供給できないので注意しよう。LEDやモータなどの高負荷には向いていない。
プログラム
今回作った可変電圧のプログラムがこちら。
#include <U8g2lib.h>
#define DAC_PIN A0
#define POT_PIN A10
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
const float Vdd = 3.262;
void setup() {
Serial.begin(9600);
pinMode(POT_PIN, INPUT);
analogWriteResolution(10); // Set analog out resolution to max, 10-bits
u8g2.begin();
}
void loop() {
float v = analogRead(POT_PIN); // 10-bits
float dacVoltage = v / Vdd; // Output limit 0V~1V
analogWrite(DAC_PIN, dacVoltage);
int voltage = v / 1023.0 * 1000;
displayOLCD(voltage);
// Serial.println(voltage);
delay(100);
}
void displayOLCD(int voltage) {
char buf[10];
snprintf(buf, 10, "%d [mV]", voltage);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox3hb_tf);
u8g2.drawStr(0, 16, buf);
u8g2.sendBuffer();
}
電圧の精度は0.01%の範囲に収まり、十分実用的である。この可変電圧器は、FETのgm(相互コンダクタンス)を測定するのに大いに役立った。詳しくはこちらの記事を参考に。