次へ

 
 
パソコンを使った簡単な計測制御ツール
 
            「技術研修U」2006.11
 
 
 
1章 パーソナルコンピュータによる制御システム
  1.1 制御システムの構築 
  1.2 マイクロプロセッサとマイクロコントローラ
  1.3 パソコンの外部インターフェース
  1.4 制御システムのソフトウェア
2章 USB汎用インターフェース・キットUCT-203を使う 
  2.1 実験に適した外部制御インターフェース
  2.2 入出力ボードをつくる
  2.3 UCT-203を利用した外部制御の基礎 
3章 USB変換チップを使った外部制御
  3.1 FT232BMとファミリーチップ
  3.2 FT232BMをシリアル変換チップとして使う
  3.3 FT232BMをビットバングモードで利用
4章 PCとマイクロコントローラの協調
  4.1 マイクロコントローラの導入
  4.2 各マイクロコントローラ比較
5章 PCにAVRを接続する
  5.1 AVRの概要
  5.2 AVRの開発環境
  5.3 ATtiny2313を使う
  5.4 ATtiny2313をパソコンに接続する
6章 応用事例〜振動型平面位置センシング法
  6.1 背景
  6.2 センシングの原理
  6.3 センシングの特性
  6.4 まとめ

  原作?


 
1章 パーソナルコンピュータによる制御システム
 
 一昔前ならばパーソナルコンピュータもいわゆるマイコンとしてシステムバスの構造を理解してそこにI/Oを接続して、簡単な外部コントロールを行い簡単な制御システムを構築することが比較的容易にできていました。ところが、パーソナルコンピュータの性能が向上するにつれ、ハード的にもソフト的にもそのような「工作」が困難になってきました。
その主な要因
・ハード面ではPCIバスやUSBの導入
・ソフト面ではWinodwsNT系の普及
 これらで構成されるパーソナルコンピュータでは一般的なコンピュータやプログラミングの知識やツールだけでは新たな外部機器の増設は困難になりました。
 しかしここにきて、PICやUSB変換チップの普及によってUSBなどの既存のI/O窓口を利用した簡単なI/Oの実現が可能になってきました。本章では、このように変化してきた現状のパーソナルコンピュータに対してどのようなI/O増設の方法があるかを広範囲に紹介します。
 
1.1 制御システムの構築 
 
 前述のような理由で現状のマイクロコンピュータを利用した制御システムは図1.1と図1.2のように分けられます。
図1.1はパーソナルコンピュータを中心に各種拡張ボードを利用して外部制御を行う方法
この場合、拡張ボードは通常PCIの規格に準じたものとなり、市販品を利用することになります。また、拡張ボードをドライブするソフトウエアは拡張ボード付属のドライバやツール、あるいは、LaBVIEW等の統合型の計測ツールを利用します。
図1.2はいわゆる「組み込みシステム」と呼ばれるシステム
CPUとその周辺を1つのブロックとして制御システムを構築します。組み込みシステムは従来はOSを持たないのが標準でしたが、組み込みに用いるCPUと周辺回路の高性能化によりリアルタイムOSを持つ場合もあります。
 図1.1のようなパーソナルコンピュータを中心とした方法の場合、高機能なパーソナルコンピュータの機能、つまり高機能な計測ソフトや、大容量のデータストレージが利用できます。しかしながら、これらを実現するにはそれなりのコストがかかり、例えば比較的低速で数ビットあれば間に合うような小規模なシステム構築には大げさになります。
 一方、図1.2のような「組み込みシステム」の場合、小規模なシステムからコストパフォーマンスのよいシステムが構築できますが、複雑な処理を行わせようとすると、しっかりとした開発ツールが必要になります。また、データストレージやネットワークの構築となると、その実装は結構な手間となります。
 
図1.1 パーソナルコンピュータを中心とするシステム


図1.2 組み込みシステム
 

 そこでこれらのデメリットを補完する3番目の手法として、パーソナルコンピュータを中心にしてマクロコントローラを組み合わせた図1.3のような構成が考えられます。従来からも3番目の手法はインテリジェントIOといった呼び方で存在していましたが、周辺処理を行うマイクロコントローラおよびその通信手段の開発が今ほど簡便でなく、あまり採用されなかったようです。本書では使い勝手のよくなったPICに代表されるマイクロコントローラとパーソナルコンピュータを組み合わせた、3番目の手法による簡便な外部制御システムの構築方法について解説します。
図1.3 パーソナルコンピュータとマクロコントローラを組み合わせたシステム
 


1.2 マイクロプロセッサとマイクロコントローラ
 
 この節では、マイクロコンピュータの基本構造、基本構成をおさらいしながら、パソコンと組み込みシステムの違いとそれぞれに用いられるCPUの違いを紹介します。
 マイクロプロセッサは図1.7に示すように、
1.CPUコア単体
2.CPUコア+周辺
3.CPU
コア+周辺+外部バスなし といった構成をとるチップに分類できます。パソコンに使われるCPUは自由な拡張性が必要なので「CPUコア単体」が用いられ、PICなどの組み込み用CPUは「CPUコア+周辺+外部バスなし」が用いられます。CPUに周辺装置を付加したチップをマイクロコントローラやワンチップマイコンと呼ぶことも多いようです。

 
図1.7 マイクロプロセッサとマイクロコントローラ

 図1.8にマイクロプロセッサとマイクロコントローラの違いを示します。マイクロプロセッサが誕生した当初はマイクロプロセッサとマイクロコントローラとの違いはあまりありませんでしたが、現在ではそれぞれの用途に合わせて異なる進化を遂げています。
 
図1.8 マイクロプロセッサとマイクロコントローラの比較
 
1.3 パソコンの外部インターフェース
                          
 この節ではパソコンの外部インターフェースについて紹介します。パソコンの外部インターフェースは図1.9に示すようなものがあります。そのうちRS232Cと以前はプリンターが接続されていたパラレルポートは旧来からのインターフェースということでレガシーインターフェースと呼ばれます。
 またこれらのインターフェースは「USB-シリアル変換アダプター」や「USBインターフェースを増設するPCIカード」といった装置がありますので、ある程度は互いに変換可能です。
 
図1.9 マイコンの外部インターフェース
 
○PCI
 PCI(Peripheral Components Interconnect bus)はパソコン内部のブロック間を結ぶバスの規格として、Intelを中心に策定されました。現在はほとんどのパソコンに採用されています。PCI規格では、バス幅32ビット、33MHz動作が基本で、この場合、最大データ転送速度は133MB/sとなります。PCI規格ではバス幅64ビット、66MHz動作で最大533MB/sの高速な仕様まで規定されています。
 さらに、PCI規格をベースに拡張したPCI-Xや、伝送方法をシリアル伝送に変更して更に高速化を図ったPCI Expressもあります。また、伝送性能はそのままで組み込みシステム用に小型化したCompactPCIやノートパソコン用のMini PCI、小型パソコン用のLow Profile PCIと呼ばれるものもあります。
 32ビットPCIバスでは32ビットのアドレスバスと32ビットのデータバスが時間分割されて32ビットの信号線でやりとりされます。ですから、最大データ転送速度は133MB/sはデータが連続して転送されるバースト転送で得られます。またPCIでは本来のデータ転送の前にコンフィグレーションサイクルを行うことにより、PCIバス空間にマッピングされるボード固有のアドレスを自動的に決定できます。この動作はLANのDHCPの様なものと考えると分かりやすいでしょう。
 実際のマイコンとPCIの関係を最近の平均的なパソコンでよく使われるIntel865GVチップセットを使った例を図1.10に示します。少し前のパソコンではPCIはその名のとうり、ノースブリッジとサウスブリッジの間に利用されていましたが、現在ではサウスブリッジから出ている外部バスの1つという役割のようです。
 図1.11に5V、32ビット版のPCIカードのサイズを示します。32ビット版には3.3V版もあり、図1.12のようにカードに切り込みをもうけることで区別しています。図1.13に5V32ビット版のスロット、図1.14にLow Profile PCIサイズのユニバーサル32ビット版カードを示します。
 
図1.10 マイコンシステムとPCI
(865GVチップセットの場合)
 
図1.11 5V32ビット版のPCIカード
 
図1.12 各種32ビット版PCIカードとスロット


図1.13 5V32ビット版のスロット
 
図1.14 ユニバーサル32ビット版
Low Profile PCIカード
 
○PC Card
 PC Cardは米国の「PCMCIA」と日本の「JEIDA」が共同で策定したカード型拡張機器の規格です。当初は過般型のメモリとして登場しましたが、その後I/O機能が追加され、さらにPCIバスに準ずるの機能も包含されました。これらは正式には「PC Card Standerd」として定義されます。
大きく分けると、
・16ビット版の「16ビットPC Card」
・32ビット版の「CardBus」
に分けられます。
 16ビットPC Cardは旧来のISAバス(PCIバス以前の拡張バス規格、実際的な性能はPCIの数分の1程度)程度の性能、CardBusは33MHz32ビットのPCIバス程度の性能(最大転送速度133MB/秒)と言われています。特徴的なことは16ビットPC Cardは16ビットのデータバスと26ビットのアドレスバスが独立して存在するのに対しCardBusはPCIバスのように32ビットのデータバスとアドレスバスの共用バスとなります。したがって外観やプラグアンドプレイなどの使い勝手はほぼ同じように見えますが、ハード的には全く別物と考えてもいいくらいです。なおデジタルカメラや組み込みシステムで利用されるCompactFlashCardは16ビットPC Cardのアドレスバスの線数を減らしたものです。最近になって、PCIがPCIExpressに進化したように、シリアル伝送を利用したより高速で小型化されたExpressCardも対応パソコンを含め出まわりはじめています。
 図1.15にPC Cardの外観、図1.16に様々なPC Cardを示します。図1.16では左側2つが16ビットPC Card、右側2つが32ビットのCradBusで、4点とも厚さ5mmのType-U形状となります。
 
図1.15 PC Cardの外観      
 
図1.16 様々なPC Card
 
 
 
 
○USB
 パソコンの世界を現在のように幅広く使われるように進化させた大きな要因の1つにUSBがあるのではないかと筆者は考えます。なぜなら、それまでのパソコンは例えばプリンタのセントロニクスやSCSIのケーブル、コネクタなどは性能はUSB接続と変わらないにしても「ごつくて」「ねじ止め」で「計算機然」としていました。それがUSBに変わることにより「しなやか」で「スマート」な印象に変わりました。また、USBの機能として特徴的なことの1つは図1.17に示すようなアイソクロナス転送を可能にしたことです。これによりUSBオーディオなどアナログ電子機器の使い勝手がパソコンで実現できるようになりました。また接点が少なくなったのでコネクタのコストも下がり、ID設定などからも解放され、さらに、テーブルライトのようなUSB(から電源をとるだけの)小物なども現れてパソコンをより身近なものにしています。
 このように紹介するといいことずくめのようですが1点だけ残念な点がありました。それは旧来のRS232Cなどで可能であった簡単な電子工作レベルの入出力が難しくなったことです。しかし、後の章で紹介するように、最近になって安価で使い勝手のいいUSB-シリアル変換アダプタなどが簡単に入手できるようになり、この点も克服できるようになりました。
 
図1.17 アイソクロナス転送
 
 当初はUSBは12Mbps以下の通信速度で、同時に127個のデバイス(ルートハブ以外のハブも数える)が接続可能でした。その後、480Mbpsまでの転送速度が追加されたUSB2規格となりました。現在では、USBは通信速度1.5Mbpsのロースピード(キーボード、マウス、ゲーム周辺機器などの接続)、通信速度12Mbpsのフルスピード (オーディオ、中速ネットワークなどの接続)、通信速度480Mbpsのハイスピード (ビデオ、高速ネットワーク、HDDなどの接続)の3つのモードが利用されます。
 USBのコネクタとハードウエアの概要を図1.18、図1.19に示します。USBの通信は物理的にはたった4本の信号線で行われます。そのうち2本は電源ですし、信号線は差動信号ですから、信号の系統は1系統しかないわけです。この1系統の信号線を使って半2重通信を行います。このシンプルなハードウエアの上に階層構造をもつプロトコルが構築され、多様な通信を可能にしています。これらのハードからソフトまでの全体がUSBという規格です。USBの全体構成を図1.20に示します。アプリケーションからは複数の仮想的な通信線がターゲットとの間に結ばれているように見えます。これをパイプと呼びます。
 
 
図1.18 USBのコネクタ
     
図1.20 USBの構成     
 
図1.19 USBのハードウェア
 
○RS-232-C
 RS-232-Cはパソコンが世に出た当初から使われているシリアル通信の規格です。当初はパソコンとモデムとを接続するためのもので、コントロール線の名称にその名残を見ることができます。現在ではEIA-232F、あるいはEIA-574(9ピン版のEIA-232F)と呼ぶのが正式のようです。しかしながらパソコンのカタログなどを見ると「シリアルポート:RS-232C D-SUB 9ピン、16550A互換」といったEIA準拠という意味の書き方をしていることが多いようです。また、データ通信を行うTxD,RxD以外に数本のコントロール線があり、WindowsAPIから制御可能です。このコントロール線を使ってフロー制御を行うこともできますが、TxD,RxD以外の線はあまり使われないようです。
 
 
 RS-232-Cの信号線はパソコン等でよく使われる5Vや3.3Vのロジックレベルでなく±15Vが利用されます。従って通常のロジックICやCPUなどと接続する際には必ずレベル変換が必要です。レベル変換が必要ですが、それ以外は単純な非同期通信が行われるだけなので、受け手の設計が簡単にすみ、現在でも簡易な通信方式として根強く利用されています。図1.21にPC/AT互換機で使われる9ピンコネクタと各信号線を示します。
 
図1.21 PC/AT互換機で使われる
9ピンRS-232-Cのコネクタと信号線
(EIA-574規格、通常パソコン側にDサブのオスコネクタが使われる、
データ線は負論理、コントロール線は正論理)
 
○パラレルポート
 パラレルポートは、セントロニクス社のプリンタケーブルの規格をもとに「セントロニクス準拠」としてパソコンのプリンターポートの標準インターフェースとなりました。その後、双方向通信の可能な「ニブルモード」「バイトモード」が追加され、さらに、高機能な「ECPモード」、「EPPモード」が追加されました。当初の出力のみの動作を「互換モード」と呼び、これらをまとめてIEEE1284と呼びます。
 これらのモードは、ポートのネゴシエーション動作時に周辺側から転送モードデータをパソコン側に送信することにより切り替えられます。転送モードデータが受け取れなかった場合は互換モードとなります。互換モード以外はWindowsAPIではサポートされず専用のデバイスドライバの組み込みによって利用可能になります。図1.22にPC/AT互換機で使われる25ピンパラレルポートのコネクタと信号線を示します。
 前述のRS-232-C、パラレルポート、さらにISAバスなどPC/AT時代のインターフェースをレガーシーインターフェースと呼び、新規パソコンの場合、採用しない方向です。
 
図1.22 PC/AT互換機で使われる
25ピンパラレルポートのコネクタと信号線
(IEEE1284規格、パソコン側はDサブのメスコネクタが使われる)
 
1.4 制御システムのソフトウェア
 
 外部制御を行うためのソフトウェアは標準的なパソコン場でデータのみを処理する場合と異なり、いくつかの仕組みを理解しておく必要があります。この節では制御システムのソフトウェアの特色の概要を紹介します。
 
