気の向くままに辿るIT/ICT
webzoit.netウェブサイトホームページ
IoT・電子工作

Arduino+LED/DMM/オシロ/ロジアナでPWMを可視化

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

Arduino+LED/DMM/オシロ/ロジアナでPWMを可視化

Arduino+LED/DMM/オシロ/ロジアナでPWMを可視化

2018/01/14

 Arduinoを使ってパルス波のデューティ比(一定周期のON/OFF時間全体に占めるONの時間)を変化させることによる変調であるPWM/Pulse Width Modulation/パルス幅変調を可視化してみるページ。

 これまでPWMってなんか面倒そうと思い込んで見てみぬふりを決め込んできたのだが、PWMなら、これに対応したArduinoボードのデジタルピンの電圧を変えることもできることを知り、そういうことなら全然難しくないじゃん...と一気に氷解。

 それなら、マルチメータで電圧の変化を確認してみよう、ついては、追従できる間隔を設けたスケッチを書こう、そういえば、オシロってこういう時に使うんじゃないか?と思い、確認してみることにした。

 オシロについては組み立て済みも未だ動作検証未完のDSO138はさておき、回路を組み動作確認できたKyutech Arduino ScopeOscilloscope-Arduino-Processingだが、今ひとつピンと来ておらず、初めて自発的に、こういうケースでこう使ってみればよいのかと思えた今回、超ウルトラものすごくスーパーとってもスペシャル最高ベリーベリー非常にスッキリしたのだった。

 一方、同様の状況だったロジアナもUSB接続ロジアナ、ArduinoとProcessingから成るDIY Logic Analyzerは動作確認済み、今回もPulseView、Saleae Logicオリジナルソフト共に使ってはみたのだが、こちらは、相変わらず、よくわからずじまい...。

 ちなみに、こんなレベルだから、一応、組み立て、動作確認はしたものの、ICL8038 機能信号発生器も使いこなせていない。

 というわけで今回は、LEDとデジタルマルチメータ(DMM)、オシロスコープ、ロジックアナライザを使ってPWMを可視化してみることにした。

Arduino+LED回路とマルチメータによるPWMの可視化

 後述のスケッチにあるようにPWMによりLEDの明るさ(電圧)を5段階で増減させつつ、各電圧をマルチメータで計測してみたのが、この動画。

 消灯を含め、5段階にLEDの明るさが変化しつつ、DMM上では、約0〜1.5mV(約0V)、約0.9V(約1V)、約1.781V(約2V)、約2.662V(約3V)、約3.541V(約4V)、約4.43V(約5V)と変化しているのが見てとれる。

Arduino+LED回路とオシロスコープによるPWMの可視化

 同じく、PWMによりLEDの明るさ(電圧)を5段階で増減させつつ、オシロスコープで計測してみたのが、この動画(あ、周波数間違えた...)。

 5段階にLEDの明るさが変化しつつ、オシロ上では、パルス幅(デューティ比)が変化しているのが見てとれる。

 左に映っているのはLED回路、右のケース入りは、Kyutech Arduino Scope。

 測定は、2チャンネル対応のKyutech Arduino ScopeでCH1/CH2の内、CH1に相当するA1ピンにLED回路のプラス側から引き出したジャンパワイヤを接続し、kit_scope.pdeを実行することで行なった。

ArduinoとロジックアナライザによるPWMの可視化

 今回使ったのは、以前、750円で買ったUSBロジックアナライザ 8ch 24MHz、このCH0にLED回路のプラスから引き出したジャンパワイヤを接続し、測定。

PulseViewでPWM可視化

 よくわからないまま、[50k samples]、[16MHz]、そして[PWM]を選択、PulseViewを起動、[Run]した結果。

 定期的にON/OFFしていること、デューティサイクルが20%程度、時間にして1msであるらしきことはわかった。

Saleae LogicでPWM可視化

 Saleae Logicを起動、なんとなく選んだ[Logic 8]のデフォルト値を使い、[Start Simulation]した結果。

 こっちは、電圧が5Vであることくらいしか、理解できなかった...。

 回路とスケッチについては後述するが、オシロやDMMは別としてAmazonマーケットプレイス激安店からチョイスすれば、抵抗とLEDを各1個とジャンパワイヤ数本、ブレッドボードだけなら100円前後、Arduinoボードを入れても300〜600円前後でいけるかと。

EasyWordMall Arduino UNO R3互換ボード(USBケーブル付属)

EasyWordMall Arduino Pro Mini互換ボード Atmega328 5V 16MHz

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

KKHMF Arduino Nano Ver 3.0互換ボード ATmega328P CH340G 5V 16MHz

KKHMF 24MHz 8チャンネル USBロジックアナライザ 8CHロジックアナライザ UART IIC SPI デバッグ MCU FPGA ARMに対応

SODIAL(R) 5mm 赤/緑/青/黄/白 LED電球 計100個

Rasbee 400穴 ブレッドボード 8.5*5.5cm 1個

HiLetgo 400穴 ブレッドボード 8.5*5.5cm 5個セット

HiLetgo 400穴 ブレッドボード 8.5*5.5cm 10個セット

Rasbee SY-170 ミニブレッドボード カラフルブレッドボード 5個

HiLetgo 金属皮膜抵抗 1/4W 41種類x20=820個

HiLetgo ジャンパーワイヤー(オス-オス) 20cmx40本 5セット

Rasbee ジャンパーワイヤー(オス-オス) 各種長さx65本

Arduinoの回路とスケッチ

 回路とスケッチはこんな感じ。

const int pwm_pin = 5;
 
void setup() {
}
 
void loop() {
 int v_in;
 for(int i=0;i<5;i++){
  v_in = i * 51; 
  analogWrite(pwm_pin, v_in);
  delay(3000);
 }
 for(int i=5;i>0;i--){
  v_in = i * 51; 
  analogWrite(pwm_pin, v_in);
  delay(3000);
 }
}

 以前、PWMについて気になったサイトは見つけられず、代わりに、たどり着いたPWM と Arduino でのアナログ出力を参照させて頂くことにした。

 これによるとArduino Uno/Nano/Pro MiniなどのボードならD3/D5/D6/D9/D10/D11ピンでPWMを利用可能、PWMの周波数は約490Hz、D5、D6は約980Hzということで、ここでは結果、D5を使った。

 今回、5V 16MHzのNanoを使ったのでスケッチでは、1〜5V間で1Vずつ増減ループさせつつ、DMM表示が間に合うように、また、LEDやオシロの波形の変化が見やすいように、3秒の間を置くことにした。

 尚、リンク先にもあるが、51というのは、デジタルピンの値は0-255として表われるため、5(V)で割って1Vあたりを求めた値であり、リンク先の工夫に習ってスケッチを書いてみた。

 LED回路は、ブレッドボード上にArduinoボードの出力用デジタルピン(ここではD5)を適当に抵抗220Ωを介したLEDのプラス側に、LEDのカソード側をArduinoボードのGNDにつなぎ、DMMとオシロ、ロジアナで出力を確認するため、プラス部分からジャンパワイヤを引き出しておくだけ。