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

STM32 HAL库 模拟SPI驱动 ADN8810

2021-09-27 20:08 作者:僚机Wingplane  | 我要投稿

    ADN8810是一个12位电流源,可提供高达300 mA的可调满量程输出电流。满量程输出电流通过两个外部检测电阻进行设置。输出顺从电压为2.5 V,即使当输出电路高达300 mA时。该器件尤其适合可调谐激光控制,可以驱动可调谐激光前置镜、后置镜、相位、增益和放大部分。主机CPU或MCU通过3线式SPI接口控制ADN8810操作。3位地址最多可独立控制8个器件,同时连接到相同的SPI总线。本文主要是介绍讲解STM32 HAL库使用模拟SPI驱动ADN8810。 

    首先是SPI相关的简介: 

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

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

    

    本次用到三个GPIO输出来模拟SPI,此外还使用了两个GPIO输出控制禁用输出和复位。

    三个输出口分别对应8810上的三个SPI通信口:

    CS:        PA4

    SCLK:    PA5

    SDI:       PA6

    另外的两个输出口连接至8810控制禁用输出和复位:

    RESET:    PC4

    SB:           PB12

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

    ADN8810 datasheet:

https://www.analog.com/media/en/technical-documentation/data-sheets/ADN8810.pdf


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

    在向8810写入数据和正常使用时,RESET应该时刻保持高电平,如果需要进行复位则进行一次拉低拉高,则此时8810的寄存器会清零。

    当SB为高电平时正常输出,低电平时8810输出会置于高阻抗状态,此时8810寄存器中的数值依旧保持原样。

    通过SPI通信改变寄存器值需要16位的数据,其中第1位一定要置零,第2~4位是地址选择位,如果有同时需要控制多个ADN8810输出的情况,可以通过更改ADN8810的引脚5(ADDR0)、引脚4(ADDR1)和引脚1(ADDR2)的高低电位来设定地址。如ADDR0 = H,ADDR1 = L,ADDR2 = L那么前四位设为0b0001(0x1)即可设定为控制此芯片输出。通过此方法我们可以通过三根线同时控制8块ADN8810。后12位则是0x000(0A)~0xfff(300mA)对应的电流值,其中0x000输出0A、0xfff输出300mA,两者之中的分为4096份(DAC12)。

user_8810.h

user_8810.c

使用示例

参考文献:

ADN8810 | 源/吸电流数模转换器 | 亚德诺(ADI)半导体: https://www.analog.com/media/en/technical-documentation/data-sheets/ADN8810.pdf


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

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