PCB 上的连接图像: PCV_DAC7750
我已最小化与 DAC7750的连接、即 AVDD (=11.5V)、SDO、DIN、SCK、LATCH、 如 PCB 中所示的 GND (链接至上图)。 我只是使用 ESP32内置 SPI 库进行电流斜升和斜降。 我还面临同样的问题、因为未在输出端检测到电流(使用电流表进行测量)。 AVDD 在10V 至18V 范围内变化、但仍然存在相同的问题。 DVDD 未连接、因为 DVDD_EN 处于开路状态、这意味着为内部数字外设启用内部电源。 我已经通过示波器验证了在 ESP32引脚上生成的 MOSI、SCL、SS 信号。 我使用了控制器的 HSPI 端口。 我一直保持较高的延迟、以便在示波器上轻松调试。
#include <SPI.h>
//#define ALARM
#define HSPI_MISO 12
#define HSPI_MOSI 13
#define HSPI_SCLK 14
#define HSPI_SS 15 //To be connected to LATCH pin of DAC7750
//see pg32 datasheet
#define Config 0x57
#define Ctrl 0x55
#define DAC_data 0x01
#define Reset 0x56
static const int spiClk = 1000; //freq in Hz
SPIClass SPI2(HSPI);
//Send values to DAC7750 in format 'address_of_register + data'
//24-bit frame= 8bit addr + 16bit data
//See pg10, Datasheet for timing diagram
void Send(uint8_t addr, uint16_t value)
{
SPI2.transfer(addr);
SPI2.transfer16(value); ///inbuilt function in SPI.h for 2bytes transfer
digitalWrite(HSPI_SS, LOW);
delay(1);
digitalWrite(HSPI_SS, HIGH);
delay(1);
}
void setup()
{ delay(1000); //Let the power supply be stable.
pinMode(HSPI_SS, OUTPUT);
digitalWrite(HSPI_SS, HIGH);
// pinMode(ALARM, INPUT);
SPI2.begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, HSPI_SS);
SPI2.beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0));
//INITIALISE REGISTERS (pg34 onwards, Datasheet)
//..Reset register
Send(Reset, 0x0001);
delay(1);
//..config register
Send(Config,0b0000000000001100); //disable HART, watchdog, error-check, calliberation
delay(1);
//..Data register -> initialise with all 0. (But is already at default reset)
//Send(DAC_data, 0x0000); //last 4 LSB digits invalid for DAC7750 (to act as 12-bit)
//delay(1);
//..Control register
Send(Ctrl, 0b0011000000001110); //o/p enable, o/p->0-20mA, current setting res enable
delay(1);
}
void loop()
{
//send a ramp from 0 - 2mA, then const upto 30sec, then ramp to 0mA
//ramp slope around 30sec
uint16_t i=0;
for(i=0; i<409; i++) //Current upto 2mA i.e. 409.5 value of 12bit-DAC in 30sec
{
Send(DAC_data, (i<<4));
delay(75);
}
delay(10000);
for(i=409; i>=0; i--) //Current upto 2mA i.e. 409.5 value of 12bit-DAC in 30sec (16bit register, last 4bits useless)
{
Send(DAC_data, (i<<4));
delay(75);
}
delay(10000);
}