昨日 今日

e-mail


ハンドコンPWM制御計画

2009.05.10

 ハンドコンの使い勝手は気に入っている。36lbという非力なエレキも大会にでるわけではないので、特に不満はない。ただ・・5段変速だとバッテリーが持たない。。

 そもそも、大きいのにしないで、36lbを選んだのは、重さと値段という面もあるが、バッテリーが持たなそうというのもあった。だが、バッテリーの重さを考えて、シーキングやグローバルユアサのものを選ぶと、ボイジャーほど耐久性がないらしく、1、2年で半日しか持たなくなってしまう。

 そこでだ!。5段変速のものでもPWM制御をして、無駄な電力をなくしてやればバッテリの持ちもいいし、最後まで使うことが少なくなるので、バッテリーのへたりも少ないのではないかと、GWを使ってPWM制御、いわゆる無段階変速に改造してやろうということだ。


理屈

 なんで5段階変速と無段階変速でバッテリーの持ちが違うのかというと、5段階変速は12Vのバッテリをつないだときに、半分の速度にしたい場合、6Vにしてやれば半分になると、残りの6Vは捨ててしまおう。一方、on/offを細かく切り替えてモーターを動かせば、ボートが動く慣性の法則で、半分の速度で動かすことができるよね、というのが無段階変速。5段変速で半分の速度で動くと、バッテリーの半分は捨てていることになるが、無段変速だとoffの区間はバッテリーが減らないので、倍の時間持つということになる。(ちょ〜ざっくり説明)。

 ・・・もうちょっと詳しく説明しようか。バッテリーに書いてある容量である105Ahとかシーキングの90Ahってやつは、20時間hourってやつだ。 これは105/20=5.25Aの電流を20時間流せるということになる(細かいことはwikipediaなりぐぐるなりしてくれ)。これがバッテリーの容量。バッテリーは約12Vなので、12x5.25Wのモーターを使ってフルに動かしていると20時間は持つってことになる。

 例えば、50Ahのバッテリーと1時間に10A使うモーターをフルで動かしてい場合、下の図のように12Vの電圧で10Aを使うと5時間でバッテリーがなくなる。

 で、半分の速度にする場合、6Vにすれば半分の速度になる(おおまかにはね)。そのためには、12Vを6Vにしなきゃいけないわけだけど、バッテリーは何をやっても12Vなわけで、6Vを出すことはできない。なので、5段変速の場合、6V分を捨てることで速度調整をする。

すると、速度は半分になったけど、捨てちゃっているので時間は5時間しか持たない。で、無断変速の場合、12VのままOn/Offを細かく切り替えることで、速度調整をしている。あぁ、だんだん説明がめんどくさくなってしまった・・。つまりだ、下の図みたいに使うと10時間持つようになる訳だよ。このOn/Offの時間が短ければ、ボートは止まることなく次の動作に移るため、ゆっくり動き続けてくれるということ。

さらに速度を遅くするには下の図のようにオフの時間を長くしてやればいい。その場合さらに持つようになる。こんな感じで、PWM制御にすると無駄な電力を使わないので、効率がよい。

 とまぁ、適当に説明してみたが、要は、下の図みたいな波形をつくって調整できるようにしてやれば無段変速になると、そゆこと。



実現方法と概要

 さて、この理屈を実現するためには、細かくスイッチのOn/Offをするための仕組みがいる。そのためにPowerMosFETってやつでスイッチをし、AVRというマイクロコントローラーで制御する。一応危険なので、

良い子はまねしないでください。

と但し書きをしておく。下手すると死ぬよ。

必要な知識

 他のページと違って、多少専門知識がいる。必要なものは

  • 電気・電子の知識少々
  • マイコンの知識少々
  • プログラムの知識少々
  • パソコンの知識少々
 こんなもんかな。電気電子の知識は、オームの法則とかトランジスタ/FET程度かな。マイクロコントローラーは壊さないための動作原理くらいはね。あとはプログラムの知識がほとんど。波形を作ったり、調整したりするには、AVRっていうマイクロコントローラーにプログラムして動かさなきゃいけない。そのために、パソコンでそのプログラムをして、マイクロコントローラーに書き込む知識が必要になる。後は、AVRのマニュアルが英語なので、中学卒業程度の英語力はいる(俺がその程度なのでその程度あればきっと読める)。
 あらかじめ言っておくと、プログラムに関してはそれが仕事なので、自分の専門。電気電子に関しては多少の知識はあるが、大電流を扱うような物は全くわからん。つまり、回路ができれば後はどうにでもなるって所からのスタート。

