找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10968|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)測(cè)TDS電導(dǎo)率原理圖+源程序+詳解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
大家都知道,51 單片機(jī)的外部中斷,可以設(shè)定為下降沿觸發(fā)。
當(dāng)?shù)谝淮蜗陆笛貋?lái)臨時(shí),在中斷程序中,啟動(dòng)定時(shí)器的計(jì)時(shí);在第二次下降沿來(lái)臨時(shí),再停止定時(shí)器。
這樣一來(lái),計(jì)時(shí)器所統(tǒng)計(jì)的數(shù)值,就代表了脈沖的周期。
定時(shí)器在計(jì)時(shí)方式下,是針對(duì)機(jī)器周期計(jì)數(shù),在晶振為 12MHz 時(shí),計(jì)時(shí)的結(jié)果將在 0~65536us 范圍內(nèi)。
以 ms 為單位,就是:00.000 ~ 65.535,也就是:00.000 ~ 65.535 uF。
直接用顯示器把這個(gè)數(shù)字顯示出來(lái),這就是測(cè)量電容的結(jié)果。
如果電容器的容量,超出了這范圍,可以顯示超量程的信息,提示使用者換用不同的檔位,就是換用不同的電阻。
使用單片機(jī)測(cè)量電容的仿真電路如下:
圖片連接:
超量程的提示顯示如下:
單片機(jī)的程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define LCD_IO P0
  4. sbit RS = P2^0;      //1602寫地址
  5. sbit RW = P2^1;      //1602寫數(shù)據(jù)
  6. sbit EN = P2^2;      //1602工作使能
  7. sbit RST_5 = P3^0;   //555芯片工作控制
  8. sbit K_STA = P3^1;   //開始測(cè)量的按鍵
  9. unsigned char a[16] = "Measure Capac...";
  10. //Measure Capacitance
  11. unsigned char b[16] = " C: 00.000 uF   ";
  12. unsigned int Cap;
  13. bit  Flg;
  14. //*************延時(shí)1ms*******************
  15. void Delay1ms(unsigned int mm)
  16. {
  17.     unsigned int i;
  18.     for(; mm > 0; mm--)  for(i = 100; i > 0; i--);
  19. }
  20. //*************LCD 延時(shí)******************
  21. void LCD_delay(void)   
  22. {
  23.     char i;
  24.     for (i = 10; i > 0; i--);
  25. }
  26. //*************檢查忙否******************
  27. void Checkstates()
  28. {
  29.     RS = 0; RW = 1;
  30.     while(LCD_IO & 0x80) {
  31.       EN = 0; LCD_delay();
  32.       EN = 1; LCD_delay();
  33.     };
  34.     EN = 0;
  35. }
  36. //*************向?qū)慙CD命令***************
  37. void wcomd(unsigned char cmd)
  38. {
  39.     Checkstates();
  40.     RS = 0; RW = 0;
  41.     LCD_IO = cmd; LCD_delay();
  42.     EN = 1; LCD_delay(); EN = 0;
  43. }
  44. //*************向?qū)慙CD數(shù)據(jù)***************
  45. void wdata(unsigned char dat)
  46. {
  47.     Checkstates();
  48.     RS = 1; RW = 0;
  49.     LCD_IO = dat; LCD_delay();
  50.     EN = 1; LCD_delay(); EN = 0;
  51. }
  52. //*************初始化LCD*****************
  53. void LCD_INIT()
  54. {
  55.     Delay1ms(5);
  56.     wcomd(0x38);  Delay1ms(10);//功能設(shè)置
  57.     wcomd(0x01);  Delay1ms(1); //清屏
  58.     wcomd(0x08);  Delay1ms(1); //關(guān)顯示
  59.     wcomd(0x0c);  Delay1ms(1); //開顯示,不開光標(biāo)
  60. }
  61. //*************LCD顯示*******************
  62. void Display(void) //顯示
  63. {
  64.     unsigned char i;
  65.     wcomd(0x80);  Delay1ms(5); //顯示第一行
  66.     for(i = 0; i < 16; i++)  wdata(a[i]);
  67.     wcomd(0xc0);  Delay1ms(5); //顯示第二行
  68.     for(i = 0; i < 16; i++)  wdata(b[i]);
  69. }
  70. //-------------------------------------------------
  71. void main()
  72. {
  73.    
  74.     while(1)  {
  75.       while(!K_STA)   { //當(dāng)測(cè)量鍵被按下
  76.         RST_5 = 1;      //啟動(dòng)555
  77.         Flg = 0;
  78.         Delay1ms(100);  //稍稍延時(shí), 讓555穩(wěn)定工作
  79.         EA = 1;         //開總中斷
  80.         while (EA == 1);//等待測(cè)量完畢, 下面進(jìn)行數(shù)據(jù)處理
  81. //因?yàn)橛布O(shè)計(jì)合理, 所以數(shù)據(jù)很簡(jiǎn)單, 無(wú)需復(fù)雜處理, 分離出過(guò)大過(guò)小的即可
  82.         if(Cap < 1000)  { //計(jì)數(shù)值小于100, 顯示small, 提示換量程
  83.            b[4] = 't'; b[5] = 'o'; b[6] = 'o'; b[7] = ' '; b[8] = 's'; b[9] = 'm';
  84.           b[10] = 'a';b[11] = 'l';b[12] = 'l';b[13] = '.';b[14] = ' ';b[15] = ' ';
  85.         }
  86.         else if(Cap > 60000)  { //大于60000, 顯示large, 提示量程
  87.            b[4] = 't'; b[5] = 'o'; b[6] = 'o'; b[7] = ' '; b[8] = 'l'; b[9] = 'a';
  88.           b[10] = 'r';b[11] = 'g';b[12] = 'e';b[13] = '.';b[14] = ' ';b[15] = ' ';
  89.         }
  90.         else {
  91.           b[4] = '0' + Cap / 10000 % 10;
  92.           b[5] = '0' + Cap / 1000 % 10;
  93.           b[6] = '.';
  94.           b[7] = '0' + Cap / 100 % 10;
  95.           b[8] = '0' + Cap / 10 % 10;
  96.           b[9] = '0' + Cap % 10;
  97.           b[10] = ' ';b[11] = 'u';b[12] = 'F';b[13] = ' ';b[14] = ' ';b[15] = ' ';
  98.         }
  99.         Display();      //顯示
  100.         while(!K_STA);  //等待按鍵釋放
  101.     } }
  102. }
  103. //-------------------------------------------------
  104. void X0_INT(void) interrupt 0 //控制計(jì)時(shí)的啟動(dòng)、停止
  105. {
  106.     Flg = ~Flg;
  107.     if(Flg)  TR0 = 1;   //開始計(jì)時(shí)
  108.     else  {
  109.       TR0 = 0;          //停止計(jì)時(shí)
  110.       EA = 0;           //關(guān)閉中斷
  111.       RST_5 = 0;        //關(guān)閉555
  112.       Cap = TH0 * 256 + TL0; //取出機(jī)器周期數(shù)
  113.       TH0 = 0x00;       //恢復(fù)T0初值
  114.       TL0 = 0x00;
  115.     }
  116. }
  117. //-------------------------------------------------
  118. void T0_INT(void) interrupt 1 //測(cè)量超時(shí)
  119. {
  120.     EA = 0;             //關(guān)閉中斷
  121.     RST_5 = 0;          //關(guān)閉555
  122.     TR0 = 0;            //停止定時(shí)
  123.     TH0 = 0x00;         //恢復(fù)T0初值
  124.     TL0 = 0x00;
  125.     Cap = 65535;        //超出值
  126.     Flg = 0;
  127. }
