DAC8760+STM32F407单电源电路硬件测试

特性

16位DAC
+10V至+36V单电源,或者18V的双电源供电
输出电流:4-20mA或0-20mA或0-24mA
输出电压:0-5V或0-10V或5V或10V,可以通过设置寄存器超出量程10%的范围.
同步电压和电流输出

可靠特性

CRC校验
看门狗
过热告警
开路告警,适中电流限制

其它

加电复位功能,以确保在一个已知状态中加电(IOUT和VOUT被禁用,并且处于高阻抗(Hi-Z)状态)
CLR和CLR-SEL引脚可将输出设定为0
增益寄存器可被设定为对器件进行数字校准
输出转换率也由寄存器设定

芯片管脚功能

1、 AVSS在双电源供电,模拟电源负极。连接到GND做单电源供电
2、 DVDD数字电源。DVDD-EN悬空时DVDD输出+4.6V,DVDD-EN接地时DVDD连接外部+5V电源
3、 /ALARM报警引脚。开漏输出。外接10K上拉电阻。当检测到报警状态(超温断路,超时等等)该引脚警报拉低(主动)
4、 GND
5、 CLR-SEL选用上电复位清除VOUT状态
6、 CLR清除输入。此引脚高电平时进入CLEAR状态,使VOUT=0
7、 LATCHDAC寄存器的输入锁存。输入移位寄存器在此脚的上升沿将数据加载到数据寄存器和控制寄存器以更新DAC的输出。此脚在SCLK的第24个时钟之前置低,之后置高更新输出,此脚功能类似于片选
8、 SCLK串行时钟输入。速率可高达30MHz
9、 DIN串行数据输入。数据在串行时钟输入的每个上升沿被计时至24位输入移位寄存器
10、 SDO 串行数据输出。数据在SCLK的上升沿有效
11、 GND
12、 GND
13、 ISET-R外部精密电阻连接引脚(15K)。看到这个数据表操作部分的理论
14、 REFOUT内部参考输出。连接至REFIN时使用内部参考
15、 REFIN参考输入
16、 DVDD-EN内部电源使能。此引脚连接到GND禁用内部供应,或离开这个引脚无关,使内部供应。该引脚时连接到GND,外部电源必须连接到的DVDD引脚
17、 CMP外部补偿电容连接销(可选)。另外的外部电容器(连接在VOUT和这个引脚)提高了稳定性与高电容负载在VOUT引脚通过降低输出放大器的带宽,从而增加沉降时间
18、 HART-INHART调制输入引脚
19、 IOUT电流输出引脚
20、 BOOST提高销。外部晶体管连接(可选)
21、 VOUT电压输出引脚
22、 +VSENSE为正电压输出负载连接针感
23、 -VSENSE对于负电压输出负载连接针感
24、 AVDD正模拟电源


LATCH 输入移位寄存器在此脚的上升沿将数据加载到数据寄存器和控制寄存器以更新DAC的输出。此脚在SCLK的第24个时钟之前置低,之后置高更新输出


SPI移位寄存器

默认的框架是24位的(使用CRC校验则是32位数据模式)数据模式,数据高位在前,第个数据都在时钟SCLK的上升沿被锁存。默认的24位输入模式是由一个8位地址加上一个16位数据组成

在24个时钟周期之后LATCH引脚的上升沿将输入的数据锁存,并更新输出状态。上电复位后SPI移位寄存器复位到000000h地址

写操作地址

读操作

读操作的地址字节是0x02。跟着读操作命令寻址的寄存器。从寄存器中读出地址或数据。读寄存器输出的数据高位在前, SDO在SCLK的下降沿连续输出数据,MCU在下一个SCLK的上升沿读取SDO上的数据。

指令和寄存器映射

DACx760寄存器描述

控制寄存器

该DACx760控制寄存器写入地址0x55。

配置寄存器

该DACx760配置寄存器写入地址0X57

DAC寄存器

DAC寄存器包含一个数据寄存器一个DAC增益校准寄存器和一个DAC零校准寄存器.用户校准在用户校准部分描述,可以微调系统增益和零误差

复位寄存器

该DACx760复位寄存器写入地址0x56。

状态寄存器

