目錄 一、方案設計單片機源程序如下:
1.1 方案論證與設計 1.2 系統原理框圖 1.3 主要電路設計與參數計算 1.4 總體電路圖 二、測試步驟 三、測試數據及實驗結果 四、結論 4.1 本方案特點及存在的問題 4.2 功能擴展 五、學習心得 六、本作品使用說明 七、完整電路圖及印制板圖 八、附錄 成員分工 程序 元件清單
一、方案設計1.1 方案論證與設計基于單片機的RLC檢測儀,是指以單片機為核心,實現對電阻、電感和電容的值的測量。測量阻抗參數最常用的方法有伏安法、電橋法和諧振法。 伏安法又稱為電壓電流法,該方法是利用電壓表和電流表分別測出元件的電壓值和電流值,從而計算出元器件的值。該方法一般只能用于頻率較低的情況,而且還需要把電阻器、電容器和電感器看成是理想的元器件。可想而知,這樣的測量方法,誤差肯定比較大,而且測量也不方便,受到的限制比較多,但是,也有它的好處,那就是使用比較簡單。 電橋法是利用電橋平衡的原理。電橋平衡的條件是:一對相對橋臂阻抗的乘積必須等于另一對相對橋臂阻抗的乘積。直流電橋法用于精確地測量電阻的阻值,但是要適當的選擇比率臂的倍率和標準電阻的阻值;比較電橋測量電容或電感,就是通過與已知電容或電感比較來測定未知電容或電感,但是相鄰兩臂要采用純電阻。此種測量方法,精度比較高,使用不同電橋可得到寬頻率范圍,價格低,但需要手動平衡,測試速度比較慢。 諧振法是利用LC串聯電路和并聯電路的諧振特性來進行測量的方法。當外加信號源的角頻率等于回路的固有角頻率時,LC串聯或并聯諧振電路發生諧振,可以求出電感和電容的值。利用這種方法,前提是需要把電路調到諧振,而且精度不高,但是可一測得很高的Q值。 測量這些參量的方法有很多經典的方法,現在比較容易的一個方法就是阻抗的數字化測量。數字化測量是將測量的模擬量轉化為數字量,我們的設計最基本的思路就是RLC的數字化測量,可以把它們轉換為電壓、電流及頻率等。在我們小組的設計中,被測電阻、電容、電感作為諧振電路的一部分,用單片機測得電路發出的矩形波的頻率,然后根據公式計算出電阻、電感和電容。運用的方法就是諧振法。而我們小組選擇的測量電路,是用555定時器組成的基本振蕩電路來測量電阻和電容,三點式振蕩電路構成的LC諧振電路來測量電感。 1.2 系統原理框圖
1.001.jpg (13.26 KB, 下載次數: 37)
下載附件
2017-7-30 20:24 上傳
圖1-2 系統原理框圖 測量電阻和電容,是以555芯片為核心,外加幾個電阻、電容組成RC振蕩電路,利用電容的充放電過程,使這個電路輸出高低矩形波,我們就是利用這一點,使電阻和電容的參數值數字化的。測電感的時候,由于555沒有電路可以測電感,所以我們就選擇了三點式振蕩電路,它利用電容電感的三點式接法,就可以構成LC振蕩電路。諧振時,電路輸出矩形波。波形產生了,就把矩形波信號送給單片機,通過單片機的定時/計數端測量出矩形波的頻率,這樣就把阻抗轉換為頻率了,再通過公式就可以計算出阻抗的參數值了。 這個測量方法是目前比較好的一個選擇了,首先,數字化測量的準確度高,測量速度快,又是數字顯示,簡單明了;其次,把阻抗轉換為頻率,頻率相對來說,是一個比較容易測量出的量,尤其在單片機里,這一點就使整個設計輕松了不少;再者,選用的兩個芯片555和三點式振蕩電路,所用的測量電路都是它們最基本的電路,電路圖比較簡單,也很容易理解,測量范圍也很廣,還有最重要的一點是,電路比較穩定,受外界影響比較小,都可以穩定的輸出矩形波。總的來說,這個測量方法幾乎集合了其他測量方法的所用優點,是一個比較好方法。 1.3 主要電路設計與參數計算電阻的測量采用“脈沖計數法”,如圖1-3-1所示,由555電路構成,多諧振蕩電路,通過計算振蕩輸出的頻率來計算被測電阻的大小。
1.002.jpg (27.5 KB, 下載次數: 35)
下載附件
2017-7-30 20:24 上傳
圖1-3-1 電阻測量模塊 555接成多諧振蕩器的形式131,其振蕩周期為:
1.003.jpg (3.66 KB, 下載次數: 29)
下載附件
2017-7-30 20:24 上傳
(式1-3-1)
1.004.jpg (5.46 KB, 下載次數: 36)
下載附件
2017-7-30 20:24 上傳
(式1-3-2)
電路分為3檔:
1.005.jpg (29.39 KB, 下載次數: 36)
下載附件
2017-7-30 20:24 上傳
電容的測量同樣采用“脈沖計數法”,如圖1-3-2所示,由555電路構成多諧振蕩電路,通過計算振蕩輸出的頻率來計算被測電容的大小。 測量范圍:中檔100pF~5000pF,高檔5000pF~0.15Uf。
1.006.jpg (18.77 KB, 下載次數: 39)
下載附件
2017-7-30 20:24 上傳
圖1-3-2 電容測量模塊 555接成多諧振蕩器的形式,其振蕩周期為:
1.007.jpg (7.71 KB, 下載次數: 31)
下載附件
2017-7-30 20:24 上傳
(式1-3-3) (式1-3-4) 電感測量電路如圖1-3-3所示,電感的測量是采用電容三點式振蕩電路來實現的。三點式電路是指:LC回路中與發射極相連的兩個電抗元件必須是同性質的,另外一個電抗元件必須為異性質的,而與發射極相連的兩個電抗元件同為電容時的三點式電路,成為電容三點式電路。有:
1.008.jpg (6.08 KB, 下載次數: 33)
下載附件
2017-7-30 20:24 上傳
(式1-3-5) (式1-3-6)
測量范圍:1mH~1000mH。
1.009.jpg (13.4 KB, 下載次數: 40)
下載附件
2017-7-30 20:24 上傳
圖1-3-3 電感測量模塊 1.4 總體電路圖
1.010.jpg (32.95 KB, 下載次數: 48)
下載附件
2017-7-30 20:24 上傳
圖1-4-1 總體電路原理圖
1.011.jpg (42.31 KB, 下載次數: 37)
下載附件
2017-7-30 20:24 上傳
圖1-4-2 總體電路原理圖 二、測試步驟在測試過程中,我們使用proteus仿真軟件搭建電路,將用keil軟件生成的程序hex文件導入單片機,對所設計的RLC進行了功能測試。仿真電路如圖2所示:
1.012.jpg (27.69 KB, 下載次數: 46)
下載附件
2017-7-30 20:24 上傳
圖2 proteus仿真電路圖 三、測試數據及實驗結果 對低檔電阻50Ω仿真測試結果如圖3-1所示:
1.013.jpg (27.56 KB, 下載次數: 20)
下載附件
2017-7-30 20:24 上傳
圖3-1 50Ω電阻仿真測試結果圖 對中檔電阻5kΩ仿真測試結果如圖3-2所示:
1.014.jpg (37.39 KB, 下載次數: 32)
下載附件
2017-7-30 20:24 上傳
圖3-2 5kΩ電阻仿真測試結果圖 對高檔電阻500kΩ仿真測試結果如圖3-3所示:
1.015.jpg (35.1 KB, 下載次數: 31)
下載附件
2017-7-30 20:24 上傳
圖3-3 500kΩ電阻仿真測試結果圖 對中檔電容2000pF仿真測試結果如圖3-4所示:
1.016.jpg (37.08 KB, 下載次數: 44)
下載附件
2017-7-30 20:24 上傳
圖3-4 2000pF電容仿真測試結果圖 對高檔電容0.1uF仿真測試結果如圖3-5所示:
1.017.jpg (39.2 KB, 下載次數: 27)
下載附件
2017-7-30 20:24 上傳
圖3-5 0.1uF電容仿真測試結果圖 對電感800mH仿真測試結果如圖3-6所示:
1.018.jpg (39.61 KB, 下載次數: 37)
下載附件
2017-7-30 20:24 上傳
圖3-6 800mH電感仿真測試結果圖 仿真測試數據分析表如下: 表3-1 測試數據分析表 四、結論
4.1 本方案特點及存在的問題我們小組選取的該測量方法是比較好的一個選擇,首先,數字化測量的準確度高,測量速度快,又是數字顯示,簡單明了;其次,把阻抗轉換為頻率,頻率相對來說,是一個比較容易測量出的量,尤其在單片機里,這一點就使整個設計輕松了不少;再者,選用的兩個芯片555和三點式振蕩電路,所用的測量電路都是它們最基本的電路,電路圖比較簡單,也很容易理解,測量范圍也很廣,還有最重要的一點是,電路比較穩定,受外界影響比較小,都可以穩定的輸出矩形波。總的來說,這個測量方法幾乎集合了其他測量方法的所用優點,是一個比較好的方法。 但本方案仍在存在部分問題: - 各檔銜接處附近所測電阻/電容值相對偏差較大
- 較低和較高的電感測量值相對偏差較大
- 電容量程有限,只設置了中檔和高檔
從表3-1表格可以看出,測量時部分電容值時誤差較大。測量電阻和電容時,電路是由555芯片和外接的電阻電容組成的。555是根據電源的精度和外圍阻容元件的精度來決定輸出頻率精度的,如果外圍精度很高且溫度變化不大,那么555的精度是足夠的,但是以目前的情況來看,部分電容值有5%以上的偏差,這就直接導致了測量電路的精確性不是很好,所以就造成了現在上面這種狀況。其實555定時器還有一個很大的缺點,那就是不能產生頻率很低的信號,所以我們的測量范圍比較小,這和555本身的內部結構有關,這里就不討論了。 還有一點就是,我們的測量電路必須要保證起振,并且振蕩電路要穩定,否則也會增加誤差,這也是把元件參數轉換成頻率后測量的方法的一個不足之處。可以根據實際電路中的電阻或電容,多測一些數據,并求這些數據的平均誤差,再把這個誤差加到程序中,那么再測數據,誤差就會小很多,這樣就做了誤差的修正。 4.2 功能擴展 除了我們原有電路能夠實現的功能以外,我們希望還能夠實現電感分組測量的功能,修改程序中的計算參數,使得降低對較高和較低電感值測量時的誤差。 五、學習心得在這一次課程設計的暑期實習過程中,我們的小組成員收獲良多。從最開始的龍文杰老師和易安林老師的電子工藝基礎課程,到焊接練習、PCB圖繪制練習,我們一步一步掌握了相應的技巧,為之后的課程設計實習打下了基礎。 我們的課程設計內容是RLC測量儀,在這次課程設計的過程中,硬件方面,從在電腦上制作原理圖、印刷版圖、仿真,到實物的焊接、調試,在此過程中每個環節都遇到了許多大大小小的問題。原理圖的繪制時,由于原來的原理圖庫的元件不全,我們又下載了很多原理圖庫,在封裝時,首先調整線寬、孔環大小、焊盤大小等規則大小,再根據老師規定的設計規則一個個來調整元件的封裝,此過程需要極大的耐心及足夠的細心。在proteus仿真的過程中,我們一步一步地檢查電路的問題及程序的問題。我們也經歷過煩躁的時期,但都一一克服,耐心地解決所遇到的每一個bug。印刷了板子后,我們將它腐蝕、刮銅、刷松香,并仔細地對照原理圖焊接每一個元件。之后就迎來了無比艱難的調試環節,我們接通電源后發現顯示屏并沒有顯示,但我們并沒有氣餒,而是拿著萬用表,一個一個模塊地測量,測量各個引腳之間的電阻、電壓,并且記下電壓降,與仿真環節中的值相比較,之后再一點點調整電路,將模塊輸出的方波波形調了出來。顯示屏顯示出實數的那一瞬間,成就感油然而生。 這次課程設計既鍛煉了我們收集整理資料、設計電路圖的能力,又考驗了我們繪制PCB圖時需要的耐心與細心,也在隨之而來的焊接過程中鍛煉了我們的動手能力。在這次實習中,我們真正做到了從無到有,從理論到實踐,這并不是一個容易的過程,期間困難無數,但我們堅持初衷,所有小組成員團結協作、全力以赴,終于把電路調試成功。 在此,我們要感謝我們的指導老師,我們組設計的電路當中的參數十分復雜,需要各種各樣值的電容和電阻,老師非常耐心地幫我們收集元件,還領我們到庫房尋找需要的元件。在之后的電路調試過程中,她也仔細地查看了我們的電路板,并給我們指出問題,我們才能夠更加精確地對板子進行修復。在這次課程設計過程中,同學們互幫互助,共同研究學習,在大家的幫助下,我們才能使該RLC測量儀工作更加精確,功能更加完善。 六、本作品使用說明這是一個分檔RLC測量儀。本系統在調試方面經過長時間的測試操作,穩定性能得到了認可。同時此系統通過軟件設計,減少誤差的存在,并采用標準的電阻、電容器和電感進行校準,大大提高了系統的精度。該設計采用555震蕩和LC三點式振蕩來實現對參數R,L,C的測量的方法,滿足總體設計的技術指標與功能要求,具有較好的應用價值。 使用方法: - 確定待測元件種類【電阻/電容/電感】,按下相應開關。
- 確定待測元件檔位【高檔/中檔/低檔】,按下相應開關。
- 接通電源,觀察液晶顯示屏的示數。
- 需要換擋測量時,按下復位按鈕。
1.019.jpg (27.93 KB, 下載次數: 27)
下載附件
2017-7-30 20:24 上傳
圖6 RLC測量儀使用說明圖 七、完整電路圖及印制板圖
1.020.jpg (39.84 KB, 下載次數: 44)
下載附件
2017-7-30 20:24 上傳
圖7-1 完整電路原理圖
1.021.jpg (42.87 KB, 下載次數: 36)
下載附件
2017-7-30 20:24 上傳
圖7-2 完整電路PCB圖
1.022.jpg (27.85 KB, 下載次數: 36)
下載附件
2017-7-30 20:24 上傳
圖7-3 印刷板圖
1.023.jpg (21.72 KB, 下載次數: 35)
下載附件
2017-7-30 20:24 上傳
圖7-4 課程設計作品正面圖
1.024.jpg (23.91 KB, 下載次數: 42)
下載附件
2017-7-30 20:24 上傳
圖7-4 課程設計作品背面圖 以下是RLC測量儀對部分電阻、電容、電感的測量結果圖:
1.025.jpg (21.14 KB, 下載次數: 42)
下載附件
2017-7-30 20:24 上傳
圖7-5 2kΩ電阻測量結果圖
1.026.jpg (22.91 KB, 下載次數: 39)
下載附件
2017-7-30 20:24 上傳
圖7-6 5kΩ電阻測量結果圖
1.027.jpg (16.9 KB, 下載次數: 31)
下載附件
2017-7-30 20:24 上傳
圖7-7 33kΩ電阻測量結果圖
1.028.jpg (17.27 KB, 下載次數: 38)
下載附件
2017-7-30 20:24 上傳
圖7-8 100kΩ電阻測量結果圖
1.029.jpg (19.92 KB, 下載次數: 33)
下載附件
2017-7-30 20:24 上傳
圖7-9 200kΩ電阻測量結果圖
1.030.jpg (21.27 KB, 下載次數: 33)
下載附件
2017-7-30 20:24 上傳
圖7-10 330pF電容測量結果圖
1.031.jpg (21.72 KB, 下載次數: 31)
下載附件
2017-7-30 20:24 上傳
圖7-11 102電容測量結果圖
1.032.jpg (27.22 KB, 下載次數: 35)
下載附件
2017-7-30 20:24 上傳
圖7-12 103電容測量結果圖
1.033.jpg (23.74 KB, 下載次數: 33)
下載附件
2017-7-30 20:24 上傳
圖7-13 104電容測量結果圖
1.034.jpg (22.89 KB, 下載次數: 34)
下載附件
2017-7-30 20:24 上傳
圖7-14 9.4mH電感測量結果圖
1.035.jpg (24.09 KB, 下載次數: 34)
下載附件
2017-7-30 20:24 上傳
圖7-15 14.1mH電感測量結果圖 RLC測量儀測量數據分析表如下: 表7-1 測量數據分析表
元件清單
八、附錄程序
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RS=P2^6;
- sbit RW=P2^5;
- sbit E=P2^7;
- sbit R=P1^0;
- sbit C=P1^1;
- sbit L=P1^2;
- sbit A1=P1^3;
- sbit A0=P1^4;
- sbit Low=P1^5;
- sbit Mid=P1^6;
- sbit High=P1^7;
-
- #define LCD_data P0
- uchar code table1[10]={"R= R"};
- uchar code table2[10]={"C= pF"};
- uchar code table3[10]={"L= mH"};
-
- uchar code f_table[88]={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, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
- uchar code f_correct[88]={9,10, 11, 12, 12, 12, 13, 14, 15, 16, 17, 18, 18, 18, 19, 20, 21, 21, 22, 23, 24, 25, 25, 26, 26, 27, 28, 29, 29, 30, 30, 31, 32, 33, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43, 44, 45, 45, 46, 47, 48, 49, 49, 50, 51, 51, 52, 53, 54, 54, 55, 55, 56, 57, 57, 58, 59, 60, 60, 62, 62, 63, 64, 64, 65, 66, 66, 67, 67, 68, 69, 70, 71, 71,};
-
- uchar a7,a6,a5,a4,a3,a2,a1;
- uchar flag;
- unsigned long cnt,cnt1;
- uchar f_cnt;
-
-
- /********************************/
-
- void delay_us(); //18us
- void delay_ms(uint);
- void lcd_init();
- void lcd_write_com(uchar com);
- void lcd_write_dat(uchar dat);
- void lcd_init();
- void lcd_display(uchar add,uchar dat);
- /***********************************/
-
- void delay_us()
- {
- uchar x;
- for(x=0;x<5;x++);
- }
-
- void delay_ms(uint z)
- {
- uint x,y;
- for(x=0;x<z;x++)
- for(y=0;y<123;y++);
- }
- void lcd_write_com(uchar com)
- {
- E=0;
- RS=0;
- RW=0;
- delay_us();
- LCD_data=com;
- E=1; //高脈沖寫入數據
- delay_us();
- E=0;
- }
- void lcd_write_dat(uchar dat)
- {
- E=0;
- RS=1;
- RW=0;
- delay_us();
- LCD_data=dat;
- E=1; //高脈沖寫入數據
- delay_us();
- E=0;
- }
- void lcd_init() //lcd初始化
- {
- delay_ms(15);
- lcd_write_com(0x38);
- delay_ms(10);
- lcd_write_com(0x0c);
- lcd_write_com(0x06);
- lcd_write_com(0x01);
- delay_ms(2);
-
-
- }
- void timer_init(void) //定時器初始化
- {
- TMOD=0X51;
- PT0=1; /*中斷優先*/
- TH0=0x3c;
- TL0=0xb0;
- TH1=0;
- TL1=0;
- ET0=1;
- ET1=1;
- TR0=1;
- TR1=1;
- EA=1;
- }
- void lcd_display(uchar add,uchar dat) //lcd顯示(地址,數據)
- {
-
- lcd_write_com(add);
-
- lcd_write_dat(dat);
- delay_us();
-
- }
- void real_display(void)
- {
- if(!R)
- {
- A1=A0=0;
- lcd_display(0x80,table1[0]);
- lcd_display(0x80+1,table1[1]);
- lcd_display(0x80+8,table1[8]);
- lcd_display(0x80+9,table1[9]);
- }
- else if(!C)
- {
- A0=0;A1=1;
- lcd_display(0x80,table2[0]);
- lcd_display(0x80+1,table2[1]);
- lcd_display(0x80+8,table2[8]);
- lcd_display(0x80+9,table2[9]);
- }
- else if(!L)
- {
- A0=1;A1=0;
- lcd_display(0x80,table3[0]);
- lcd_display(0x80+1,table3[1]);
- lcd_display(0x80+8,table3[8]);
- lcd_display(0x80+9,table3[9]);
- }
- if(a6)
- lcd_display(0x80+2,0x30+a6);
- else
- lcd_display(0x80+2,' ');
-
-
- if(a6||a5)
- lcd_display(0x80+3,0x30+a5);
- else
- lcd_display(0x80+3,' ');
-
-
- if(a6||a5||a4)
- lcd_display(0x80+4,0x30+a4);
- else
- lcd_display(0x80+4,' ');
-
-
- if(a6||a5||a4||a3)
- lcd_display(0x80+5,0x30+a3);
- else
- lcd_display(0x80+5,' ');
-
-
- if(a6||a5||a4||a3||a2)
- lcd_display(0x80+6,0x30+a2);
- else
- lcd_display(0x80+6,' ');
-
-
- lcd_display(0x80+7,0x30+a1);
-
-
- }
-
- void correct(void) //誤差修正函數
- {
- uchar i,k;
- unsigned long wucha;
- if(cnt<100000) //100KHz以內的修正
- {
- if(cnt>980&&cnt<2100) cnt-=1;
- if(cnt>=2100&&cnt<3900) cnt-=2;
- if(cnt>=3900&&cnt<4800) cnt-=3;
- if(cnt>=4800&&cnt<5700) cnt-=4;
- if(cnt>=5700&&cnt<8000) cnt-=5;
- if(cnt>=8000&&cnt<9100) cnt-=6;
- if(cnt>=9100&&cnt<10900) cnt-=7;
- if(cnt>=10900&&cnt<11900) cnt-=8;
- if(cnt>=11900&&cnt<13000) cnt-=9;
- if(cnt>=13000&&cnt<=100000)
- {
- k=cnt/1000;
- for(i=0;i<88;i++)
- {
- if(k==f_table[i])
- {
- cnt-=f_correct[i];
- }
- }
- }
-
-
- }
- if(cnt>100000)
- {
- wucha=(cnt/1000)*73065/100000;
- cnt-=wucha;
- }
- }
-
- void main()
- {
-
- timer_init();
- lcd_init();
- while(1)
- {
- if(flag==1)
- {
- real_display();
- flag=0;
- }
-
-
- }
-
- }
-
-
- void timer0() interrupt 1
- {
- uchar timer0;
-
- TH0=0x3c; //50ms
- TL0=0xb0;
- timer0++;
- if(timer0==20)
- {
- TR1=0; //關閉的計數器
- EA=0;
- cnt=TL1+TH1*256+f_cnt*65536;
- correct();
- if(!R)
- {
- if(High&&Mid&&!Low){cnt1=(2.6*1000000)/(2*cnt)-25;}
- else if(High&&!Mid&&Low){cnt1=((6.4*1000000)/(2*cnt)-16)/3*4-200;}
- else if(!High&&Mid&&Low){cnt1=((4.372*100000000)/(2*cnt)-(2.1*10000/2))/19*20;}
- }
- else if(!C)
- {
- if(High&&!Mid&&Low){cnt1=(1000000000/(3*0.693*20*cnt))/5*4;}
- else if(!High&&Mid&&Low){cnt1=1000000000/(3*0.693*200*cnt);}
- }
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
224725wxmauaboqqmaa99u.png (47.09 KB, 下載次數: 44)
下載附件
2017-7-30 20:24 上傳
完整論文下載(word格式 可編輯):
http://www.raoushi.com/bbs/dpj-90086-1.html
|