基于16位ADC芯片TM7705+AD623儀表運(yùn)放的電壓和電流信號(hào)采集的方案驗(yàn)證板_PDF_C95040
焊接完成后的實(shí)物圖:
材料清單bom
硬件原理圖和pcb工程可以到附件中下載
TM7705方案驗(yàn)證板的使用說(shuō)明
本驗(yàn)證板通過(guò)制作一個(gè)基于TM7705的ADC模數(shù)轉(zhuǎn)換電路,進(jìn)行電壓和電流信號(hào)的采集驗(yàn)證。
為了使用正常使用這個(gè)PCB空板,請(qǐng)大家按照一下步驟進(jìn)行操作:
第1步: 根據(jù)BOM表,焊接出PCBA。焊接過(guò)程中,需要注意的是TM7705這款芯片有寬體(SOIC-16_300mil)和窄體(SOIC-16_150mil)2個(gè)封裝,此驗(yàn)證板已經(jīng)做了兼容處理,2個(gè)封裝均可焊接,用戶自己設(shè)計(jì)電路時(shí)需要注意。 另外,STC單片機(jī)是可以不焊接的,用戶通過(guò)引出的功能腳,可以用自己的單片機(jī)直接控制TM7705。 注:驗(yàn)證板上的R6電阻不用焊接。 第2步:焊接好后,先用萬(wàn)用表測(cè)試一下,看看是否存在有PCB焊接短路現(xiàn)象,用商城 的CH340 USB轉(zhuǎn)串口模塊或者STC編程器給驗(yàn)證板供電。
第3步:使用STC官方燒錄軟件及商城 的CH340 USB轉(zhuǎn)串口模塊或者STC編程器,接線順序5V RxD TxD 0V給驗(yàn)證板燒錄程序;
第4步:燒錄成功后,不要拔掉編程器,打開串口助手,波特率設(shè)置9600,文本接收模式,此時(shí)通過(guò)TTL串口可以接收到驗(yàn)證板返回的測(cè)量數(shù)據(jù),更新頻率1s;
第5步:ENJOY! 此時(shí)可以在驗(yàn)證板的輸入口:0-2.5V /4-20mA輸入電壓電流信號(hào)來(lái)驗(yàn)證ADC芯片的性能啦; 注:0-2.5V電壓輸入口輸入放大倍數(shù),是可以通過(guò)RP1點(diǎn)位器(100K)調(diào)節(jié)的; 4-20mA為直接采集信號(hào),不做放大處理。
單片機(jī)源程序如下:
- /******************** 新創(chuàng)電子007 ***************
- * File Name : MAIN.h
- * Author :
- * Version : Keil uVision4
- * Description : public header file
- *免責(zé)聲明: 1.此程序?yàn)門M7705演示程序,僅作參考之用。
- 2.如有直接使用本例程程序造成經(jīng)濟(jì)損失的,不承擔(dān)任何責(zé)任
- *******************************************************/
- #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實(shí)時(shí)值
- 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() //定時(shí)器初始化
- {
- TMOD=0x01;
- ET0=1; //T0內(nèi)部中斷 允許
- TH0=0xec; //5MS延時(shí)
- TL0=0x78;
- EA=1; //開啟總中斷
- TR0=1; //啟動(dòng)定時(shí)器0
- }
- void GetAD()
- {
- uchar temp1,temp2;
- uint temp;
- float Dis1=2498.000000,Dis2=65535.000000,Dis3=0.000000;
- //基準(zhǔn)電壓值 萬(wàn)用表測(cè)量
- if(Step==0)
- {
- write_byte_TM7705(1,0x10); //通道1(0 0 0 1 0 0 0 0),寫通訊寄存器下一步寫設(shè)置寄存器
- write_byte_TM7705(1,0x44); //寫入設(shè)置寄存器(0 1 0 0 0 1 0 0),自校準(zhǔn)模式0 1,1倍增益0 0 0,單極性B/U=1,buf串聯(lián)設(shè)置為0,F(xiàn)SYNC=0
- Step=2;
- }
- if(Step==1)
- {
- write_byte_TM7705(1,0x11); //通道1(0 0 0 1 0 0 0 0),寫通訊寄存器下一步寫設(shè)置寄存器
- write_byte_TM7705(1,0x44); //寫入設(shè)置寄存器(0 1 0 0 0 0 0 0),自校準(zhǔn)模式0 1,16倍增益0 0 0,雙極性B/U=0,buf串聯(lián)設(shè)置為0,F(xiàn)SYNC=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 運(yùn)放放大倍數(shù)2(電位器100K時(shí)),程序做了除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;//啟動(dòng)看門狗
- while(1)
- {
- // WDT_CONTR|=0x10;//清看門狗
- GetAD(); //ADC 通道1和通道2輪流采集,采集頻率50HZ
- if(BZ==1) //每1秒主動(dòng)上傳采集結(jié)果
- {
- 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 // 時(shí)鐘中斷 0
- {
- TH0=0xdc; //約5ms
- TL0=0x00;
- TimeN++;
- ChaoShi1++;
- if(ChaoShi1>5) //數(shù)據(jù)接收超時(shí)
- {
- 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) //數(shù)據(jù)包頭
- {
- if(uart_buf2[0]!=0xff) S1=0;
- }
- if(S1==2) //數(shù)據(jù)包頭
- {
- if(uart_buf2[1]!=0x5c) S1=0;
- if(uart_buf2[1]==0xff) {S1=1;uart_buf2[0]=uart_buf2[1];}
- }
- if(S1==3) //設(shè)備地址
- {
- if(uart_buf2[2]!=Address) S1=0;
- if(uart_buf2[2]==0xff){S1=1;uart_buf2[0]=uart_buf2[2];}
-
- }
- if(S1==4) //數(shù)據(jù)長(zhǎng)度
- {
- 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接收字節(jié)計(jì)數(shù),SBZ1串口1接收完成標(biāo)志 1完成 0未完成,Slen數(shù)據(jù)長(zhǎng)度
- if(S1>51) //緩沖區(qū)溢出
- {
- S1=0;Slen1=0;
- }
- }
復(fù)制代碼- /******************** 新創(chuàng)電子007 ***************
- * File Name : MAIN.h
- * Author :
- * Version : Keil uVision4
- * Date First Issued : 24/01/2017
- * Description : 單片機(jī)22.1184MHZ、TM7705外部晶振4.9152MHZ
- TM7705讀取采集到的16bit AD數(shù)據(jù)經(jīng)過(guò)換算后,每秒通過(guò)串口1發(fā)送采集結(jié)果
- *免責(zé)聲明: 1.此程序?yàn)門M7705演示程序,僅作參考之用。
- 2.如有直接使用本例程程序造成經(jīng)濟(jì)損失的,本公司不承擔(dān)任何責(zé)任
- *******************************************************/
- #include <STC15F2K60S2.h>
- #include <TM7705.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SCLK_TM7705=P1^0; //定義SCLK時(shí)鐘信號(hào)端口
- sbit DIN_TM7705=P1^5; //定義DIN數(shù)據(jù)輸入端口
- sbit DOUT_TM7705=P1^4; //定義DOUT數(shù)據(jù)輸出端口
- 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() //短延時(shí)函數(shù),晶振11.0592MHZ,延時(shí)約1us
- {
- ; ; ;
- }
- void delay_nms(uchar n) //延時(shí)約nms
- {
- uchar i;
- while(n--)
- for(i=0;i<125;i++);
- }
- void write_byte_TM7705(uchar a,uchar dat1) //將數(shù)據(jù)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寄存器讀數(shù)據(jù)
- {
- 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();
-
- /*********以下為設(shè)置通道1************/
- write_byte_TM7705(a,0x20); //通道1(0 0 1 0 0 0 0 0),寫通訊寄存器下一步寫時(shí)鐘寄存器
- write_byte_TM7705(a,0x0C); //50HZ(0 0 0 0 1 1 0 0) 因?yàn)榫д駷?.9152MHZ需設(shè)置CLKDIV=1,CLK=1;
-
- write_byte_TM7705(a,0x10); //通道1(0 0 0 1 0 0 0 0),寫通訊寄存器下一步寫設(shè)置寄存器
- // write_byte_TM7705(0x7C); //寫入設(shè)置寄存器(0 1 1 1 1 1 0 0)自校準(zhǔn)模式0 1,1倍增益0 0 0,單極性B/U=1,buf串聯(lián)設(shè)置為0,F(xiàn)SYNC=0;
- write_byte_TM7705(a,0x44);
- /*********以下為設(shè)置通道2************/
- /* write_byte_TM7705(a,0x21); //通道2(0 0 1 0 0 0 0 1),寫通訊寄存器下一步寫時(shí)鐘寄存器
- write_byte_TM7705(a,0x0c); //50HZ(0 0 0 0 0 1 0 0),若晶振為2.4576MHZ需設(shè)置CLKDIV=0,CLK=1;
- //write_byte_TM7705(0x08); //20HZ(0 0 0 0 1 0 0 0),若晶振為2MHZ需設(shè)置CLKDIV=1,CLK=0;
- write_byte_TM7705(a,0x11); //通道2(0 0 0 1 0 0 0 1),寫通訊寄存器下一步寫設(shè)置寄存器
- write_byte_TM7705(a,0x44);*/ //寫入設(shè)置寄存器(0 1 0 0 0 1 0 0)自校準(zhǔn)模式0 1,1倍增益0 0 0,單極性B/U=1,buf串聯(lián)設(shè)置為0,F(xiàn)SYNC=0;
- CS1=1;CS2=1;CS3=1;CS4=1;
- }
復(fù)制代碼
所有資料51hei提供下載:
基于16位ADC芯片TM7705的電壓和電流信號(hào)采集的方案驗(yàn)證板_PDF_C95040_2017-04-12.rar
(1.96 MB, 下載次數(shù): 695)
2018-5-17 11:28 上傳
點(diǎn)擊文件名下載附件
TM7705的電壓和電流信號(hào)
|