此只读寄存器由四个报警状态位(CRC-FLT,WD-FLT,I-FLT,T-FLT)和SR-ON位显示转换率状态。该装置连续监视输出和模块温度。当报警发生时,对应的报警状态位置1。每当一个报警状态位被设置,直到造成问题的事件被解决。报警位只能通过执行软复位清除,或上电复位,或错误已经解决了。这些位是重申如果报警条件继续在下一监测周期存在。报警位置“0”的条件是当错误解决了。

设置输出电压和电流范围

在正常模式下的电压和电流输出(VOUT和IOUT不同时启用)
当输出电压和输出电流的同时启用(双输出模式)通过设置配置寄存器中的DUALOUTEN位,电压输出范围在控制寄存器的RANGE位设置,电流输出范围在配置寄存器中的IOUTRANGE位设置。

内部参考电源

DACx760包括一个集成的5V参考电源(REFOUT),有5mA的驱动能力,初始精度为±5mV。

数字电源

内部产生4.6v电压输出,具有10mA驱动能力,可悬空DVD-EN引脚使DVDD引脚上输出。这个供电缓解了系统的电源设计时的隔离需要交叉产生的数字电源。它可以用来驱动隔离组件用于数字数据线和其它部件。如果选择外部电源给DVDD引脚供电,可以通过把DVD-EN引脚接到GND。

DAC CLEAR

DAC具有异步清零功能,通过将CLR引脚置高电平,允许输出电压被清除为零或中值。这动作是用户通过选择CLR-SEL引脚和设置控制寄存器的CLRSEL位决定的。电流输出的值清除到最小范围。当CLR信号返回到低,输出保持在清理后的值。清除前的值可以通过LATCH-信号在没有任何时钟和数据恢复。一个新的值不会被编程到CLR引脚返回到低。要注意的是,在双输出模式,DAC数据寄存器的值被清除之后,设置电压输出模式。

除了定义一个明确的操作的输出值,该CLRSEL位和CLR-SEL引脚也定义默认值。一个新的电压范围在选择,输出值对应于表14中给出的定义。为了避免在输出毛刺,写一个‘0’到OUTEN位改变之前禁用输出电压范围。当OUTEN位设置为1时,输出到默认值由CLRSEL位和CLR-SEL引脚定义。

电源顺序

DACx760具有内部上电复位(POR)功能,有数字DVDD和模拟AVDD两个供电电路。这个电路可以确保内部逻辑上电状态的DAC电源上升到适当的状态独立的电源序列。虽然没有所需的电源上电顺序,建议先有数字的DVDD供电上来,然后由模拟电源AVDD和AVSS。如果使用双电源供电时AVSS接电源的负极,否则,AVSS连接到GND。

上电复位

…………

检测报警

该模块还提供报警检测功能。当下列一个或多个事件发生时,报警引脚变为低电平
电流输出负载开路
在电流输出电压达到一定的水平,对输出电流的精度受到损害。这种情况通过监测电流输出电路内部电压水平检测并通常低于指定的遵从电压余量(指AVDD和IOUT引脚之间的电压降)至少2V
模块的温度已超过142℃
看门狗定时器超时(如果已启用)
CRC校验时遇到一个错误(如果已启用)

看门狗定时器

此功能是用于确保主处理器和DACx760之间的联络不丢失。可以通过设置配置寄存器的WDEN位置1启用”。看门狗超时周期可以设置配置寄存器的WDPD位,如下表所示。定时器的周期是基于一个内部振荡器在8MHz时的典型值

如果启用,该芯片必须通过SPI为0x95地址写入的装置程序超时时间。否则,ALARM引脚被拉低并且状态寄存器的WD-FLT位设置为“1”。要注意的是,ALARM引脚可以拉低任何条件不同解释的报警检测部分。可以通过软件复位将WD-FLT位复位到“0”,或通过禁用看门狗定时器,或通过关闭装置。

帧错误检测

如果DACx760在嘈杂的环境中使用,错误检查可用于检查该设备与主处理器之间的SPI通信数据的完整性。这个功能可以通过将配置寄存器的CRCEN位设置为“1”启用。帧错误检测方案是基于CRC-8-ATM(HEC)多项式X8+x2+x+1(即,100000111)。当错误检查已启用,SPI的宽度是32位,如下表所示。从默认的24位帧使用帧错误检测并通过CRCEN位切换到32位的框架。主处理器正常的24位SPI数据被追加的8位CRC多项式,然后传给设备。从寄存器读出,CRC多项式在通过器件SDO引脚输出成为32位框架的一部分。