パーツの入手先

 その辺のDIYショップに行けば売っているパーツではないので、ほとんどの場合ネット販売を利用する。
秋月電子
マイクロファンネットショップ
サトー電気
 秋月電子は、AVR以外の物はだいたいここで買う。AVRはマイクロファンネットショップで。たまに部品を買い忘れて(もしくは予定変更で追加、変更になって)すぐに欲しいときはサトー電気に車で出かける。サトー電気は町田にあるので家からは30分くらい。パーツリストを紙に書いて持っていくと、揃えてくれる。埼玉の人は東大宮の埼玉パーツ。それ以外はシラね。

簡単な回路

 いきなり、作業!とかってのもあれなので、概要を・・

 大体こんな感じ。まず、FETだけど、電圧は12Vで大したことないんだが、食う電流がすごいので、探すのが大変。とりあえず、秋月で探した2SK3163ってやつを使う。スペックとしては60V,75A,RDS6mΩ。75AあればOKでしょって感じだが、6mΩのRDSがどれだけ発熱してくれるか・・。やってみた熱量によっては2パラ、3パラで並列につなぐかもしれない。DC/DCコンバーターは12VからAVRの電源の5Vを作るための物だが、ダイソーで売っている車用携帯充電器をばらすとそういう回路が入っているのでこれでOK、315円だ。で、マイコンはAVR。このマイコンはPWMが内蔵されているので比較的楽。また、プログラム環境も全部フリーだし、プログラムを書き込むライターも700円くらいで買えるので、初期コストが少なくていい。



まずは実験

 まずは実験。とりあえず、AVRのキットを買ってきて、回路の参考にする。とメイン部品のFETを2,3個。あとはブレットボードっていう回路の実験するボードを揃えて、LEDの光量を調整したりできるかどうかの実験をする。

パーツ購入

 とりあえず、AVRはATmega168というのをチョイス。ramが1k,ROMが16kでAD変換が6つ、PWMが3つついてる。ピン数は28ピン。ROM容量やRAM容量の選択は商品を作る訳じゃないので余裕をもって大きめを選んだ。1つ500円くらいだけど、壊れたときを考えて2つ。今時8bitマイコンが500円ってえれぇ高いんだが、個人購入だから仕方がない。。参考にするキットはAVR-DEV-AM328RAって1つ上のランクのMCU(MicroControlerUnit)が付いた物を買った。ピン互換だから別の物でも問題ない。というか168のボードが売り切れてた。それとAVR-PRG-1SというAVRのFlashメモリーにプログラムするライターを買う。5Vの電源はその辺に転がっているACアダプタを流用(ハードオフのジャンクで買ってくる)。あとはFET,ダイオードね。

 上がAVR-DEV-AM328RAのボード、下にくっついてる黒いのがAVR本体。下がAVR-PRG-1SっていうシリアルライターとLEDを実験したときのブレットボード。見ての通りこのキットはRS232Cが必要なので、付いてないパソコンはUSB-RS232c変換とかが必要になる。俺は家のサーバーマシンにRS-232cが付いていたので、Macからサーバーのlinuxにアクセスしてlinux上で開発した。ブレットボードは素人が実験するにはとても便利。間違えてハンダ付けしちゃうとめんどくさいからね。あ、この基盤完成してるけど、自分でハンダ付けするのよ。

AVRを調べる

 まずはatmelのサイトからAVRのマニュアルをゲットして読む。PWMの使い方、どこのピンにPWM出力が出ているのか等。とりあえず、AVRの12番ピンが8bitのPWM出力に割り振られてた。ここの出力をするプログラムを組んで、Flashメモリーに書き込んでみて、動けば、第一関門クリア。

