つれづれなる備忘録

日々の発見をあるがままに綴る

TinkercadによるArduinoシミュレーション45 ~ ゼロクロス検出回路3

 今回はコンパレータを用いたゼロクロス検出回路とArduinoを組み合わせて、ゼロクロス検出信号をArduinoからトリガ出力する例について紹介する。

atatat.hatenablog.com

1. ゼロクロス検出回路とArduinoの接続

 今回はコンパレータの矩形出力(ゼロを横切るタイミング)の立ち上がりおよび立下りを検出して、Arduinoの5ピンからパルス状のトリガ信号を出力するという構成にする。 交流電圧はファンクションジェネレータで生成しコンパレータの片方に入力し、比較側のもう一方の入力はGNDとする。また、コンパレータの電源は5Vとする。コンパレータすなわちゼロクロス検出回路の出力は割り込みを利用するためArduinoの2ピンに入力し、割り込みのタイミングで5ピンからトリガとして利用できるパルス信号を出力する。交流電圧、ゼロクロス検出回路の出力、パルス信号はそれぞれモニタできるようにオシロスコープを接続する。

"ゼロクロス検出回路とArduinoの接続"
ゼロクロス検出回路とArduinoの接続

2. パルス信号生成のためのスケッチ

スケッチは以下のように、割り込みのタイミングはゼロクロス検出回路の立ち上がり/立下りを利用するためCHANGEとする。またパルス状の信号を生成するためdigitalWrite(outpin,HIGH)の直後にdigitalWrite(outpin,LOW)とする。割り込み時はdelayは有効ではないが、delay(1)とするとTinkercadのシミュレーション上では短いパルスが生成できる。

int pin = 2;
int outpin = 5;
int cnt=0;

void setup()
{

  pinMode(pin, INPUT);
  pinMode(outpin, OUTPUT);
  digitalWrite(outpin,LOW);
  attachInterrupt(0, gen_pulse,CHANGE);
}

void loop(){
  
}

void gen_pulse(){
  digitalWrite(outpin,HIGH);
  delay(1);
  digitalWrite(outpin,LOW);
}

3. シミュレーション実行

 交流電圧を10Hz.振幅10VとしてTinkercadのシミュレーションを実行すると以下のようになる。

"ゼロクロス検出からトリガ信号生成"
ゼロクロス検出からトリガ信号生成

交流電圧のゼロを交差するタイミングでゼロクロス検出回路の矩形波の立ち上がり・立下りに対応し、さらにArduinoからパルス信号が出力されていることがわかる。交流電圧がプラス側になるタイミングで検出したい場合はattachInterruptRISINGとすれば矩形波の立ち上がりのみのタイミングでパルスを生成できる。 なお交流電圧の周波数を上げる(ex:50Hz)とパルス信号がつながってしまうので、もう少し検討する必要がある。

4. まとめ

 今回はコンパレータを用いたゼロクロス検出回路の矩形信号を用いてArduinoの割り込み処理を行い、ゼロを横切ったタイミングでトリガ信号を出力する方法を紹介した。