对于我正在工作的一个项目、我必须使用两个 DAC。 我为 DAC8881 DAC 选择了这种方法。
没有、我遇到了一个问题、我不太理解为什么会发生这种情况、因此我希望你们中的一位能够帮助我进一步。
(请允许我注意、我不是一个硬核编程器)
在我看来、DAC8881是一款非常简单的 DAC、因此我没有想到会有任何问题。 我知道我遇到的问题是我做的/做的错、但出于某种原因、我无法弄清楚它是什么。
我遇到的问题是:
-当我向 DAC 发送一个值时,它不会输出我希望它执行的操作。 输出似乎没有任何逻辑模式。
该控制似乎在0x7FFF 处停止、并且不遵循从0x0000到0x7FFF 的线性模式。
VREF = 2.048V (LM4132AMF-2.0)
AVDD = 3.3V
DVDD = 3.3V
默认硬件设置:
默认引导:
VOUT = 0V (寄存器= 0000h) RSTSEL -> GND
PDN = GND ->器件从未断电
SDOSEL = IOVDD ->器件处于独立模式
增益= GND ->增益= 1x
!LDAC = GND -> DAC 值立即更新
!RST =+3V3 ->器件从不进行硬件复位、不包括 循环通电
RSTSEL = GND ->将引导输出电压寄存器设置为0x0000/0V
USB/BTC = IOVDD -> 直接二进制代码输出
所电路的等效于: 模拟输出闭环配置、如第26页的数据表所示。 (在我的电路板上、RFB 和 Vout 引脚连接在信号离开 PCB 的位置)
一些示例: (仅供参考:使用 Fluke 115测量的实际输出电压)
发送代码:(通过逻辑分析仪确认) 0x0C80应为0.1V、输出实际输出为:0.064V
发送代码:(通过逻辑分析仪确认) 0x1900应该为0.2V、输出实际输出为:0.128V
发送代码:(通过逻辑分析仪确认) 0x2580应该为0.3V、输出实际输出为:0.008V
发送代码:(通过逻辑分析仪确认) 0x3200应为0.4V、输出实际输出为:0.256V
发送代码:(通过逻辑分析仪确认) 0x3E80在输出实际输出为0.480V 时应为0.5V
发送代码:(通过逻辑分析仪确认) 0x4B00应该为0.6V、输出实际输出为:0.016V
发送代码:(通过逻辑分析仪确认) 0x5780在输出实际输出为0.056V 时应为0.7V
发送代码:(通过逻辑分析仪确认) 0x6400应该为0.8V、输出实际输出为:0.512V
发送代码:(通过逻辑分析仪确认) 0x7080在输出实际输出为0.768V 时应为0.9V
发送代码:(通过逻辑分析仪确认) 0x7D00应该为1.0V、输出实际输出为0.960V
发送代码:(通过逻辑分析仪确认) 0x7FFF 应为1.024V、输出实际输出为1.024V
发送代码:(通过逻辑分析仪确认) 0x8980应为1.1V、输出实际输出为:0.008V
发送代码:(通过逻辑分析仪确认) 0x9600应该为1.2V、输出实际输出为:0.032V
发送代码:(通过逻辑分析仪确认) 0xA280应该为1.3V、输出实际输出为:0.004V
发送代码:(通过逻辑分析仪确认) 0xAF00应该为1.4V、输出实际输出为:0.112V
发送代码:(通过逻辑分析仪确认) 0xBB80在输出实际输出为0.408V 时应为1.5V
发送代码:(通过逻辑分析仪确认) 0xC800应为1.6V、输出实际输出为:1.024V
发送代码:(通过逻辑分析仪确认) 0xD480应为1.7V、输出实际输出为:1.024V
发送代码:(通过逻辑分析仪确认) 0xE100应为1.8V、输出实际输出为:1.536V
发送代码:(通过逻辑分析仪确认) 0xED80在输出实际输出为1.608V 时应为1.9V
发送代码:(通过逻辑分析仪确认) 0xFA00应该为2.0V、输出实际输出为:1.919V
发送代码:(通过逻辑分析仪确认) 0xFFFF 应该为2.048V、输出实际输出为:2.047V
--------------------------------------------------------------------
代码的一小段:
void SendVoltageToDACValue (int st设定 点、GPIO_typedef* GPIOx、uint16_t GPIO_Pin)
{
uint16_t DACValueToSend = 0;
DACValueToSend =设定点;
SPI_DataToSend[0]=(uint8_t)((DACValueToSend & 0xFF00)>8);
SPI_DataToSend[1]=(uint8_t)(((DACValueToSend & 0x00FF));
digitalWrite (GPIOx、GPIO_Pin、LOW);
HAL_DELAY (1);
HAL_SPI_Transmit (SPI_handler、SPI_DataToSend、2、SPI_TIMEOUT);
digitalWrite (GPIOx、GPIO_Pin、高电平);
}
你们中是否有人知道这里有什么问题? 我觉得应该很简单、但我看不到。
提前感谢您投入宝贵的时间和精力