磁致伸缩位移传感器模拟输出分为0-5V电压和4-20mA电流两种输出方式,本磁致伸缩位移传感器中采用ADI公司生产的16位DAC来完成数字量向模拟量的转化。
AD5422具有串行SPI通信接口,可以直接作为SPI从机与外部控制器相连。AD5422串行编程接口工作方式为SPI工作模式0,其逻辑时序图如图1所示。
从图1中可以看出,AD5422与微控制器通信需要四线相连。LATCH端口为芯片片选端,上升沿有效。当此端口上升沿到来时,AD5422将移位寄存器中内容转移到DAC内部寄存器中,同时更新芯片输出。SCLK端口为时钟线,与单片机SPI端口时钟端相连,同步输入输出数据。SDIN为数据线,与单片机SPI接口数据输出端相连。单片机与AD5422的通信是以24位二进制数为一帧数据,其中前8位数为芯片命令控制码或内部寄存器地址,后16位数为单片机和DAC相互通信的数据。AD5422写数据核心代码如下:
void WriteToAD5422(uchar Addr,uint Data)
{
EnableAD5422;//使能本片AD5422片选端
SPDR=Addr; //AD5422内部寄存器地址
while (!(SPSR&(1<<SQIF)));//通过SPI端口写入
SPDR= Data;8;//先写高8位数据
while (!(SPSR&(1<<SQIF)));
SPDR= Data; //后写低8位数据
while (!(SPSR&(1<<SQIF)));
DisableADS422;//禁1 L-本片AD5422片选端
}
其中变量Addr为芯片内部寄存器地址,Data为向芯片写入的数据。程序中直接调用此函数即可完成单片机向AD5422传送数据。单片机读取AD5422内部寄存器数据与写数据实现机理类似,在此不再赘述。
AD5422具有输出0-5V和4-2OmA的能力,其工作方式通过单片机对DAC内部工作模式寄存器设置来完成。关键代码如下所示:
#define AD5422Control_Add 0x55//控制寄存器地址
#define AD5422RGSEL_1 0x00 //0-5V控制码
#define AD5422RGSEL_5 0x05 //4-20mA控制码
#define AD54220UTEN OxI000 !!输出使能
WriteToAD5422{AD5422Contro3 Add,(AD5422RGSEL_1 AD54220UTEN)); llAD5422工作在0-5V作模式
WriteToAD5422{AD5422Control`Add,(AD5422RGSEL_5 AD54220UTEN)); //AD5422工作在4-20mA工作模式
单片机完成AD5422初始化后,向芯片数据寄存器写入位移量对应的二进制代码,
就可以得到相应的电压或电流输出。调试中采用六位半万用表测量电压和电流的输出,
调试现场如图2所示。