今回からADコンバータについて説明します。
ADコンバータとは
基礎編では基本的なタイマーを製作して、前回までの応用編ではPWMを説明するために、無理やり感満載って感じでタイマーにPWM機能を実装しました。今回も最初からそんな雰囲気が漂いますが、気にせず進めましょう!
ところで「ADコンバータ」ってどのようなものなのでしょうか。ADコンバータそのものの説明の前に、基礎編で製作した回路についてもう一度確認してみます。
基礎編のスイッチ回路では、スイッチとプルアップ抵抗をPIC12F1822のピンに接続して、プログラムでスイッチの状態(OFFかONか)を読み取りました。
この回路では、RA3ピンの状態が0Vか5Vかを調べて、スイッチのOFF/ON状態を読み取りました。つまり、上の回路では2種類の電圧値を読み取っていたわけです。
ピンの電圧 | レジスタの値(RA3) | 説明 |
---|---|---|
5V | 1 | ピンの電圧が5Vの時はスイッチがOFFであるため、この時は「スイッチOFF」と認識する |
0V | 0 | ピンの電圧が0Vの時はスイッチがONであるため、この時は「スイッチON」と認識する |
ここで注意点があります。上の表ではピンの電圧が5Vと0Vのみを示しましたが、例えばピンの電圧が0.5Vなど、中途半端な値になってしまった場合はどうなるのでしょうか。
このような時は無理やり0か1として読み取ります。PIC12F1822では、ピンの電圧に応じてレジスタの値は以下のようになります。
ピンの電圧 | レジスタの値(RA3) |
---|---|
2V 〜 5V | 1 |
0.8V 〜 2V | 不定 |
0V 〜 0.8V | 0 |
なお、この電圧の範囲は、PICマイコンの種類によって異なります。
このような感じで、入力電圧が「0V」や「5V」以外の時は、RA3の値を無理やり0か1にしてしまいます。「不定」とありますが、これはPICマイコンの内部回路特性や温度などの環境によって0か1になります。
スイッチの回路は、要するに、入力が中途半端であっても0か1か決めてしまう、というものでした。
世の中、こんな感じで何に対しても白黒はっきりさせないと気が済まない人もいますよね。でも世の中、そう簡単に割り切れるものではありません。スイッチ回路の確認はここまでにして、別の例を見てみましょう。
温度センサという部品があります。
この温度センサには、3つの端子があります。2つの端子を電源に接続すると、残りの1つの出力端子に温度に応じた電圧が出力されます。例えば0度の時は0V、18度の時は0.18V、というように、温度が1度上がることに0.01V電圧が増えます。
この、温度に応じた電圧を出力するピンを先ほどのスイッチ回路の時のRA3ピンに接続したらどうなるでしょうか。
RA3レジスタは、0〜0.8Vの時が0、0.8V〜2Vの時が0か1のどちらか、2V〜5Vの時が1となります。
この温度センサは温度測定範囲は0度〜100度ですので、出力電圧は0V(0度のとき)〜1V(100度のとき)となります。PICマイコンのピンをデジタル入力にした場合、せっかく温度センサを接続したのに温度の情報を読み取ることができません。
この温度センサのように、電圧が5Vか0Vかではなく、中途半端な電圧の値を読み取りたい場合があります。この温度センサのように、電圧値が連続した状態のことを「アナログ」と呼んでいます。
このアナログ値をPICマイコン内部で、数値として扱えれば温度センサを使って色々なことができるようになります。
「ADコンバータ」とは、このようなアナログ値をPICマイコンが扱える数値(=デジタル値)に変換する機能のことで、「Analog-to-Digitalコンバータ」の略です。(アナログの電圧値をPICマイコン内部でどのような数値に対応させるのかはプログラム作成の時に説明します)
ADコンバータの役割はわかりましたでしょうか。
プログラム上のADコンバータの取り扱い方
すでに遠い記憶になってしまいましたが、基礎編の第22回でmain関数の最初の方で行う設定内容を説明しました。
その中で、
ANSELA = 0b00000000;
という設定をしていました。
この「ANSEL」レジスタは、各ピンをデジタル制御にするかアナログ制御にするか、という設定を行うものです。「ANSEL」とは、「Analog Select」の意味です。また、「ANSELA」の「A」はポートAの意味です。
もう一度、ANSELAレジスタの仕様をデータシートで確認してみましょう。
(Microchip社「PIC12F1822 Datasheet」より引用)
アナログ値を読み取りたい場合、そのピンに対応するANSELAレジスタのビットを1にします。例えば、RA2ピン(5番ピン)でアナログ値読み取りをしたい場合は「ANSA2」というビットを1にすればよいので、
ANSELA = 0b00000100;
と設定します。
なお、ピンの入力/出力を設定する「TRISA」レジスタがありますが、RA2ピンをアナログ値読み取りにする場合、「TRISA」レジスタで、RA2ピンを入力に設定する必要もあります。
このように設定したら、あとはADコンバータ機能を使ってピンの電圧値を読み取ることができます。なお、スイッチ回路の場合は「RA3」レジスタでピンの状態を読み取りましたが、上の例のようなRA2ピンをアナログ入力にした場合、「RA2」レジスタでは読むことができません。ADコンバータで読み取った結果は他のレジスタにセットされますので、そのレジスタを読むことになります。詳細はプログラムを作成する回で説明します。
「ADコンバータ」とはどのようなものなのか、またその使い方の概要はわかりましたでしょうか。
どのような回路にして、どのようなプログラムにすればアナログ値が読み取れるのか、まだ具体的にわからないので、なんとなくわかったかな、という程度かもしれませんが、その理解で十分です。
次回は、回路を設計して、その次のプログラムを作成して理解を深めます。
更新履歴
日付 | 内容 |
---|---|
2017.4.2 | 新規投稿 |
2017.12.1 | ANSELAの説明追記 |
2020.1.19 | リンク切れ修正 |