開発ツール

 家のサーバーはlinuxでDebianを入れてある。幸いなことにAVRは海外ではメジャーなMCUらしく、ツール一式が簡単にインストールできる。

 >apt-get install avr-gcc
 >apt-get install avrdude
 >apt-get install avr-libc

 コマンドラインでこうやって入力するだけで開発環境のインストールは完了。

 ちなみに、このAVR、ホビーのMCUとしてはかなり環境が充実していて、MacOS-X,Windows,linuxと開発ツールがそろってる。しかも、プログラムなどの敷居が下がるように、難しいところはあらかじめプログラムされたライブラリが揃っていて、基本となる基盤にパーツをつなぐとすぐに動かせる状態になる。arduinoというプロジェクトがあって、オープンハードウェア、オープンソースだ。ardino対応の基盤を買ってきてツールをダウンロードしてつなげばすぐ動かせる。

テストプログラムを作って動かしてみる

 とりあえず、12pinに上のブレットボードのLEDを点滅させるプログラムを作って動かしてみる。プログラムは以下。

/*
 * avr test
 * @author tuck
 */
#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>

int main(int argc,char**argv)
{
  while(1){
    PORTD &= 0xbF;				/* Lo */
    _delay_ms(1000);
    PORTD &= 0x40;				/* HI */
    _delay_ms(1000);
  }
  return 0;
}

 で、これをコンパイル。

>avr-gcc test.c -o test.elf

 今度、これをFlashメモリーに焼く形に変換する

>avr-objcopy -O ihex test.elf test.hex

 でできたtest.hexをavrに書き込む。フラッシュライターをAVR基盤のコネクタ部分に差し、フラッシュライターにRS-232cケーブルをつなぎ、電源を入れて、フラッシュライターのスイッチをON!。で書き込みコマンドを打つ!。

>avrdude -P /dev/ttyS0 -p m168 -c avrsp -U flash:w:test.hex:i -U lfuse:w:0x62:m

 おぉぉぉ〜。とりあえず、動いた〜。

 テストプログラムの解説。12番ピンはPWM出力とともにGPIOの"D6"としても機能する。GPIOはA,B,C,DとあってそのうちのDの6って意味。そこを1000msごとにHi,Loを繰り返すプログラムなので1秒ごとにLEDが着いたり消えたりする。

 これで実験は終了。プログラムの作成から、コンパイル、プログラムの書き込み、AVRの動作確認という一連の作業が問題なくできることが確認できた。後はこれの応用だ。PWMの出力ができたら、それをFETにつないでやればとりあえずPWMのところは完成だ。

 ・・・もはや釣りからはかけ離れた感じになってきたな。



さあ実践だ

 では、実践で実験だ(笑)。モーターのスペックも実際に人間がボートに乗っているときの負荷もPWMの周波数をどれくらいにしたらよいのかもわからない。実際に作ってみて、湖の上で実際に動かしてみて試すしかない。

回路

 評価用のボードに直接部品をくっつけてもいいんだが、また何か作りたくなったときに実験するボードがないのはあれなので、ユニバーサル基盤で作る。速度調整をどうするかだが、この時点ではボリュームをA/D変換で読み込んで20段階変速くらいのすれば十分ではなかろうかと。それと、今duty比がどれくらいなのかを知るために表示器も欲しい。それも踏まえて回路図兼、パターンイメージ図を書く。赤い線は上を通り、黒い線は下を通る。自分がわかれば良いのです。
できたのがこれ→回路図兼パターンイメージ図
 これを元にハンダ付けして作る!。

 できた基盤がこちら↑。で表示器と調整用のボリュームが↓。左にある変な格好をした基盤がダイソーの携帯充電器から取り出したやつ。これ、電源逆につけるといきなり燃える。1回間違えてつないで燃えた(笑)。

 ぴろーんと出てる黄色い線がFETへとつながる。

ロードテスト1

 最初にFET1つをくっつけてロードテストしにいった。PWMの周波数は120Hz、だがしかし、エレキ側を5(最速)にしてPWM50%にすると、FETがものすごく熱くなって燃えた(笑)。家で無負荷状態で動かしたときはほのかに暖かくなった程度だったので平気だと思ったんだが、負荷による影響は思ったより大きい。ってことで第一弾失敗です・・・。

