コンピュータは、0と1、オンとオフ、白と黒の世界で機能します。しかし、現実の世界では、物事はそれほど単純になることはめったにありません。たとえば、携帯電話を100% 未満の明るさで動作させたい場合があります。そして、車のアクセルペダルを全開にしてから離すというのは、非常に非効率的な運転方法です。より微妙な動作 (たとえば、照明を60% にしたり、アクセルを20% にしたり) を生成するには、コンピューターはそれらの0と1を線形曲線の近似値に変換する何らかの方法を必要とします。
R-2R DACを使用したPWMアナログ出力の近似
画像: ジェレミー・S・クック
この直線曲線を実現する最も簡単な方法は、パルス幅変調 (PWM) と呼ばれる方法を使用することです。私の PIDコントローラーの基礎 の記事で概説したように、PWMとは、ボードが指定された出力にさまざまな長さの一連のパルスを送信し、平均して特定の値になることを意味します。PWMは、 LED照明 やモーターなどの単純なアプリケーションの制御に最適です。
ただし、PWMは依然として方形波であるため、すべてのアプリケーションに適しているわけではありません。状況によっては、別のオプション、つまり抵抗ラダーベースの デジタル-アナログ コンバーター (DAC)をお勧めします。このコンポーネントは、DACのビット解像度によって決まる個別のレベルで電圧を出力できます。DACのビットを、抵抗ラダー上の「段」の数と考えます。
Arduino DAC R-2Rラダー
R-2Rラダーを使用してDAC機能を使用したい場合、朗報としては、 Arduino Due や新しい MKRシリーズ などの高度なボードにその機能が組み込まれています。Dueには2つのDAC出力があり、MKRシリーズ ボードには1つのDAC出力があります。解像度はボードとソフトウェア構成によって異なりますが、これについては Arduinoで詳しく説明しました。一方、 Uno や Nanoシリーズのほとんどなど、より一般的なボードにはこの機能は搭載されていません。1つまたは2つ以上の真のアナログ出力が必要な場合は、別のDACモジュールが必要になります。
自分で作るR-2RラダーDAC
独自のDAC R-2Rラダーを作成することは、 マイクロコントローラにアナログ機能を追加する最も簡単な方法ではありませんが、これらのデバイスの動作を学習したい場合は検討してください。このセットアップでは、Arduinoからの出力は、RまたはRの2倍の抵抗値で構成される電圧分割器ネットワーク(R-2Rと呼ばれる)に接続され、ゼロから ほぼ 入力値。
キャプション: R-2R DACのスケッチ。抵抗値は変化する可能性がありますが、値間のR-2R比は一定のままであることに注意してください。
このラダーの背後にある数学は等比級数となり、最初の出力/ビットは入力電圧の半分を送信し、2番目は4分の1を送信し、3番目は8分の1を送信します。下のグラフからわかるように、出力がいくつかあると入力電圧が大幅に低下します。しかし、8ビットに達すると、最大出力は入力値の0.5パーセント以内になるはずです。必要に応じてこれらの出力を組み合わせて、異なる電圧を作成できます。
下の画像は、この抵抗ラダーDACの簡単な例を示しています。最初は各ビットが徐々にオンになり、各状態間のジャンプがどんどん大きくなります。2番目は、バイナリ シーケンス内の各ラダー ビットをオンにして三角波を生成します。各ルーチンのコードはGitHubで見つかります 。
4ビットの解像度により、これらの結果は少し不安定になりますが、その効果は前に示したPWM矩形波とは大きく異なります。最初のパターンが見覚えがある場合は、それはLEDチェイサー/ラーソン スキャナー/サイロン コードに基づいているためです。
DAC R-2Rラダーモジュールの購入:より簡単な解決策
DIY DACは楽しくてためになる実験ですが、 12ビットMCP4725ユニットなどのDACチップを購入することもできます。価格は1ドル未満、またはブレークアウト ボード付きで約5ドルです。私が使用したブレークアウトには I2C通信が含まれているため、Arduinoプロジェクトや同じバス上の他のアクセサリとの使用に適しています。DACモジュールをセットアップするには、次の手順に従います。
1.この投稿の最初の画像に示すように、電源、グランド、SCL/SDAピン、および結果を測定するための出力を使用して回路を接続します。
2.Adafruit_MCP4725ライブラリ を手動で、またはArduinoライブラリ マネージャー経由でインストールします。
3.「例」に移動し、「Adafruit MCP4725」を選択して、プログラム「trianglewave」をロードします。
4.プログラムをArduinoボードに送信します。
5.2番目の「正弦波」の例を読み込むこともできます。これらの2つのスケッチにより、 オシロスコープ で次の結果が生成されました。
プロジェクトのためのArduino DAC
アプリケーションに最適なソリューションは、適切なアナログ出力を備えたArduinoボードを購入することです。一方、プロジェクトの開始時には何を扱っているのか必ずしも分かっているわけではないので、背景情報があっても損はありません。特殊な用途向けに独自のDACを作成する場合でも、購入したユニットを実装する場合でも、この技術を理解することは、精神的なツールボックスに追加するもう1つのツールになります。