« 2014年2月9日 - 2014年2月15日 | トップページ | 2014年3月30日 - 2014年4月5日 »

2014年3月2日 - 2014年3月8日の1件の記事

2014年3月 6日 (木)

再びメカトロニクスに挑戦。サーボモーターの完全自作

 AquesTalkのマルチメーター読み上げ機が完成してすっかり気が抜けた。例年この時期は雑用が多く電子工作にまとまった時間をかけられない。書くことがないのでブログの更新も20日以上空いてしまった。

 前の記事を書いているときは大騒ぎしていた冬季オリンピックもいつのまにか終わり、TVは今やプロ野球のオープン戦やサッカーJリーグの開幕の紹介に忙しい。

 それにしてもTVや新聞のオリンピック報道で、これでもかこれでもかと繰り返される「感動の押し売り」にはいささかうんざりした。しかも選手に対するメダルへの期待の度が過ぎていて、アナウンサーが金属回収業者のように「メダル、メダル」と連呼する。

 まるで日本全体でよってたかって選手をダメにしているようだと思っていたら案の定、金メダル確実と言われた女子ジャンプとフイギュアは3位にも入れなかった。マスコミの言い分は、「読者がそれを期待しているから」ということなのだろうが、もう少しみんな賢くなって欲しいものだ。オリンピックの終わる度に反省しているはずなのに改まる気配はない。

 それはともかく関東地方の今年の2週続きの大雪には驚いた。日頃、雪などに縁のないところに30センチ近くの積雪である。スキーに行くため何十年ぶりかに愛車に装着したスタッドレスタイヤが雪を呼んだのかもしれない。幸いなことにスキーに行く前に、スタッドレスタイヤの威力を十分テストすることができた。

 雪でテニスもお休みである。電子工作も手につかない。手持ち無沙汰で、BlueToothのヘッドフォンを買ったり、BluetoothのないPCにドングルをつけたりして遊んでいた。BlueToothヘッドフォンの音質が予想以上に良いのに驚く。これまでワイヤレスというとFMでもお粗末な音しか聴けなかった昔を思い出す。

部品を買ってきた(2/18/2014)
 電子工作を始めて以来、何か手を動かしていないと落ち着かない性分になっている。ある意味では究極の貧乏性と言ってよい。工作への意欲が復活するのにたいした時間はかからなかった。気がつくと、工作机で周辺の整理を始めていた。

 次の工作のテーマはやっぱりメカトロニクス方面にしようと思う。ライブカメラでモーター制御はやったが、これは単なるステッピングモーターのON/OFFだけで、あまり技術的に得るところがない。

 このブログに良くコメントを寄せてくれる、ばんとさんが倒立振り子の2号機を作っておられるようだし、こちらもジャイロなどを使った本格的なモーターの自動制御がやってみたくなった。この道の先には、あこがれの2足ロボットの世界が待っている。

 久しぶりに秋葉原に出て、秋月で買い物をする。前から気になっていた完成品のラジコン用のサーボモーター(MICRO2BBMG ¥1080)と、回転摩擦抵抗のないポテンショメーター(TCQ96A02 B103 2ヶ¥300)を入手した。既製品を買ったのは、これでサーボモーターの基本を勉強するためで、これで何かを動かそうと考えているわけではない。

S_p2196403 今回のプロジェクトの難点は実用的な目的がないことだ。しかしサーボはモーター制御の基本中の基本である。まずは勉強することが大切だ。サーボモーターは、ラジコンなどで何度も使っているが自作をしたことはない。アナログサーボと、ディジタルサーボの違いも良くわからない。このあたりを是非マスターしておきたい。

 ポテンショメーターと手持ちのモーターでサーボシステムをスクラッチから完全自作することを当面の目的にする。ロボットでは数十個のサーボを使うというし、究極のもうひとつの野望(CNCマシンの自作)に近づくにはモーターの色々な運転制御は欠かせない技術である。

  秋月では、ついでに予備の少なくなったAVRマイコン Tiny2313(¥150に値上がりしていた)や、不要不急の石、Mega88とか、QFPのMega1284を手に入れた。家に帰って、QFP変換基板に久しぶりにQFPチップをハンダ付けする。実体顕微鏡のありがたさをここでも確認する。

 Mega88は、このあいだのマルチメーター読み上げ機のMega328の換装用だ。このシステムのフラッシュは4Kも使っていないので、Mega88でも余裕である。コストを少し下げられた(¥250から¥170)。

