HOME >> 鉄道模型実験室 > Arduino Nano Every のPWM出力を調べる

鉄道模型実験室 No.151  Arduino Nano Every のPWM出力を調べる

 先回の報告「卓上レイアウトで楽しもう 自動運転 その21」(2020/2/19)で、給電制御を実施していたモータドライバを焼いてしまった。 ミステイクした原因は、結局は不明のままであった。 そこで、今までの方法を諦めて新しいモータドライバを使ってみることにした。 そして、確認のために、PWM出力波形を観察していたところ、危うく失敗を重ねるところであった。 ここでは、新しく取り組んだドライバセットの工作とPWM出力波形の観察結果を報告する。

  .

 

■ 新しいモータドライバのセットを作る

  .

 手持ちのドライバが無くなったので、新しいドライバを入手することにする。 しかし、以前使用したことのある TA7291F は既に生産中止となったおり、秋月では取り扱っていなかった。 このドライバは給電側の電源と制御側の電源が別になっているため、使い易かったのだが・・・・・・・・・。 また、破損させたTB6612 のドライバをもう一度使う手もあるのだが、破損させた原因が不明であるので、もう少し容量の大きなドライバを探した。

 しかし、該当するドライバを探したが見つからなかったので、制御と給電電源が共通しているTB6643KQ を使うことにしよう。  大きな電流でもびくともしないようであり、技術評論社の「Arduinoであのシム鉄道模型」でも、このドライバを使用した例を紹介されているので、まず安心して使えるであろう。 でも、これによって、給電電源としてTOMIXのコントローラが使えなくなってしまうのだ・・・・・・・・

 TB6643KQ
東芝製のDCモータ用フルブリッジドライバIC、MOS構造でPWM駆動方式、出力最大電流は4.5A、電源電圧は10〜45V、PWM周波数〜100kHz、入力電圧 - 0.3 〜 5.5v

 このため、今までと同様な制御を実施するためには、右の回路図のように、TB6643KQを3個使用し、かつ、それぞれのポートをPWM制御する必要が出て来てしまった。 電源は、ポイント駆動回路やArduino に供給するAC アダプラからの12volt 電源を共通使用することにする。

 また、電源からドライバに供給するライン上に、過電流防止のためのポリスイッチ RXEF065 (0.65A仕様で、1.3Aで遮断)を挿入した。 また、TB6643KQの使用説明書に記載されていたように、10μFと0.1μFのコンデンサを配置した。 技術評論社の「Arduinoであのシム鉄道模型」でも、二つのドライバ毎にこのコンデンサを配置しており、はたして各ドライバ毎に必要なのか疑問だったので、1セットを配置するに留めた。 そして、通電状態を表示させるLEDも配置した。

 

 とにかく物を作る必要があるので、回路図に従って工作を実施した。 ドライバは、またオシャカにしてしまう恐れがあるので、脱着可能なように、14ピン用のICソケットを使うことにした。 給電の出力は、使用する用途が限られてしまうが、確実な配線を意図して、TOMIX のフィーダー線と直接接続出来るように、ビニール線とピンソケットを使って工作した。 

 ドライバのソケットをIC用のソケットを使用したため、ドライバの足が長すぎて丸見えの状態であった。 このため、ショート防止のためにMTテープをスカートのように巻き付けている。

 

■ 新しい課題

 TOMIXのコントローラを使用していた場合と異なり、このような回路にしたため、次のような疑問が出てきた。 通常走行中の速度制御のために、Arduino にてPWM信号を生成する必要があるだ。

 (1)PWM周波数はどのポートも同じだろうか?
Arduino Uno の場合は、5と6番ポートは980Hzで、他のポートは490Hzである。 周波数が異なると電車がギャップを跨いだ場合に両方の出力が干渉してクシャクシャになってしまうのではないだろうか。 また、パルスのタイミングはズレてはいないだろうか。 このために実際の出力波形をオシロで観察してみよう。 周波数やタイミングのズレなども確認出来るはずだ。
 
 (2)PWM周波数を変更する方法はあるのだろうか?
もし、周波数が異なっている場合には、同期させないといけないし、また、可聴域の周波数を避けるために 20KHz 程度まで上げたいが、その方法はあるのか。 このNano EveryUno とは異なっているCPUを使っているので、自分の技術力で対応できるのだろうか?
 

 このような疑問に対しては、自分で実際に確認するのが確かである。 波形観察用のオシロを所有しているので実験することにした。

 

