基于16位ADC芯片TM7705+AD623儀表運放的電壓和電流信號采集的方案驗證板_PDF_C95040
0.png (45.8 KB, 下載次數: 131)
下載附件
2018-5-17 18:09 上傳
焊接完成后的實物圖:
0.png (229.71 KB, 下載次數: 131)
下載附件
2018-5-17 18:10 上傳
材料清單bom
0.jpg (70.84 KB, 下載次數: 124)
下載附件
2018-5-17 18:10 上傳
硬件原理圖和pcb工程可以到附件中下載
TM7705方案驗證板的使用說明
本驗證板通過制作一個基于TM7705的ADC模數轉換電路,進行電壓和電流信號的采集驗證。
為了使用正常使用這個PCB空板,請大家按照一下步驟進行操作:
第1步: 根據BOM表,焊接出PCBA。焊接過程中,需要注意的是TM7705這款芯片有寬體(SOIC-16_300mil)和窄體(SOIC-16_150mil)2個封裝,此驗證板已經做了兼容處理,2個封裝均可焊接,用戶自己設計電路時需要注意。 另外,STC單片機是可以不焊接的,用戶通過引出的功能腳,可以用自己的單片機直接控制TM7705。 注:驗證板上的R6電阻不用焊接。 第2步:焊接好后,先用萬用表測試一下,看看是否存在有PCB焊接短路現象,用商城 的CH340 USB轉串口模塊或者STC編程器給驗證板供電。
第3步:使用STC官方燒錄軟件及商城 的CH340 USB轉串口模塊或者STC編程器,接線順序5V RxD TxD 0V給驗證板燒錄程序;
第4步:燒錄成功后,不要拔掉編程器,打開串口助手,波特率設置9600,文本接收模式,此時通過TTL串口可以接收到驗證板返回的測量數據,更新頻率1s;
第5步:ENJOY! 此時可以在驗證板的輸入口:0-2.5V /4-20mA輸入電壓電流信號來驗證ADC芯片的性能啦; 注:0-2.5V電壓輸入口輸入放大倍數,是可以通過RP1點位器(100K)調節的; 4-20mA為直接采集信號,不做放大處理。
單片機源程序如下:
- /******************** 新創電子007 ***************
- * File Name : MAIN.h
- * Author :
- * Version : Keil uVision4
- * Description : public header file
- *免責聲明: 1.此程序為TM7705演示程序,僅作參考之用。
- 2.如有直接使用本例程程序造成經濟損失的,不承擔任何責任
- *******************************************************/
- #include<STC15F2K60S2.h>
- #include<usart.h>
- #include<intrins.h>
- #include <TM7705.h>
- #define ENABLE_ISP 0x83
- #define uint unsigned int
- #define uchar unsigned char
- sbit P1_3=P1^3;
- uchar TimeN=0,BZ=1,sbuf[2]={0,0},Step=0;
- xdata uchar uart_buf1[60],uart_buf2[60],S1=0,SBZ1=0,Slen1=0,send_buf[50];
- uchar ChaoShi1=0,Address=0xfe;
- uint ADis[4]={0,0,0,0}; //ADC實時值
- unsigned long mV=0,mA=0; //采集電壓和電流值
- void Delay1(uint ms)
- {
- uint i;
- while(ms--)
- {
- for(i=1;i<(uint)(8*143-2);i++)
- ;
- }
- }
- void Init() //定時器初始化
- {
- TMOD=0x01;
- ET0=1; //T0內部中斷 允許
- TH0=0xec; //5MS延時
- TL0=0x78;
- EA=1; //開啟總中斷
- TR0=1; //啟動定時器0
- }
- void GetAD()
- {
- uchar temp1,temp2;
- uint temp;
- float Dis1=2498.000000,Dis2=65535.000000,Dis3=0.000000;
- //基準電壓值 萬用表測量
- if(Step==0)
- {
- write_byte_TM7705(1,0x10); //通道1(0 0 0 1 0 0 0 0),寫通訊寄存器下一步寫設置寄存器
- write_byte_TM7705(1,0x44); //寫入設置寄存器(0 1 0 0 0 1 0 0),自校準模式0 1,1倍增益0 0 0,單極性B/U=1,buf串聯設置為0,FSYNC=0
- Step=2;
- }
- if(Step==1)
- {
- write_byte_TM7705(1,0x11); //通道1(0 0 0 1 0 0 0 0),寫通訊寄存器下一步寫設置寄存器
- write_byte_TM7705(1,0x44); //寫入設置寄存器(0 1 0 0 0 0 0 0),自校準模式0 1,16倍增益0 0 0,雙極性B/U=0,buf串聯設置為0,FSYNC=0;
- Step=3;
- }
- if(P1_3==0)
- {
- if(Step==2)
- {
- write_byte_TM7705(1,0x38); //讀通道1
- temp1=read_byte_TM7705(1); //先讀高位
- temp2=read_byte_TM7705(1); //再讀低位
- temp=temp1*256+temp2;
- Dis3=Dis1/Dis2;
- Dis3=temp*Dis3;
- mV=Dis3*500; //電壓值換算,輸入電壓0-1.25V 運放放大倍數2(電位器100K時),程序做了除2處理
- Step=1;
- }
- if(Step==3)
- {
- write_byte_TM7705(1,0x39); //讀通道2
- temp1=read_byte_TM7705(1); //先讀高位
- temp2=read_byte_TM7705(1); //再讀低位
- temp=temp1*256+temp2;
- Dis3=Dis1/Dis2;
- Dis3=temp*Dis3;
- mA=Dis3*10; //電流值換算,輸入電電流0-20mA
- Step=0;
- }
- }
- }
- void main()
- {
- uchar i;
- P1M1=0;P0M0=0;
- Delay1(50);
- Init();
- InitCom1();
- delay_nms(50);
- TM7705_init(1);
- delay_nms(50);
- UARTSendByte1(Address);
- //WDT_CONTR=0x34;//啟動看門狗
- while(1)
- {
- // WDT_CONTR|=0x10;//清看門狗
- GetAD(); //ADC 通道1和通道2輪流采集,采集頻率50HZ
- if(BZ==1) //每1秒主動上傳采集結果
- {
- BZ=0;
- UARTSendByte1(mV/1000000+'0');
- UARTSendByte1(mV%1000000/100000+'0');
- UARTSendByte1(mV%100000/10000+'0');
- UARTSendByte1(mV%10000/1000+'0');
- UARTSendByte1('.');
- UARTSendByte1(mV%1000/100+'0');
- UARTSendByte1(mV%100/10+'0');
- UARTSendByte1(mV%10+'0');
- UARTSendByte1('m');
- UARTSendByte1('V');
- UARTSendByte1(' ');
- UARTSendByte1(mA/1000000+'0');
- UARTSendByte1(mA%1000000/100000+'0');
- UARTSendByte1(mA%100000/10000+'0');
- UARTSendByte1(mA%10000/1000+'0');
- UARTSendByte1('.');
- UARTSendByte1(mA%1000/100+'0');
- UARTSendByte1(mA%100/10+'0');
- UARTSendByte1(mA%10+'0');
- UARTSendByte1('m');
- UARTSendByte1('A');
- UARTSendByte1('\n');
- }
- if(SBZ1==1)
- {
-
- for(i=0;i<uart_buf2[3];i++)
- {
- uart_buf1[i]=uart_buf2[i];
- }
- SBZ1=0;
- }//SBZ1
- }//while
- }//main
- void int2() interrupt 1 // 時鐘中斷 0
- {
- TH0=0xdc; //約5ms
- TL0=0x00;
- TimeN++;
- ChaoShi1++;
- if(ChaoShi1>5) //數據接收超時
- {
- S1=0;
- ChaoShi1=0;
- }
- if(TimeN>=200)
- {
- TimeN=0;
- BZ=1;
- }
- // if(TimeN==1) LED_DY=0; //電源指示燈閃爍
- // if(TimeN==8) LED_DY=1; //電源指示燈閃爍
- }
- void UART_Interrupt_Receive(void) interrupt 4 //串口1
- {
- if(RI==1)
- {
- RI=0;
- uart_buf2[S1]=SBUF;
- S1++;
- ChaoShi1=0;
- }else{TI=0;}
- if(S1==1) //數據包頭
- {
- if(uart_buf2[0]!=0xff) S1=0;
- }
- if(S1==2) //數據包頭
- {
- if(uart_buf2[1]!=0x5c) S1=0;
- if(uart_buf2[1]==0xff) {S1=1;uart_buf2[0]=uart_buf2[1];}
- }
- if(S1==3) //設備地址
- {
- if(uart_buf2[2]!=Address) S1=0;
- if(uart_buf2[2]==0xff){S1=1;uart_buf2[0]=uart_buf2[2];}
-
- }
- if(S1==4) //數據長度
- {
- if(uart_buf2[3]>50){S1=0;Slen1=0;}
- else Slen1=uart_buf2[3];
- if(uart_buf2[3]==0xFF){S1=1;uart_buf2[0]=uart_buf2[3];Slen1=0;}
- }
- if(S1>=Slen1&&S1>6)
- {S1=0;SBZ1=1;Slen1=0;} //S1接收字節計數,SBZ1串口1接收完成標志 1完成 0未完成,Slen數據長度
- if(S1>51) //緩沖區溢出
- {
- S1=0;Slen1=0;
- }
- }
復制代碼- /******************** 新創電子007 ***************
- * File Name : MAIN.h
- * Author :
- * Version : Keil uVision4
- * Date First Issued : 24/01/2017
- * Description : 單片機22.1184MHZ、TM7705外部晶振4.9152MHZ
- TM7705讀取采集到的16bit AD數據經過換算后,每秒通過串口1發送采集結果
- *免責聲明: 1.此程序為TM7705演示程序,僅作參考之用。
- 2.如有直接使用本例程程序造成經濟損失的,本公司不承擔任何責任
- *******************************************************/
- #include <STC15F2K60S2.h>
- #include <TM7705.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SCLK_TM7705=P1^0; //定義SCLK時鐘信號端口
- sbit DIN_TM7705=P1^5; //定義DIN數據輸入端口
- sbit DOUT_TM7705=P1^4; //定義DOUT數據輸出端口
- sbit DRDY1=P1^3; //定義DRDY可讀AD端口
- sbit CS1=P1^1; //定義DRDY可讀AD端口
- sbit RST1=P1^2; //定義DRDY可讀AD端口
- sbit DRDY2=P5^4; //定義DRDY可讀AD端口
- sbit CS2=P5^4; //定義DRDY可讀AD端口
- sbit RST2=P5^4; //定義DRDY可讀AD端口
- sbit DRDY3=P5^4; //定義DRDY可讀AD端口
- sbit CS3=P5^4; //定義DRDY可讀AD端口
- sbit RST3=P5^4; //定義DRDY可讀AD端口
- sbit DRDY4=P5^4; //定義DRDY可讀AD端口
- sbit CS4=P5^4; //定義DRDY可讀AD端口
- sbit RST4=P5^4; //定義DRDY可讀AD端口
- void delay_us() //短延時函數,晶振11.0592MHZ,延時約1us
- {
- ; ; ;
- }
- void delay_nms(uchar n) //延時約nms
- {
- uchar i;
- while(n--)
- for(i=0;i<125;i++);
- }
- void write_byte_TM7705(uchar a,uchar dat1) //將數據dat1寫入TM7705
- {
- uchar i;
- switch(a)
- {
- case 1: CS1=0;CS2=1;CS3=1;CS4=1;break;
- case 2: CS2=0;CS1=1;CS3=1;CS4=1;break;
- case 3: CS3=0;CS1=1;CS2=1;CS4=1;break;
- case 4: CS4=0;CS1=1;CS2=1;CS3=1;break;
- default:break;
- }
- 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;
- CS1=1;CS2=1;CS3=1;CS4=1;
- }
- unsigned char read_byte_TM7705(uchar a) //從TM7705寄存器讀數據
- {
- uchar i,dat2=0;
- switch(a)
- {
- case 1: CS1=0;CS2=1;CS3=1;CS4=1;break;
- case 2: CS2=0;CS1=1;CS3=1;CS4=1;break;
- case 3: CS3=0;CS1=1;CS2=1;CS4=1;break;
- case 4: CS4=0;CS1=1;CS2=1;CS3=1;break;
- default:break;
- }
- 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;
- CS1=1;CS2=1;CS3=1;CS4=1;
- return dat2;
- }
- void TM7705_init(uchar a)
- {
- uchar i;
- RST1=1;RST2=1;RST3=1;RST4=1;
- switch(a)
- {
- case 1: CS1=0;CS2=1;CS3=1;CS4=1;RST1=1;break;
- case 2: CS2=0;CS1=1;CS3=1;CS4=1;RST2=1;break;
- case 3: CS3=0;CS1=1;CS2=1;CS4=1;RST3=1;break;
- case 4: CS4=0;CS1=1;CS2=1;CS3=1;RST4=1;break;
- default:break;
- }
- SCLK_TM7705=1;
- DIN_TM7705=1;
- DOUT_TM7705=1;
- switch(a)
- {
- case 1: DRDY1=1;break;
- case 2: DRDY2=1;break;
- case 3: DRDY3=1;break;
- case 4: DRDY4=1;break;
- default:break;
- }
- for(i=0;i<40;i++)
- {
- SCLK_TM7705=0;
- delay_us();
- SCLK_TM7705=1;
- delay_us();
- }
- delay_us();
- delay_us();
-
- /*********以下為設置通道1************/
- write_byte_TM7705(a,0x20); //通道1(0 0 1 0 0 0 0 0),寫通訊寄存器下一步寫時鐘寄存器
- write_byte_TM7705(a,0x0C); //50HZ(0 0 0 0 1 1 0 0) 因為晶振為4.9152MHZ需設置CLKDIV=1,CLK=1;
-
- write_byte_TM7705(a,0x10); //通道1(0 0 0 1 0 0 0 0),寫通訊寄存器下一步寫設置寄存器
- // write_byte_TM7705(0x7C); //寫入設置寄存器(0 1 1 1 1 1 0 0)自校準模式0 1,1倍增益0 0 0,單極性B/U=1,buf串聯設置為0,FSYNC=0;
- write_byte_TM7705(a,0x44);
- /*********以下為設置通道2************/
- /* write_byte_TM7705(a,0x21); //通道2(0 0 1 0 0 0 0 1),寫通訊寄存器下一步寫時鐘寄存器
- write_byte_TM7705(a,0x0c); //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;
- write_byte_TM7705(a,0x11); //通道2(0 0 0 1 0 0 0 1),寫通訊寄存器下一步寫設置寄存器
- write_byte_TM7705(a,0x44);*/ //寫入設置寄存器(0 1 0 0 0 1 0 0)自校準模式0 1,1倍增益0 0 0,單極性B/U=1,buf串聯設置為0,FSYNC=0;
- CS1=1;CS2=1;CS3=1;CS4=1;
- }
復制代碼
0.jpg (21.83 KB, 下載次數: 111)
下載附件
2018-5-17 18:13 上傳
所有資料51hei提供下載:
基于16位ADC芯片TM7705的電壓和電流信號采集的方案驗證板_PDF_C95040_2017-04-12.rar
(1.96 MB, 下載次數: 695)
2018-5-17 11:28 上傳
點擊文件名下載附件
TM7705的電壓和電流信號 下載積分: 黑幣 -5
|