ありぎりす の徒然日記

アクセスカウンタ

zoom RSS RaspberryPiで鉄道模型を動かしてみる その5 追記あり

<<   作成日時 : 2016/07/31 09:41   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

DACで速度制御その2:
前回までで、CのプログラムからDAC(MCP4726)に指令して
アナログ電圧(0〜3.3V)を出力することができました。

しかしMCP4726が出力できる電圧は最大で5Vまで。
マブチモーターを回転させるにはこれでも十分ですが、
鉄道模型(0〜12V)を動かすには足りません。

何とかして電圧増幅をする必要があります。

そこで、↓の本を買って、付け焼き刃的にお勉強
画像


どうやらオペアンプとゆうものを使うと
電圧の増幅ができるようです。
画像


この本によれば、
 増幅度 = (R1+R2)/R1
とゆうことらしい。

で、狸小路の電子部品店でオペアンプ(LM358N)を買ってきて、
↓のように接続。
画像

半固定抵抗を使うことで増幅度を加減できるようにしてみました。
 注)オペアンプとモータドライバの4番ピン(Vref)の間に
 保護抵抗(4.7KΩ)を追加


で、以下のようなテストプログラム train3.c を作って、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>


#define GPIO24 24
#define GPIO19 19


int dac_out(int value)
{
 char str_data[40];
 char low[10];
 char high[10];

 value = value << 4;

 sprintf(low,"0x%.2x ",(value & 0xf0));
 sprintf(high,"0x%.2x ",((value >> 8) & 0xff));
 strcpy(str_data,"i2cset -y 1 0x60 0x40 ");
 strcat(str_data,high);
 strcat(str_data,low);
 strcat(str_data,"i &\n");
 system(str_data);

 return 0;
}


int main(void) {
 int i;
 int speed;

 if(wiringPiSetupGpio() == -1)
 {
  printf(" SetUp error \n");
  return 1;
 }

 pinMode(GPIO24, OUTPUT);
 pinMode(GPIO19, OUTPUT);

 digitalWrite(GPIO19, 0);
 digitalWrite(GPIO24, 1);

 for (speed = 200; speed < 4096; speed = speed + 200)
 {
  dac_out(speed);
  sleep(1);
 }
 speed = 4095;
 dac_out(speed);

 sleep(30);

 for (speed = 4095; speed > 0; speed = speed - 200)
 {
  dac_out(speed);
  sleep(1);
 }
 digitalWrite(GPIO24, 0);
 digitalWrite(GPIO19, 0);

 sleep(3);

 digitalWrite(GPIO24, 0);
 digitalWrite(GPIO19, 1);
 for (speed = 200; speed < 4096; speed = speed + 200)
 {
  dac_out(speed);
  sleep(1);
 }
 speed = 4095;
 dac_out(speed);

 sleep(30);

 for (speed = 4095; speed > 0; speed = speed - 200)
 {
  dac_out(speed);
  sleep(1);
 }

 digitalWrite(GPIO24, 0);
 digitalWrite(GPIO19, 0);

 return 0;
}


コンパイルして、
$ gcc -o train03 train03.c -I/usr/local/include -L/usr/local/lib -lwiringPi
実行。
$ sudo ./train03