改善1

 前回のロードテストを受けて、改善する。FETが1つじゃ足らんのかと3つにしてみた。またPWMの周波数を60Hzに変更。

こんな感じで、FET3段積み。接触抵抗も大きそうだが、とりあえずはあたりをつけないとね。

ロードテスト2

 FET3段積みで使っていた。前回の反省を元に、速度5(最速)でテストする場合はFETを触りながら熱くなりすぎるかどうかを確認し、FETが壊れないように気をつける。

 結果はというと、やっぱり速度5にするとFETが熱くなってくる。それと、このとき午後から風が吹いてしまったんだが、水をかぶるとやはり怖いので防水が必要。表示器部分はアクリルで囲ってシリコンでシーリングしちゃえばいいが、速度調整のボリュームのところはどうする?。本体はバウデッキの下に隠してしまうのでいいとして、ボリュームはそういう分けにいかんな・・。

 PWMにした効果はというと、バッテリーの持ちは良くなった。午前中でなくなってたバッテリーが3時過ぎまで持っていたので、それなりの効果はあったと思う。完全なPWM制御ではなく、ほとんどがDuty50%にした状態で、ハンドエレキの速度調整をつかっていたので、無駄にする電力もかなりあるんだが、それでも最速で動いているとき以外はバッテリーの消費量は50%だから、それなりに効果あるんだろな。ってことで、PWM化は進める価値がある。

改善2

2009.05.30

 FETのデータシートを見てると、ゲート電圧が高い方がドレインソース間の抵抗が低くなるらしいので、トランジスタを付けて、5.5Vの出力を12Vにしてみた。

回路図兼パターンイメージ図

ロードテスト3

 FETの入力を12Vにしてやった結果フルに電流を流しても熱くならない!。成功じゃ!。後は、防水対策が必要だな。

改善3

 これから梅雨に向けて、防水対策が必要。アナログのボリュームじゃ防水のしようがないので、テレビのボリュームみたいにアップとダウンのキー方式に変更する。

 制御は、「アップキーが押されていたら、5%ずつDutyをあげていく。ダウンキーが押されていたら5%づつDutyを下げていく。連続の変化量は150ms毎5%変化させる。全部で20ステップなので3秒間押し続けると0から最速まで変化する。」とした。ま、本職がソフト屋なもんで、この辺はお手の物。

 こんな感じで、キーを押すとAD変換部に入る電圧が変化するような回路を組んだ。何も押さなければ5V、100kオームが着いてるキーを押すと2.5V,それ以外のキーを押すと5Vx10k/(100k+10k)見たいな感じで電圧が変化する。なんでキーを3つにしたかというと、一気に0にするボタンとかメニューを出すボタンとかに使えるかな?と。

 発泡塩ビで枠を作って、中にキーを3つ付けた基盤を入れる。ケーブルは抜き差しが必要となるので、USB延長ケーブルをぶった切って、そのコネクタ部分を利用することにした。中は4芯なのでちょうどいい。最近、カスタムで箱と作るのにこの発泡塩ビが重宝している。カッターで切れて、そこそこ厚みがありそこそこの弾性があるので、工作するのにはもってこいだ。以前はアクリルとかでやってたんだが、固いのでぶつけると割れる。これは弾性があるので結構吸収してくれていい。

 んで、厚さ1mmのゴムをエポキシで張って完成。コネクタ部分は防水じゃないけど、バウデッキの下に隠してしまうので問題なし。コントローラー部分は、ゴムと発泡塩ビとエポキシで完全な防水に早変わり。

 同様にLCD用の防水ケースも作る。発泡塩ビで外観を作るのは一緒。窓の部分はPET素材。適当な大きさにPET素材を切って、それに合わせて発泡塩ビをくり抜く。んで、一応硬化すると透明になるエポキシでくっつける。後でヤスリ掛けしてグレーかなんかに塗装しようかな。と思ったけど、多分めんどくさくてこのまま使うな。



つづく・・


前へ戻る

Copyright(c) 2009 TeamTenUp,All rights reserved.