- MCP4725 DACモジュール(デジタル-アナログコンバーター)
- MCP4725DACでのI2C通信
- 必要なコンポーネント
- 回路図
- DACArduinoプログラミング
- MCP4725とArduinoを使用したデジタルからアナログへの変換
マイクロコントローラーはデジタル値でのみ機能することは誰もが知っていますが、現実の世界ではアナログ信号を処理する必要があります。そのため、ADC(Analog to Digital Converters)は、マイクロコントローラーが信号を処理できるように、実世界のアナログ値をデジタル形式に変換するためにあります。しかし、デジタル値からのアナログ信号が必要な場合はどうでしょうか。DAC(デジタル-アナログコンバーター)が登場します。
デジタル-アナログコンバーターの簡単な例は、アーティストの歌手がマイクを使用して歌を歌っているスタジオで曲を録音することです。これらのアナログ音波はデジタル形式に変換されてからデジタル形式のファイルに保存され、保存されたデジタルファイルを使用して曲が再生されると、これらのデジタル値はスピーカー出力用のアナログ信号に変換されます。したがって、このシステムではDACが使用されます。
DACは、モーター制御、LEDライトの明るさの制御、オーディオアンプ、ビデオエンコーダー、データ収集システムなど、多くのアプリケーションで使用できます。
多くのマイクロコントローラーには、アナログ出力を生成するために使用できる内部DACがあります。ただし、ATmega328 / ATmega168などのArduinoプロセッサにはDACが組み込まれていません。ArduinoにはADC機能(アナログ-デジタルコンバーター)がありますが、DAC(デジタル-アナログコンバーター)はありません。内部ADCに10ビットDACがありますが、このDACをスタンドアロンとして使用することはできません。したがって、このArduino DACチュートリアルでは、ArduinoでMCP4725DACモジュールと呼ばれる追加のボードを使用します。
MCP4725 DACモジュール(デジタル-アナログコンバーター)
MCP4725 ICは、(0〜5V)の出力アナログ電圧を生成するために使用される12ビットデジタル-アナログコンバータモジュールであり、I2C通信を使用して制御されます。また、オンボードの不揮発性メモリEEPROMが付属しています。
このICの分解能は12ビットです。これは、(0〜4096)を入力として使用して、基準電圧に対する電圧出力を提供することを意味します。最大基準電圧は5Vです。
出力電圧を計算する式
O / P電圧=(基準電圧/分解能)xデジタル値
たとえば、基準電圧として5Vを使用し、デジタル値が2048であると仮定すると、DAC出力を計算します。
O / P電圧=(5/4096)x 2048 = 2.5V
MCP4725のピン配置
以下は、ピン名を明確に示したMCP4725の画像です。
MCP4725のピン |
使用する |
アウト |
アナログ電圧を出力 |
GND |
出力用GND |
SCL |
I2Cシリアルクロックライン |
SDA |
I2Cシリアルデータライン |
VCC |
入力基準電圧5Vまたは3.3V |
GND |
入力用GND |
MCP4725DACでのI2C通信
このDACICは、I2C通信を使用して任意のマイクロコントローラーとインターフェースできます。 I2C通信には、SCLとSDAの2本のワイヤのみが必要です。デフォルトでは、MCP4725のI2Cアドレスは0x60または0x61または0x62です。私にとってはその0x61。 I2Cバスを使用して、複数のMCP4725 DACICを接続できます。唯一のことは、ICのI2Cアドレスを変更する必要があるということです。 ArduinoでのI2C通信については、前のチュートリアルですでに詳しく説明されています。
このチュートリアルでは、MCP4725 DACICをArduinoUnoに接続し、ポテンショメータを使用してArduinoピンA0にアナログ入力値を提供します。次に、ADCを使用してアナログ値をデジタル形式に変換します。その後、これらのデジタル値はI2Cバスを介してMCP4725に送信され、DAC MCP4725ICを使用してアナログ信号に変換されます。ArduinoピンA1は、ピンOUTからのMCP4725のアナログ出力をチェックし、最後にADCとDACの両方の値と電圧を16x2LCDディスプレイに表示するために使用されます。
必要なコンポーネント
- Arduino Nano / Arduino Uno
- 16x2LCDディスプレイモジュール
- MCP4725 DAC IC
- 10kポテンショメータ
- ブレッドボード
- ジャンパー線
回路図
以下の表は、MCP4725 DAC IC、Arduino Nano、およびマルチメーター間の接続を示しています
MCP4725 |
Arduino Nano |
マルチメータ |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0またはOUT |
A1 |
+ veターミナル |
GND |
GND |
-veターミナル |
VCC |
5V |
NC |
16x2LCDとArduinoNano間の接続
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
LCDのコントラストを調整するためのポテンショメータセンターピンから |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
ポテンショメータは、左のピンはGNDに接続され、アルドゥイーノの5Vに接続された最も右のピン、ArduinoのナノA0アナログ入力に接続されたセンターピンと一緒に使用されます。
DACArduinoプログラミング
DACチュートリアル用の完全なArduinoコードは、最後にデモビデオで提供されます。ここでは、コードを1行ずつ説明しました。
まず、I2CやLCD使用するためのライブラリが含まwire.hとliquidcrystal.hライブラリを。
#include
次に、Arduino Nanoに接続したピンに従って、LCDピンを定義して初期化します。
LiquidCrystal lcd(2,3,4,5,6,7); // LCDディスプレイピンRS、E、D4、D5、D6、D7を定義します
次に、MCP4725 DACICのI2Cアドレスを定義します
#define MCP4725 0x61
void setup()で
まず、Arduino NanoのピンA4(SDA)とA5(SCL)でI2C通信を開始します
Wire.begin(); // I2C通信を開始します
次に、LCDディスプレイを16x2モードに設定し、ウェルカムメッセージを表示します。
lcd.begin(16,2); // LCDを16X2モードに設定します lcd.print( "CIRCUIT DIGEST"); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print( "Arduino"); lcd.setCursor(0,1); lcd.print( "DAC with MCP4725"); delay(2000); lcd.clear();
void loop()で
1.最初にバッファに制御バイト値(0b01000000)を入れます
(010-MCP4725を書き込みモードに設定します)
バッファ= 0b01000000;
2.次のステートメントは、ピンA0からアナログ値を読み取り、それをデジタル値(0-1023)に変換します。Arduino ADCは10ビットの分解能であるため、DACが12ビットの分解能であるため、4を掛けると0〜4096になります。
adc = analogRead(A0)* 4;
3.このステートメントは、ADC入力値(0〜4096)からの電圧と5Vとしての基準電圧を見つけることです。
float ipvolt =(5.0 / 4096.0)* adc;
4.最初の行の下では、ADC変数で4ビットを右にシフトして最上位ビット値をバッファーに入れ、2行目では、ADC変数で4ビットを左にシフトして最下位ビット値をバッファーに入れます。
バッファ= adc >> 4; バッファ= adc << 4;
5.次のステートメントは、DAC出力(MCP4725 DAC ICのOUTPUTピン)であるA1からアナログ電圧を読み取ります。このピンをマルチメータに接続して、出力電圧をチェックすることもできます。マルチメータの使用方法については、こちらをご覧ください。
unsigned intアナログ読み取り= analogRead(A1)* 4;
6.さらに、可変 アナログ読み取り からの電圧値は、以下の式を使用して計算されます。
float opvolt =(5.0 / 4096.0)*アナログ読み取り;
7.次のステートメントは、MCP4725で送信を開始するために使用されます
Wire.beginTransmission(MCP4725);
制御バイトをI2Cに送信します
Wire.write(バッファ);
MSBをI2Cに送信します
Wire.write(バッファ);
LSBをI2Cに送信します
Wire.write(バッファ);
送信を終了します
Wire.endTransmission();
最後に、lcd.print()を使用してこれらの結果をLCD16x2ディスプレイに表示します。
lcd.setCursor(0,0); lcd.print( "A IP:"); lcd.print(adc); lcd.setCursor(10,0); lcd.print( "V:"); lcd.print(ipvolt); lcd.setCursor(0,1); lcd.print( "D OP:"); lcd.print(analogread); lcd.setCursor(10,1); lcd.print( "V:"); lcd.print(opvolt); delay(500); lcd.clear();
MCP4725とArduinoを使用したデジタルからアナログへの変換
すべての回路接続を完了し、コードをArduinoにアップロードしたら、ポテンショメータを変更してLCDの出力を確認します。LCDの最初の行には入力ADCの値と電圧が表示され、2番目の行には出力DACの値と電圧が表示されます。
マルチメータをMCP4725のOUTピンとGNDピンに接続して出力電圧を確認することもできます。
これは、DACモジュールMCP4725をArduinoとインターフェースすることにより、デジタル値をアナログに変換する方法です。