AVR利用、自作装置

作成した回路や詳細についてはこちら

全体の概要があるトップページはこちら

 以下、使用した素子等について、概説する。

AVR

 ATMEL社のAVRはマイクロコントローラー(マイコン)の一種であり、PICというマイコンと共に、よく使用される。その他のマイコンとしては日立のH8なども有名。
 マイコンは1つのICの中にCPU, RAM, プログラム用ROM(Flash memory), GPIO(General purpose I/O), A/D converter (ADC), Timer/Counterなどが集積されており、1つのICのみで種々のことが出来る。
 この章ではAVRを使っていろいろな装置を作ったので紹介する。AVRを選択したのは、開発環境としてBASCOM-AVRというソフトがあり、BASIC言語でプログラミングが出来るからである。C言語(gcc)の開発環境もあるが、BASICよりは面倒なような気がしたので、BASCOMにした。BASCOMについてはインターネットにいろいろなサイトがあり、そこで解説されているので詳細は省略する。がっちり取り組むなら、そのPDFマニュアルを読むとよい。BASCOMは4kBまでのプログラム(コンパイル後)なら無料版でコンパイルできるが、紹介した機器のプログラムはほとんどが4kBを越えている。(ちゃんとしたライセンス版でプログラムすること。それほど高くない。)
 幾つかの回路では共立電子デジットのABL基板(AVR USBブートローダー)を使用している、この基板はAVRが搭載されてUSBインターフェースを備えており、装置の完成後、パソコン(PC)とのUSB経由のデーターやりとりが可能になり、便利である。装置へPCから測定コマンドを発行したり、装置から取得したデーターをPCへ送信するといった用途に活用できる。コマンドやデーターの通信をASCII文字列で定義(AVRのプログラミング)しておけば、PC上のLabVIEWやCプログラムで装置を制御可能である。
 たまにAVRにPower-ON リセットがかからないような現象が出たので、AVRボードのリセット入力に100pFのCをGNDとの間にかましておくとよい。(リセットに必要な、詳細な/Reset min. timeはAVR ICのマニュアルを参照。接続する電源の立ち上がり方によって、これが満たされない場合がある。)
 最近はARMが、はやっているようであるが、筆者は高速性やリアルタイム性が必要な部分はCPLDやFPGAで別モジュール部分として設計してしまうので、あまり必要性は感じていない。どちらかというと32-bit CPUで、そこそこ高速であることはかえってそれに捕われて、全てをソフト処理しようとして設計を難しくしてしまう場合がある。(安いARM(F4も含めて)の現在の速度では、けっこう中途半端である。リアルタイム性を出したいのか、制御向きなのかがはっきりしない。)それよりも専用の高速ハードをFPGAなどで作って、別の遅い(ユーザーインターフェース専用の)簡易なCPUから起動した方が楽に設計できる場合が多い。ソフト開発上もあまり複雑なCPUを使わない方が早く完了でき、AVRではBASCOMなどの簡便なソフトによる速い開発も有利。専用ハード化の例は以下のCPLD, FPGAにあるリンクにその例がある。(それらは安いARMでは速度的に無理か、ARMがその処理専用になってしまって、別のプロセスが実行できなくなる。)

CPLD, FPGA

全体の概要があるトップページはこちら

 紹介した幾つかの機器ではCPLDやFPGAも使用している。(開発物のページも含む。)CPLD (Complex Programmable Logic Device) はゲートやフリップフロップ等のロジック素子を集積したもので、ユーザーが構造をプログラムできる。CPLDはゲート遅延が予測しやすいのでタイミング制御が厳しい用途に使用している。FPGA (Field Programmable Gate Array)はCPLD同様、任意のロジック回路をユーザーがプログラムできるゲートアレイである。CPLDと比べ、より大規模な回路を作成でき、また、かけ算をするMultiplierや、内部にRAMモジュールも持っている点がCPLDとは異なる。それらの詳細については、CQ出版社から、いろいろな解説書が出ているのでそれらを参照されたい。(参考文献の章も参照。)また、メーカーからのマニュアルも参考になる。
 CPLDとFPGAのメーカーとしてはXilinx, Alteraが有名であるが、今回はAlteraのものを使用した。ブロックダイアグラムを使って設計する際に、筆者には昔からなじみのあるTTL 74xxシリーズの論理ブロックが揃っていたためである。なお、XilinxのCPLDやFPGAを使っても同様の集積回路が実現できるので、そちらに慣れた方は、それらで作成可能である。
 Altera社のCPLD, FPGAの回路設計を行うにはAltera社のサイトからQuartusという開発環境をダウンロードする(Free)。計測器においてはタイミングが厳しい場合が多かったので、ブロック図による設計を主に使用した。場合により、Verilog設計言語などのHDL言語の使用もあり得るかもしれない。(ただし、タイミングがきつい場合や特殊な回路にはこれらHDL言語では記述しきれない。やはり、ハードウエアの奥まで使うには回路ブロック設計か?)

