TI论坛
直播中

岳臻俊

8年用户 1086经验值
私信 关注
[问答]

DAC60508 SPI按规格书写了数据,为什么无电压输出?


  • 我按照DateSheet上输出控制,第三个通道,为何无电压输出。
    原理图如下:

    SPI控制时序如下:

    使用万用表测量发现无电压输出,如下:#define NOOP_ADDRESS                ((uint8_t)0x00)#define DEVICE ID_ADDRESS        ((uint8_t)0x01)/* 3 SYNC register address */#define SYNC_ADDRESS                ((uint8_t)0x02) /* SYNC default (reset) value */ #define SYNC_DEFAULT                ((uint16_t)0xFF00) /* 4 GAIN register address */#define GAIN_ADDRESS                ((uint8_t)0x04)/* 5 TRIGGER register address */#define TRIGGER_ADDRESS                ((uint8_t)0x05)/* 6 BRDCAST register address */#define BRDCAST_ADDRESS                ((uint8_t)0x06)/* 7 STATUS register address */#define STATUS_ADDRESS                ((uint8_t)0x07) /* 8 DAC ͨ����ַ */ typedef enum{        DAC0_ADDRESS        = 0x08,        DAC1_ADDRESS        = 0x09,        DAC2_ADDRESS        = 0x0A,        DAC3_ADDRESS        = 0x0B,        DAC4_ADDRESS        = 0x0C,        DAC5_ADDRESS        = 0x0D,        DAC6_ADDRESS        = 0x0E,        DAC7_ADDRESS        = 0x0F} DAC_CH_ADDRESS;void ti_DAC60508_Setup(void);void DAC60508_WriteDate(DAC_CH_ADDRESS ch, uint16_t wdate);void DAC60508_SetVoltage(DAC_CH_ADDRESS ch, float voltage);#include "dev_dac60508.h"void TI_DAC60508_Setup(void){        SPI1Init(SPI_MODE3);}void DAC60508_WriteDate(DAC_CH_ADDRESS ch, uint16_t wdate){        uint8_t date[3];        uint8_t rdate[3];                date[0] = (uint8_t)ch;        date[1] = (uint8_t)(wdate>>8);        date[2] = (uint8_t)wdate;                SPI1ReadWriteBuffer(&rdate[0], &date[0], 3);}void DAC60508_SetVoltage(DAC_CH_ADDRESS ch, float voltage){        uint16_t code;        code = voltage/2.5*0x1000;                DAC60508_WriteDate(ch, code);}#include "dev_dac60508.h"int main(void){        HalInit();                // CPU内部接口初始化        TI_DAC60508_Setup();                while(1)        {                DAC60508_WriteDate(DAC3_ADDRESS, 500);                DelayMs(500);                DAC60508_WriteDate(DAC3_ADDRESS, 1000);                DelayMs(500);                DAC60508_WriteDate(DAC3_ADDRESS, 1500);                DelayMs(500);                DAC60508_WriteDate(DAC3_ADDRESS, 2000);                DelayMs(500);                DAC60508_WriteDate(DAC3_ADDRESS, 2500);                DelayMs(500);                DAC60508_WriteDate(DAC3_ADDRESS, 3000);                DelayMs(500);                DAC60508_WriteDate(DAC3_ADDRESS, 3500);                DelayMs(500);                DAC60508_WriteDate(DAC3_ADDRESS, 4000);                DelayMs(500);        }                return 1;}

    请问哪里配置有问题?

回帖(2)

夏日余晖

2024-11-19 10:05:44

DAC60508的SDI是在SCLK的下降沿采样,因此主控端输出的数据需在SCLK的下降沿保持稳定,看您时序图主控端是在SCLK的下降沿改变输出数据,因此可能是这里的问题,您先修改下这里看是否正常输出?


举报

李继明

2024-11-19 18:06:50
根据您的描述,您已经按照DAC60508的数据手册(DataSheet)上的输出控制要求,对第三个通道进行了SPI通信,但发现没有电压输出。这里有一些可能的原因和解决方案:

1. 检查硬件连接:请确保您的硬件连接正确,包括电源、地线、SPI接口等。如果连接不正确,可能会导致没有电压输出。

2. 检查SPI通信时序:请确保您的SPI通信时序正确。错误的时序可能会导致数据没有正确写入DAC60508,从而导致没有电压输出。您可以使用示波器检查SPI通信时序,确保时钟、数据和片选信号正确。

3. 检查DAC60508的配置:请确保您已经正确配置了DAC60508。根据您的代码,您已经定义了NOOP_ADDRESS、DEVICE_ID_ADDRESS和SYNC_ADDRESS。请确保您已经正确地设置了这些寄存器的值。例如,您需要将SYNC寄存器设置为SYNC_DEFAULT值,以确保DAC60508正常工作。

4. 检查DAC60508的电源:请确保DAC60508的电源正常工作。如果电源不稳定或电压不足,可能会导致DAC60508无法正常工作,从而没有电压输出。

5. 检查DAC60508的通道配置:请确保您已经正确配置了第三个通道。您需要将第三个通道的寄存器设置为所需的电压值。例如,您可以使用以下代码设置第三个通道的输出电压:

```c
uint8_t channel3_data = 0x80; // 假设您需要设置的电压值为0x80
spi_write(channel3_data, DAC60508_CHANNEL3_ADDRESS);
```

6. 检查DAC60508的输出缓冲器:请确保DAC60508的输出缓冲器已启用。如果输出缓冲器未启用,可能会导致没有电压输出。您可以使用以下代码启用输出缓冲器:

```c
uint8_t buffer_enable = 0x01; // 假设您需要启用输出缓冲器
spi_write(buffer_enable, DAC60508_BUFFER_ENABLE_ADDRESS);
```

综上所述,您需要检查硬件连接、SPI通信时序、DAC60508的配置、电源、通道配置和输出缓冲器。如果以上检查都没有问题,您可能需要检查DAC60508本身是否存在故障。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分