復(fù)制代碼

系統(tǒng)主要采用了555定時(shí)器構(gòu)成的RC振蕩電路和單片機(jī)技術(shù)。設(shè)計(jì)思路:被測(cè)電容C通過(guò)RC振蕩轉(zhuǎn)換成頻率信號(hào)f,送入單片機(jī)測(cè)頻,對(duì)該頻率進(jìn)行運(yùn)算處理求出被測(cè)電容的值,并送顯示器顯示。系統(tǒng)框圖如圖1所示,其主要由測(cè)量電路和控制電路兩部分組成。當(dāng)接入被測(cè)電容后,由555定時(shí)器構(gòu)成RC振蕩器產(chǎn)生方波信號(hào),把此信號(hào)通過(guò)接口傳到AT89C51單片機(jī)I/O口上,對(duì)此方波信號(hào)進(jìn)行測(cè)頻,通過(guò)軟件編程,計(jì)算出得到被測(cè)電容值,由LCD1602液晶顯示。

圖1 系統(tǒng)框圖

3 硬件設(shè)計(jì)

3.1 555振蕩電路的設(shè)計(jì)

由555芯片構(gòu)成的多諧振蕩電路如圖2,CX為被測(cè)電容,接通電源后,CX被充電,A點(diǎn)電壓UA上升。當(dāng)UA上升到時(shí),觸發(fā)器被復(fù)位,同時(shí)555芯片內(nèi)部放電三極管導(dǎo)通,此時(shí)U0為低電平。CX通過(guò)R2和放電三極管放電,使UA下降。當(dāng)UA下降到時(shí),觸發(fā)器又被置位,U0翻轉(zhuǎn)為高電平[3]。CX放電所需的時(shí)間為:

圖2 555構(gòu)成的RC振蕩電路

