主题中讨论的其他器件:DAC81404、 MSP-EXP432E401Y
我在对 DAC81404评估板进行原型设计、因为它似乎非常适合我的需要精密高压双极 DAC 的应用。
我没有 MSP-EXP432E401Y Lauchpad 开发板、因此我使用的是基于 ARM Cortex M4F 微控制器(NXP 的 Kinetis K66)的 Arduino 兼容微控制器开发板、称为 teensy 3.6、可使用 Arduino 框架进行编程。 准备 SPI 无论如何都很简单。
我有这个简单的函数
SPISettings settingsA (4000000、MSBFIRST、SPI_MODE0); inline void CSOON (){digitalWriteFast (DAC_SS_PIN、low);} inline void CSOFF ()(){digitaleFast (DAC_SS_PIN、high);} void write_reg (uint8_t reg、uint8_t (uint8_t) = 0xint8_t 和 uint8_t (uint8_t)(uint8_uintt)(uint8_uint8_t)= 0xintt 和 uintt (uint8_t) t (uint8_uint8_uintt) t (uint SPI.beginTransaction(settingsA); CSON(); //delayMicroseconds (1); spi.transfer (reg); spi.transfer (msb); spi.transfer (lsb); delayMicroseconds (1); CSOFF (); spi.endTransaction (); }
设置功能很简单、我要设置一些寄存器
void setup(){ Serial.begin(115200); //芯片选择 引脚模式(DAC_SS_PIN、输出); digitalWrite (DAC_SS_PIN、高电平); //复位 引脚模式(DAC_RESET_PIN、 输出); digitalWrite (DAC_RESET_PIN、低电平); delay (10); digitalWrite (DAC_RESET_PIN、 高电平); 延迟(10); // Init SPI0 Serial.printf ("SPI0 init...\n"); SPI.begin(); delay (100); // Write write_reg (0x03、0x0A84); // SPIC7:dev-PWDWN=0 WRITE_REG (0x04、0x0);// GENCONFIG:Ref-PWDWN=0 WRITE_REG (0x09、0x0);// DACPWDWN:DACx-PWDWN=0、x={A、B、C、D} WRITE_REG (0x05、0x0); // BRDCONFIG:DACx-Brdcast-EN=0 WRITE_REG (0x0A、0x5555);// DACx-range=0b0101、即+/-5V }
然后、在主循环中、我只是生成一些三角波形、以查看是否一切正常。
uint16_t i=0; void loop(){ write_reg (0x10,(i)%65535 );// daca-a write_reg (0x11,(2*i)%65535 );// dac-B write_reg (0x12, (3*i)%65535);// DAC-C WRITE_reg (0x13,(4*i)%65535);// DAC-D I =(i+64)%65535; delayMicroseconds (5); }
问题是 DAC 通道 D 不更新。 无论我选择哪种 DACRANGE、它都始终保持在双极模式下的 DAC_AVSS 或单极模式下的 DAC_AVDD。
在这种情况下、DAC_AVDD =+12V、DAC_AVSS =-12V、DAC_DVDD = DAC_IOVDD = 3.3V、并且它使用其内部基准。 EVM 的所有跳线均处于其默认位置、J11除外、J11配置为从外部源提供 DAC_AVSS。
这是我得到的波形
DSO 通道1/2/3/4连接到 DAC_VOUT_A/B/C/D TP。 SENSE 引脚保持未连接状态。 您可以清楚地看到、通道4的平均值大约为-12v、并且不会改变。
我在这里错过了什么?