本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
这个AD转换模块还没开整,找到一篇相关的不知道能不能用,先存着,计划早晚整一个简易展示电压变化波形的东西,就用51单片机。
TM7705、TM7707 的硬件电路
TM7705 和 TM7707 的是 PIN 对 PIN(管脚)兼容的,因此在硬件电路上完全兼容。
外围电路中,TM7705 和 TM7707 内部没有振荡器和基准电压,需要外接晶振电路和基准电路,一般接 1M 或者 2.4576M 晶振;基准电压范围为 GND~VDD,一般推荐 1/2 的 VDD, 基准电压是模拟信号的参考电压,所以基准电压要保持稳定,不波动。输入电压与放大倍数有关,输入电压范围:0 ~ (基准电压 / 增益倍数)。
图 1 硬件电路图
通讯时序
通讯上 TM7705 和 TM7707 基本相同,只是具体的指令 TM7707 与 TM7705 不同,时序上 TM7707 和 TM7705 相同,都是五线通讯但是可以通过改变程序和硬件电路连接到 SPI 总线上进行通讯。
void write_byte_TM7705(uchar dat1) //将数据dat1写入TM7705
{
uchar i;
SCLK_TM7705=1;
for(i=0;i<8;i++)
{
SCLK_TM7705=0;
delay_us();
if(dat1&0x80) DIN_TM7705=1; //先写高位
else DIN_TM7705=0;
delay_us();
SCLK_TM7705=1;
delay_us();
dat1<<=1;
}
SCLK_TM7705=1;
DIN_TM7705=1;
}
unsigned char read_byte_TM7705() //从TM7705寄存器读数据
{
uchar i,dat2=0;
SCLK_TM7705=1;
for(i=0;i<8;i++)
{
SCLK_TM7705=0;
delay_us();
dat2=(dat2<<1)|DOUT_TM7705; // 高位先读
delay_us();
SCLK_TM7705=1;
delay_us();
}
SCLK_TM7705=1;
return dat2;
}
在写程序时 SCLK 管脚的高、低电平的延时都要大于 2US,程序流程大致上电 40 个时钟用于软件复位,然后发寄存器配置指令,在自校准后需要 200MS 的延时后才能接收到有效的输出数据,且每次通道切换都要进行自校准(即每次切换都要等待 200MS)。
void TM7705_init()
{
uchar i;
SCLK_TM7705=1;
DIN_TM7705=1;
DOUT_TM7705=1;
DRDY_TM7705=1;
for(i=0;i<40;i++)
{
SCLK_TM7705=0;
delay_us();
SCLK_TM7705=1;
delay_us();
}
delay_us();
delay_us();
}
void main()
{
unsigned char n,temp1,temp2;
UART_init();
TM7705_init();
delay_nms(50);
write_byte_TM7705(0x20); //通道1和2共用(0 0 1 0 0 0 0 0),写通讯寄存器下一步写时钟寄存器
write_byte_TM7705(0x04); //50HZ(0 0 0 0 0 1 0 0) 若晶振为2.4576MHZ需设置CLKDIV=0,CLK=1
//write_byte_TM7705(0x08); //20HZ(0 0 0 0 1 0 0 0) 若晶振为2MHZ需设置CLKDIV=1,CLK=0
while(1)
{
write_byte_TM7705(0x10); //通道1(0 0 0 1 0 0 0 0),写通讯寄存器下一步写设置寄存器
//write_byte_TM7705(0x44); //写入设置寄存器(0 1 0 0 0 1 0 0),自校准模式0 1,1倍增益0 0 0,单极性B/U=1,buf串联设置为0,FSYNC=0;
//write_byte_TM7705(0x40); //写入设置寄存器(0 1 0 0 0 0 0 0),自校准模式0 1,1倍增益0 0 0,双极性B/U=0,buf串联设置为0,FSYNC=0;
write_byte_TM7705(0x58); //写入设置寄存器(0 1 0 0 0 0 0 0),自校准模式0 1,16倍增益0 0 0,双极性B/U=0,buf串联设置为0,FSYNC=0;
delay_nms(200);
for(n=0;n<6;n++)
{
write_byte_TM7705(0x38); //读通道1
while(DRDY_TM7705==1);
delay_nms(1);
temp1=read_byte_TM7705(); //先读高8位
temp2=read_byte_TM7705(); //再读低8位
delay_nms(10);
}
write_byte_TM7705(0x11); //通道2(0 0 0 1 0 0 0 1),写通讯寄存器下一步写设置寄存器
//Write_byte_TM7705(0x44); //写入设置寄存器(0 1 0 0 0 1 0 0)自校准模式0 1,1倍增益0 0 0,单极性B/U=1,buf串联设置为0,FSYNC=0;
write_byte_TM7705(0x40); //写入设置寄存器(0 1 0 0 0 0 0 0),自校准模式0 1,1倍增益0 0 0,双极性B/U=0,buf串联设置为0,FSYNC=0;
delay_nms(200);
for(n=0;n<6;n++)
{
write_byte_TM7705(0x39); //读通道2
while(DRDY_TM7705==1);
delay_nms(1);
temp1=read_byte_TM7705(); //先读高8位
temp2=read_byte_TM7705(); //再读低8位
delay_nms(10);
}
}
}
输出的电压转换
TM7705、TM7707 输出的都是 16 进制的数据,需要转换后才能得到有效的电压值
单极性公式
双极性公式
Comments | NOTHING