TM7705、TM7707的硬件电路
TM7705和TM7707的是PIN对PIN(管脚)兼容的,因此在硬件电路上完全兼容。
外围电路中,TM7705和TM7707内部没有振荡器和基准电压,需要外接晶振电路和基准电路,一般接1M或者2.4576M晶振;基准电压范围为GND~VDD,一般推荐1/2的VDD, 基准电压是模拟信号的参考电压,所以基准电压要保持稳定,不波动。输入电压与放大倍数有关,输入电压范围:0 ~ (基准电压/增益倍数)。
通讯时序
通讯上TM7705和TM7707基本相同,只是具体的指令TM7707与TM7705不同,时序上TM7707和TM7705相同,都是五线通讯但是可以通过改变程序和硬件电路连接到SPI总线上进行通讯。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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进制的数据,需要转换后才能得到有效的电压值