DACx760解码的32位输入帧数据来计算CRC余数。如果没有错误帧存在,CRC余数为零。当余数非零,ALARM引脚拉低且状态寄存器CRC-FLT位也被置为1。要注意的是,ALARM引脚可以拉低任何不同的条件,这在报警检测部分有解释。可以通过软件复位将CRC-FLT位复位到0,或通过禁用帧错误检查,或给设备断电。在CRC错误的情况下,特定的SPI框架是禁止写入设备。

用户校准

可编程的转换率
读状态寄存器0X200000
读数据寄存器0X200001
读控制寄存器0X200002
读配置寄存器0X20000B
读增益校准寄存器0X200013
读零校准寄存器0X200017
写复位寄存器0X560001
写数据寄存器0X01+16位DAC数据
写控制寄存器0X55+(1<<14)增加输出范围10%+(1<<13)
外部电流设置电阻使能+(1<<12)输出使能
+000电压输出范围(000,0-5V;001,0-10V)
写配置寄存器0X57+(00<<9)
电流输出范围 (01,4-20mA;10,0-20mA;11,0-24mA)+(1<<8)
双输出使能+(1<<5)
用户校准功能开启+(1<<3)
CRC校验+(1<<2)
使能看门狗+00
看门狗定时周期(00,10mS;01,51mS;10,102mS;11,204mS)
写增益校准寄存器0X58+16位数据
写零校准寄存器0X59+16位数据
写看门狗寄存器0X95+???

电压输出范围0-5V, 电流输出范围0-24mA

测试代码:

————————————————————————————————————START

