DAC7811使用总结

在备战电赛期间使用了很多模块,后面有时间慢慢总结总结,以免下一次踩坑。
这次总结的是数模转换器DAC7811的使用,它的具体参数性能,笔者就不赘述了。相信读者在选择使用某芯片之前都会去具体看它的数据手册的。

通信时序图

SPI时序
数据定义
控制位定义
通过时序图,可以看到该芯片使用的是数据为16位,时钟下降沿触发的SPI通信协议。
其通信数据的高4位为控制位,紧跟的12位才是数据位。普通使用的话,直接取C3C2C1C0=0001。

驱动程序

本次使用的是TI的MSP432P401R LanunchPad开发板。根据时序图编写的程序如下:

#ifndef __DAC7811_H_
#define __DAC7811_H_

#include "driverlib.h"
#include "stdint.h"

#define u8  unsigned char
#define u16 unsigned short int
#define u32 unsigned int

#define SCLK_Port GPIO_PORT_P5
#define SCLK_Pin  GPIO_PIN0
#define SYNC_Port GPIO_PORT_P5
#define SYNC_Pin  GPIO_PIN2
#define SDIN_Port GPIO_PORT_P3
#define SDIN_Pin  GPIO_PIN6

#define SPI_SCLK_L    GPIO_setOutputLowOnPin(SCLK_Port,SCLK_Pin)
#define SPI_SCLK_H    GPIO_setOutputHighOnPin(SCLK_Port,SCLK_Pin)
#define SPI_SYNC_L    GPIO_setOutputLowOnPin(SYNC_Port,SYNC_Pin)
#define SPI_SYNC_H    GPIO_setOutputHighOnPin(SYNC_Port,SYNC_Pin)	
#define SPI_SDIN_L    GPIO_setOutputLowOnPin(SDIN_Port,SDIN_Pin)
#define SPI_SDIN_H    GPIO_setOutputHighOnPin(SDIN_Port,SDIN_Pin) 

void DAC7811_Init(void);
void DAC7811_Write(u16 da);

#endif
#include "DAC7811.h"

void DAC7811_Init(void)
{
    
    			     
	GPIO_setAsOutputPin(SCLK_Port,SCLK_Pin);         
    GPIO_setAsOutputPin(SYNC_Port,SYNC_Pin);      
  	GPIO_setAsOutputPin(SDIN_Port,SDIN_Pin); 
	SPI_SCLK_H;
	SPI_SYNC_H;
	SPI_SDIN_H;
}
void DAC7811_Write(u16 da) //DAC7811 12bits
{
    
    
	u8 i;
	da|=0x1000;//bit12=1
	da&=0x1FFF;//bit15、14、13=0
	SPI_SCLK_H;
	SPI_SYNC_H;
	SPI_SYNC_L;
	for(i=0; i<16; i++)
	{
    
    
		SPI_SCLK_H;
		if(da & 0x8000) SPI_SDIN_H;
		else SPI_SDIN_L;
		SPI_SCLK_L;
		da<<=1;
	}
	SPI_SCLK_H;
	SPI_SDIN_H;
	SPI_SYNC_H;
}

DAC7811正常工作时,逻辑分析仪采集的时序图如下:
逻辑分析仪时序
程序比较简单,但是当时笔者也踩到了坑,就是空闲时钟给成了低电平,导致一直无法通信。

另外,使用如下程序可以使MSP432P401R从P5.6引脚输出2.5V的参考电压,进而作为DAC7811的参考电压输入。

REF_A_setReferenceVoltage(REF_A_VREF2_5V);
REF_A_enableReferenceVoltage();
REF_A_enableReferenceVoltageOutput();

硬件电路验证

DAC7811数据手册中提供了如下两种驱动电路,第一种是单极性输出电路,第二种是双极性输出电路。
正电压输出电路
正负电压输出电路
本次硬件电路的测试采用双极性输出电路。
其中运放采用的是精密运放OPA2140, 其他元器件参数基本和电路图相同。
最后焊接出来的测试电路如下:
测试电路
运行程序,向DAC7811写入正弦波数据,得到的正弦波输出波形如下图所示:
输出正弦波波形
下图是使用DAC7811构成程控放大器的输出波形。
程控放大器波形
最后笔者队伍遇到的问题是,驱动DAC7811输出的正弦信号频率不是很高,后级接入滤波电路后,得到的正弦信号频率最高只有30kHz左右。这远远没有达到该芯片的最高输出频率,要想提高其输出信号频率,一是采用更高主频的微控制器,二是采用硬件SPI+DMA的方式驱动。另外本次采用的是模拟SPI方式驱动,并且一次只写入单个数据,而从它的时序图知道,是可以连续写入多个数据的,采用连续写入方式可以提高一定的速度。

猜你喜欢

转载自blog.csdn.net/weixin_44625313/article/details/109518691