モーターPWM制御

今回は、ArduinoとESP8266でモーターのPWM制御方法が「違う」という点についてです。

結論:ESP8266の最大出力電流12mAで、なぜかトランジスターを用いたPWM制御ができない。
対処方法は、『ESP8266からArduinoにシリアル通信→Arduinoからトランジスターを介してPWM制御』。
 
Arduinoの場合、LEDなど最大出力電流を超えない低電流の部品の場合、PWMに対応しているピンに接続してプログラムを書けば、ちゃんと制御できます。
 
また、PWM対応ピンは以下の通りです。
ArduinoESP8266
3・5・6・9・10・11
ココにピンアサイン図があります
12・13・15
ココにピンアサイン図があります

モーターなど、最大出力電流を超える高電流を必要とする部品の場合、トランジスターのスイッチング回路を利用したやり方があり、Arduinoの時はこれで上手くいきました。

しかし、調べてもESP8266でトランジスター(スイッチング回路)を使ったPWM制御をやっている人は見つかりませんでした…
それよりも、制御基板やモータードライバーを利用している人が多いようです。
※制御基板でのやり方はココ、モータードライバーはココが参考になるかも?
※広く使われてきたモータードライバー(TA7291P東芝製)は生産終了予定で、現在秋月電子通商では取り扱っていません。
 代用品として「TA7288P」が使えるそうです。(こちらのページで紹介されていました。)
 
なら自分で試してみようと思いましたが、何度やってもArduinoの時のように上手くいかないので、別の方法を考えてみました。

一度Arduinoに何かキーワードをシリアル送信して、キーワードで動作を振り分けるのはどうか。
つまり、モーターPWM制御はArduino側に任せる、という意味です。

今回コンパクトにするためにArduino側はATmega168Pを使用しています。
ETFS Research

ATmega168Pはシリアル送信に使用するピン[RX、TX]があって使いやすい!!

ちなみにTXが送信、RXが受信です。
ESP8266とATmega168PでTXピンをRXピンに、RXピンをTXピンに接続するのは、ESP8266送信→ATmega受信、ATmega送信→ESP8266受信という双方向通信をするためです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)