欢迎光临散文网 会员登陆 & 注册

STM32 HAL库 模拟SPI驱动 DAC8564

2021-06-15 10:39 作者:僚机Wingplane  | 我要投稿

    之前写过DAC8560的模拟SPI驱动,相比较而言DAC8564能够在网上找到的内容更加的丰富,本文主要是介绍讲解STM32 HAL库使用模拟SPI驱动DAC8564。

    DAC8560

    SPI相关的简介:

    然后是用STM32CubeMx初始化模拟SPI的引脚:

    STM32CubeMx的GPIO输出的配置可以参考:


    这里之所以是只用开三个GPIO输出来模拟SPI是因为它只用到了半双工通信。

    我所用到的四个输出口分别对应8560上的三个SPI通信口。

    SYNC:PB1

    SCLK:PB0

    DIN:PC5

    在具体的应用中可以自行修改头文件中的GPIO口以配合硬件完成工程。

    DAC8564 datasheet:

https://www.ti.com/lit/ds/symlink/dac8564.pdf

    DAC8564 数据手册:

https://www.ti.com.cn/cn/lit/ds/symlink/dac8564.pdf

SYNC:CS 片选线

SCLK:SCLK 时钟线,用于时钟同步

DIN:DIN(MOSI) 输出24位信号的数据线

    从上面的内容我们可以知道DAC8564是时钟下降沿触发的

    上面这些是我们输出控制DAC8564的控制矩阵,我们常用的是下面这几句

        我们一共需要输出24位的数据,其中前两位是地址选择位,如果有同时需要控制多个DAC8564输出的情况,可以通过更改DAC8564的引脚13(A0)和引脚14(A1)的高低电位来设定地址。如A0 = H,A1 = L,那么前两位设为0b10即可设定为控制此芯片输出。通过此方法我们可以同时控制4块DAC8564。从前数第三到五位我们需要设为0,从前数第六位和第七位则是DAC选择位,可以通过改变它来选择要存入ABCD对应输的寄存器里。从前数第八位为0,后16位则是0x0000(0V)~0xffff(2.5V)对应的电压值,其中0x0000输出0V、0xffff输出2.5V,两者之中的分为65535份。

        注意:此时我们只是把输出的电压数据存入了寄存器中,此时每路DAC输出都不会改变

        如果我们需要改变A0 = L,A1 = L的DAC8564的第B路输出寄存器为输出1V,那么我们应该输出0x26666,再如果我们需要改变A0 = L,A1 = H的DAC8564的第A路输出寄存器为输出2.5V,那么我们应该输出0x80ffff。

        当我们需要在把数据存入寄存器后马上刷新此路的DAC输出,那么从前数第三到五位我们需要设为0b010,其余部分和上面把存入寄存器一样。

        如果我们需要改变A0 = L,A1 = L的DAC8564的第B路输出寄存器为输出1V并且立刻改变该路输出,那么我们应该输出0x126666,再如果我们需要改变A0 = L,A1 = H的DAC8564的第A路输出寄存器为输出2.5V并且立刻改变该路输出,那么我们应该输出0x90ffff。

        改变DAC输出的方法除了像上一段的一路一路更新以外,还可以在更改其中一路的输出寄存器后同时更新所有输出。从前数第三到五位我们需要设为0b100,其余部分和上面把存入寄存器一样。

user_dac8564.h

配合硬件修改对应的IO口

user_dac8564.c

    24位从高到低通过移位的方法依次发出,发送这24位前我们需要先拉低CS,在发送完成后再拉高。

    注意:由于是下降沿触发因此我们需要先移位再拉低时钟

使用示例

参考文献:

16 位、四通道、超低毛刺脉冲、电压输出 DAC,具有 2.5V、2ppm/°C 内部基准电压和复位至中标度功能:

https://www.ti.com.cn/cn/lit/ds/symlink/dac8564.pdf


STM32 HAL库 模拟SPI驱动 DAC8564的评论 (共 条)

分享到微博请遵守国家法律