久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10833|回復(fù): 4
收起左側(cè)

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

[復(fù)制鏈接]
ID:582255 發(fā)表于 2020-4-16 21:23 | 顯示全部樓層 |閱讀模式
大家都知道,51 單片機(jī)的外部中斷,可以設(shè)定為下降沿觸發(fā)。
當(dāng)?shù)谝淮蜗陆笛貋砼R時,在中斷程序中,啟動定時器的計時;在第二次下降沿來臨時,再停止定時器。
這樣一來,計時器所統(tǒng)計的數(shù)值,就代表了脈沖的周期。
定時器在計時方式下,是針對機(jī)器周期計數(shù),在晶振為 12MHz 時,計時的結(jié)果將在 0~65536us 范圍內(nèi)。
以 ms 為單位,就是:00.000 ~ 65.535,也就是:00.000 ~ 65.535 uF。
直接用顯示器把這個數(shù)字顯示出來,這就是測量電容的結(jié)果。
如果電容器的容量,超出了這范圍,可以顯示超量程的信息,提示使用者換用不同的檔位,就是換用不同的電阻。
使用單片機(jī)測量電容的仿真電路如下:
圖片連接:
超量程的提示顯示如下:
單片機(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;   //開始測量的按鍵
  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. //*************延時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 延時******************
  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)測量鍵被按下
  76.         RST_5 = 1;      //啟動555
  77.         Flg = 0;
  78.         Delay1ms(100);  //稍稍延時, 讓555穩(wěn)定工作
  79.         EA = 1;         //開總中斷
  80.         while (EA == 1);//等待測量完畢, 下面進(jìn)行數(shù)據(jù)處理
  81. //因為硬件設(shè)計合理, 所以數(shù)據(jù)很簡單, 無需復(fù)雜處理, 分離出過大過小的即可
  82.         if(Cap < 1000)  { //計數(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 //控制計時的啟動、停止
  105. {
  106.     Flg = ~Flg;
  107.     if(Flg)  TR0 = 1;   //開始計時
  108.     else  {
  109.       TR0 = 0;          //停止計時
  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 //測量超時
  119. {
  120.     EA = 0;             //關(guān)閉中斷
  121.     RST_5 = 0;          //關(guān)閉555
  122.     TR0 = 0;            //停止定時
  123.     TH0 = 0x00;         //恢復(fù)T0初值
  124.     TL0 = 0x00;
  125.     Cap = 65535;        //超出值
  126.     Flg = 0;
  127. }
復(fù)制代碼

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

圖1 系統(tǒng)框圖

3 硬件設(shè)計

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

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

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

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

圖3 振蕩電路輸出的頻率信號

3.2 信號處理及顯示電路

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

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

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

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

圖5 主程序流程圖

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

5 系統(tǒng)的測試

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

6 結(jié)束語

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

555.jpg


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

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:3666 發(fā)表于 2020-7-24 20:34 | 顯示全部樓層
這個與TDS有什么關(guān)系呀,能否說詳細(xì) 一點呀,謝謝
回復(fù)

使用道具 舉報

ID:155485 發(fā)表于 2023-11-6 16:21 | 顯示全部樓層
   測量電容,怎么轉(zhuǎn)換成測量 測電導(dǎo)
回復(fù)

使用道具 舉報

ID:155485 發(fā)表于 2023-11-6 16:21 | 顯示全部樓層
測量電容,測電導(dǎo)
回復(fù)

使用道具 舉報

ID:433219 發(fā)表于 2024-3-13 14:52 | 顯示全部樓層
這個是電容,,,,,TDS是要測電導(dǎo)吧?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91久久久精品国产一区二区蜜臀 | 国产欧美日韩一区 | 精品不卡| 91精品久久久久久久久 | 中文字幕一区二区三区不卡在线 | 亚洲欧美国产一区二区三区 | 免费一级欧美在线观看视频 | 毛片在线看片 | 国产一区不卡在线观看 | 日韩成人在线视频 | 久久久www成人免费精品张筱雨 | 欧美aaaaaaaaaa| av中文字幕在线 | 久久国产精品99久久久久久丝袜 | 国产亚洲精品精品国产亚洲综合 | 亚洲人在线 | 黄色一级大片在线免费看产 | 一级免费在线视频 | 成人午夜精品一区二区三区 | 精品国产不卡一区二区三区 | 91精品国产日韩91久久久久久 | www.一级毛片 | 久久久精品视频免费看 | 午夜电影福利 | 亚洲精品电影在线观看 | 免费观看一级特黄欧美大片 | 国产剧情一区 | 日韩一区二区在线观看 | 成人国产精品久久久 | 人人爽人人爽人人片av | 一区二区三区中文字幕 | 四虎影视免费在线 | 亚洲精彩视频 | 日本中文字幕日韩精品免费 | 国产免费一区二区三区最新6 | 国产高清在线 | 不卡视频在线 | 欧美三级三级三级爽爽爽 | 中文在线a在线 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 视频一区二区三区在线观看 |