標(biāo)題: 單片機(jī)+MPX4115氣壓測(cè)量?jī)x的仿真與設(shè)計(jì)含源程序、Proteus圖、文檔 [打印本頁]
作者: qwertyuiop[] 時(shí)間: 2018-12-20 20:25
標(biāo)題: 單片機(jī)+MPX4115氣壓測(cè)量?jī)x的仿真與設(shè)計(jì)含源程序、Proteus圖、文檔
壓力測(cè)量?jī)x的仿真與設(shè)計(jì)
設(shè)計(jì)一個(gè)數(shù)字氣壓測(cè)量?jī)x,要求測(cè)量范圍為15Kpa~115Kpa,分辨力為0.1Kpa,誤差不超過1.5%。
Protues仿真軟件提供了MPX4115和MPX4250,因此可以采用這兩種芯片進(jìn)行設(shè)計(jì)。壓力傳感器對(duì)于系統(tǒng)至關(guān)重要,需要綜合實(shí)際的需求和各類壓力傳感器的性能參數(shù)加以選擇。一般要選用有溫度補(bǔ)償作用的壓力傳感器,因?yàn)闇囟妊a(bǔ)償特性可以克服半導(dǎo)體壓力傳感器件存在的溫度漂移問題。
本設(shè)計(jì)要實(shí)現(xiàn)的數(shù)字氣壓計(jì)顯示的是絕對(duì)氣壓值,同時(shí)為了簡(jiǎn)化電路,提高穩(wěn)定性和抗干擾能力,要求使用具有溫度補(bǔ)償能力的壓力傳感器。經(jīng)過綜合考慮,選擇使用MPX4115,可以產(chǎn)生高精度模擬輸出電壓。
1、設(shè)計(jì)整體思想:
基于MPX4115的數(shù)字氣壓計(jì)包括軟硬件的設(shè)計(jì)與調(diào)試。軟件部分通過對(duì)C語言的學(xué)習(xí)和對(duì)單片機(jī)知識(shí)的了解,根據(jù)系統(tǒng)的特點(diǎn)編寫出單片機(jī)程序。硬件部分分為四大塊,包括非電信號(hào)數(shù)據(jù)的采集、轉(zhuǎn)換、處理以及顯示:。通過對(duì)設(shè)計(jì)的了解,選擇適合的器件,畫出原理圖。
- 系統(tǒng)總體設(shè)計(jì)框圖:
0.png (8.33 KB, 下載次數(shù): 39)
下載附件
2018-12-21 01:37 上傳
(1)數(shù)據(jù)采集模塊:
數(shù)據(jù)采集模塊由壓力傳感器MPX4115構(gòu)成。其中1腳是輸出信號(hào)端,輸出的是與氣壓值相對(duì)應(yīng)的模擬電壓信號(hào)。數(shù)據(jù)采集模塊的原理如圖:

MPX4115系列壓電電阻傳感器是一個(gè)硅壓力傳感器。這個(gè)傳感器結(jié)合了高級(jí)的微電機(jī)技術(shù),薄膜鍍金屬。還能為高水準(zhǔn)模擬輸出信號(hào)提供一個(gè)均衡壓力。在0℃-85℃的溫度下誤差不超過1.5%,溫度補(bǔ)償是-40℃-125℃。
- 單片機(jī)控制模塊

AT89C52 P為40 腳雙列直插封裝的8 位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0 端口(32~39 腳)被定義為N1 功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及28 腳定義為握手信號(hào)功能端口,連接主板CPU 的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。

ADC0832 為8位分辨率A/D轉(zhuǎn)換芯片,其最高分辨可達(dá)256級(jí),可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉(zhuǎn)換時(shí)間僅為32μS,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗(yàn),以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。獨(dú)立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數(shù)據(jù)輸入端,可以輕易的實(shí)現(xiàn)通道功能的選擇。正常情況下ADC0832 與單片機(jī)的接口應(yīng)為4條數(shù)據(jù)線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時(shí)并未同時(shí)有效并與單片機(jī)的接口是雙向的,所以電路設(shè)計(jì)時(shí)可以將DO和DI 并聯(lián)在一根數(shù)據(jù)線上使用。當(dāng)ADC0832未工作時(shí)其CS輸入端應(yīng)為高電平,此時(shí)芯片禁用,CLK 和DO/DI 的電平可任意。當(dāng)要進(jìn)行A/D轉(zhuǎn)換時(shí),須先將CS使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結(jié)束。此時(shí)芯片開始轉(zhuǎn)換工作,同時(shí)由處理器向芯片時(shí)鐘輸入端CLK 輸入時(shí)鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號(hào)。在第1 個(gè)時(shí)鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號(hào)。
作為單通道模擬信號(hào)輸入時(shí)ADC0832的輸入電壓是0~5V且8位分辨率時(shí)的電壓精度為19.53mV。如果作為由IN+與IN-輸入的輸入時(shí),可是將電壓值設(shè)定在某一個(gè)較大范圍之內(nèi),從而提高轉(zhuǎn)換的寬度。但值得注意的是,在進(jìn)行IN+與IN-的輸入時(shí),如果IN-的電壓大于IN+的電壓則轉(zhuǎn)換后的數(shù)據(jù)結(jié)果始終為00H。
首先要了解的是此數(shù)碼管為共陽極數(shù)碼管,即三極管Q1、Q2、Q3、Q4導(dǎo)通時(shí)數(shù)碼管才能點(diǎn)亮,亦即相應(yīng)的單片機(jī)P2.3、P2.、P2.、P2.0為低電平。

