DAC芯片与MCU通信的常见方式有:SPI、IIC和通用I/O模拟时序等方式控制。通俗地讲,要正确控制DAC芯片,其实就是理清该芯片的通信时序。
长话短说,本文只是简单的介绍如何通过I/O口控制使用DAC芯片。以DAC8550芯片为例:
(1)从Datasheet中获取有用信息:
a.引脚定义:
说明:控制引脚需要关注3个(SYNC、SCLK和Din)
- SYNC(数据帧的同步输入信号):低电平有效。当SYNC引脚为低电平,在时钟信号下降沿到来时会使能输入移位寄存器传输数据。DAC在第24个时钟之后进行更新(如果在24个时钟结束之前拉高了SYNC信号,那么忽略写入序列)
- SCLK(串行时钟输入信号):数据传输速率高达30MHz。
- Din(串行数据输入信号):在SCLK时钟输入信号的每个下降沿,数据(0或1)被写入到24位输入移位寄存器中。
b.输入移位寄存器:
说明:该寄存器是24位寄存器,高6位(23~18)未使用,PD1和PD0是控制工作模式位(工作模式如下述),剩下16位是数据位。
c.工作模式(4种工作模式):通过寄存器PD1和PD0控制
说明:工作模式根据需求不同而自主设置,我这里是将DAC8550的工作模式设置为正常操作模式(00)
d.控制时序
说明:上面是官方的时序图,以下是我个人自己画的一个时序例子(画功不好请包涵哈)
e.电压输出运算
相对熟悉了该芯片的工作原理之后,剩下就是程序控制了(程序也比较简单):
1、初始化引脚(我的硬件连接是:SYNC->PA7、SCLK->PB3和Din->PB4)
做了个宏定义:
2.按照时序逻辑编写:写寄存器函数(先写工作模式,后写数据)
到这里就结束了。今天新人第一次发帖,有什么错误及不足还望大伙指点赐教。
同时我也会继续努力(所爱隔山海,山海亦可平)!
谢谢~