由上式可知,當(dāng)電路設(shè)計(jì)完成后,振蕩器輸出f隨CX的變化而改變。改變R1、R2的值即可改變系統(tǒng)量程。系統(tǒng)量程分為四檔:(1)R1+2R2=470KΩ時(shí),測(cè)1.0nF-10.0nF的電容值。(2)R1+2R2=47KΩ時(shí),測(cè)10.0nF~100.0nF的電容(3)R1+2R2=4.7KΩ時(shí),測(cè)100.0nF~1000.0nF的電容。(4)R1+2R2=470Ω時(shí),測(cè)1.0μF~10.0μF的電容。圖3為R1+2R2=470KΩ時(shí),測(cè)量電容為2μF振蕩輸出輸出波形。

圖3 振蕩電路輸出的頻率信號(hào)

3.2 信號(hào)處理及顯示電路

信號(hào)處理電路部分采用單片機(jī)AT89S51作為系統(tǒng)的主控制器。AT89S51單片機(jī)的最小系統(tǒng)由時(shí)鐘電路、復(fù)位電路、外加電源及單片機(jī)構(gòu)成[4],其硬件電路如圖4所示。555振蕩電路輸出的是脈沖波,接到AT89S51處理器的輸入引腳P3.5,通過(guò)AT89S51內(nèi)部定時(shí)/計(jì)時(shí)器T0、T1及相應(yīng)的程序設(shè)計(jì),構(gòu)成一個(gè)數(shù)字式頻率測(cè)量系統(tǒng),測(cè)出頻率后按(5)式運(yùn)算處理后得到被測(cè)電容值。

圖4 單片機(jī)控制顯示模塊

顯示模塊LCD1602液晶第1、2腳接驅(qū)動(dòng)電源;第三腳VL為液晶的對(duì)比度調(diào)節(jié),通過(guò)在VCC和GND之間接一個(gè)10K多圈可調(diào)電阻,中間抽頭接VL,可實(shí)現(xiàn)液晶對(duì)比度的調(diào)節(jié);液晶的控制線RS、R/W、E分別接單片機(jī)的P2.5、P2.6、P2.7;D0~D7為L(zhǎng)CD1602液晶模塊的8位雙向數(shù)據(jù)口,分別與STC89C52RC單片機(jī)的P1.0~P1.7相連,用于傳輸數(shù)據(jù)。接在單片機(jī)的P0口;BL+、BL-為液晶背光電源[5][6]。

4 系統(tǒng)軟件設(shè)計(jì)

圖5 主程序流程圖

系統(tǒng)軟件環(huán)境以Keil4.0為仿真平臺(tái),使用C語(yǔ)言編程編寫了運(yùn)行程序;包括主程序模塊、顯示模塊和電容測(cè)試模塊。軟件設(shè)計(jì)主要包括三個(gè)方面:一是初始化系統(tǒng);二是按鍵檢測(cè);三是數(shù)據(jù)采集、數(shù)據(jù)處理并進(jìn)行顯示。程序采用模塊化的結(jié)構(gòu),這樣便于調(diào)試和修改,易編程和易讀性好,也程序結(jié)構(gòu)清楚[7]。系統(tǒng)程序流程如圖6所示,首先對(duì)P3.5口脈沖信號(hào)頻率的測(cè)量,再通過(guò)(5)式算出所測(cè)的電容值,由LCD1602顯示出來(lái)。

5 系統(tǒng)的測(cè)試

表1 電容測(cè)試數(shù)據(jù)

6 結(jié)束語(yǔ)

設(shè)計(jì)的電容測(cè)試儀硬件采用555定時(shí)器作為信號(hào)采集模塊、AT89S51單片機(jī)作為信號(hào)處理器模塊,軟件采用Keil4.0為仿真平臺(tái),使用C語(yǔ)言編程編寫了運(yùn)行程序。其具有性能穩(wěn)定、精度高、操作簡(jiǎn)單、功耗低等優(yōu)點(diǎn)。經(jīng)測(cè)試表明:其可以測(cè)試1.0nF-10.0uF范圍的電容,誤差小于0.5%。誤差產(chǎn)生主要原因與電路元件參數(shù)、測(cè)試環(huán)境、測(cè)試方法等因素有關(guān)。



以上的Word格式文檔51黑下載地址:
測(cè)電導(dǎo)格式整理版.docx (1.48 MB, 下載次數(shù): 85)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩1
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:3666 發(fā)表于 2020-7-24 20:34 | 只看該作者
這個(gè)與TDS有什么關(guān)系呀,能否說(shuō)詳細(xì) 一點(diǎn)呀,謝謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:155485 發(fā)表于 2023-11-6 16:21 | 只看該作者
   測(cè)量電容,怎么轉(zhuǎn)換成測(cè)量 測(cè)電導(dǎo)
回復(fù)

使用道具 舉報(bào)

地板
ID:155485 發(fā)表于 2023-11-6 16:21 | 只看該作者
測(cè)量電容,測(cè)電導(dǎo)
回復(fù)

使用道具 舉報(bào)

5#
ID:433219 發(fā)表于 2024-3-13 14:52 | 只看該作者
這個(gè)是電容,,,,,TDS是要測(cè)電導(dǎo)吧?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表