STM32 DAC8734 4路16位DA驱动程序

发布时间:2026/5/28 14:28:05

STM32 DAC8734 4路16位DA驱动程序 一、DAC8734 芯片概述DAC8734是 TI 推出的4通道、16位、电压输出 DAC采用 SPI 接口特别适合数字电源基准、偏置电压、校准系统。参数规格分辨率16位通道数4路A/B/C/D接口SPI最高 50MHz输出电压±10V、±5V、0-10V、0-5V参考电压内部 2.5V / 外部封装TSSOP-38二、硬件连接STM32 ↔ DAC8734推荐连接方式STM32 DAC8734 ──────────────────────── SPIx_SCK ───► SCLK SPIx_MOSI ───► SDIN SPIx_MISO ◄─── SDOUT GPIOx_PIN ───► SYNC (CS) GPIOx_PIN ───► LDAC GPIOx_PIN ◄─── RDY GPIOx_PIN ───► RST电压配置跳线PIN配置RNG0 / RNG1输出电压范围REFSEL参考电压选择三、DAC8734 寄存器定义寄存器地址/* DAC8734 寄存器地址 */#defineDAC_REG_A0x00#defineDAC_REG_B0x01#defineDAC_REG_C0x02#defineDAC_REG_D0x03#defineDAC_REG_ALL0x04#defineDAC_GAIN_REG0x08#defineDAC_OFFSET_REG0x09#defineDAC_CONFIG_REG0x0A#defineDAC_STATUS_REG0x0B命令帧格式24位23:20 - 命令位 19:16 - 地址位 15:0 - 数据位四、STM32 SPI 底层驱动1、SPI 初始化CubeMX 配置/* SPI 配置参数 *//* Mode: Full-Duplex Master Hardware NSS: Disable Data Size: 8 bits Prescaler: 8~32 (≥10MHz) CPOL: Low CPHA: 1 Edge First Bit: MSB */2、SPI 读写函数#includespi.hstaticuint8_tSPI_TransferByte(SPI_HandleTypeDef*hspi,uint8_tdata){uint8_trxdata;HAL_SPI_TransmitReceive(hspi,data,rxdata,1,100);returnrxdata;}staticvoidSPI_Write24Bits(SPI_HandleTypeDef*hspi,uint32_tdata){SPI_TransferByte(hspi,(data16)0xFF);SPI_TransferByte(hspi,(data8)0xFF);SPI_TransferByte(hspi,data0xFF);}五、DAC8734 驱动核心代码dac8734.h#ifndef__DAC8734_H#define__DAC8734_H#includestm32f4xx_hal.h/* 输出范围 */typedefenum{DAC_RANGE_0_5V0x00,DAC_RANGE_0_10V0x01,DAC_RANGE_5V0x02,DAC_RANGE_10V0x03,DAC_RANGE_5V_NEG0x04,DAC_RANGE_10V_NEG0x05}DAC_Range_t;/* 通道定义 */typedefenum{DAC_CH_A0,DAC_CH_B1,DAC_CH_C2,DAC_CH_D3,DAC_CH_ALL4}DAC_Channel_t;/* 设备句柄 */typedefstruct{SPI_HandleTypeDef*hspi;GPIO_TypeDef*cs_port;uint16_tcs_pin;GPIO_TypeDef*ldac_port;uint16_tldac_pin;GPIO_TypeDef*rst_port;uint16_trst_pin;}DAC8734_Handle_t;/* API */HAL_StatusTypeDefDAC8734_Init(DAC8734_Handle_t*hdac);HAL_StatusTypeDefDAC8734_SetVoltage(DAC8734_Handle_t*hdac,DAC_Channel_t ch,floatvoltage);HAL_StatusTypeDefDAC8734_SetRange(DAC8734_Handle_t*hdac,DAC_Channel_t ch,DAC_Range_t range);HAL_StatusTypeDefDAC8734_SoftwareUpdate(DAC8734_Handle_t*hdac);#endifdac8734.c#includedac8734.h#includemath.h#defineDAC8734_CS_LOW(h)HAL_GPIO_WritePin((h)-cs_port,(h)-cs_pin,GPIO_PIN_RESET)#defineDAC8734_CS_HIGH(h)HAL_GPIO_WritePin((h)-cs_port,(h)-cs_pin,GPIO_PIN_SET)#defineDAC8734_LDAC_LOW(h)HAL_GPIO_WritePin((h)-ldac_port,(h)-ldac_pin,GPIO_PIN_RESET)#defineDAC8734_LDAC_HIGH(h)HAL_GPIO_WritePin((h)-ldac_port,(h)-ldac_pin,GPIO_PIN_SET)/* 内部写函数 */staticvoidDAC8734_WriteReg(DAC8734_Handle_t*hdac,uint8_taddr,uint16_tdata){uint32_tframe((uint32_t)addr16)|data;DAC8734_CS_LOW(hdac);SPI_Write24Bits(hdac-hspi,frame);DAC8734_CS_HIGH(hdac);}/* 初始化 */HAL_StatusTypeDefDAC8734_Init(DAC8734_Handle_t*hdac){/* 复位 */if(hdac-rst_port){HAL_GPIO_WritePin(hdac-rst_port,hdac-rst_pin,GPIO_PIN_RESET);HAL_Delay(10);HAL_GPIO_WritePin(hdac-rst_port,hdac-rst_pin,GPIO_PIN_SET);}/* 配置默认输出范围 */for(inti0;i4;i){DAC8734_SetRange(hdac,i,DAC_RANGE_0_10V);}returnHAL_OK;}/* 设置电压 */HAL_StatusTypeDefDAC8734_SetVoltage(DAC8734_Handle_t*hdac,DAC_Channel_t ch,floatvoltage){uint16_tcode;/* ±10V 范围示例 */if(voltage10.0f)voltage10.0f;if(voltage0.0f)voltage0.0f;code(uint16_t)((voltage/10.0f)*65535.0f);DAC8734_WriteReg(hdac,ch,code);/* 软件触发更新 */DAC8734_SoftwareUpdate(hdac);returnHAL_OK;}/* 设置输出范围 */HAL_StatusTypeDefDAC8734_SetRange(DAC8734_Handle_t*hdac,DAC_Channel_t ch,DAC_Range_t range){uint16_tgain_code0;switch(range){caseDAC_RANGE_0_5V:gain_code0x0000;break;caseDAC_RANGE_0_10V:gain_code0x0001;break;caseDAC_RANGE_5V:gain_code0x0002;break;caseDAC_RANGE_10V:gain_code0x0003;break;default:returnHAL_ERROR;}DAC8734_WriteReg(hdac,DAC_GAIN_REGch,gain_code);returnHAL_OK;}/* 软件 LDAC 更新 */HAL_StatusTypeDefDAC8734_SoftwareUpdate(DAC8734_Handle_t*hdac){DAC8734_LDAC_LOW(hdac);__NOP();__NOP();__NOP();DAC8734_LDAC_HIGH(hdac);returnHAL_OK;}六、使用示例数字电源场景DAC8734_Handle_t dac8734{.hspihspi1,.cs_portGPIOA,.cs_pinGPIO_PIN_4,.ldac_portGPIOA,.ldac_pinGPIO_PIN_5,};intmain(void){HAL_Init();SystemClock_Config();MX_SPI1_Init();DAC8734_Init(dac8734);/* 设置 4 路基准电压 */DAC8734_SetVoltage(dac8734,DAC_CH_A,3.3f);// 参考电压DAC8734_SetVoltage(dac8734,DAC_CH_B,5.0f);// 偏置DAC8734_SetVoltage(dac8734,DAC_CH_C,1.8f);// 软启动斜率DAC8734_SetVoltage(dac8734,DAC_CH_D,0.5f);// 保护阈值while(1){/* 动态调整 */DAC8734_SetVoltage(dac8734,DAC_CH_A,3.0f);HAL_Delay(1000);}}参考代码 STM32 DAC8734 4路16位DA驱动程序www.youwenfan.com/contentcsv/72602.html七、校准功能/* 两点校准 */voidDAC8734_Calibrate(DAC8734_Handle_t*hdac,DAC_Channel_t ch,floatreal_v1,floatset_v1,floatreal_v2,floatset_v2){floatgain(real_v2-real_v1)/(set_v2-set_v1);floatoffsetreal_v1-gain*set_v1;/* 写入 OFFSET / GAIN 寄存器 */}八、常见问题排查现象原因解决无输出CS 时序错误检查 SYNC 低电平宽度输出不准参考电压漂移使用外部 2.5V 基准噪声大SPI 串扰缩短走线加 RC多路耦合LDAC 未同步统一 LDAC 触发

相关新闻