采用LED動(dòng)態(tài)掃描顯示原理如下:
- P23、P22、P21、P20輸出高電平,關(guān)閉所有數(shù)碼管;
- 顯示個(gè)位——把要顯示的數(shù)據(jù)送到P0.0-P0.7,P23送低電平,延時(shí)5毫秒(時(shí)間不能太長(zhǎng),否則數(shù)碼管會(huì)閃爍),P23送高電平;
- 顯示十位——把要顯示的數(shù)據(jù)送到P0.0-P0.7,P22送低電平,延時(shí)5毫秒(時(shí)間不能太長(zhǎng),否則數(shù)碼管會(huì)閃爍),P22送高電平;
- 顯示百位——把要顯示的數(shù)據(jù)送到P0.0-P0.7,P21送低電平,延時(shí)5毫秒(時(shí)間不能太長(zhǎng),否則數(shù)碼管會(huì)閃爍),P21送高電平;
- 顯示千位——把要顯示的數(shù)據(jù)送到P0.0-P0.7,P20送低電平,延時(shí)5毫秒(時(shí)間不能太長(zhǎng),否則數(shù)碼管會(huì)閃爍),P20送高電平。
- 以此順序循環(huán),把它做成子程序,在主循環(huán)中調(diào)用。

MCS-51系列單片機(jī)的時(shí)鐘信號(hào)通常用兩種電路形式得到,即內(nèi)部震蕩方式和外部振蕩方式,本設(shè)計(jì)才用內(nèi)部震蕩方式。在引腳XTAL1和XTAL2外接晶體振蕩器,就構(gòu)成了內(nèi)部振蕩電路,如上圖所示,圖中C1 、C2起穩(wěn)定震蕩頻率、快速起振的作用,電容值一般在5PF到30PF。晶體常選用6MHz 、12MHz 或24MHz采用串口時(shí)常使用11.0592MHz。內(nèi)部震蕩方式所得到的時(shí)鐘信號(hào)比較穩(wěn)定。
復(fù)位電路
復(fù)位操作通常有兩種形式:上電復(fù)位和按鈕復(fù)位,本設(shè)計(jì)采用的是上電復(fù)位,如右圖所示。其工作原理為:上電瞬間RC電路充電,RST引腳端出現(xiàn)正脈沖,只要RST端保持在兩個(gè)時(shí)鐘周期以上的高電平,就能使單片機(jī)有效復(fù)位。
仿真結(jié)果如下,順利完成實(shí)驗(yàn):
1、選擇芯片和傳感器時(shí),夠用易用就可以,綜合考慮選擇性價(jià)比最好的。
2、在進(jìn)行電路實(shí)際制作之前,應(yīng)該用仿真軟件進(jìn)行仿真,可以使開發(fā)進(jìn)程加快。
3、在實(shí)際制作電路時(shí),需要注意電源端和地端要檢測(cè)過不導(dǎo)通后才能通電檢測(cè),防止燒壞芯片。
單片機(jī)源程序如下:
- #include<reg52.h>
- #include "intrins.h"
- #define uint unsigned int
- #define uchar unsigned char
- //ADC0832的引腳
- sbit ADCS =P3^1; //ADC0832 chip seclect
- sbit ADDI =P3^2; //ADC0832 k in
- sbit ADDO =P3^2; //ADC0832 k out
- sbit ADCLK =P3^0; //ADC0832 clock signal080307208
- unsigned char dispbitcode[8]={
- 0xf1,0xf2,0xf4,0xf8,0xef,0xdf,0xbf,0x7f
- }; //位掃描
- unsigned char dispcode[11]={
- 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff
- }; //共陽數(shù)碼管字段碼
- unsigned char dispbuf[4];
- uint temp;
- uchar getdata; //獲取ADC轉(zhuǎn)換回來的值
- void delay_1ms(void) //12mhz delay 1.01ms
- {
- unsigned char x,y;
- x=3;
- while(x--)
- {
- y=40;
- while(y--);
- }
- }
- void display(void) //數(shù)碼管顯示函數(shù)
- {
- char k;
- for(k=0;k<4;k++)
- {
- P2 = dispbitcode[k];
- P0 = dispcode[dispbuf[k]];
- if(k==1) //加上數(shù)碼管的dp小數(shù)點(diǎn)
- P0&=0x7f;
- delay_1ms();
- }
- }
- /*讀ADC0832函數(shù)*/
- //采集并返回
- unsigned int Adc0832(unsigned char channel) //AD轉(zhuǎn)換,返回結(jié)果
- {
- uchar i=0;
- uchar j;
- uint dat=0;
- uchar ndat=0;
- if(channel==0)channel=2;
- if(channel==1)channel=3;
- ADDI=1;
- _nop_();
- _nop_();
- ADCS=0;//拉低CS端
- _nop_();
- _nop_();
- ADCLK=1;//拉高CLK端
- _nop_();
- _nop_();
- ADCLK=0;//拉低CLK端,形成下降沿1
- _nop_();
- _nop_();
- ADCLK=1;//拉高CLK端
- ADDI=channel&0x1;
- _nop_();
- _nop_();
- ADCLK=0;//拉低CLK端,形成下降沿2
- _nop_();
- _nop_();
- ADCLK=1;//拉高CLK端
- ADDI=(channel>>1)&0x1;
- _nop_();
- _nop_();
- ADCLK=0;//拉低CLK端,形成下降沿3
- ADDI=1;//控制命令結(jié)束
- _nop_();
- _nop_();
- dat=0;
- for(i=0;i<8;i++)
- {
- dat|=ADDO;//收數(shù)據(jù)
- ADCLK=1;
- _nop_();
- _nop_();
- ADCLK=0;//形成一次時(shí)鐘脈沖
- _nop_();
- _nop_();
- dat<<=1;
- if(i==7)dat|=ADDO;
- }
- for(i=0;i<8;i++)
- {
- j=0;
- ADDO=1;//收數(shù)據(jù)
- ADCLK=1;
- _nop_();
- _nop_();
- ADCLK=0;//形成一次時(shí)鐘脈沖
- _nop_();
- _nop_();
- j=j<<7;
- ndat=ndat|j;
- if(i<7)ndat>>=1;
- }
- ADCS=1;//拉低CS端
- ADCLK=0;//拉低CLK端
- ADDO=1;//拉高數(shù)據(jù)端,回到初始狀態(tài)
- dat<<=8;
- dat|=ndat;
- return(dat); //return ad k
- }
- /*主程序*/
- void main(void)
- {
- while(1)
- { unsigned int temp;
- float press;
- getdata=Adc0832(0);
- if(14<getdata<243) //當(dāng)壓力值介于15kpa到115kpa之間時(shí),遵循線性變換
- {
- int vary=getdata; //y=(115-15)/(243-13)*X+15kpa
- press=((10.0/23.0)*vary)+9.3; //測(cè)試時(shí)補(bǔ)償值為9.3
- temp=(int)(press*10); //放大10倍,便于后面的計(jì)算
- dispbuf[3]=temp/1000; //取壓力值百位
- dispbuf[2]=(temp%1000)/100; //取壓力值十位
- dispbuf[1]=((temp%1000)%100)/10; //取壓力值個(gè)位
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (47.62 KB, 下載次數(shù): 57)
下載附件
2018-12-21 01:36 上傳
所有資料51hei提供下載:
壓力測(cè)量?jī)x的仿真與設(shè)計(jì).rar
(672.72 KB, 下載次數(shù): 201)
2018-12-20 20:23 上傳
點(diǎn)擊文件名下載附件
源程序仿真報(bào)告
下載積分: 黑幣 -5
作者: rovw11 時(shí)間: 2019-3-25 10:38
有用,幫大忙了
作者: lrph 時(shí)間: 2019-5-17 10:25
挺有幫助的,謝謝樓主大大
作者: xzhhhhh 時(shí)間: 2019-5-22 15:51
MPX4250和4115在使用上有沒有區(qū)別誒 就是代碼和電路連線上
作者: LL. 時(shí)間: 2020-3-13 19:25
為什么我把程序?qū)牒,顯示器不工作呢
作者: TJW。 時(shí)間: 2020-3-26 14:01
第四個(gè)三極管為什么和前三個(gè)不一樣
作者: knight51 時(shí)間: 2020-5-2 15:36
感謝樓主
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |