AD変換を含む“入出力の基本”について詳しく解説。また、「ハードリアルタイム性を求められる処理」について出題する!
前回の宿題【問題9】は、「AD変換」に関する問題でした。
組み込みシステムでは、さまざまな周辺機器に対してデータの入出力を行います。例えば、センサを使って測定した温度や熱などの物理量を取り込む場合、アナログデータをデジタルデータに変換する処理が必要です。
今回も問題の解答に続いて、AD変換を含む“入出力の基本”について解説します。この機会にしっかりと理解しておきましょう。
それでは、解答を発表します!
問題9 AD変換で行われる標本化、量子化、符号化に関する説明として、正しいものはどれか? 答え. ウ (←クリック) |
ウ以外の記述には、誤りがあります。
アは「標本化周波数」が誤りです。標本化でアナログ信号の振幅値をサンプリングする周期は標本化周期といいます。イは「2分の1以下」が誤りです。高い精度でAD変換を行うためには、標本化周波数をアナログデータの最大周波数の2倍以上に設定する必要があります。エは「標本化により採取した値に」が誤りです。符号化では、サンプリング値を量子化した値に「0」と「1」で表される符号を割り当てます。
組み込みシステムでは、RAMやROM以外にも各種の周辺装置とデータをやりとりします。入力装置にはボタンやスイッチ、センサなどが、出力装置にはディスプレイやプリンタなどがありますが、データをやりとりする際のタイミングや速度、制御信号、電圧、データ形式といったI/Oインターフェイスは、装置によって異なります。そのため、MPUは「I/Oポート(入出力ポート)」を介して、周辺装置の入出力を制御します。
I/Oポートは、MPUと周辺装置との間でデータの受け渡しの調整役となる回路です。MPUがデータを受け取ることができるようにタイミングを合わせたり、MPUから送られたデータを一時的に保持したり、データ形式を変換したりといった処理を行います。MPUには、さまざまな目的に利用できる「GPIO(General Purpose Input/Output)」という汎用ポートを備えているものもあります。GPIOは、最も基本的なI/Oポートであり、プログラムによる制御が可能です。
I/Oポートには、識別用に「I/Oアドレス(またはI/Oポートアドレス)」が割り当てられますが、割り当て方法により、I/Oポートへのアクセス方法も異なります。現在は、「メモリマップト方式」が主流です(表1)。
方式 |
説明 |
メモリマップト方式 | RAMやROMのメモリアドレス空間の一部にI/Oアドレス空間を割り当てる。I/Oポートでのデータの入出力を、メモリへの読み書きと同じ命令で実行できる |
I/Oマップト方式 | メモリアドレス空間とは別にI/Oアドレス空間を割り当てる。I/Oポートでのデータ入出力には、独自の入出力命令を用いる |
I/Oインターフェイスは多種多様であり、分類方法もさまざまですが、デジタルデータの入出力については「パラレルI/O」と「シリアルI/O」に大別できます。
パラレルI/Oは、複数の信号線を使って複数ビットのデータを一度に入出力する方式です。システムの内部では、MPUはアドレスバスやデータバスを介して、メモリやI/Oポートと一度に8ビット、あるいは16ビットずつアドレスやデータをやりとりします。これをパラレルI/Oの例と考えると分かりやすいでしょう。
パラレルI/Oでは、入力用にバッファ回路を用い、周辺装置から送られてきた複数ビットを蓄積して、MPUのタイミングに合わせてデータとして渡せるようにします。出力用には「ラッチ回路(入力信号に応じて、入力信号を通過させたり、現在記憶している情報を保持したりする回路)」を用い、MPUからの出力データを保持して、周辺装置に連続して渡せるようにします。
パラレルI/Oでは、複数の信号線をグループに分けて、あるいは信号線ごとに個別に入出力を制御できます。スイッチやボタンの押下状態を各信号線で取り込んだり、複数のLEDの点滅を制御したりといった処理が可能です。
パラレルI/Oは、複数ビットを並行してやりとりするため、大量のデータを高速で入力/出力できます。一方で、データを転送する距離が長くなると、信号線ごとに遅延が発生し、各ビットの到着時間にばらつきが生じる(スキュー)という問題もあります。
シリアルI/Oは、1本の信号線で1ビットずつ連続したデータとして入出力する方式です。基本的には、1本の信号線でデータをやりとりするため、データをどのタイミングで受け取るのか(クロックに同期させるのか、非同期なのか)を制御する必要があります。また、どこからどこまでが意味のあるデータかを示すために、8ビット(1バイト)の前後に「スタートビット」と「ストップビット」を付加するといった制御も必要です。
システム内では、MPUは「パラレル方式」でデータをやりとりします。そのため、シリアルI/O方式の周辺装置からデータを入力する際には、シフトレジスタを使って、1ビットずつ受け取ったデータをパラレル方式のバスに送り込める形に変換しなければなりません。これを「シリアルパラレル変換(シリパラ変換)」といいます。シリアルI/O方式の周辺装置への出力時には、シフトレジスタを使って、パラレルに送られてきたデータを1ビットずつ送り出せるようにします。これを「パラレルシリアル変換(パラシリ変換)」といいます。
パラレルI/OとシリアルI/Oを比較すると、一度に複数ビットをやりとりするパラレルI/Oの方が有利に思われます。実際、大量データを高速に入出力することが求められるハードディスクなどには、パラレルI/Oインターフェイスが採用されてきました。しかし、半導体技術の進歩によりデータ転送の高速化が進むと、パラレルI/Oではスキュー問題がネックとなり、高速化に限界が見えてきたのです。一方、シリアルI/Oについては、データ転送の高速化により「1ビットずつ」という不利な条件がまったく問題にならなくなりました。そのため、現在では「USB(Universal Serial Bus)」「SATA(Serial ATA)」「PCI Express」といったシリアルI/Oインターフェイスの周辺装置が増えています。
コンピュータは「0」と「1」からなるデジタルデータの世界です。しかし、世の中には時間経過に従って、連続して変化する物理量で表されるアナログデータがあふれています。
例えば、エアコンは適切な室温を保つために温度というアナログデータを取り込まなければなりません。このとき、アナログデータをデジタルデータに変換する必要があります。逆に、Webサイトからダウンロードした音楽をアナログスピーカーで楽しみたい場合には、デジタルデータをアナログデータに変換しなければなりません。
このように、アナログデータの入出力の際には、入力時に「AD(Analog/Digital)変換」を、出力時に「DA(Digital/Analog)変換」を行う必要があります。
図1 AD変換とDA変換 |
ここでは、AD変換がどのように行われるのかを簡単に説明します。AD変換は、「標本化」「量子化」「符号化」の3つの手順を経て行われます。
標本化では、連続して入力されるアナログ信号の振幅値を一定周期(標本化周期)ごとに採取(サンプリング)します。1秒間にサンプリングする回数を「標本化周波数」といい、標本化周期の逆数として求めます。0.01秒ごとにサンプリングを行うのであれば、標本化周波数は1秒÷0.01秒=100Hzです。
図2 標本化 |
標本化は、連続したデータを時間によって離散化する作業です。標本化によって元のアナログデータからサンプリング値以外が失われることになります。従って、一度AD変換したデジタルデータ信号をDA変換しても、元のアナログデータを完全に復元することはできません。できる限り精度の高いデータを得るためには、標本化周波数を元のアナログデータの最大周波数の2倍以上に設定する必要があります。これを「標本化定理」といいます。
量子化では、振幅値を複数のステップに分け、サンプリング値を近似します。例えば、振幅が0〜15Vの間で変化する場合に、1Vずつ16ステップに分けるとします。このとき、0.8Vのサンプリング値は1Vに近似します。このように近似することで、実際のサンプリング値との間で生じる誤差を「量子化誤差」といいます。量子化誤差を小さくするためには、ステップ数を増やせばよいのですが、その分処理に時間がかかることに注意してください。
図3 量子化 |
符号化では、量子化した値に符号を割り当てます。例えば、16ステップで量子化した値には「0000」〜「1111」の符号を割り当てることができます。これでAD変換は完了です。
図4 符号化 |
問題10 次のうち、ハードリアルタイム性を求められる処理はどれか? 答え. 解答はこちら(←クリック) |
いかがでしたでしょうか? 入出力の基本について理解できましたか。次回は、「リアルタイム性」と「リアルタイムOS」について解説します。お楽しみに!(次回に続く)
関連リンク: | |
組込みソフトウェア技術研修講座イーラーニング(サンプルIDプレゼント中) http://www.certpro.jp/elearning.html |
|
組込みソフトウェア技術者試験クラス2試験対策問題集(ETEC-SW2)(サンプルIDプレゼント中) http://www.certpro.jp/etecsw2test.html |
|
Copyright © ITmedia, Inc. All Rights Reserved.