DAC8551+ STM32+HAL

DAC8551+ STM32+HAL 一、核心特性与应用场景1. 核心特性精度与线性16 位分辨率低功耗与宽压供电供电电压范围 2.7V~5.5V正常工作电流仅 140μA2.7V灵活接口与兼容性3 线串行接口SYNC、SCLK、DIN时钟速率最高 30MHz兼容 SPI、QSPI、Microwire 及 DSP 接口2. 典型应用场景工业控制过程控制、闭环伺服系统、可编程衰减器数据采集与测量数据采集系统DAQ、便携式仪器仪表外设与消费电子PC 外设、低功耗嵌入式系统。二、连接硬件2.1引脚定义与作用DAC8551 采用 8 引脚 VSSOP 封装3.00mm×3.00mm引脚功能如下表所示引脚编号引脚名称类型核心功能1VDD电源供电输入2.7V~5.5V2VREF输入参考电压输入0~VDD决定输出电压范围3VFB输入输出放大器反馈端电压输出模式下需外接至 VOUT4VOUT输出模拟电压输出0~VREF轨到轨特性5SYNC输入帧同步信号低有效启动 / 中断数据传输6SCLK输入串行时钟数据在时钟下降沿写入移位寄存器7DIN输入串行数据输入24 位数据帧8GND地全局接地参考点2.2引脚连接1. VDD供电输入供电范围在 2.7V~5.5V必须在 VDD 引脚就近并联滤波电容0.1μF 陶瓷电容靠近引脚滤除高频噪声1~10μF 电解电容滤除低频纹波电容一端直接接 GND减少电源回路阻抗。若使用开关电源供电需额外增加 Pi 滤波器电感 电容抑制高频毛刺和尖峰电压避免电源噪声耦合至输出。供电电流需满足器件需求正常工作时最大 250μA5.5V掉电模式下最大 2μA电源需预留足够裕量。2. GND接地采用单点接地或模拟地平面设计所有模拟回路VREF、VOUT、VFB和数字回路SCLK、DIN、SYNC的地线最终汇接至电源入口处避免数字噪声干扰模拟信号。GND 引脚布线需短而粗减少接地电阻和压降避免与大功率器件的地线平行布线防止地环路干扰。二、模拟信号引脚VREF、VOUT、VFB1. VREF参考电压输入电压范围需满足 0≤VREF≤VDD且预留 100mV 裕量如 VDD5V 时VREF 最大不超过 4.9V避免输出失真。参考源选择高精度场景优先使用低漂移、低噪声精密参考源如 REF02、ADR4550简化设计可直接接 VDD但需确保 VDD 稳定性。布线要求VREF 线路需短而粗远离 SCLK、DIN 等数字信号线避免电磁耦合引脚就近并联 0.1μF 陶瓷电容滤波减少参考电压波动。电流匹配VREF 引脚参考电流为 30~75μA随电压变化外部参考源需能稳定提供该电流避免因电流不足导致参考电压漂移。VREF 为外部参考电压最大可等于 VDD输出电压范围为 0~VREF。若 VREF5V输出范围为 0~5V若 VREF2.5V输出范围为 0~2.5V电压范围VREF 需满足 0 ≤ VREF ≤ VDD供电电压且需预留 100mV 裕量避免接近 VDD 导致输出失真。2. VOUT模拟输出输出电压范围为 0~VREF单极性双极性输出需通过外部运放如 OPA703扩展此时 VOUT 需连接至运放输入避免直接负载过重。负载能力最大可驱动 2kΩ 电阻 1000pF 电容负载超出该范围会导致输出响应变慢或失真若需驱动更大负载需外接缓冲放大器。输出端避免直接接强电或尖锐负载必要时串联限流电阻如 100Ω防止短路电流最大 50mA/5V损坏器件。3. VFB反馈输入电压输出模式下必须将 VFB 与 VOUT 直接短接建议在负载端就近连接确保输出放大器的闭环稳定性和精度。若需添加外部信号调理电路如滤波、增益调整需在 VFB 与 VOUT 之间串联无源器件电阻、电容避免破坏闭环特性。VFB 引脚灵敏度高避免悬空或接高阻抗节点否则会导致输出不稳定或精度下降。三、数字信号引脚DIN、SCLK、SYNC1. DIN串行数据输入数据格式为 24 位帧6 位保留位 2 位控制位 16 位数据位高位先传需与控制器MCU/DSP的输出格式匹配如 8051 需软件镜像处理 LSB 先传问题。输入电压需符合逻辑电平要求3V≤VDD≤5.5V 时VIL≤0.3VDD、VIH≥0.7VDD2.7V≤VDD3V 时VIL≤0.1VDD、VIH≥0.9VDD避免电平不匹配导致数据错误。布线需缩短长度远离模拟信号线路必要时添加 50Ω 终端匹配电阻减少传输反射引脚集成施密特触发器可容忍一定噪声但需避免强电磁干扰。2. SCLK串行时钟输入时钟速率限制3.6V~5.5V 供电时最大 30MHz2.7V~3.6V 时最大 20MHz需根据供电电压调整控制器时钟输出避免超出上限。时钟时序需满足要求高电平最小 13ns低电平最小 13ns5V 供电确保数据在时钟下降沿稳定写入移位寄存器。时钟线需与 DIN 线同步布线减少 skew 偏差避免数据建立 / 保持时间不足建立时间≥5ns保持时间≥4.5ns。3. SYNC帧同步输入低电平有效启动数据传输时需先拉低 SYNC传输 24 位数据后可拉高最小 33ns或保持低电平下一次传输无需重新拉低但需避免在 24 位数据传输中途拉高会中断传输。SYNC 引脚需由控制器 GPIO 直接驱动避免通过逻辑门间接控制防止信号延迟导致同步错误。空闲状态建议将 SYNC 拉高避免无效数据写入布线需短而粗减少干扰导致的误触发。三、工作原理一、 表格参数解析每个时间参数的含义表格里的t1~t9是时序的关键时间指标直接对应代码里的delay_us(1)等延时操作确保你的驱动代码满足硬件要求参数名含义结合你代码的对应操作典型值代码中的对应处理t1SCLK cycle timeSCLK 时钟周期即一个高低电平的总时间决定了最大时钟频率。例如 3.6~5.5V 时最小周期 33ns → 最大时钟频率≈30MHz。33~50 ns代码里用delay_us(1)1000ns远大于最小要求保证时钟周期足够长。t2SCLK HIGH timeSCLK 高电平持续的最小时间。13 ns代码里DAC1_SCLK_1后delay_us(1)满足要求。t3SCLK LOW timeSCLK 低电平持续的最小时间。13~22.5 ns代码里DAC1_SCLK_0后delay_us(1)满足要求。t4SYNC to SCLK rising edge setup timeSYNC 拉低后到第一个 SCLK 上升沿的最小时间。0 ns代码里DAC1_SYNC_0后直接开始 SCLK 操作0ns 要求无额外延时即可。t5Data setup timeDIN 数据在 SCLK 上升沿到来前需要保持稳定的最小时间数据建立时间。5 ns代码里先设置DAC1_DIN_1/0再拉 SCLK 上升沿天然满足。t6Data hold timeSCLK 上升沿后DIN 数据需要保持稳定的最小时间数据保持时间。4.5 ns代码里 SCLK 下降沿后才更新 DIN天然满足。t724th SCLK falling edge to SYNC rising edge第 24 个 SCLK 下降沿后到 SYNC 拉高的最小时间。0 ns代码里最后一个 SCLK 下降沿后delay_us(1)再DAC1_SYNC_1满足要求。t8Minimum SYNC HIGH timeSYNC 高电平持续的最小时间两次传输之间的间隔。33~50 ns代码里每次传输前DAC1_SYNC_1后delay_us(1)满足要求。t924th SCLK falling edge to SYNC falling edge第 24 个 SCLK 下降沿后到下一次 SYNC 拉低的最小时间。100 ns连续多次写入时需要保证两次 SYNC 拉低的间隔≥100ns。二、 波形图对应关系结合你的代码1空闲状态SYNC 拉高SCLK 保持低电平DIN 状态随意芯片不读取2启动传输SYNC 拉低芯片准备接收数据3逐位写数据SCLK 开始交替高低变化每一个 SCLK 下降沿DIN 上的一位数据就被写入芯片的移位寄存器总共要传 24 位数据所以 SCLK 会产生 24 个下降沿数据顺序是 “高位先传”先传 DB23最后传 DB024个数据包含什么24 位输入移位寄存器数据帧格式为 “6 位保留位 2 位掉电控制位PD1/PD0 16 位数据位”具体如下保留位DB23~DB18无功能可设为 0掉电控制位PD1DB17PD0DB16控制工作模式见下表数据位DB15~DB016 位转换数据高位先传。工作模式配置PD1/PD0PD1DB17PD0DB16工作模式核心特性00正常模式全功能工作电流消耗最大01掉电模式 1输出经 1kΩ 电阻接地10掉电模式 2输出经 100kΩ 电阻接地11掉电模式 3输出高阻态High-Z4传输完成第 24 个 SCLK 下降沿到来后24 位数据全部写入芯片自动解析数据更新模式或转换电压5准备下一次传输SYNC 拉高并保持至少 33ns之后才能再次拉低启动新传输若 SYNC 提前拉高没传完 24 位则本次传输中断数据无效。四、配置流程1初始化函数2写函数//函数写函数把数据给到dac //输入 //输出 //注意 void DAC1_WriteData(uint32_t data) { uint8_t i 0; SYSTEM_LOG(Set DAC to %d\r\n,data); //调试用的 if((data DAC_MAX_VALUE) || ( data DAC_MIN_VALUE)) return; DAC1_SYNC_1;//初始状态 delay_us(1); //sync变化间隔时间 DAC1_SCLK_0; //sync和sclk之间不用隔时间 DAC1_SYNC_0;//拉低开始工作 for( i 0 ; i 24 ; i ) //传24位 { if(0x800000data) DAC1_DIN_1; else DAC1_DIN_0; DAC1_SCLK_1;//数据传过去 delay_us(1); DAC1_SCLK_0;//拉低等待下一个数据 delay_us(1);//sclk持续时间 data data 1; } delay_us(1);//sclk拉低到sync拉高的时间理论上不用只是为了让最后一个数据传入寄存器 DAC1_SYNC_1;SYNC 拉低启动传输SCLK 最高 30MHz5V 供电/20MHz2.7V 供电SYNC 需拉高至少 33ns5V才能启动下一次传输若提前拉高则中断传输SYNC 中断功能。