鉄道模型の車両が徐々に加速、最高速で30秒走行した後、
徐々に減速して停止しました。 ヽ(´▽`)ノ

と、まぁ、このように書くと何事もなく全てが順調にいった
ように読めちゃうと思いますが、実際は・・・・・。

色々と実験していたある日、電源を入れたら・・・
モータドライバ(TA7291P)から煙が・・・ (°ロ°;)

『接続を間違った?!』と思って回路を確認してみたけど、
どうも回路に間違いは見当たらない。
とゆうことは、電源か?!

実は12Vの電源に、自動車などのバッテリーを充電するのに使う
バッテリーチャージャーを使っていたのです。
画像


おそらくは電源を入れた時に一時的にモータドライバ(TA7291P)の
耐圧を超える高い電圧がかかってTA7291Pを壊してしまったのでしょう。

しかも、被害はモータドライバだけでは済みませんでした。 (T^T)

ハンダ付けの時に壊したときもそうだったのですが、
モータドライバ(TA7291P)が壊れると、入力ピン5番(IN1)、
6番(IN2)から電圧が出てしまうようなのです。
しかも、今回使用する電圧は12V・・・・

5番(IN1)に接続していたGPIO24はどうやら無事だったのですが、
6番(IN2)に接続したGPIO25が壊れてしまった。 (;_;)

念のために全部のGPIOを確認したら・・・22番と26番も死んでいる。 orz

『後悔先に立たず』ですが・・・
やっぱりおかしなものを電源に使っちゃあいけませんね。 (;_;)

それにしても、自分が壊れた際に周辺にまで被害を拡大させる
モータドライバ(TA7291P)にはちょっとムカつきます。 (-_-メ
(ありぎりす は、変な電源使った自分のことは棚に上げる小人物)

なので、GPIOと5番(IN1)、6番(IN2)の間にダイオードを追加して
TA7291Pが壊れた際に電流が逆流しないように対策を施してみました。

この対策が有効かどうか試すためには、実際にTA7291Pに
高電圧をかけて壊しても、GPIOが保護されることを確認すればよいのですが・・・
そんな怖ろしいこと、とてもじゃないけど、出来ません。 (^-^; 


さて、今回DACとオペアンプを使ってみたのは、電力を細切れに出力する
PWM方式よりも滑らかでストレスのないモータ制御が可能になるだろう
と思ったからでした。

しかし、実際にやってみると、それほどのメリットは無かったように思います。
確かに滑らかできめ細かい制御(4096分割)が実現できたのですが、
鉄道模型を動かすのにはそこまでは必要ないですね。
その3でやったようにPWM方式で50分割でも十分と思います。

まぁ、何事もやってみないと分かりませんね。
いろいろ試してみて面白かったですし、これはこれでよしとしましょう。 d(^-^)

さて、次回はポイントを動かしてみましょう。

追記:2017年01月30日
久々に遊ぼうと、電源を接続したら・・・
またもモータドライバが壊れた(焼損)。 <(ll゚◇゚ll)>!!
えっ?! どうして?!
幸い今回は逆流防止のダイオードが功を奏してか、
ラズパイのほうは無事だったけれど・・・・


落ち着いて考えてみる・・・。

電池を電源にしているから過電圧とは考えにくい。
じゃぁ、過電流?!
過電流を防ぐために保護抵抗を追加して、
電流を制限する必要があるの?

しかし、Vsはモータ駆動用の電源だから保護抵抗などを
使って電流制限をするわけにはいかない。

やるとしたらVccとVrefとゆうことになるか。

モータドライバ(TA7291P)の取説には、
 Vref 端子について
  使用しないときはオープンとせず、保護抵抗
 (3KΩ以上)を介してVs端子に接続してください。

とある。

つまりこれは、
 Vrefを使用する場合は保護抵抗はいらないよ
ってことじゃなくって、
 Vrefに流してもいい電流は、
 定格電圧(25V)/3000Ω = 8.3mA
 だから、それを超えちゃあダメよ
ってことですかい?

で、オペアンプ(LM358N)の出力電流を確認すると・・・40mA・・・

うん、そうね、壊れるね。 orz

ちなみにVccについては特別注意書きは見当たらない。

とゆうことで、Vrefに4.7kΩの保護抵抗を追加しました。

これでもう壊れないと思う。
壊れないといいな。
お願い、もう壊れないでよね。 (^-^;


関連ブログ一覧:

 『RaspberryPiで鉄道模型を動かしてみる その1
   まずは下準備 』


 『RaspberryPiで鉄道模型を動かしてみる その2
   車両を動かす(ON/OFF制御) 』


 『RaspberryPiで鉄道模型を動かしてみる その3
   PWMで速度制御 』


 『RaspberryPiで鉄道模型を動かしてみる その4
   DACで速度制御その1 』


 『RaspberryPiで鉄道模型を動かしてみる その5 追記あり
   DACで速度制御その2 』


 『RaspberryPiで鉄道模型を動かしてみる その6
   ポイントを動かす 』


 『RaspberryPiで鉄道模型を動かしてみる その7
   駅で停める 』


 『RaspberryPiで鉄道模型を動かしてみる その8
   効果音を鳴らす 』

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
RaspberryPiで鉄道模型を動かしてみる その5 追記あり ありぎりす の徒然日記/BIGLOBEウェブリブログ
文字サイズ:       閉じる