/*本段为DAC8760+STM32F407硬件测试程序*/
/**时钟频率 168MHz
***IDE:Keil v5
***直接采用IO口模拟SPI总线时序,方便了解DAC8760的通讯时序
***DAC8760采用DC24V单电源供电
***输出电压0-5V
*/#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"#define LED_ON    GPIO_ResetBits(GPIOC,GPIO_Pin_11);   //PC11   点亮LED
#define LED_OFF   GPIO_SetBits(GPIOC,GPIO_Pin_11);     //PC11   熄灭LED#define DAC8760_LATCH_0             GPIO_ResetBits(GPIOB,GPIO_Pin_11)          //片选拉低
#define DAC8760_LATCH_1          GPIO_SetBits(GPIOB,GPIO_Pin_11)            //片选拉高#define DAC8760_CLK_0          GPIO_ResetBits(GPIOB,GPIO_Pin_13)          //时钟拉低
#define DAC8760_CLK_1            GPIO_SetBits(GPIOB,GPIO_Pin_13)            //时钟拉高
#define DAC8760_MI_0             GPIO_ResetBits(GPIOB,GPIO_Pin_14)          //数据输入拉低
#define DAC8760_MI_1             GPIO_SetBits(GPIOB,GPIO_Pin_14)            //数据输入拉高
#define DAC8760_MO_0             GPIO_ResetBits(GPIOB,GPIO_Pin_15)          //数据输出拉低
#define DAC8760_MO_1             GPIO_SetBits(GPIOB,GPIO_Pin_15)            //数据输出拉高/*****************/
#define  V_0_5  0x0000          //电压范围0-5V
#define  V_0_10 0x0001          //电压范围0-10V/* DAC8760 8位地址 */
#define W_ADDR_NOP           0x00
#define W_ADDR_DATA          0x01 // 写数据寄存器
#define W_ADDR_READ          0x02 // 读数据寄存器
#define W_ADDR_CTRL          0x55 // 写控制寄存器
#define W_ADDR_RESET         0x56 // 写复位寄存器
#define W_ADDR_CONFIG        0x57 // 写配置寄存器
#define W_ADDR_GAIN          0x58 // 写增益校准寄存器
#define W_ADDR_ZERO          0x59 // 写零校准寄存器
#define W_ADDR_WDT           0x95 // 写看门狗寄存器/* 读操作命令寻址的寄存器地址 */
#define R_ADDR_SATUS       0x00
#define R_ADDR_DATA        0x01
#define R_ADDR_CTRL        0x02
#define R_ADDR_CONFIG      0x0B
#define R_ADDR_GAIN        0x13
#define R_ADDR_ZERO        0x17void IO_init(void){          //引脚初始化程序GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟//GPIOB 11初始化设置   作为DAC8760的片选信号GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;     //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;      //上拉GPIO_Init(GPIOB, &GPIO_InitStructure);            //初始化    GPIO_ResetBits(GPIOB,GPIO_Pin_11);                 //GPIOB 11  GPIO_ResetBits(GPIOB,GPIO_Pin_13);                 //GPIOB 13 GPIO_ResetBits(GPIOB,GPIO_Pin_14);                 //GPIOB 14  GPIO_ResetBits(GPIOB,GPIO_Pin_15);                 //GPIOB 15
}void LED(void){GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;     //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;      //上拉GPIO_Init(GPIOC, &GPIO_InitStructure);            //初始化  GPIO_SetBits(GPIOC,GPIO_Pin_11);                  //GPIOC11 LED OFF
}//DAC8760写数据函数
//函数名:          u16 Write_DAC8760(uint8_t ch_Addr, uint16_t ch_Data)
//函数入口参数:    ch_Addr 写入地址   ch_Data 写入数据
u16 Write_DAC8760(uint8_t ch_Addr, uint16_t ch_Data){u8 i;u8 h_8bit, i_8bit;i_8bit=(ch_Data&0x00ff);        //取写入数据的低8位h_8bit=(ch_Data>>8)&0x00ff;     //取写入数据的高8位DAC8760_LATCH_0;                //拉低片选for(i=8;i>0;i--){               //写8位地址         DAC8760_CLK_0;if(ch_Addr&0x80){DAC8760_MO_1;}else{DAC8760_MO_0;}delay_us(500);DAC8760_CLK_1;delay_us(500);ch_Addr<<=1;}for(i=8;i>0;i--){               //先写高8位地址DAC8760_CLK_0;if(h_8bit&0x80){DAC8760_MO_1;}else{DAC8760_MO_0;}delay_us(500);DAC8760_CLK_1;delay_us(500);h_8bit<<=1;}for(i=8;i>0;i--){               //再写低8位地址DAC8760_CLK_0;if(i_8bit&0x80){DAC8760_MO_1;}else{DAC8760_MO_0;}delay_us(500);DAC8760_CLK_1;delay_us(500);i_8bit<<=1;}DAC8760_LATCH_1;                //数据写完,拉高片选,DAC8760才会将数据加载到数据寄存器和控制寄存器以更新DAC的输出DAC8760_CLK_0;                  //保持时钟总线空闲时低电位DAC8760_MO_0;                   //主机输出总线空闲时低电位
}void DAC8760_Config(void){Write_DAC8760(W_ADDR_RESET,0x0001);             // 0x56 复位寄存器   0x0001执行软件复位Write_DAC8760(W_ADDR_CTRL,(1<<12)|V_0_5);          // 0x55 控制寄存器  (1<<12)|V_0_5设置电压输出模式0-5V,并且使能控制寄存器第12位Write_DAC8760(W_ADDR_CONFIG,0x0000);            // 0x57 配置寄存器   0x0000设置单电压模式,电流输出0 Write_DAC8760(0x01,0);                          //输出清空
}void DAC_init(void){        //DAC初始化程序IO_init();               //引脚初始化程序
//    SPI2_Init();            //SPI2初始化DAC8760_Config();       //DAC8760初始配置
}void DAC8760_Output(u16 dat){   //DAC8760数据输出   Vout=DIN/65536*VrefWrite_DAC8760(W_ADDR_DATA,dat);
}int main(void)
{u16 i=0;
//  uart_init(115200);delay_init(168);LED();DAC_init();while(1){     //从0V开始,每2s电压增加电压0.5V,伴随LED闪烁,直到电压等于5VDAC8760_Output(i);LED_ON;delay_ms(2000);i=i+6553;if(i>=65535)     i=0;LED_OFF;delay_ms(2000);}
}

—————————————————————————————————————END

硬件原理图:

