6 years, 7 months ago.

Nucleo-L476RGからSPI通信を利用したMCP4922でのDACがうまくいきません

Nucleo-L476RGからSPI通信を利用したMCP4922でのDACを試みているのですがうまくいきません。

物理的な接続としては以下の通りです。

接続元接続先その先の接続先
Nucleo-L476RG_MOSI(D11)MCP4922_SDI
Nucleo-L476RG_SCK(D13)MCP4922_SCK
Nucleo-L476RG_D8MCP4922_LDAC
Nucleo-L476RG_GNDMCP4922_CS
Nucleo-L476RG_5VMCP4922_Vdd
Nucleo-L476RG_GNDMCP4922_AVSS
MCP4922_VoutALED+300ΩNucleo-L476RG_GND

コードは以下の通りです。

#include "mbed.h"

//LDAC
DigitalOut ldc(PA_9);

int main()
{
    //Start
    printf("Start\r\n");
    
    //Init
    SPI device(SPI_MOSI, SPI_MISO, SPI_SCK);
    device.format(16,0);
    
    //InitLDAC
    ldc=1;
    
    //Loop
    printf("LoopStart\r\n");
    while(1)
    {
        ldc=1;
        device.write(0x3fff);
        ldc=0;
        wait(1);
        
        ldc=1;
        device.write(0x3000);
        ldc=0;
        wait(1);
    }
}

SPI通信がうまく出来てないのかと思い、ループバック的な事(Nucleo-L476RG上でMOSI-MISOを直結してread)もしてみましたが、 問題無く通信できていました。

色々調べてみたんですが…接続・コード等に間違いはありますでしょうか。 よろしくお願いします。

問題解決に直接関係無いかも知れませんが、ハードウェア関係で一点コメントします。
MCP4922の入力信号レベルは、仕様書を見ると、入力信号のHレベルが、
0.7 x VDD = 0.7 x 5 = 3.5V
なければなりません。
3.3VでL476が動作しているので、動作してもICの実力で動作する範囲です。
特にSCLKのD13は、Mbedボード上でLED1をシンク駆動しているので、Hレベルが低い可能性があります。
目的は達成できなくても、VDDを3.3Vとして動作確認してはいかがでしょうか?
ハードとソフトの問題切り分けが出来ると思います。

posted by Kenji Arai 14 May 2018

ありがとうございます。 今回はCSとLDACのタイミングの問題のようでしたが、今後は信号レベルについても留意して回路を考えるようにします。 参考になりました。 ありがとうございました。

posted by RYO HABARA 03 Jun 2018

1 Answer

6 years, 7 months ago.

外しているかもしれませんが、
CS が GND 固定になっているようですが、
デバイスによっては CS の立ち下がり、立ち上がりをみているものもあります。
試しに MCP4922_CS を GPIOに接続して

DigitalOut cs(1) ;

...
        cs = 0 ;
        device.write(0x3fff);
        cs = 1 ;

等としてみて変化があるか見てみるのは如何でしょうか?
moto

Accepted Answer

ありがとうございます。 なかなか時間が取れず、試すのが遅くなって申し訳ございません。 CSとLDACの立ち下がり、立ち上がりを意識して配線&コードを書いたところ、 正常にMCP4922から電圧が出力されるようになりました。 - dac_cs=0; dac_ldac=1; device.write(hw1_outdata_highbyte); device.write(hw1_outdata_lowbyte); dac_cs=1; dac_ldac=0; - Nucleo-L476RGのDACで出力していた音声データをMCP4922から出力する事が出来るようになりました。 Nucleo-L476RGのDACに比べてかなり音が悪くなって雑音も入るようになってしまいましたが、恐らく別の問題だと思いますので別途調べてみたいと思います。 ありがとうございました。ご迷惑をおかけしました。

posted by RYO HABARA 03 Jun 2018