■ Arduino のPWM出力波形を観察しよう

 このドライバセットを駆動させるための制御ポートを Arduino のポートと関係付けて、実際に動かしてその出力波形を観察することにした。

  Arduino Nano Every のポート配置図は正式サイトより資料をダウンロードして確認した。 その主要部分をコピーして上左に示す。 ポート番号の前に〜の記号があるのでPWM信号を出力できるポートを示している。 この資料をもとにピンの配置図を右上のように作成した。

 今回使用するモータドライバは、二つの入力ポートのどちらかにPWM信号を送ることにより、モータが正回転と逆回転をするもので、一つのモータに二つのPWM信号出力が必要である。 この点は、以前使用していたドライバと異なっている。

 さて、各ポートの出力波形を観察することにしよう。 テスト用のスケッチを Every-Test-1 に示す。 それぞれのポートをチェックする度に指定するポート番号を書き換えて実験した。 この時の実験状態を下に示す。

 出力回路には、Bトレ用のモータを接続して負荷としている。 下左の写真。

 電源は12VのACアダプラを使用しています。

 

■ 観察結果

 まず、F1-1(D6ポート)、F2-1(D3ポート)、F0-1(D10ポート)の出力を見ることにします。 ヂューティ比を20%に設定し、マイナス側の端子をゼロにしています。

F1-1=PWM(50)、 F1-2=0 モータ接続を外す

デューティ比 = 20%  周波数 = 974 Hz

 
F2-1=PWM(50)、 F2-2=0 モータ接続を外す

デューティ比 = 20%  周波数 = 974 Hz

 
F0-1=PWM(50)、 F0-2=0 モータ接続を外す

デューティ比 = 20%  周波数 = 974 Hz

 

 各ポートの周波数はどれも 974Hz で出力されている事が分かります。 また、電圧遮断時は15Voltにも達する逆電圧が発生し、その後はモータの逆起電力が発生している事が分かります。 また、モータへの接続を遮断すると、負荷が無くなり、ポートがオープンとなって取り付けたコンデンサによる影響が出ている波形となっています。

 

 次に、各ポート間のタイミングを観察するために、オシロのチャネルを増やしました。 PWM信号を発信するポートに対して、マイナス側になるポートはゼロに設定していますし、F0ポートにはモータ負荷の無いオープン状態です。

F1-1=PWM(50)、 F0-1=PWM(50) F2-1=PWM(30)、 F0-1=PWM(30)

デューティ比 = 20%  周波数 = 974 Hz

デューティ比 = 12%  周波数 = 974 Hz
F1-1=PWM(30)、 F0-2=PWM(30) F1-2=PWM(50)、 F0-1=PWM(50)

デューティ比 = 20%  周波数 = 974 Hz

デューティ比 = 12%  周波数 = 974 Hz

 モータ負荷の無いF0ポートの波形は、上記のモータ無しの場合と波形が異なっていますが、共通電源をしようしているF1あるいはF2のポートにモータを接続しているためにこのような波形になったと解釈しています。

 この観察によって、各ポートからのPWM信号のタイミングは同じであることが分かりました。

******************************************************************************

■ なんだかおかしいぞ?

 そして、すべてのポートを確認しておこうと考えて、F2-2 と F0-1 の組合せでテストしたところ、F2-2 ポートに接続したモータが動きませんでした。 一瞬、またドライバを焼いてしまったのかと考えて、ポートの組合せをいろいろチェックしましたが、

        F2-2ポート、即ち D2 ポートがおかしいことに気が付きました

 そこで、モータドライバを切り離し、Arduino 端子を直接観察してみました。 下の写真。 F2-2 即ち、D2 ポートからはPWM信号が出ていない事は明らかです。 そこで、ストック品として保管していたもう一台の Every もチェックしてみましたが、全く同じ状態でした。

F1-1=PWM(30)、 F2-2=PWM(30) F1-1=PWM(30)、 F2-2=PWM(30)
今まで実験してきた Arduino Nano Every

新しい Arduino Nano Every

 この時の実験の様子を下に示します。

  .

 これは明らかに、Arduino の問題と判断し、ネットにて情報を探りましたが、なかなか分かりませんでした。 偶然にも、MOUSER ELECTRONICS 社のページのArduino ABX00033 のページのドキュメントな中に、データシートを見つけました。 その一部を右に示します。

 このドキュメントでは、20番目のD2ポートはPWMをサポートしていない事を示しているようです。

 自分が入手したEvery は、ABX00033 の13193と13194 番の製品ですので、このD2ポートはPWMをサポートしていない事に納得しました。

 すると、最初に示したポート配置図は何だったんでしょうかね? Arduino には色々なバージョンがあるため、実際の物で確認する必要があるんだろうか。

 

■ まとめ

 今回の観察によって、知り得た知見や確認出来た事を整理しておきます。

  1. 自分にとって初めてのモータドライバ TB6643KQ を使うことが出来そうである。
  2. Arduino Nano Every のD2ポートは、PWMをサポートしていない。 このため、残りの5個のポートで制御する必要がある。
  3. PWMの周波数は、すべて974Hzであった。
  4. 全てのポートのPWM信号のタイミングはピタリと一致していた。

 今回の実験で、安心してPWM信号を使用する自信が付いたが、周波数の変更はやはり壁があると感じた。 自分の力では無理であるとして、諦めることにする。

 

ページトップへ戻る  .


 2020/2/22 作成