|
|
普渡眾生哈哈哈,交流交流,(5元買的,大家有積分就闊以下載哦)
傳統(tǒng)的RLC參數(shù)測(cè)量的方法種類很多,例如:直接用歐姆表測(cè)量電阻,或者對(duì)電阻兩端施加一定的電壓,利用電流表測(cè)得流過的電流值,再按照歐姆定理計(jì)算出電阻值;而對(duì)電感或電容的測(cè)試采用測(cè)量阻抗角和負(fù)阻抗,然后利用數(shù)學(xué)公式計(jì)算出電容和電抗的參數(shù)。此外還可以采用過渡過程分析方法,此方法用于計(jì)算含有儲(chǔ)能元器件L、C的電路的時(shí)間常數(shù),因研究的是一個(gè)電路從一個(gè)穩(wěn)態(tài)過渡到另一個(gè)穩(wěn)態(tài),此方法涉及到初始值穩(wěn)態(tài)值等數(shù)據(jù)。算出時(shí)間常數(shù),由于電路中使用已知的固定的電阻,所以可以通過公式,計(jì)算得出電抗參數(shù)。在要求測(cè)試準(zhǔn)確度高的情況下還可以采用交流電橋法,通過調(diào)整已知參數(shù)使得電橋達(dá)到平衡,讀出電感或電容值。以上方法必須采用手工操作,而且有些方法需要測(cè)量多個(gè)數(shù)據(jù),再進(jìn)行人工計(jì)算,準(zhǔn)確度不大,且太費(fèi)時(shí)費(fèi)力。在這種情況下,數(shù)字式的RLC測(cè)量?jī)x應(yīng)運(yùn)而生。
電路原理圖如下:
單片機(jī)源程序如下:
- #include <reg51.h>
- #include"lcd.h"
- #include <stdio.h>
- /*******************************************************************/
- /*宏定義 特征值
- /******************************************************************/
- #define RS_1 4078852 //特征值 //328852 通過文獻(xiàn)中的公式計(jì)算出的值
- #define RS_2 60134752 //72134752
- #define CS_1 45067376 //36067376
- #define CS_2 8208983 //48089834
- #define LS 545077 //445077 通過示波器測(cè)220uh,顯示的頻率反推出的值
- /*******************************************************************/
- /*I/O口申明
- /******************************************************************/
- sbit A1 = P2^0; //模擬開關(guān)地址位
- sbit B1 = P2^1;
- sbit kr = P2^2; //電阻擋
- sbit kc = P2^3; //電容擋
- sbit kl = P2^4; //按鍵 //電感擋
- sbit sr = P1^0; //繼電器1 控制電阻換擋
- sbit sc = P1^1; //繼電器 //繼電器2 控制電容換擋
- /*******************************************************************/
- /*變量定義
- /******************************************************************/
- uint tval = 0,f = 0,sr_f = 0,sc_f = 0,ft = 0,ff = 0; //tval測(cè)量值,f元件標(biāo)志位,sr_f電阻繼電器標(biāo)志位,Sc_f電容繼電器標(biāo)志位,頻率標(biāo)志位
- unsigned long rs = RS_1,cs = CS_1,ls=LS,value = 0; //特征值初始化
- /*********************************************************************/
- /*子函數(shù)定義
- /********************************************************************/
- /****************************************/
- /* 函數(shù)名:unsigned int read()
- /* 功能: 讀取計(jì)數(shù)器中的值
- /* 輸入: 無
- /* 輸出: 計(jì)數(shù)器中的數(shù)值
- /****************************************/
- uint read(){
- uchar tl,th1,th2;
- uint val;
- while(1){
- th1=TH0;
- tl=TL0;
- th2=TH0;
- if(th1==th2) //保證MCU計(jì)數(shù)器工作正常
- break;
- }
- val=(th1<<8)+tl;
- return val;
- }
- /****************************************/
- /* 函數(shù)名:unsigned int LcdDisplayInt(unsigned int num)
- /* 功能: 打印數(shù)字
- /* 輸入: 數(shù)值
- /* 輸出:LCD打印INT數(shù)字
- /****************************************/
- unsigned int LcdDisplayLong(unsigned long num){
- unsigned char buff[11]=NULL;
- unsigned int len,i;
- len = sprintf(buff,"%ld",num);
- for(i=0;i<len;i++){
- LcdWriteData(buff[i]);
- }
- return 1;
- }
- /****************************************/
- /* 函數(shù)名: void measure_R()
- /* 功能: 測(cè)量R
- /* 輸入: 特征值
- /* 輸出: 電阻值
- /****************************************/
- unsigned long measure_R(uint fx,unsigned long rs){
- unsigned long R = 0,fr=0;
- fr=ff*65535+fx;
- ff=0;
- if(fr != 0) R=rs/fr-110;
- return R;
- }
- /****************************************/
- /* 函數(shù)名: void measure_C()
- /* 功能: 測(cè)量C
- /* 輸入: 特征值
- /* 輸出: 電容值
- /****************************************/
- unsigned long measure_C(uint fx,unsigned long cs){
- unsigned long C = 0,fc=0;
- fc=ff*65535+fx;
- ff=0;
- if(fc != 0) C=cs/fc;
- return C;
- }
- /****************************************/
- /* 函數(shù)名: void measure_L()
- /* 功能: 測(cè)量L
- /* 輸入: 特征值
- /* 輸出: 電感值
- /****************************************/
- unsigned long measure_L(uint fx,unsigned long ls){
- unsigned long L = 0,L1 = 0,fl = 0;
- fl=ff*65535+fx;
- ff=0;
- if(fl != 0){ L1=ls/fl;L=L1*L1;}
- return L;
- }
- /****************************************/
- /* 函數(shù)名: detection()
- /* 功能: 按鍵檢測(cè)
- /* 輸入: 無
- /* 輸出: 無
- /****************************************/
- void detection(){
- //按鍵檢測(cè) 0為電阻 1為電電容 2為電感
- if(kr == 0) { f = 0; A1 = 0;B1 = 0;}
- else if(kc == 0) { f = 1; A1 = 0;B1 = 1;}
- else if(kl == 0) { f = 2; A1 = 1;B1 = 0;}
- }
- /****************************************/
- /* 函數(shù)名: measure()
- /* 功能: 測(cè)量
- /* 輸入: 無
- /* 輸出: 無
- /****************************************/
- void measure(){
- switch (f){
- case 0: //電阻測(cè)量
- LcdWriteData('R');
- LcdWriteData(':');
- //電阻換擋
- value = measure_R(tval,rs);
- if(value >= 1000 && sr_f == 0) {
- sr = 1;
- rs = RS_2;
- sr_f = 1;
- }
- else if(value < 1000 && sr_f == 1){
- sr = 0;
- rs = RS_1;
- sr_f = 0;
- }
- value = measure_R(tval,rs);
- // LcdDisplayLong(sr_f); //顯示檔位
- // LcdWriteData(':');
- break;
- case 1: //電容測(cè)量
- LcdWriteData('C');
- LcdWriteData(':');
- value = measure_C(tval,cs);
- //電容換擋
- if(value < 1000 && sc_f == 0){
- sc = 1 ;
- cs = CS_2;
- sc_f = 1;
- }
- else if(value >= 1000 && sc_f == 1){
- sc = 0;
- cs = CS_1;
- sc_f = 0;
- }
- value = measure_C(tval,cs);
- break;
- case 2: //電感測(cè)量
- LcdWriteData('L');
- LcdWriteData(':');
- value = measure_L(tval,ls);
- break;
- default:
- break;
- }
- }
- /****************************************/
- /* 函數(shù)名: unit()
- /* 功能:顯示單位
- /* 輸入: 無
- /* 輸出: 無
- /****************************************/
- void unit(){
- switch (f){
- case 0:
- LcdWriteData(' ');
- LcdWriteData('O');
- LcdWriteData('H');
- LcdWriteData('M');
- break;
- case 1:
- LcdWriteData(' ');
- LcdWriteData('P');
- LcdWriteData('F');
- break;
- case 2:
- LcdWriteData(' ');
- LcdWriteData('U');
- LcdWriteData('H');
- break;
- default:
- break;
- }
- }
- /****************************************/
- /* 函數(shù)名:Init()
- /* 功能:初始化
- /* 輸入: 無
- /* 輸出: 無
- /****************************************/
- void Init(){
- TMOD = 0x15; //設(shè)置計(jì)數(shù)器和計(jì)時(shí)器1的工作模式
- //Falg初始化
- f = 0;
- //配置中斷
- EA = 1;
- ET0 = 1;
- ET1 = 1;
- //初始化計(jì)數(shù)器
- TH0 = 0;
- TL0 = 0;
- TR0 = 1;
- //初始化定時(shí)器
- TH1 = (65536-45782)/256;
- TL1 = (65536-45782)%256;
- TR1 = 1;
- //初始化開關(guān)
- A1 = 0;
- B1 = 0;
- //初始化繼電器
- sr = 0;
- sc = 0;
- }
- /*********************************************************************/
- /*主函數(shù)
- /********************************************************************/
- /****************************************/
- /* 函數(shù)名:void main()
- /* 功能: 主函數(shù)
- /* 輸入: 無
- /* 輸出: 無
- /****************************************/
- void main(){
- //延時(shí)以便增加電路穩(wěn)定
- Lcd1602_Delay1ms(1000);
- Lcd1602_Delay1ms(1000);
- LcdInit();
- Init();
- //=======初始化完成=======
-
- //主循環(huán)
- while(1){
- detection(); //按鍵檢測(cè)
- //屏幕顯示
- Lcd1602_Delay1ms(1000); //延時(shí)1S
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //設(shè)置指針起點(diǎn)
- measure(); //測(cè)量
- LcdDisplayLong(value); //顯示值
- unit(); //顯示單位
- }
- }
- /*********************************************************************/
- /*中斷子函數(shù)
- /********************************************************************/
- /****************************************/
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
2.電路城資料.rar
(327.8 KB, 下載次數(shù): 128)
2019-3-12 16:45 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|