DAC8760+STM32F407单电源电路硬件测试相关推荐

  1. 【P53】基于TPS61093的典型单电源转双电源电路

    为了完善便携耳放,我想把充放管理和单电源转双电源集成到一起.在去年年底就用优惠卷几乎白嫖了一片 TPS61093,今年 6 月的时候终于做了板子进行测试,结果非常满意,然后就想再买几片准备做成品,一看 ...

  2. 精密单电源虚拟地芯片 TLE2426

    ➤ 01简介 在很多单电源电路或者面包板电路实验中,需要为运算放大器提供电源一半的虚拟参考地电源.使用普通的电阻分压和电容滤波可以在建议情况下使用,这款来自TI公司的 TLE2426 可以提供4V-4 ...

  3. 放大器电路在设计过程中常见问题分析及如何解决

    放大器电路介绍 放大器电路,或称放大电路,能增加信号的输出功率.它透过电源取得能量来源,以控制输出信号的波形与输入信号一致,但具有较大的振幅.依此来讲,放大器电路亦可视为可调节的输出电源,用来获得比输 ...

  4. 单电源运放和双电源运放的区别

    在设计单电源电路时需要比双电源电路更加小心,设计者必须要完全理解这篇文章中所述的内容. 1.1 电源供电和单电源供电 所有的运算放大器都有两个电源引脚,一般在资料中,它们的标识是VCC+和VCC-,但 ...

  5. Multisim仿真-仪表放大器仿真电路

    目录 一.仪表放大器的实现原理 二.Multisim实现仪表放大器 2.1.运放的选择 2.2.双电源仿真 2.3.单电源仿真 参考 一.仪表放大器的实现原理   仪表放大器在电路图中是一个运算放大器 ...

  6. 常用单端到差分转换电路

    1.可采用AD8138来实现 单端到差分的转换电路采用的是AD公司的AD8138,该放大器具有较宽的模拟带宽(320MHz,一3dB,增益1),而且可以实现将单端输入变成差分输出的功能.此项功能在现代 ...

  7. 施密特触发器运算放大电路

    转自:http://www.360doc.com/content/18/0808/16/58510288_776656341.shtml 有少数的运算放大器电路用正反馈.例如图13-44显示了一个信号 ...

  8. 小信号放大运算放大器使用要依照三步骤,4个细节更重要

    有人说运算放大器使用要依照三步骤,实际上4个细节更重要 有人说运算放大器使用要依照三步骤,实际上4个细节更重要_运放 运算放大器的使用是电工的必修课,有人依据经验和网友讨论,总结了使用三大步骤. 一. ...

  9. 运放单的电源供电和双电源供电

    我们经常看到很多非常经典的运算放大器应用图集,但是他们都建立在双电源的基 础上,很多时候,电路的设计者必须用单电源供电,但是他们不知道该如何将双电源 的电路转换成单电源电路. 在设计单电源电路时需要比 ...

最新文章

  1. 使用OpenCV4实现硬件级别加速
  2. Rhel7 Ldap为本地用户认证方式,设置域、服务器位置和下载key
  3. php 函数变量的顺序,PHP实现参数的自定义顺序调用 | 剑花烟雨江南
  4. Linux:tomcat安装/版本升级
  5. 从无到有开发连麦直播技术点整理
  6. Objective C学习总结(二)
  7. php函数之----get_magic_quotes_gpc
  8. ansible常用基础命令整合
  9. 阿里、京东、美团、百度面试总结
  10. linux拨号日志,Linux系统日志管理:(1)连接时间日志
  11. js高级学习笔记(b站尚硅谷)-2-数据、变量、内存三者的关系
  12. 服务器安全组微信支付,微信支付设置
  13. 破而后立,破除陈旧,认识自我,而后顶天立地!
  14. 工业大数据漫谈5:工业大数据案例(上)
  15. 一个曾讨厌英语的人是如何爱上英语学好英语的
  16. matlab求信号的瞬时相位,phrase MATLAB中关于信号瞬时相位 频率的提取的代码,值得学习,很实用 267万源代码下载- www.pudn.com...
  17. 湖北测绘资质类别范围,如何办理测绘资质?
  18. c++中获得对象类型 typeid 与 type_info
  19. 【jenkins】jenkins旧版本下载
  20. ThreadLocalMap中为什么valu是强引用,不是弱引用

热门文章

  1. 用一个智能魔方,转动IP网络的时代变局
  2. 安装OTP软件测试自学,OTP的使用技巧 - mike00088的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  3. SSL服务器认证过程!
  4. 如何组装、搭建一台永久运行的个人服务器?
  5. dz论坛使用tools修改创始人密码
  6. vs2019mac怎么编译c语言,VS2019(Windows+Mac)编辑文件模板
  7. php的link是什么意思,link标签有什么作用?
  8. [Asp.Net Core]NET5_ActionFilter的多种扩展
  9. 小学生计算机教学辅助系统
  10. 电商收付通系列⑪ ,下载账单