ZigBee(ジグビー)

応用した回路や詳細についてはこちらに幾つか紹介してある

 ZigBeeは無線通信モジュールの一種で、2.4GHzの無線でデーター通信を行うことができる。今回はPCと装置の間で無線通信を行うのに使用した。PCから装置にコマンドを送り、それをAVRが解釈してコマンドを実行する。得られたデーターは装置から無線でPCへ送信される。
 その他の無線モジュールとしてはBlueToothがある。ZigBeeの長所短所は以下である。
ZigBeeは設定が簡単であり、自動的に相手方に接続される。これに対し、BlueToothの方はTCP/IPなどのネットワークプロトコルの制御等、面倒な場合が多い。また、ZigBeeネットワークの基地数は65000個ほどまで可能であり、BlueToothよりも圧倒的に多い。BlueToothの方はネット接続に使用されるように転送速度が速い。これに比べ、ZigBeeは数十kbps程度である。 今回の用途に対しては、大量のデーターを高速にPC側に送信する必要が無いと予測されたため、使用が容易なZigBeeを採用した。
 ZigBeeモジュールとしてはMaxStream社のXBeeを使用した。小型で使いやすいという印象である。XBeeは幾つかのモードを持っているが、今回はダイレクトモードを使用している。このモードはパワーオン時にデフォールトでスタートしている。このモードでは、XBeeのシリアルインに入力したASCII文字列がそのまま相手側に送信され、相手側のXBeeはシリアルアウトからASCII文字列のビット列を出力する。これをマイコンのUSARTに入れる。すなわち、一種の無線型RS-232C(モデム接続)と考えればよいので、処理は簡単である。
 XBeeをプリント板に実装する際の注意として、第1に、ピンの間隔が2mmピッチである点である。2.54mmのユニバーサル基板への実装は変換基板を使うなどの工夫がいる。もし、感光基板を使ってプリ板作成ならば、2mmピッチにしておけばOK。第2に、電源電圧が2.8~3.4Vなので、3か3.3Vで使わなければならない。したがって、AVRの電源も同じ電源で使うか、または、AVRを5Vにした場合、5V - 3.3Vのロジックレベルを変換できるICを使ってレベル変換を行う必要がある。レベル変換ICの例は、+5V -> + 3.3V系 なら、74LCX125, 74LCX244などである。+3.3V -> +5V系なら、直接つなげるが、心配なら74VHCT541 などを使ってレベル変換を行える。2mmピッチのSingle-in line ICソケットは常磐商行から通販で購入。最近、共立電子のデジットも扱いだしたらしい。
 XBeeを購入する際は、最初は開発キットを買うとよい。XBee2個とXCTUというファームウエアの設定ソフトが付属している。XBeeはRSコンポーネンツにあるか、なければ日本代理店であるDigi Internationalなどから直販で、またはDigiKeyで。XBeeには2種類有り、XBeeと無線パワーが大きなXBee-Proがあるが、20m程度ならXBeeで十分であるし、安い。XBeeの中にもアンテナの種類によって副版があるが、ホイップアンテナのもの(太い電線が延びて立っているもの(ただし、長さは数センチと短い。2.4GHzなので))が筆者は良いと思っている。XBeeモジュール1個の価格は3千円台であり、開発キットは1万円台だと思った。

その他の特殊な部品

 その他に、幾つか特殊なICなどを使っているが、それらについては使用した回路についての節に述べてある。

感光基板によるプリント板の作成

 試作した回路はいろんな種類のICを実装しているので、その足ピンピッチが2.54mmでないものや表面実装部品もあるので、サンハヤトの感光基板や、サンハヤトやダイセンの変換基板を利用してP板を作成した。詳細は、別のページを参照。

コネクター

 解説にある回路図やパターン図の、電源供給やパネルインターフェースとの接続を行う1列のコネクターで多極のものは、日本圧着端子製のXAシリーズコネクターを使った。(共立電子3Fにあり。)このコネクターは挿入圧が小さく、便利である。昔はモレックスのコネクターを使ったりしたが、多極の場合、非常に強く押しても挿入できないことがあり、困った。そのため、自作基板においてはXAコネクターがよい。
 その他の2列のコネクターは一般的なものでよい。

以下の追記事項は正しくない。その下の追記事項2を参照されたい。

追加記事:Mega1284を制御ボードとして、SPI インターフェースを使う場合、BASCOM 2.0.xx以降ではConfig SPI 命令にバグが有るので注意。また、Mega168や368に対しては、Config SPI命令でNoss=1とするとSPI信号が出てこないというバグもある(ver.1.xxからこのバグはある)。詳細は上位ページの自作電子回路の7-0章(BASCOMのくせや問題点)の項目(6)を参照。

追記事項2:上記の追記事項は正しくない部分がある。Config SPIに対してはBASCOM側にはバグは無い。これはAVRのハードの特性によるものであり、詳細は修正した7.0章の(6)を参照。

回路のTop Pageへ