51單片機(jī)簡(jiǎn)易電阻測(cè)量儀仿真設(shè)計(jì)( proteus仿真+程序+報(bào)告+講解視頻)
仿真圖proteus7.8及以上
程序編譯器:keil 4/keil 5
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):S0037
演示視頻
基于51單片機(jī)的簡(jiǎn)易電阻測(cè)量?jī)x仿真設(shè)計(jì)( proteus仿真+程序+報(bào)告+講解視頻)
單片機(jī)最小系統(tǒng)
單片機(jī)最小系統(tǒng),或者稱為 最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機(jī)可以工作的系統(tǒng)。對(duì)51系列單片機(jī)來(lái)說(shuō),最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、晶振電路、復(fù)位電路。下面給出一個(gè)51單片機(jī)的最小系統(tǒng)電路圖。
復(fù)位電路:
一、復(fù)位電路的用途:?jiǎn)纹瑱C(jī)復(fù)位電路就好比電腦的重啟部分,當(dāng)電腦在使用中出現(xiàn)死機(jī),按下重啟按鈕電腦內(nèi)部的程序從頭開(kāi)始執(zhí)行。單片機(jī)也一樣,當(dāng)單片機(jī)系統(tǒng)在運(yùn)行中,受到環(huán)境干擾出現(xiàn)程序跑飛的時(shí)候,按下復(fù)位按鈕內(nèi)部的程序自動(dòng)從頭開(kāi)始執(zhí)行。單片機(jī)復(fù)位電路如下圖:
二、復(fù)位電路的工作原理在書(shū)本上有介紹,51單片機(jī)要復(fù)位只需要在第9引腳接個(gè)高電平持續(xù)2US就可以實(shí)現(xiàn),那這個(gè)過(guò)程是如何實(shí)現(xiàn)的呢?在單片機(jī)系統(tǒng)中,系統(tǒng)上電啟動(dòng)的時(shí)候復(fù)位一次,當(dāng)按鍵按下的時(shí)候系統(tǒng)再次復(fù)位,如果釋放后再按下,系統(tǒng)還會(huì)復(fù)位。所以可以通過(guò)按鍵的斷開(kāi)和閉合在運(yùn)行的系統(tǒng)中控制其復(fù)位。
開(kāi)機(jī)的時(shí)候?yàn)槭裁磿?huì)復(fù)位:在電路圖中,電容的的大小是10uF,電阻的大小是10k。所以根據(jù)公式,可以算出電容充電到電源電壓的0.7倍(單片機(jī)的電源是5V,所以充電到0.7倍即為3.5V),需要的時(shí)間是10K*10UF=0.1S。也就是說(shuō)在單片機(jī)啟動(dòng)的0.1S內(nèi),電容兩端的電壓時(shí)在03.5V增加。這個(gè)時(shí)候10K電阻兩端的電壓為從51.5V減少(串聯(lián)電路各處電壓之和為總電壓)。所以在0.1S內(nèi),RST引腳所接收到的電壓是5V~1.5V。在5V正常工作的51單片機(jī)中小于1.5V的電壓信號(hào)為低電平信號(hào),而大于1.5V的電壓信號(hào)為高電平信號(hào)。所以在開(kāi)機(jī)0.1S內(nèi),單片機(jī)系統(tǒng)自動(dòng)復(fù)位(RST引腳接收到的高電平信號(hào)時(shí)間為0.1S左右)。
按鍵按下的時(shí)候?yàn)槭裁磿?huì)復(fù)位:在單片機(jī)啟動(dòng)0.1S后,電容C兩端的電壓持續(xù)充電為5V,這是時(shí)候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統(tǒng)正常工作。當(dāng)按鍵按下的時(shí)候,開(kāi)關(guān)導(dǎo)通,這個(gè)時(shí)候電容兩端形成了一個(gè)回路,電容被短路,所以在按鍵按下的這個(gè)過(guò)程中,電容開(kāi)始釋放之前充的電量。隨著時(shí)間的推移,電容的電壓在0.1S內(nèi),從5V釋放到變?yōu)榱?.5V,甚至更小。根據(jù)串聯(lián)電路電壓為各處之和,這個(gè)時(shí)候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平。單片機(jī)系統(tǒng)自動(dòng)復(fù)位。
晶振電路:
晶振電路:晶振是晶體振蕩器的簡(jiǎn)稱 在電氣上它可以等效成一個(gè)電容和一個(gè)電阻并聯(lián)再串聯(lián)一個(gè)電容的二端網(wǎng)絡(luò) 電工學(xué)上這個(gè)網(wǎng)絡(luò)有兩個(gè)諧振點(diǎn) 以頻率的高低分其中較低的頻率是串聯(lián)諧振 較高的頻率是并聯(lián)諧振 由于晶體自身的特性致使這兩個(gè)頻率的距離相當(dāng)?shù)慕咏?在這個(gè)極窄的頻率范圍內(nèi) 晶振等效為一個(gè)電感 所以只要晶振的兩端并聯(lián)上合適的電容它就會(huì)組成并聯(lián)諧振電路 這個(gè)并聯(lián)諧振電路加到一個(gè)負(fù)反饋電路中就可以構(gòu)成正弦波振蕩電路 由于晶振等效為電感的頻率范圍很窄 所以即使其他元件的參數(shù)變化很大 這個(gè)振蕩器的頻率也不會(huì)有很大的變化
晶振有一個(gè)重要的參數(shù) 那就是負(fù)載電容值 選擇與負(fù)載電容值相等的并聯(lián)電容 就可以得到晶振標(biāo)稱的諧振頻率
一般的晶振振蕩電路都是在一個(gè)反相放大器(注意是放大器不是反相器)的兩端接入晶振 再有兩個(gè)電容分別接到晶振的兩端 每個(gè)電容的另一端再接到地 這兩個(gè)電容串聯(lián)的容量值就應(yīng)該等于負(fù)載電容 請(qǐng)注意一般IC的引腳都有等效輸入電容 這個(gè)不能忽略
一般的晶振的負(fù)載電容為15pF或12.5pF 如果再考慮元件引腳的等效輸入電容 則兩個(gè)22pF的電容構(gòu)成晶振的振蕩電路就是比較好的選擇
如上圖:晶振是給單片機(jī)提供工作信號(hào)脈沖的 這個(gè)脈沖就是單片機(jī)的工作速度 比如 12M晶振 單片機(jī)工作速度就是每秒12M 當(dāng)然 單片機(jī)的工作頻率是有范圍的 不能太大 一般24M就不上去了 不然不穩(wěn)定
晶振與單片機(jī)的腳XTAL0和腳XTAL1構(gòu)成的振蕩電路中會(huì)產(chǎn)生偕波(也就是不希望存在的其他頻率的波) 這個(gè)波對(duì)電路的影響不大 但會(huì)降低電路的時(shí)鐘振蕩器的穩(wěn)定性 為了電路的穩(wěn)定性起見(jiàn) ATMEL公司只是建議在晶振的兩引腳處接入兩個(gè)10pf-50pf的瓷片電容接地來(lái)削減偕波對(duì)電路的穩(wěn)定性的影響 所以晶振所配的電容在10pf-50pf之間都可以的 沒(méi)有什么計(jì)算公式
P0口的上拉電阻:
P0口作為I/O口輸出的時(shí)候時(shí) 輸出低電平為0 輸出高電平為高組態(tài)(并非5V,相當(dāng)于懸空狀態(tài))。也就是說(shuō)P0 口不能真正的輸出高電平,給所接的負(fù)載提供電流,因此必須接上拉電阻(一電阻連接到VCC),由電源通過(guò)這個(gè)上拉電阻給負(fù)載提供電流。 由于P0口內(nèi)部沒(méi)有上拉電阻,是開(kāi)漏的,不管它的驅(qū)動(dòng)能力多大,相當(dāng)于它是沒(méi)有電源的,需要外部的電路提供,絕大多數(shù)情況下P0口是必需加上拉電阻的。
1.一般51單片機(jī)的P0口在作為地址/數(shù)據(jù)復(fù)用時(shí)不接上拉電阻。
2.作為一般的I/O口時(shí)用時(shí),由于內(nèi)部沒(méi)有上拉電阻,故要接上上拉電阻??!
3.當(dāng)p0口用來(lái)驅(qū)動(dòng)PNP管子的時(shí)候,就不需要上拉電阻,因?yàn)榇藭r(shí)的低電平有效;
4.當(dāng)P0口用來(lái)驅(qū)動(dòng)NPN管子的時(shí)候,就需要上拉電阻的,因?yàn)榇藭r(shí)只有當(dāng)P0為1時(shí)候,才能夠使后級(jí)端導(dǎo)通。
31腳EA/Vpp接電源:
STC89C51/52或其他51系列兼容單片機(jī)特別注意:對(duì)于31腳(EA/Vpp),當(dāng)接高電平時(shí),單片機(jī)在復(fù)位后從內(nèi)部ROM的0000H開(kāi)始執(zhí)行,當(dāng)接低電平時(shí),復(fù)位后直接從外部ROM的0000H開(kāi)始執(zhí)行,這一點(diǎn)是初學(xué)者容易忽略的。
1.主要功能:
電路元件參數(shù)RC測(cè)量電路的設(shè)計(jì)
要求:
測(cè)量?jī)x的工作原理為:利用振蕩電路,將電阻測(cè)量轉(zhuǎn)變?yōu)榕c之成一定函數(shù)關(guān)系頻率的測(cè)量,再利用單片機(jī)對(duì)不同頻率進(jìn)行測(cè)量和處理,用LCD顯示被測(cè)量的大小。
測(cè)量電阻范圍為:≤30KΩ。
測(cè)量精度〈±5%。
以下為本設(shè)計(jì)資料展示圖:
2.仿真
開(kāi)始仿真
開(kāi)始仿真后可以通過(guò)滑動(dòng)變阻器改變測(cè)了電阻值,改動(dòng)后長(zhǎng)按測(cè)量按鍵顯示。
測(cè)量6000R 實(shí)測(cè)數(shù)值6081R
測(cè)量15000R 實(shí)測(cè)數(shù)值15186R
3. 程序
#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;
#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 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; //高脈沖寫入數(shù)據(jù)
delay_us();
E=0;
}
void lcd_write_dat(uchar dat)
{
E=0;
RS=1;
RW=0;
delay_us();
LCD_data=dat;
E=1; //高脈沖寫入數(shù)據(jù)
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) //定時(shí)器初始化
{
TMOD=0X51;
PT0=1; /*中斷優(yōu)先*/
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顯示(地址,數(shù)據(jù))
{
lcd_write_com(add);
lcd_write_dat(dat);
delay_us();
}
void real_display(void)
{
if(!R)
{
// while(!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) //誤差修正函數(shù)
{
uchar i,k;
unsigned long wucha;
if(cnt<100000) //100KHz以內(nèi)的修正
{
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; //關(guān)閉的計(jì)數(shù)器
EA=0;
cnt=TL1+TH1*256+f_cnt*65536;
correct();
//cnt1=(1e+9)/(2*0.693 *cnt)-20000/2;
if(!R)
{
// while(!R);
cnt1=1000000/(0.2*0.693*cnt)-165;
}
else if(!C)
{
cnt1=1000000000/(0.693*3*510*cnt);
}
else if(!L)
{
cnt1=(1e+9)/(4*3.14*3.14*cnt*cnt*0.05);
}
timer0=0;
a6=cnt1%10000000/100000;
a5=cnt1%100000/10000;
a4=cnt1%10000/1000;
a3=cnt1%1000/100;
a2=cnt1%100/10;
a1=cnt1%10;
flag=1;
TH1=0;
TL1=0;
TH0=0x3c;
TL0=0xb0;
cnt=0;
f_cnt=0;
EA=1;
TR1=1; //打開(kāi)計(jì)數(shù)器
}
}
void int1() interrupt 3
{
f_cnt++;
}
4.設(shè)計(jì)報(bào)告
報(bào)告格式規(guī)范,字?jǐn)?shù)6952,含各種框圖。
報(bào)告部分內(nèi)容
1 電阻測(cè)試儀的發(fā)展歷史及研究現(xiàn)狀
當(dāng)今電子測(cè)試領(lǐng)域,電阻,電容和電感的測(cè)量已經(jīng)在測(cè)量技術(shù)和產(chǎn)品研發(fā)中應(yīng)用的十分廣泛。 電阻測(cè)試發(fā)展已經(jīng)很久,方法眾多,常用測(cè)量方法如下。電阻測(cè)量依據(jù)產(chǎn)生恒流源的方法分為電位降法、比例運(yùn)算器法和積分運(yùn)算器法。比例運(yùn)算器法測(cè)量誤差稍大,積分運(yùn)算器法適用于高電阻的測(cè)量。傳統(tǒng)的測(cè)量電容方法有諧振法和電橋法兩種。前者電路簡(jiǎn)單,速度快,但精度低;后者測(cè)量精度高,但速度慢。隨著數(shù)字化測(cè)量技術(shù)的發(fā)展,在測(cè)量速度和精度上有很大的改善,電容的數(shù)字化測(cè)量常采用恒流法和比較法。電感測(cè)量可依據(jù)交流電橋法,這種測(cè)量方法雖然能較準(zhǔn)確的測(cè)量電感但交流電橋的平衡過(guò)程復(fù)雜,且通過(guò)測(cè)量Q值確定電感的方法誤差較大,所以電感的數(shù)字化測(cè)量常采用時(shí)間常數(shù)發(fā)和同步分離法。
將一個(gè)運(yùn)算放大器的輸出端與其反相輸入端直接連接,形成一個(gè)電壓跟隨器; 將基準(zhǔn)精密電阻?的一端與被隔離的在線元件(Z↓[x])的一端通過(guò)導(dǎo)線連接,基準(zhǔn)精密電阻?的另一端與信號(hào)源(V↓[i])或者地連接,被隔離的在線元件(Z↓[x])的另一端通過(guò)導(dǎo)線與地或者信號(hào)源(V↓[i])連接,基準(zhǔn)精密電阻?與被隔離的在線元件(Z↓[x])連接的一端同時(shí)與運(yùn)算放大器的同相輸入端連接;中國(guó)本土測(cè)量?jī)x器設(shè)備發(fā)展的主要瓶頸。盡管本土測(cè)試測(cè)量產(chǎn)業(yè)得到了快速發(fā)展,但客觀地說(shuō)中國(guó)開(kāi)發(fā)測(cè)試測(cè)量?jī)x器還普遍比較落后。每當(dāng)提起中國(guó)測(cè)試儀器落后的原因,就會(huì)有許多不同的說(shuō)法,諸如精度不高,外觀不好,可靠性差等。實(shí)際上,這些都還是表面現(xiàn)象,
真正影響中國(guó)測(cè)量?jī)x器發(fā)展的瓶頸為:
測(cè)試在整個(gè)產(chǎn)品流程中的地位偏低。由于人們的傳統(tǒng)觀念的影響,在產(chǎn)品的制造流程中,研發(fā)始終處于核心位置,而測(cè)試則處于從屬和輔助位置。關(guān)于這一點(diǎn),在幾乎所有的研究機(jī)構(gòu)部門配置上即可窺其一斑。這種錯(cuò)誤觀念上的原因,造成整個(gè)社會(huì)對(duì)測(cè)試的重視度不夠,從而造成測(cè)試儀器方面人才的嚴(yán)重匱乏,造成相關(guān)的基礎(chǔ)科學(xué)研究比較薄弱,這是中國(guó)測(cè)量?jī)x器發(fā)展的一個(gè)主要瓶頸。實(shí)際上,即便是研發(fā)隊(duì)伍本身,對(duì)測(cè)試的重視度以及對(duì)儀器本身的研究也明顯不夠。
面向應(yīng)用和現(xiàn)代市場(chǎng)營(yíng)銷模式還沒(méi)有真正建立起來(lái)。本土儀器設(shè)備廠商只是重研發(fā),重視生產(chǎn),重視狹義的市場(chǎng),還沒(méi)有建立起一套完整的現(xiàn)代營(yíng)銷體系和面向應(yīng)用的研發(fā)模式。傳統(tǒng)的營(yíng)銷模式在計(jì)劃經(jīng)濟(jì)年代里發(fā)揮過(guò)很大作用,但無(wú)法滿足目前整體解方案流行年代的需求。所以,為了快速縮小與國(guó)外先進(jìn)公司之間的差距,國(guó)內(nèi)儀器研發(fā)企業(yè)應(yīng)加速實(shí)現(xiàn)從面向仿制的研發(fā)向面向應(yīng)用的研發(fā)的過(guò)渡。特別是隨著國(guó)內(nèi)應(yīng)用需求的快速增長(zhǎng),為這一過(guò)渡提供了根本動(dòng)力,應(yīng)該利用這些動(dòng)力,跟蹤應(yīng)用技術(shù)的快速發(fā)展。
5. 設(shè)計(jì)資料內(nèi)容清單
下載方式見(jiàn)文章開(kāi)頭視頻或下方鏈接
百度云網(wǎng)盤資料下載鏈接:
https://docs.qq.com/doc/DS3VsUGdlQnBheExM