1. 项目缘起与核心需求拆解
1.1 为什么选DAC8568而不是DAC8563或DAC8552
做多通道模拟量输出的项目,选型阶段绕不开几个硬指标:通道数、分辨率、接口类型、建立时间、封装尺寸。DAC8568是TI的八通道16位DAC,SPI接口,内置2.5V基准,上电默认输出0V,这些特性决定了它在工业控制、波形发生、多路偏置电压调节等场景里非常能打。
我最早接触这个芯片是在一个多路激光偏置电压控制的项目里,需要同时输出8路独立可调的直流电压,精度要求到毫伏级,而且要求上电瞬间不能有毛刺。当时对比过几款方案:DAC8563是双通道16位,通道数不够;DAC8552也是双通道;AD5668是八通道但价格偏高且基准需要外部提供。DAC8568刚好卡在性价比和功能密度的甜点位上。
这里要特别说明一点:DAC8568和DAC8568A的区别。前者是标准版,后者在积分非线性(INL)和微分非线性(DNL)指标上略有差异。一般应用选标准版就够了,除非你做精密仪器需要更严格的线性度保证。
1.2 核心需求解析:8通道独立输出意味着什么
8通道独立DAC的核心价值在于“同时且独立”。很多项目里需要控制多个执行器,比如:
- 多路可调电源的基准电压设定
- 相控阵天线的波束赋形偏置
- 多通道传感器模拟前端校准
- 音频多声道系统的直流偏置
如果用8个单通道DAC或者4个双通道DAC来拼,PCB面积、布线复杂度、SPI片选数量都会成倍增加。DAC8568把8个通道塞进一个芯片,共享SPI总线和基准源,硬件设计一下子简化了很多。
但“独立”也带来一个坑:8个通道共用一组SPI数据线,你必须清楚每个通道的寄存器映射和更新时序,否则会出现“改了通道3结果通道5也变了”的诡异现象。后面我会详细拆解寄存器操作。
1.3 适合谁来参考这篇内容
这篇内容适合以下人群:
- 已经会用STM32 HAL库操作SPI,但没驱动过多通道DAC的嵌入式工程师
- 正在做多路模拟输出项目,需要快速验证DAC8568方案的开发者
- 想了解SPI时序、LDAC同步机制、基准电压配置等细节的学生或爱好者
- 手头有STM32F103或类似型号,想直接抄代码跑通的人
我默认你已经有基本的STM32开发环境(Keil MDK或STM32CubeIDE),会用CubeMX配置外设,能看懂简单的C语言。如果你连SPI是什么都还不清楚,建议先补一下SPI通信的基础知识,否则后面的时序分析会比较吃力。
2. 硬件设计与SPI通信底层逻辑
2.1 DAC8568引脚功能与最小系统连接
DAC8568常见封装是TSSOP-16,引脚定义如下表:
| 引脚编号 | 名称 | 功能说明 |
|---|---|---|
| 1 | VOUTA | 通道A模拟输出 |
| 2 | VOUTB | 通道B模拟输出 |
| 3 | VOUTC | 通道C模拟输出 |
| 4 | VOUTD | 通道D模拟输出 |
| 5 | VOUTE | 通道E模拟输出 |
| 6 | VOUTF | 通道F模拟输出 |
| 7 | VOUTG | 通道G模拟输出 |
| 8 | VOUTH | 通道H模拟输出 |
| 9 | GND | 地 |
| 10 | VDD | 电源正,2.7V~5.5V |
| 11 | SYNC | 片选/帧同步,低有效 |
| 12 | SCLK | SPI时钟 |
| 13 | DIN | SPI数据输入 |
| 14 | LDAC | 加载DAC寄存器,低有效 |
| 15 | CLR | 清零,低有效,把输出拉到0V |
| 16 | VREF | 基准电压输入/输出 |
最小系统连接思路:
- VDD接3.3V,GND接地,VREF可以不接外部基准,因为DAC8568内部有2.5V基准,但需要配置寄存器使能。
- SYNC接STM32的一个GPIO,用软件控制片选。虽然SPI硬件NSS也可以,但多从机场景下软件片选更灵活。
- SCLK、DIN接STM32的SPI时钟和数据线。
- LDAC可以接GPIO,也可以直接接地。接地的意思是每次写DAC寄存器立即更新输出;接GPIO则可以批量写入后再统一更新,实现多通道同步。
- CLR接GPIO或上拉,正常工作时保持高电平。
注意:VREF引脚如果使用内部基准,需要写配置寄存器打开内部基准,否则输出范围会不对。很多人第一次调试发现输出电压只有预期的一半,就是忘了开内部基准。
2.2 SPI模式选择与时序参数计算
DAC8568的SPI接口支持标准SPI模式,具体是CPOL=0,CPHA=0还是CPOL=1,CPHA=1?查数据手册可知,DAC8568在SCLK下降沿采样DIN,所以:
- CPOL(时钟极性):空闲时SCLK为低电平,即CPOL=0
- CPHA(时钟相位):第一个边沿采样,即CPHA=0
所以STM32的SPI配置为Mode 0(CPOL=0,CPHA=0)。
时序参数方面,DAC8568的SCLK最高频率是50MHz(VDD=5V时),3.3V供电时略低,但一般跑10MHz以内完全没问题。我实测用STM32F103的SPI1跑9MHz很稳,再高就要看布线质量了。
数据格式是24位:8位命令+16位数据。STM32的SPI数据帧可以配置为8位或16位,这里建议用8位帧,分3次发送,或者用16位帧分2次发送。我习惯用8位帧,逻辑更清晰。
实操心得:STM32F103的SPI在8位帧模式下,每次发送后要等TXE标志置位再发下一个字节,否则会丢数据。用HAL库的HAL_SPI_Transmit函数会自动处理,但如果你用寄存器操作就要注意。
2.3 硬件片选与软件片选的取舍
SPI的片选有两种做法:硬件NSS和软件GPIO。STM32的SPI硬件NSS在多从机场景下比较鸡肋,因为NSS引脚只有一个,而且硬件NSS的时序控制不够灵活。
我推荐用软件片选,理由如下:
- 可以任意指定GPIO,布线更自由
- 片选拉低和拉高的时机完全可控,方便插入延时
- 多从机时只需增加GPIO数量,不占用SPI外设资源
具体操作:在发送24位数据前,把SYNC引脚拉低;发送完毕后,拉高SYNC。注意SYNC拉低到第一个SCLK下降沿之间要有至少10ns的建立时间,STM32的GPIO翻转速度足够快,一般不需要额外延时,但如果你跑非常高的SPI时钟,建议加一个__NOP()。
3. STM32 HAL库驱动代码逐层拆解
3.1 CubeMX配置SPI外设的关键参数
打开CubeMX,选好STM32F103芯片,配置SPI1:
- Mode:Full-Duplex Master
- Hardware NSS Signal:Disable
- Data Size:8 Bits
- First Bit:MSB First
- Prescaler:根据系统时钟计算,比如72MHz主频,分频8得到9MHz
- Clock Polarity:Low
- Clock Phase:1 Edge
- CRC Calculation:Disabled
GPIO配置:
- PA5 -> SPI1_SCK
- PA7 -> SPI1_MOSI
- PA4 -> GPIO_Output(SYNC)
- PA3 -> GPIO_Output(LDAC)
- PA2 -> GPIO_Output(CLR)
注意:SPI1的MISO引脚(PA6)在只写场景下可以不接,但CubeMX里如果配置了Full-Duplex,引脚会占用。可以改成Half-Duplex Master或者Transmit Only Master,省一个引脚。
3.2 DAC8568命令寄存器映射详解
DAC8568的24位数据格式:
- 前8位:命令字节,包含通道选择和操作类型
- 后16位:数据值
命令字节的位定义:
| 位 | 名称 | 说明 |
|---|---|---|
| 23-20 | C3-C0 | 命令类型 |
| 19-16 | A3-A0 | 通道地址 |
| 15-0 | D15-D0 | 数据 |
常用命令类型:
- 0000:写输入寄存器
- 0001:更新DAC寄存器
- 0010:写输入寄存器并更新所有DAC
- 0011:写输入寄存器并更新指定DAC
- 0100:掉电模式
- 0101:写清零码
- 0110:写LDAC码
- 0111:软件复位
- 1000:内部基准使能
通道地址:
- 0000:通道A
- 0001:通道B
- ...
- 0111:通道H
- 1111:所有通道
举个例子,要让通道A输出满量程的一半(即0x8000),操作是:
- 发送命令0x00,地址0x00,数据0x8000 -> 写输入寄存器A
- 发送命令0x01,地址0x00,数据0x0000 -> 更新DAC A
或者用一条命令搞定:命令0x03,地址0x00,数据0x8000 -> 写输入寄存器并更新DAC A。
3.3 完整驱动代码与逐行注释
下面是我在实际项目中用的驱动代码,基于HAL库,可以直接移植。
#include "dac8568.h" // 片选控制宏 #define DAC_SYNC_LOW() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET) #define DAC_SYNC_HIGH() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET) #define DAC_LDAC_LOW() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET) #define DAC_LDAC_HIGH() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET) #define DAC_CLR_LOW() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET) #define DAC_CLR_HIGH() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET) extern SPI_HandleTypeDef hspi1; // 发送24位数据 static void DAC8568_Write24(uint8_t cmd, uint8_t addr, uint16_t data) { uint8_t buf[3]; buf[0] = (cmd << 4) | (addr & 0x0F); buf[1] = (data >> 8) & 0xFF; buf[2] = data & 0xFF; DAC_SYNC_LOW(); HAL_SPI_Transmit(&hspi1, buf, 3, 100); DAC_SYNC_HIGH(); } // 初始化:使能内部基准,复位 void DAC8568_Init(void) { DAC_CLR_HIGH(); DAC_LDAC_HIGH(); DAC_SYNC_HIGH(); HAL_Delay(1); // 软件复位 DAC8568_Write24(0x07, 0x00, 0x0000); HAL_Delay(1); // 使能内部基准 DAC8568_Write24(0x08, 0x00, 0x0001); HAL_Delay(10); // 等待基准稳定 } // 设置指定通道输出,立即更新 void DAC8568_SetChannel(uint8_t ch, uint16_t value) { DAC8568_Write24(0x03, ch, value); } // 批量设置所有通道,最后统一LDAC更新 void DAC8568_SetAllChannels(uint16_t *values) { for (uint8_t i = 0; i < 8; i++) { DAC8568_Write24(0x00, i, values[i]); } DAC_LDAC_LOW(); __NOP(); DAC_LDAC_HIGH(); }代码逻辑说明:
DAC8568_Write24把命令、地址、数据拼成3个字节,通过SPI发送。注意命令字节是(cmd << 4) | addr,因为命令占高4位,地址占低4位。DAC8568_Init先复位,再使能内部基准。内部基准使能后需要等待至少10ms让基准电压稳定,否则输出会漂。DAC8568_SetChannel用命令0x03,写输入寄存器并立即更新对应DAC。DAC8568_SetAllChannels用命令0x00先写所有输入寄存器,然后拉低LDAC统一更新,实现8通道同步输出。
实操心得:如果你不需要同步更新,直接用
DAC8568_SetChannel逐个设置就行。但如果做波形发生,必须用批量模式,否则通道之间的更新时刻会差几十微秒,波形会畸变。
4. 输出电压计算与精度校准
4.1 输出电压公式推导
DAC8568的输出电压公式:
Vout = Vref × (D / 65536) × Gain
其中:
- Vref是基准电压,内部基准为2.5V
- D是16位数字量,范围0~65535
- Gain是增益,默认1,可以配置为2
如果使用内部2.5V基准,增益为1,那么:
- D=0时,Vout=0V
- D=65535时,Vout=2.5V × (65535/65536) ≈ 2.49996V
实际项目中,我通常需要0~5V输出范围,这时候有两种做法:
- 使用内部2.5V基准,配置增益为2,输出范围0~5V
- 使用外部5V基准,增益为1,输出范围0~5V
方案1更省事,但增益为2时噪声也会放大一倍。方案2需要外部基准芯片,成本增加但精度更好。
我一般选方案1,因为DAC8568的内部基准温漂是10ppm/°C,增益为2后等效5ppm/°C,对大多数工业应用够用了。
4.2 数字量与电压的换算代码
// 将电压值转换为DAC数字量 // vref: 基准电压,gain: 增益,voltage: 目标电压 uint16_t VoltageToDAC(float vref, uint8_t gain, float voltage) { float max_v = vref * gain; if (voltage < 0) voltage = 0; if (voltage > max_v) voltage = max_v; return (uint16_t)(voltage / max_v * 65535.0f + 0.5f); } // 示例:输出2.5V,内部基准2.5V,增益2 uint16_t dac_val = VoltageToDAC(2.5f, 2, 2.5f); // 结果应该是32768左右 DAC8568_SetChannel(0, dac_val);注意:浮点运算在STM32F103上比较慢,如果频繁调用,建议用定点数或者预先算好查找表。我一般只在初始化时算一次,运行时直接查表。
4.3 实测精度与校准方法
我用6位半万用表实测过几块板子,DAC8568在内部基准、增益2、输出2.5V时的误差大约在±3mV以内。这个误差主要来自:
- 内部基准的初始精度(±0.1%)
- 增益误差
- 输出缓冲器的失调
如果需要更高精度,可以做两点校准:
- 输出数字量0,测量实际电压V0
- 输出数字量65535,测量实际电压V1
- 计算实际增益和偏移:Gain = (V1-V0)/65535,Offset = V0
- 反推目标电压对应的数字量:D = (Vtarget - Offset) / Gain
校准后精度可以做到±1mV以内。我在一个传感器校准项目里用这个方法,8个通道的一致性非常好,通道间偏差小于0.5mV。
5. 常见问题排查与避坑指南
5.1 上电输出异常问题排查
现象:上电后DAC输出不是0V,而是接近VDD或者随机值。
原因分析:
- CLR引脚没有拉高,芯片处于清零状态但输出缓冲器未使能
- 内部基准未使能,输出范围不对
- 上电时序问题,VDD和VREF上电顺序不对
解决方法:
- 确认CLR引脚上电后为高电平
- 在初始化代码里先发软件复位命令,再使能内部基准
- 如果VREF使用外部基准,确保外部基准先于VDD上电,或者在VREF引脚加RC延时
我踩过的坑:有一次CLR引脚忘了配置,默认浮空,结果芯片一直处于清零状态,输出始终是0V。后来把CLR配置为推挽输出高电平就好了。
5.2 SPI通信失败排查流程
现象:写数据后DAC无输出,或者输出值不对。
排查步骤:
| 步骤 | 检查项 | 工具 |
|---|---|---|
| 1 | SCLK是否有波形 | 示波器 |
| 2 | DIN数据是否在SCLK下降沿稳定 | 示波器 |
| 3 | SYNC是否在数据传输期间保持低电平 | 示波器 |
| 4 | SPI模式是否为Mode 0 | 代码检查 |
| 5 | 数据字节顺序是否正确 | 逻辑分析仪 |
| 6 | 命令字节和地址是否正确 | 代码检查 |
我遇到最多的问题是SPI模式配错。有一次用了Mode 3,结果数据完全错乱。DAC8568只支持Mode 0,这个没有商量余地。
另一个常见问题是数据字节顺序。STM32的SPI是MSB First,DAC8568也是MSB First,这个一般不会错。但如果你用软件模拟SPI,就要注意先发高位还是低位。
5.3 多通道同步更新的时序陷阱
现象:用批量模式更新8个通道时,通道间输出有先后差异。
原因:LDAC拉低后,DAC寄存器更新需要一定时间。如果LDAC脉冲太窄,部分通道可能没来得及更新。
解决方法:
- LDAC低电平持续时间至少20ns,我一般用__NOP()延时几个周期
- 如果对同步要求极高,可以用硬件触发LDAC,比如用定时器输出PWM控制LDAC
- 避免在LDAC拉低期间操作SPI,否则会干扰更新
实操心得:我在做8通道波形发生的时候,发现通道间相位差有几十微秒。后来把LDAC脉冲宽度从1个NOP增加到10个NOP,相位差就降到1微秒以内了。这个细节数据手册里没写,是实测出来的。
5.4 电源噪声与输出纹波抑制
DAC8568的输出噪声主要来自电源和基准。实测发现,如果VDD直接用STM32板上的3.3V LDO,输出纹波大约2mVpp。后来在VDD引脚加了一个10uF钽电容并联100nF陶瓷电容,纹波降到0.5mVpp。
另外,VREF引脚如果使用内部基准,建议在VREF引脚对地加1uF电容,可以进一步降低噪声。如果使用外部基准,基准芯片的噪声直接决定输出噪声,选低噪声基准很重要。
6. 进阶应用与项目扩展思路
6.1 用DMA实现8通道波形连续输出
如果要做波形发生,比如正弦波、三角波,用SPI阻塞发送会占用大量CPU时间。这时候可以用DMA。
思路:
- 在内存里建一个波形查找表,比如256点的正弦波,每个点对应8个通道的数据
- 配置SPI DMA,把数据流源源不断送到DAC8568
- 用定时器触发DMA传输,控制波形频率
具体实现时要注意:DAC8568每次需要3个字节,8个通道就是24个字节。DMA传输完24个字节后,需要拉低LDAC更新输出。这个LDAC控制可以用DMA传输完成中断来实现。
我实测用STM32F103的SPI1 DMA,配合定时器触发,可以做到100kHz的更新率,8个通道同时输出正弦波,CPU占用率不到5%。
6.2 多片DAC8568级联扩展通道数
如果需要超过8个通道,可以用多片DAC8568级联。SPI总线可以并联,每片用独立的SYNC引脚。STM32的GPIO足够多的话,可以控制很多片。
级联时要注意:
- 每片的SYNC独立控制,避免同时选中
- LDAC可以共用,实现所有芯片同步更新
- 电源和基准可以共用,但要注意负载能力
我在一个32通道的项目里用了4片DAC8568,共用SPI和LDAC,每片独立SYNC。代码上只需要把通道号映射到对应的片选和通道地址即可。
6.3 与STM32内部DAC的对比与选型建议
STM32F103内部有2个12位DAC通道,输出范围0~3.3V。对比DAC8568:
| 指标 | STM32内部DAC | DAC8568 |
|---|---|---|
| 分辨率 | 12位 | 16位 |
| 通道数 | 2 | 8 |
| 输出范围 | 0~VREF+ | 0~2.5V/5V |
| 建立时间 | 1us | 10us |
| 接口 | 直接寄存器 | SPI |
| 成本 | 0 | 约30元 |
选型建议:
- 如果只需要1~2个通道,精度要求不高,直接用内部DAC
- 如果需要4个以上通道,或者精度要求12位以上,选DAC8568
- 如果需要高速波形输出,内部DAC的建立时间更短,但通道数少
我个人经验是:内部DAC适合做简单的电压设定,比如比较器阈值、LED亮度控制。DAC8568适合做多通道精密控制,比如传感器阵列偏置、多轴运动控制。
6.4 基于DAC8568的实用项目案例
分享一个我实际做过的项目:8通道可编程电压源。用STM32F103 + DAC8568 + 运放缓冲,输出0~10V可调,每个通道独立设定,通过串口接收指令。
硬件上,DAC8568输出0~2.5V,经过同相放大器放大4倍得到0~10V。运放选的是OPA2277,低失调低漂移。电源用±15V给运放供电,DAC8568用3.3V。
软件上,串口接收指令格式如“CH1=5.000”,解析后调用VoltageToDAC换算,再写入DAC。同时用OLED显示8个通道的当前电压值。
这个项目里踩过的坑:
- 运放放大倍数计算错误,导致输出范围不对
- DAC8568的LDAC引脚忘了接,导致输出不更新
- 串口接收中断和SPI发送冲突,数据错乱
后来把SPI发送放在主循环里,串口中断只负责收数据存缓冲区,问题就解决了。
7. 调试工具与实测数据记录
7.1 逻辑分析仪抓取SPI时序
调试SPI最有效的工具是逻辑分析仪。我用的是Saleae Logic 8,抓DAC8568的SPI波形非常方便。
抓取时设置:
- 采样率:24MHz以上
- 通道:SCLK、DIN、SYNC、LDAC
- 触发:SYNC下降沿
抓到的波形可以解码SPI,直接看到发送的24位数据。我一般会对照代码里的命令字节,确认每一位都对。
有一次发现发送的数据和预期差了一位,查了半天发现是SPI的First Bit配置错了,配成了LSB First。改成MSB First就对了。
7.2 万用表与示波器实测数据
用6位半万用表(Keysight 34461A)实测DAC8568输出:
| 设定值 | 实测值 | 误差 |
|---|---|---|
| 0.000V | 0.0002V | +0.2mV |
| 1.000V | 1.0013V | +1.3mV |
| 2.500V | 2.5021V | +2.1mV |
| 5.000V | 5.0038V | +3.8mV |
误差随输出电压增大而增大,符合增益误差的特征。做两点校准后,误差降到±0.5mV以内。
用示波器看输出噪声,带宽限制20MHz,峰峰值约1.2mV。加RC滤波后降到0.3mV。
7.3 长时间稳定性测试记录
我做过一个72小时的老化测试,DAC8568输出2.5V,环境温度25°C±2°C,每小时记录一次:
- 第1小时:2.5021V
- 第24小时:2.5018V
- 第48小时:2.5015V
- 第72小时:2.5013V
漂移约0.8mV,主要是内部基准的长期漂移。这个指标对大多数应用足够了。如果做精密仪器,建议用外部基准,比如REF5025,温漂可以做到3ppm/°C。
8. 代码移植与不同STM32型号适配
8.1 从STM32F103移植到STM32F4的注意事项
STM32F4的SPI外设和F103基本兼容,但有几个差异:
- F4的SPI时钟最高可达42MHz,分频系数不同
- F4的GPIO复用功能配置不同,需要选AF5(SPI1)
- F4的HAL库SPI句柄结构略有差异
移植步骤:
- 在CubeMX里重新配置SPI和GPIO
- 修改SPI句柄名称,比如hspi1改成hspi2
- 调整分频系数,保持SCLK在10MHz左右
- 重新编译,测试
我移植过一个项目从F103到F407,代码改动不到10行,主要是SPI句柄和GPIO端口号。
8.2 HAL库与LL库的性能对比
HAL库的SPI发送函数有较多的状态检查和超时处理,单次发送24位数据大约需要5~10微秒。LL库直接操作寄存器,可以做到1微秒以内。
如果对速度要求高,可以用LL库重写SPI发送:
static void DAC8568_Write24_LL(uint8_t cmd, uint8_t addr, uint16_t data) { uint8_t buf[3]; buf[0] = (cmd << 4) | (addr & 0x0F); buf[1] = (data >> 8) & 0xFF; buf[2] = data & 0xFF; DAC_SYNC_LOW(); for (int i = 0; i < 3; i++) { while (!LL_SPI_IsActiveFlag_TXE(SPI1)); LL_SPI_TransmitData8(SPI1, buf[i]); } while (!LL_SPI_IsActiveFlag_TXE(SPI1)); while (LL_SPI_IsActiveFlag_BSY(SPI1)); DAC_SYNC_HIGH(); }实测LL库版本比HAL库快3倍左右。但LL库的可移植性差一些,换芯片要改寄存器名。
8.3 在Keil MDK和STM32CubeIDE下的工程配置
Keil MDK下:
- 需要安装STM32F1的Device Family Pack
- 在Options for Target里选对芯片型号
- 添加HAL库源文件到工程
- 配置Debug为ST-Link
STM32CubeIDE下:
- 直接用CubeMX生成工程
- 自动包含HAL库
- 编译下载一键完成
我两个都用过,CubeIDE上手更快,但Keil的调试功能更强。如果做复杂项目,建议用Keil + CubeMX的组合。
9. 个人实操体会与后续扩展
这个DAC8568的驱动我前前后后调了大概两周,大部分时间花在排查SPI时序和输出异常上。最深的体会是:数据手册一定要仔细看,尤其是时序图和寄存器映射表。很多问题其实手册里都写了,只是第一遍看的时候容易忽略。
比如LDAC的脉冲宽度,手册里写的是最小20ns,但实际测试发现如果只给20ns,偶尔会有通道不更新。后来加到100ns就完全稳定了。这种细节只能靠实测积累。
后续我打算把这个驱动封装成独立的模块,加上通道校准功能,做成一个通用的多通道DAC驱动库。另外还想试试用DMA + 定时器实现任意波形发生,把更新率再提高一个数量级。
如果你也在用DAC8568,欢迎交流踩坑经验。特别是多片级联和高速波形输出这两个方向,我还有很多细节没吃透,期待和同行一起探讨。