AD&DA ボード

パワーMOSの制御用に作成したAVRマイコンボードです。

Mio24

DACに12bitのMCP4726を2個とADCに16bitのMCP3428を1個載せてあり、どちらもI2Cでの制御です。はじめて使うICですが、無事動きました。

BASCOM-AVRでMCP4726は、

I2c_data(0) = &H96 ‘configuration vref=ext pd=640K gain=x1
I2csend &HC0 , I2c_data(0) , 1

でコンフィギュレーションレジスタを設定しておき、例えば1000mV出すには、(1000を16進にすると3E8なので)

I2c_data(0) = &H3
I2c_data(1) = &HE8
I2csend &HC0 , I2c_data(0) , 2

で、1000mV出力します。
VrefにはLM4040AIM3-4.1から4.096Vを入れてあるので、ビットあたり1mVが出ます。

MCP3428はネット上に情報が少なかったので参考までに

I2c_data(0) = &H90 ‘configuration /RDY=1 ch=0 /OC=0 s-rate=12bit gain=1
I2csend &HD0 , I2c_data(0) , 1

で、初期設定し

I2cstart
I2cwbyte &HD0
I2cstart
I2cwbyte &HD1
I2crbyte I2c_read(1) , Ack
I2crbyte I2c_read(0) , Nack
I2cstop

で、読み込めました。

———————————————————————————————————-

【7月29日追記】

上記の読み込みコードに誤りがあります。単独のチャンネルで連続の読み込みであれば読めてしまいますが、/RDYビットの確認(変換終了の確認)または読み込み前に5ミリ秒程度のウエイトが必要です。複数チャンネルの切替も含めて動作を確認の上で書き直したので、参考にされる場合は7月28日のブログも併せてお読みください。

———————————————————————————————————-

12bitで使っているので、I2c_read(1)に上側4bit、I2c_read(0)に下側8bitが入ります。

DACの出力はエンコーダで1mVステップで増減させます。

B = Encoder(pinc.2 , Pinc.3 , Lrot , Rrot , 0) ‘set VI_set

をループの中に入れておき、

Lrot:
If B <> &B00 Or Vi_set = 0 Then Return
Vi_set = Vi_set – 1
Return

Rrot:
If B <> &B01 Or Vi_set >= 2048 Then Return
Vi_set = Vi_set + 1
Return

エンコーダを回したときに、上のサブルーチンへ飛ばして値を設定します。
(ADCの上側が2.048Vなので、DACの出力も2048mVで止めてあります。接続予定の電子負荷用のパワーMOSユニットも20Aが上限ですから2V以上の出力は必要ありません。)

I_set = Vi_set
If I_set <> I_set_before Then Gosub Setdac_i

エンコーダが回されて、値が変化した時は次のサブルーチンで

Setdac_i:
Temp_word = I_set And &HF00
Temp_word = Temp_word / &H100

I2c_data(0) = Temp_word
I2c_data(1) = I_set And &HFF
I2csend &HC0 , I2c_data(0) , 2
I_set_before = I_set
Return

DACに送って出力します。

ひょっとするとおかしいところがあるかもしれませんが、これで動きましたというコードです。

ずいぶん昔はPGM-FI用のエンジン制御コンピュータの自動計測でADC80やDAC80といったコンバータを度々使いましたが、今ではこんなに小さなICで実現できてしまいます。それもマイコンとの接続はクロックとデータの2本ですからね・・・。あの頃は12ビットのデータを8ビットのバスで2回に分けて読んでいましたっけ。

カテゴリー: 未分類 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です