○ネイティブ開発とクロス開発
 外部制御を行うためのソフトウェアの場合も、当然開発システムあるいは開発ツールと呼ばれる、コンパイラなどの言語ツール、デバッガ、これらを統合する統合プラットフォームなど開発環境が必要です。この開発システムには図1.23に示すように大きく分けてネイティブ開発とクロス開発に分けられます。ネイティブ開発あるいはセルフ開発は開発環境と実行環境が同じマシンあるいは同じ種類CPUのマシンの場合です。クロス開発はとは開発環境と実行環境のマシンが異なる、特にCPUが異なる場合を言います。
 例えばWindowsアプリケーションをVisualC++を使って作成する場合はネイティブ開発、WindowsパソコンでMPLABを使ってPICプログラムを開発する場合はクロス開発になります。また1.1節で紹介した、「パソコンを中心とするシステム」の場合はネイティブ開発、「組み込みシステム」の場合はクロス開発、「パソコンとマイクロコントローラを組み合わせたシステム」の場合は両方の開発方法を利用することになります。
 
図1.23 ネイティブ開発とクロス開発
開発環境は実行環境と同じマシンで可能とはかぎらない。
 
 
○アセンブラと高級言語
 最近ではクロス開発の場合でも、C言語の開発環境が多くの場合無償あるいは低価格で用意されています。ですから例えばPICやAVRなどを使った小規模なシステムでもC言語で開発することも多くなってきました。C言語で開発すれば確かに開発効率は上がります。ですが、初めからC言語で始めるのはあまり適当ではないと筆者は考えます。ある程度CPUの特性を把握するまではアセンブラで組み立てる方が望ましいと思います。ある程度様子をつかんでからC言語で開発を始めることをお薦めします。また「パソコンとマイクロコントローラを組み合わせたシステム」の場合は、コントローラ側をシンプルに作ることができますので、アセンブラでも十分といえます。
 逆に「パソコンを中心とするシステム」の場合はWindowsAPIや追加した外部制御デバイス用のライブラリはC言語から呼び出すスタイルが標準なので、こちらはC言語を中心に考えるのが適当と思います。同様に「パソコンとマイクロコントローラを組み合わせたシステム」の場合もパソコン側はC言語で開発ということになります。
 
○ハードウェアのドライブ
 キーボードやディスプレイなどパソコンに標準装備されるハードウェアはWindowsの中のデバイスドライバが担当します。デバイスドライバはハードウェアに対して基本的な操作を提供します。このデバイスドライバに対してもっと高度で分かりやすい形で機能を提供するものがWindowsAPIとなります。図1.24に示すようにパソコンに追加した外部機器をドライブする場合もデバイスドライバを使用することになります。追加するデバイスドライバはWindowsの管理下で登録され動作することになります。このデバイスドライバに対してWindowsAPI同様に高度で使いやすい形の機能を提供するのが付属するライブラリやActiveXです。
 簡単な外部制御の場合、WindowsNT以前のWindows98、meではアプリケーションからのI/Oポートへのアクセスが可能でしたから、デバイスドライバを介さずとも直接制御を行うことができました。しかしWindowsNT以降は直接アクセスができなくなり、必ずデバイスドライバを介することになります。Windowsの場合、一般的にデバイスドライバの作成にはデバイスドライバの仕様の知識の他にDDKと呼ばれるツールが必要になりいわゆるアマチュアのレベルではデバイスドライバを作成することは希のようです。
 しかし、その代わりに市販される増設IOボード等には専用のデバイスドライバ、ライブラリ、ActiveXなどが無償で付属していますので、市販のIOボードを使用する限りは不便を感じることはありません。
 

次へ



図1.24 アプリケーションからの   ハードウェアのドライブ
新たに追加されたハードウェアも
デバイスドライバやライブラリを使えば
単純な操作関数の呼び出しで使用できる。