精华内容
下载资源
问答
  • DAC芯片与MCU通信的常见方式有:**SPI**、**IIC**和**通用I/O模拟时序**等方式控制。通俗地讲,要正确控制DAC芯片,其实就是理清该芯片的*通信时序*。 长话短说,本文只是简单的介绍如何通过I/O进行DAC芯片控制及...

        DAC芯片与MCU通信的常见方式有:SPIIIC通用I/O模拟时序等方式控制。通俗地讲,要正确控制DAC芯片,其实就是理清该芯片的通信时序
        长话短说,本文只是简单的介绍如何通过I/O口控制使用DAC芯片。以DAC8550芯片为例:
        (1)从Datasheet中获取有用信息:
                a.引脚定义:

    说明:控制引脚需要关注3个(SYNC、SCLK和Din)

    1. SYNC(数据帧的同步输入信号):低电平有效。当SYNC引脚为低电平,在时钟信号下降沿到来时会使能输入移位寄存器传输数据。DAC在第24个时钟之后进行更新(如果在24个时钟结束之前拉高了SYNC信号,那么忽略写入序列)
    2. SCLK(串行时钟输入信号):数据传输速率高达30MHz。
    3. 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.按照时序逻辑编写:写寄存器函数(先写工作模式,后写数据)

    到这里就结束了。今天新人第一次发帖,有什么错误及不足还望大伙指点赐教。

    同时我也会继续努力(所爱隔山海,山海亦可平)!

    谢谢~

     

    展开全文
  • DAC121C085CIMM芯片控制

    2021-01-19 20:17:57
    本文主要讲述下:dac控制芯片。我自己已经在fpga的zynq上调试成功 芯片DAC121C085CIMM 转载: 1、iic地址: 地址:000_1001 2、输出电压公式: Vout = 2.5208*(D/4096); 3、iic的写波形图: 4、...

    本文主要讲述下:dac的控制芯片。我自己已经在fpga的zynq上调试成功

    芯片:DAC121C085CIMM

    转载:https://blog.csdn.net/weixin_36590806/article/details/112851210

    1iic地址

    地址:000_1001

    2、输出电压公式

    Vout = 2.5208*(D/4096);

    3iic的写波形图

    4、iic的读波形图

    5、寄存器解析

    看到这儿,熟悉iic的应该知道怎么搞了。具体怎么搞你们就自己摸索吧,很简单的。嘻嘻嘻

     

    展开全文
  • 工业级质量的高速视频DAC GM7123是一款频率330MHz的3通道10位高速视频DAC芯片,兼容RS-343A/RS-170标准差分输出,输出电流范围是2mA~26mA。输入兼容3.3V TTL电平,内部基准1.23V,单电源3.3V供电。时钟50MHz时,...
  • 使用FPGA芯片控制DAC采集芯片,输出指定的电压值。 二、硬件部分 为了将FPGA输出的数字电压转换成模拟电压,我们使用到了数模转换芯片(简称DAC)TLV5618。进行设计前,我们先到网上检索并查看了该芯片的数据手册。 1....

    一、任务

    使用FPGA芯片控制DAC采集芯片,输出指定的电压值。

    二、硬件部分

    为了将FPGA输出的数字电压转换成模拟电压,我们使用到了数模转换芯片(简称DAC)TLV5618。进行设计前,我们先到网上检索并查看了该芯片的数据手册。

    1.芯片功能图

    在这里插入图片描述

    2.端口功能表

    在这里插入图片描述
    从功能图和功能表中我们可以看出,TLV5618有四个输入端口:
    片选信号CS、数据串行输入端口DIN、模拟参考电压REF、数字时钟SCLK
    两个输出端分别为OUTAOUTB,均为对应的模拟电压输出端。

    3.时序图

    在这里插入图片描述
    时序图中我们可以看到使用该芯片时要注意这几个参数:
    tw(L):低电平最小宽度,25ns。
    tw(H):高电平最小宽度,25ns。
    tsu(D):数据最短建立时间。
    th(D):数据最短保持时间。
    tsu(CS-CK):片选信号下降沿到第一个时钟下降沿最短时间。
    th(CSH):片选信号最短拉高时间。

    在我们写FPGA代码时,需要根据严格按照时序图来。

    4.输出电压计算

    在这里插入图片描述
    由手册给出的公式知,输出电压与输入的编码值成正比,同时还要乘以一个系数REF,这个系数从芯片的REF引脚输入。我们打开并查看开发板的原理图:在这里插入图片描述
    从图中知,我们用到了芯片LM4040-2.0给DAC供电,这个芯片工作时输出电压为4.028V(即精度为12位),故参数REF为4.028。

    5.时钟频率与刷新率计算

    在这里插入图片描述
    我们查阅手册后知道,使用该芯片时,时钟最大频率为20MHz,刷新率为时钟频率的1/16。而开发板提供的原始时钟为50MHz,因此可以采用四分频后得到12.5MHz的时钟频率。

    三、设计方案

    在这里插入图片描述
    我们考虑用FPGA设计一个DAC驱动,通过CS、sclk、din三根信号线与DAC芯片连接,设计输入端口Data[15:0]。同时为了便于与其他模块共同协作,我们加上了使能端口en转换完成标志位Conv_done,这是FPGA设计时必须考虑的一点,对于复杂的驱动模块,这两个信号是不可或缺的

    四、软件部分

    这里直接上代码部分,注释里面有解读。

    // 驱动部分
    module tlv5618(
    	Clk,
    	Rst_n,
    	
    	DAC_DATA,	//并行数据输入端
    	Start,		//开始标志位
    	Set_Done,	//完成标志位
    	
    	DAC_CS_N,	//片选
    	DAC_DIN,	//串行数据送给ADC芯片
    	DAC_SCLK,	//工作时钟SCLK
    	DAC_State	//工作状态
    );
    	
    	parameter fCLK = 50;		//时钟参数
    	parameter DIV_PARAM = 2;	//分频参数
    
    	input Clk;
    	input Rst_n;
    	input [15:0] DAC_DATA;
    	input Start;
    	output reg Set_Done;
    	
    	output reg DAC_CS_N;
    	output reg DAC_DIN;
    	output reg DAC_SCLK;
    	output DAC_State;
    	
    	assign DAC_State = DAC_CS_N;	//工作状态标志与片选信号相同
    	
    	reg [15:0] r_DAC_DATA;
    	
    	reg [3:0] DIV_CNT;		//分频计数器
    	reg SCLK2X;				//2倍SCLK的采样时钟
    	
    	reg [5:0] SCLK_GEN_CNT;	//SCLK生成暨序列机计数器
    	
    	reg en;					//转换使能信号
    	
    	wire trans_done; 		//转换序列完成标志信号
    	
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		en <= 1'b0;
    	else if(Start)
    		en <= 1'b1;
    	else if(trans_done)
    		en <= 1'b0;	//转换完成后将使能关闭
    	else
    		en <= en;		
    
    	//分频计数器
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		DIV_CNT <= 4'd0;
    	else if(en)begin
    		if(DIV_CNT == (DIV_PARAM - 1'b1))	//前面设置了分频系数为2,这里计数器能够容纳2拍时钟脉冲
    			DIV_CNT <= 4'd0;
    		else 
    			DIV_CNT <= DIV_CNT + 1'b1;
    		end
    	else
    		DIV_CNT <= 4'd0;
    
    	//二分频
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		SCLK2X <= 1'b0;
    	else if(en && (DIV_CNT == (DIV_PARAM - 1'b1)))
    		SCLK2X <= 1'b1;
    	else
    		SCLK2X <= 1'b0;
    		
    	//生成序列计数器,对SCLK脉冲进行计数
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		SCLK_GEN_CNT <= 6'd0;
    	else if(SCLK2X && en)begin	//在高脉冲期间,累计拍数
    		if(SCLK_GEN_CNT == 6'd33)
    			SCLK_GEN_CNT <= 6'd0;
    		else
    			SCLK_GEN_CNT <= SCLK_GEN_CNT + 1'd1;
    		end
    	else
    		SCLK_GEN_CNT <= SCLK_GEN_CNT;
    
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		r_DAC_DATA <= 16'd0;
    	else if(Start)	//收到开始发送命令时,寄存DAC_DATA值
    		r_DAC_DATA <= DAC_DATA;
    	else
    		r_DAC_DATA <= r_DAC_DATA;
    				
    	//依次将数据移出到DAC芯片
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)begin
    		DAC_DIN <= 1'b1;
    		DAC_SCLK <= 1'b0;
    		DAC_CS_N <= 1'b1;
    		end
    	else if(!Set_Done && SCLK2X) begin
    		case(SCLK_GEN_CNT)
    			0:
    				begin	//高脉冲期间内,计数为0时了,打开片选使能,给予时钟上升沿,将最高位数据送给ADC芯片
    					DAC_CS_N <= 1'b0;
    					DAC_DIN <= r_DAC_DATA[15];
    					DAC_SCLK <= 1'b1;
    				end
    		
    			1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31:
    				begin
    					DAC_SCLK <= 1'b0;	//时钟低电平
    				end
    			
    			2:  begin DAC_DIN <= r_DAC_DATA[14]; DAC_SCLK <= 1'b1; end
    			4:  begin DAC_DIN <= r_DAC_DATA[13]; DAC_SCLK <= 1'b1; end
    			6:  begin DAC_DIN <= r_DAC_DATA[12]; DAC_SCLK <= 1'b1; end
    			8:  begin DAC_DIN <= r_DAC_DATA[11]; DAC_SCLK <= 1'b1; end			
    			10: begin DAC_DIN <= r_DAC_DATA[10]; DAC_SCLK <= 1'b1; end
    			12: begin DAC_DIN <= r_DAC_DATA[9];  DAC_SCLK <= 1'b1; end
    			14: begin DAC_DIN <= r_DAC_DATA[8];  DAC_SCLK <= 1'b1; end
    			16: begin DAC_DIN <= r_DAC_DATA[7];  DAC_SCLK <= 1'b1; end	
    			18: begin DAC_DIN <= r_DAC_DATA[6];  DAC_SCLK <= 1'b1; end
    			20: begin DAC_DIN <= r_DAC_DATA[5];  DAC_SCLK <= 1'b1; end				
    			22: begin DAC_DIN <= r_DAC_DATA[4];  DAC_SCLK <= 1'b1; end
    			24: begin DAC_DIN <= r_DAC_DATA[3];  DAC_SCLK <= 1'b1; end
    			26: begin DAC_DIN <= r_DAC_DATA[2];  DAC_SCLK <= 1'b1; end
    			28: begin DAC_DIN <= r_DAC_DATA[1];  DAC_SCLK <= 1'b1; end			
    			30: begin DAC_DIN <= r_DAC_DATA[0];  DAC_SCLK <= 1'b1; end
    			
    			32: DAC_SCLK <= 1'b1; 	//时钟拉高
    			33: DAC_CS_N <= 1'b1;	//关闭片选
    			default:;
    		endcase
    	end
    	
    	assign trans_done = (SCLK_GEN_CNT == 33) && SCLK2X;
    	
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		Set_Done <= 1'b0;
    	else if(trans_done)
    		Set_Done <= 1'b1;
    	else
    		Set_Done <= 1'b0;
    	
    endmodule
    
    
    //顶层模块
    module DAC_test(
    			Clk,   //模块时钟50M
    			Rst_n, //模块复位
    			
    			DAC_CS_N,  //TLV5618的CS_N接口
    			DAC_DIN,   //TLV5618的DIN接口
    			DAC_SCLK   //TLV5618的SCLK接口
    		);
    	input Clk;
    	input Rst_n;
    	
    	output DAC_CS_N;
    	output DAC_DIN;
    	output DAC_SCLK;
    	
    	reg Start;
    	reg [15:0]r_DAC_DATA;
    	wire DAC_State;
    	wire [15:0]DAC_DATA;
    	wire Set_Done;
    	
    	tlv5618 tlv5618(
    		.Clk(Clk),
    		.Rst_n(Rst_n),
    		
    		.DAC_DATA(DAC_DATA),
    		.Start(Start),
    		.Set_Done(Set_Done),
    		
    		.DAC_CS_N(DAC_CS_N),
    		.DAC_DIN(DAC_DIN),
    		.DAC_SCLK(DAC_SCLK),
    		.DAC_State(DAC_State)
    	);
    
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		r_DAC_DATA <= 16'd0;
    	else if(DAC_State)
    		r_DAC_DATA <= DAC_DATA;
    		
    	always@(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		Start <= 1'd0;
    	else if(r_DAC_DATA != DAC_DATA) 
    		Start <= 1'b1;
    	else
    		Start <= 1'd0;
    
    endmodule
    
    

    五、仿真

    在这里插入图片描述

    展开全文
  • 8通道16位DAC芯片LTC2600编程使用

    千次阅读 2019-03-27 11:41:00
    LTC2600是亚德诺公司的单极性八通道16位轨至轨DAC,体积小,分辨率高。使用SPI驱动方式编程控制。 2.引脚功能 先上一张手册里面的引脚功能描述,重点关注片选引脚CS,时钟引脚SCK,数据输入SDI。 2.1 片选CS引脚...

    1.简介

    LTC2600是亚德诺公司的单极性八通道16位轨至轨DAC,体积小,分辨率高。使用SPI驱动方式编程控制。

    2.引脚功能

    先上一张手册里面的引脚功能描述,重点关注片选引脚CS,时钟引脚SCK,数据输入SDI。

    2.1 片选CS引脚:如引脚介绍上所说,当片选CS为低电平时,SCK被使能,SDI的数据转移到寄存器,CS为高时,SCK禁能,系统执行规定的命令。所以我们在写数据时先把CS拉低,等到数据写完再把CS拉高即可。

    2.2 时钟SCK引脚:具体的使用逻辑参照SDI的引脚介绍和本文第三节的时序图,SCK上升沿时SDI发送一个bit的数据。

    2.3 数据输入SDI:串行接口数据输入,单片机控制输出各个bit的值。

    3.时序图

    通过这张时序图,可以看出LTC2600的读写逻辑,和其他SPI读写大同小异。片选为低时才能发送数据,SDI在时钟SCK的上升沿发送数据。

    4.数据位

    LTC2600一组输入数据共24个bit。低16位为数据信息,16-19位为通道地址,20-23位为命令类型。通道地址和命令类型定义见下表1.

    5.代码实现

    代码使用模拟SPI实现控制。具体的代码参照以下链接,已经封装好文件,直接调用即可。

    LTC2600代码

    //channel=0-7分别代表通道A-H,15代表全部通道。data代表输出电压,范围0-65535
    void SendDA_LTC2600(uint8_t channel,uint16_t data)
    {
    	uint32_t xkdata=0,i;
    	xkdata|=0x03<<20;//命令位c1和c0写为1:写至输入寄存器n,更新所有寄存器。
    	xkdata|=(channel&0x0f)<<16;//通道地址
    	xkdata|=data&0xffff;//防止data数据过大,最大支持16bit
    	xkdata<<=8;//数据左移8位,低八位为空
    	CS_0();//片选(引脚7),片选为低时,sck被使能,数据转移至寄存器
    	//LTC2600 SCLK时钟高达50M,因此可以不延迟
    	for(i=0;i<24;i++)
    	{	
    		SCK_0();
    		if(xkdata&0x80000000)//对xkdat的31位到8位按位与
    		{
    			DIO_1();//SDI(引脚9)
    		}
    		else
    		{
    			DIO_0();
    		}
    		SCK_1();//sck(引脚8)上升沿,数据转移至器件。
    		xkdata<<=1;		
    	}
    	CS_1();//片选拉高,sck禁能,执行规定的命令
    }

     

    展开全文
  • 因课题需求 所以选择了多通道的外置DAC芯片——LTC2600 LTC2600介绍 英文芯片手册 添加链接描述 中文芯片手册 添加链接描述 LTC2600是AD公司的八通道16位DAC,体积小,分辨率高,使用SPI驱动方式编程控制 引脚功能...
  • DAC8775芯片的使用

    2019-07-13 20:46:00
    芯片的行为完全受到spi信号的控制。2、完全达到了datasheet中提到的specification3、电压输出或者电流输出(但是两者貌似不能同时)4、内部的正电压和负电压产生电路5、通过SPI等和外界进行交互6、带保护和诊断功能 ...
  • 基于FPGA的dac控制

    千次阅读 2020-02-22 17:38:08
    用TLC5620芯片,TLC5620内部有4个DAC,全部都是8位电压输出型。每个DAC有一个高输入阻抗的参考电压输入端口,每个DAC可以输出一倍或者两倍的参考电压与GND之间的电压值。 TLC5620接受11位数据,2位的DAC选择位,8位...
  • 该程序是本人为开发伺服控制器的采集和控制系统而设计的,已经通过测试验证,完全...DA芯片则是TI公司相对成熟的DAC7731芯片,可通过硬件电路的设计实现输出不同量程的电压(0~10V或者-10~+10V等),同样是SPI通信。
  • 为了满足自动测试设备、仪表、过程控制、数据采集以及通信系统等高精度工业应用领域的需求,德州仪器 (TI)近日推出了目前业界精度的数模转换器 (DAC)—DAC9881。该器件具有 18 位单调性、±2 LSB 积分非线性误差 (IN...
  • 芯片有两个16bit的输出通道,主要应用在便携式设备、闭环伺服器控制、进程控制、数据采集系统、可编程衰减及PC外等设备中。芯片引脚的功能: 转换公式:VOUTA,B=VREF×D/216(D它可以在0范围内到65535) DAC8552...
  • DAC9881是美国TI公司2008年秋季推出的一款18位单通道高精度的D/A转换芯片,它采用SPI数据串行输入、逻辑控制、并行处理、电压输出方式,输入数据时钟可达50 MHz,可配置1.8 V/3 V/5 V逻辑,具有分辨率高,噪声低,速度快,...
  • 数/模转换器是一种将数字量转换成模拟量的器件,简称D/A转换器或DAC是数字控制系统中的关键器件,用于微处理器输出的数字信号与电压或电流等模拟信号的转换,并送入执行机构进行控制或调节。  1 芯片的主要性能特点...
  • ADC、DAC的多芯片同步和确定性延迟

    千次阅读 2020-08-11 23:47:00
    芯片同步和确定性延迟是高速采集和波形产生中经常碰到的概念,特别是使用最新的基于JESD204B协议的ADC、DAC。这两个概念在JESD204B协议产生前就有了,不过采用204B协议后,实现多芯片同步和确定性延时变得简单了。...
  • 为了满足自动测试设备、仪表、过程控制、数据采集以及通信系统等高精度工业应用领域的需求,德州仪器 (TI)近日推出了目前业界最高精度的数模转换器 (DAC)—DAC9881。该器件具有 18 位单调性、±2 LSB 积分非线性误差...
  • 数/模转换器是一种将数字量转换成模拟量的器件,简称D/A转换器或DAC(Digital to Analog Con-vetter)。是数字控制系统中的关键器件,用于微处理器输出的数字信号与电压或电流等模拟信号的转换,并送入执行机构进行...
  • 数/模转换器是一种将数字量转换成模拟量的器件,简称D/A转换器或DAC是数字控制系统中的关键器件,用于微处理器输出的数字信号与电压或电流等模拟信号的转换,并送入执行机构进行控制或调节。  1 芯片的主要性能特点...
  • 文中设计了基于数模转换芯片DAC0832实现对发光二极管控制的系统,在单片机的控制下, 利用多路开关和电压保持电路实现了对多个发光
  • 本文记录了SPI控制双通道DAC,从芯片手册开始介绍,到verilog编写,全程代码注释。
  • DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及...
  • 第9章 80C51单片机与DACADC接口芯片的设计 1 9.1 单片机与DAC0832的接口 9.1.1 D/A转换器概述 9.1.2 单片机与8位DAC0832的接口 9.1.3 单片机与DAC0832接口的应用设计 9.2 单片机与ADC0809的接口 9.2.1 A/D转换器概述...
  • FPGA进阶篇--SPI控制双通道16bit串行DAC8532 ciscomonkey2019-02-22 12:36:112142收藏27 分类专栏:FPGA进阶_quartus系列 版权 文章目录 一、芯片手册关键点笔记 1、时序 2、寄存器 二、FPGA控制DAC...
  • STM32+DAC7718通讯代码

    2020-11-07 16:10:41
    DAC7718是一块双极性DAC芯片,但是使用的人极少。其通过SPI协议与MCU进行通信。此代码是通过STM32一次性控制8片DAC芯片
  • STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能...在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案
  • 分析了终端测试仪对ADC/DAC和射频模块的要求,同时介绍了MAX19700、MAX2507、MAX2392芯片。重点描述了测试仪如何控制芯片收发信号。 关键词:TD-SCDMA;MAX19700;MAX2507;MAX2392 引言 TD-SCDMA产业链规模发展迅速...
  • 由于MSP432P401R芯片中不带DAC外设,LaunchPad上也没有DAC,因此外扩DAC模块是2020年电赛必备模块,这个程序是keil MDK工程,原创代码,测试OK,特别推荐。
  • 本文用STM32RCT6的I2C1实现控制芯片四路分别输出给定的电压值,其中使用了目前尚还有些问题的HAL库实现硬件I2C通信。 DAC6573使用与工程大体思路 DAC6573设置方式为用I2C向器件写入四个连续的字节,分别为Address ...
  • SK8855是一颗高整合度的控制器,内含32-bit RISC CPU核心,并整合以下重要周边元件,如JPEG Decoder, LCD Controller, Class D Audio DAC with AMP, USB 2.0 Host及USB2.0 Device, Multi-slot Card Reader, TV ...
  • 最近使用到DAC芯片,目的是通过stm32f4控制控制该芯片输出想要的电压,芯片的通信接口是SPI,一次需要发送24bits的数据才行,但是stm32f4的SPI硬件只有8bits和16bits两种选择,所以没法用硬件来实现,只能通过软件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 475
精华内容 190
关键字:

dac芯片控制