当サイトのコンテンツはご自身の判断と責任においてご利用ください。営利目的の転載等は固くお断りします

更新2022/06/20

A/D入力とノイズ除去

このページの項目
他を探す

マイコンのA/D変換機能

この電子工作の知恵袋で良く使うPIC16F690に限らず、ほとんどのマイコンには、ポート端子の電圧を測定しディジタル量に変換・取り込むA/D変換機能が搭載されています。
PIC16F690のA/D変換ブロック図
(Microchip Technology PIC16F690 Data Sheet より抜粋)
このアナログ・ディジタル変換(A/D変換)という機能は、大変便利で有用なのですが、うまく使うにはスイッチ入力と同じくコツが必要です。
ハードウエアとソフトウエア両面から使い方を説明します。

アナログ信号に含まれるノイズ

スイッチ入力とチャタリング除去でチャタリング除去手法を説明しましたが、アナログ電圧の読み取りでも同様の問題があります。
それは、正規の信号に混じる微小ノイズです。
微小ノイズの原因として、多いのは電源変動ノイズ・負荷変動によるGNDレベルの変動・EMC(電磁波障害)・電灯ノイズなどです。
ボリュームなどの操作系のある場合は、ボリュームを動かした時の摺動ノイズもあります。

要は、アナログ電圧というのは、どんな状況でも必ずノイズが混じっているということです。
この微小ノイズは、回路のインピーダンスによっても違いますが、普通数mVから数百mV、場合によっては数V以上の電圧変動となって信号に混入します。
そのため、A/D変換で読み取ろうとしても、スイッチのチャタリングと同じで、読み取った値を本当に信用していいのかどうかがわかりません。
よって、ノイズが誤動作につながるほど大きい場合は、必ずノイズ除去が必要になります。

ノイズ除去の手法

ノイズ除去の代表的な手法に平均化という方法があります。
一般的に、ノイズは時間平均をするとプラスマイナスゼロになる性質があり、その性質を利用し平均化することで正しいアナログ電圧を確定しようとする方法です。
平均化には、ハードウエアである積分回路などのフィルター回路を用いて平均化する方法と、ソフトウエアでノイズを平均化する方法の2つがあります。
ケースに応じて、単独もしくはハードウエアとソフトウエアの組み合わせます。

ハードウエアによるノイズ除去例

下記は、積分回路を使った簡易的なフィルター回路です。
積分回路
ノイズの周波数成分より大きい時定数の積分回路に、ノイズ交じりの信号を通すことで滑らかになります。
段数を増やせば、その分ノイズ除去性能があがります。
ソフトウエアで処理が間に合わないような高速ノイズの場合に有効です。

ソフトウエアによるノイズ除去例

マイコンの処理時間が、ノイズに対し十分早い場合は、ソフトウエアによるノイズ除去が有効です。
PIC16F690で作る汎用モジュールPIC16F690汎用Cソースコードを使い、ノイズ除去手法の一つを説明します。
PIC16F690でなくとも、処理の考え方は、他のマイコンも同じです。
ノイズ除去のためのマイコン回路例

以下は、ノイズ除去のプログラム例です。
ここで記載されていない部分は、PIC16F690汎用Cソースコードをそのまま使用します。

ボリュームの電圧を10mS間隔3回連続で読み取り、それら3回のA/D変換値の平均値advalを求めます
算出した平均値は、pwmsetduty関数の引数にadvalをそのまま使用すれば、LEDがボリュームの電圧に応じて変化するようになります。

最新

中の人

電子回路とファームウェア専門の元エンジニアが、初心者の頃の疑問や勉強・経験で知った「そうだったのか」を2009年から書いています。

▲ページの先頭へ戻る