サーボの原理を調べる(2/19/2014)
 サーボの原理をあらためて勉強する。サーボと言えばウェブなどの解説には必ずPWMのパルス波形が出てくるが、この信号にもとづいてどうやって位置制御をするのかということを、わかりやすく説明しているところが意外に少ないのだ。

 いくつかのサイトを渡り歩いて仕組みをやっと理解することができた。要するに、サーボモーターというのはポテンショメーターのような、位置を電気信号値(デジタルでもアナログでもかまわない)に変換する装置が必ず必要で、入力のPWM信号は、単なる指定位置を教える送信コードにすぎないということである。

 これがわかるまで大分時間を要した。最初は、パルスに応じてモーターが前進したり後進したりして位置を決めているのだと思っていた。やれやれ大きな勘違いである。こういう基本的なことはなかなか教えてくれない(AVRのときのPINとPORTの違いもそうだった)。

 理屈はわかった。しかし、それではこのPWM信号の入力からどうやってモーターを実際に動かすのか。これがまた具体的な例が少ないのである。このサイトではロジックICを使って、現在の位置と、指定の位置への差分を出力しているが、ソフトロジックでどうやるのかはわからない。これにPID制御を入れるというのはどういうことなのだろう。

 ChaNさんのサイトにも、モーター制御の詳しいページがある。ChaNさんらしくとてもスマートな解説で、各種の制御がテストできそうである。しかし技術レベルがちょっと高すぎて、どうやってこれを応用するのか、簡単に手が出ない。いやいや難しいものである。、

参考書は役に立たない(2/21/2014)
 S_p3056433_2 実は、モーター制御については、だいぶ前にこんな本も買ってある。しかし、この本は、モーターそのものの基礎的なことばかりで、サーボモーターの部分はわずかしか記述がなく、しかも伝達関数といった高等数学の話に終始し、具体的なことには全く役に立たない。

 ルネッサンス以来、科学技術は進歩を続けて驚くばかりに分化し、それぞれの分野の技術レベルは、素人から見れば、全く手の届かない高みにある。山で言えばヒマラヤ山脈の8000m級の高山みたいなもので簡単に手が出せる世界ではない。電気の世界のような狭い世界でも、ちょっとでも分野が違うと全く知らないことばかりになる。

 こちらが求めているのはヒマラヤトレッキングのような、素人でも楽しめる山歩きなのだけれど、それに役立ちそうな参考書が実に少ない。あるのは超初心者向けの入門書か、プロまたはプロ志願者が教科書に使うような理論書になってしまう。雑誌記事も似たようなものである。

 ガリレオやニュートン、エジソンが活躍した時代との根本的な違いがそこにある。学ぶことが多すぎるのだ。エベレストに登るのではないので高等な登山技術は必要ないのだが、参考書というのは一冊の中に全体をまとめようとするので本当に基礎のところしか出てこない。実用的な応用には殆ど役に立たない。

 まあ悪態をついてみても事態が好転するわけではない。一人黙々とウェブを漁っては必要な情報を探る。こういうときは訳がわからなくてもとにかく浴びるように情報を摂取することだ。わからない情報でも沢山周辺情報を集めていると、ある時突然霧が晴れるように理解が進むことがある。

マイコンによる市販サーボモーターの制御の実験(2/22/2014)
 そうは言っても、簡単にモーター制御がマスターできるわけではない。完全自作に進む前に、まずは買ってきた市販サーボモーターを動かしてみよう。

サイトには色々なコードが溢れているが、なに心配することはない。原理さえ掴んでいれば、コードは簡単に書けるはずだ。ところがこのお手本が見当たらない。参考になるのは、gomisaiさんのサイトのArduinoのスケッチくらいである(ここは、いつもお世話になっている。後閑さんのページと同様実践的なのがありがたい)。

 Arduinoは電子工作のすっかり定番になってしまったようだが、どうもこのスケッチプログラムのC++風というのが馴染みにくい。何もこんなフラッシュもSRAMも極小なところに、大飯くらいの処理系の実装をしなくても良いのにと思うのだが、まあ、これは古い人間の証拠のようなものだろう。あまり大きな声では言いにくい。

 市販のラジコン用サーボの資料をウェブで漁り、いくつかの標準的な仕様があることを知った。意外にパルス巾に自由度がない。サーボの角度にかかわらず、パルス巾は、前後500μsで中間点が1500μsという狭さだ。

 技術の進歩で昔は低速だったPWMの周期を短くできるようになったのだろう。これが短くなればなるほど、同時に制御できるサーボの数を増やすことができるのだろうと納得する。

 とりあえずは、ADコンバーターに可変電圧をボリュームで与えて数値化し、サーボのPWM波形を作ることにする。

