Arduino Unoの入力スレッショルド電圧を測ってみる

Arduinoのスレッショルド電圧確認波形 Arduino
当サイトのリンクにはアフィリエイト広告が含まれています。
スポンサーリンク

はじめに

今さらながらArduinoを動かしながら勉強中の私ですが、ハードによるチャタリング対策の回路を動作させてみた際に、Arduino Unoのシュミットトリガ入力のスレッショルド電圧(閾値電圧)が実測できそうだったので、確認してみました。今回はその内容を参考までに紹介します。

スポンサーリンク

回路図

今回の回路図・ブレッドボード接続図は下記になります。(参照:ハードによるチャタリング対策と同じです)

回路図(CRによるチャタリング対策)
回路図
ブレッドボード接続イメージ(CRによるチャタリング対策)
ブレッドボード接続イメージ
スポンサーリンク

プログラム

プログラムは下記のとおりです。(ボタンを押している間Lチカ【マイコンLチカ道場 Arduino編 1-1】と同じです。)ボタンを押すとLEDが点灯、離した瞬間に消灯するプログラムです。

const int LED1 = 12;
const int SW1 = 2;
int a = 0;

void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(SW1, INPUT_PULLUP); //SW1を入力に設定、内蔵プルアップ有効
}

void loop() {
  a = digitalRead(SW1); //SW1の状態を読み込み、aに代入
  if (a == LOW){ 
    digitalWrite(LED1, HIGH);
  } else {
    digitalWrite(LED1, LOW);    
  }
}

動作確認

上記の回路とプログラムで、入力ピンの電圧をゆっくり変化させたときに、いつ出力が変化してLチカするかを確認することで、入力のスレッショルド電圧を確認したいと思います。
スイッチを短く押して離したときのスイッチ電圧、マイコン入力電圧、出力電圧の波形をオシロスコープで見てみました。

スレッショルド電圧の確認波形
スレッショルド電圧の確認波形

スイッチONによりC1が放電して、入力ピン電圧が約2.2Vまで落ちた際にLEDが点灯しています。また、スイッチを離して入力電圧が2.6Vまで上昇した際にLEDが消灯していることが確認できました。
よってHIGH⇒LOW(VIL)は2.2V、LOW⇒HIGH(VIH)は2.6V、その差であるヒステリシス電圧は0.4Vであることがわかりました。

入力ピンによって差がないか確認してみました。スイッチを接続するピンを「2」から「3」、「4」に変更して、同様に波形を見てみました。

ピン3のスレッショルド電圧の確認波形
ピン3のスレッショルド電圧の確認波形
ピン4のスレッショルド電圧の確認波形
ピン4のスレッショルド電圧の確認波形

ピン3、ピン4もピン2と同じ結果(HIGH⇒LOWは2.2V、LOW⇒HIGHは2.6V)となりました。よって今回はピンによるばらつきは確認できませんでした。別のボード(マイコンIC)で試すとばらつきが出てくるのかもしれません。

データシートから、今回の結果が間違ってないか確認してみました。Arduino Unoで使われているマイコンのデータシートはここから見ることが出来ます。(秋月電子のサイト:ATMEGA328-P、pdf直リンではないですが、30Mbyte以上有るので注意してください
データシートの609~610ページ(多いなw)あたりの図35-25、図35-26から、5Vの時の入力スレッショルド電圧はVIH=2.6V、VIL=2.1Vあたりであり、ほぼ一致していることが確認できました。

まとめ

Arduino Unoで使われているATMEGA328-Pのシュミットトリガ入力のスレッショルド電圧(閾値電圧)を実測で確認してみました。測定結果は約VIH=2.6V、VIL=2.1Vであり、ほぼデータシートのとおりの値であることを確認出来ました。

このページの実験は下記の製品で試すことが出来ます。
タイトルとURLをコピーしました