サイトロゴ

Arduinoで可変電圧器【Seeeduino Xiao】

著者画像
Toshihiko Arai

Arduino互換機の超小型マイコンSeeeduino Xiaoで、可変可能な小信号用電圧器を作ってみた。具体的には、0〜1000mVの範囲で約1mV間隔で可変できるものである。このような可変電圧器があると、回路実験にとても重宝する。Seeeduino XiaoならDACが内蔵されているのでとても簡単だ。皆さんも一台、可変電圧器を作ってみてはいかがだろうか。

はじめに

通常、Arduinoで電力を作り出すにはPWM信号のデューティ比を変化させるため、あくまでも擬似電圧にしかならない。しかし、Seeeduino XiaoではDACが標準で備わっているため、簡単にアナログ電圧を作れるのだ。

図の1番ピンがDACに割り当てられている。DACの分解能は10bit。 3.3V電源を可変抵抗で電圧を分圧し、アナログ入力で値を読み取って0〜1000mVの範囲でDACへ出力した。そして、アナログ入力で読み取った値は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(相互コンダクタンス)を測定するのに大いに役立った。

関連記事