ブレッドボード用の可変抵抗ブレークアウト基板を作る(2/26/2014)
 部品箱からストックのTiny861を取り出しブレッドボードにテスト用の回路を組みあげる。最初、安価で手慣れたTiny2313にしようとして途中で、こいつにはADコンバーターがないのに気付いた(コンパレーターはあるが)。このあたりのAtmelの製品ラインアップがちょっと首をかしげるところだ。

 Tiny861は、焦電センサーのときバグらしいものに悩まされたことがあるのだが、ADコンバーターがついているし、UARTはなくても、自前のソフトUART(ISPを使わない)を使えば大丈夫だ。

 まずは、UARTとADコンバーターを動かすことにする。このへんが動けばPWM波形の確認はオシロでできる。制御用の可変抵抗器をブレッドボードに差そうとしてつまずいた。ピンが短かすぎて、うまく刺さらない。ちょうど良い機会なので、可変抵抗器のブレークアウト基板を作ることにする。

S_p3056436  手持ちの可変抵抗器は2連なので2段のピン構成になっている。こういう2段のピン配置の部品をブレッドボードにつけるには、ブレッドボードの中央のICソケット列にのせてピンを振り分けるかピンをシングル配列にする必要があり、結構面倒である。

 しかも、振り分ける形にすると、ボリューム軸がブレッドボードと平行になり操作しにくい。といってシングル配列ではピンの一部が部品の陰になって使いにくい。

 そこで考えたのが、写真のようなブレークアウト基板である。これで両側のピンは自由に使えるし、ボリューム軸も基板の横から操作できて具合が良い。こういう下らない工作が無性に楽しい。一人で悦に入る。

やっとPWM波形が出たがサーボは不安定(3/5/2014)
 久しぶりのスキー行は運動不足で散々だった。このところテニスをさぼっているのが効いた。電子工作が進んでいない。スキーに行く前に、Tiny861のADコンバーターは動いていたのだが、その先のPWM波形を出すところでつまづいている。

Servo861  PWM関係のタイマーのレジスターの設定が厄介である。先ほど調べたサーボモーターの仕様からPWM周期の中の有効なパルス幅が意外に狭いので、余り細かい調整が出来ない。8ビットのPWMでは、使えるステップが精々10段階くらいしか出来ず動きは余りスムーズには出来ないだろう。

 データシートを丹念に調べて、やっと組み上げ、オシロにPWM出力をつないで勇躍テストする。ところが全く波形が出てこないのである。以前、UARTや、ADCを動かすタイマーは動いているので問題は、タイマーのコンペアマッチのあたりがおかしいことは明らかだ。

 何度もデータシートを確認するが、がんとしてPWMの出力ピン(OC1A)からはパルスがでてこない。以前のプログラム(マイクロステッピング制御)のPWMコードと比較するが変わったことはしていない。ピンに出力が出てこないので調べようがないのだ。

 仕方がないのでコンペアマッチの割り込みを有効にして、割り込みルーチンでピンをドライブしてみた。これは問題なく動いた。やれやれどこが悪いのだろう。トラブルシュートはあとにして、とりあえずは先に進む。

S_p3066438  ここまで来るとあと一息だ。ADコンバーターの値をサーボモーターの仕様(最小1ms 最大2ms)に変換するロジックを作って、オシロで確かめる。よし、うまくいった。予想したとおり、制御段階が少なすぎるが、ここまで来たらモーターまで動かしたくなった。

 電源を共通にしているので余り期待はできないが、ものは試しである。5Vアダプターにモーターとマイコンをつないでテストしてみる。完全なバラックだけれど気がせいている。

 おおお、サーボモーターが動いた。うーむ、しかしスムーズではない。オシロを見るとパルスが結構乱れている。そのたびにサーボは、勝手に戻ったり、「ジジジ」と音が出て振動するなどの不規則な動きをして安定しない。

 恐らく電源だろうと思うが、まあ、動いただけでとりあえずは良しとしよう。ここらあたりでブログに報告しておくことにする。

| | コメント (0) | トラックバック (0)

« 2014年2月9日 - 2014年2月15日 | トップページ | 2014年3月30日 - 2014年4月5日 »