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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9623|回復: 6
打印 上一主題 下一主題
收起左側

單片機+MPX4115氣壓測量儀的仿真與設計含源程序、Proteus圖、文檔

  [復制鏈接]
跳轉到指定樓層
樓主
壓力測量儀的仿真與設計

  • 設計要求:
設計一個數字氣壓測量儀,要求測量范圍為15Kpa~115Kpa,分辨力為0.1Kpa,誤差不超過1.5%。

  • 構思:
Protues仿真軟件提供了MPX4115和MPX4250,因此可以采用這兩種芯片進行設計。壓力傳感器對于系統至關重要,需要綜合實際的需求和各類壓力傳感器的性能參數加以選擇。一般要選用有溫度補償作用的壓力傳感器,因為溫度補償特性可以克服半導體壓力傳感器件存在的溫度漂移問題。
本設計要實現的數字氣壓計顯示的是絕對氣壓值,同時為了簡化電路,提高穩定性和抗干擾能力,要求使用具有溫度補償能力的壓力傳感器。經過綜合考慮,選擇使用MPX4115,可以產生高精度模擬輸出電壓。

  • 設計:
1、設計整體思想:
              基于MPX4115的數字氣壓計包括軟硬件的設計與調試。軟件部分通過對C語言的學習和對單片機知識的了解,根據系統的特點編寫出單片機程序。硬件部分分為四大塊,包括非電信號數據的采集、轉換、處理以及顯示:。通過對設計的了解,選擇適合的器件,畫出原理圖。

  • 系統總體設計框圖:


  • 硬件設計:
(1)數據采集模塊:
數據采集模塊由壓力傳感器MPX4115構成。其中1腳是輸出信號端,輸出的是與氣壓值相對應的模擬電壓信號。數據采集模塊的原理如圖:

MPX4115系列壓電電阻傳感器是一個硅壓力傳感器。這個傳感器結合了高級的微電機技術,薄膜鍍金屬。還能為高水準模擬輸出信號提供一個均衡壓力。在0℃-85℃的溫度下誤差不超過1.5%,溫度補償是-40℃-125℃。

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

  • A/D轉換模塊
ADC0832 為8位分辨率A/D轉換芯片,其最高分辨可達256級,可以適應一般的模擬量轉換要求。其內部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉換時間僅為32μS,據有雙數據輸出可作為數據校驗,以減少數據誤差,轉換速度快且穩定性能強。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數據輸入端,可以輕易的實現通道功能的選擇。正常情況下ADC0832 與單片機的接口應為4條數據線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI 并聯在一根數據線上使用。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK 和DO/DI 的電平可任意。當要進行A/D轉換時,須先將CS使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK 輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數據信號。在第1 個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。
作為單通道模擬信號輸入時ADC0832的輸入電壓是0~5V且8位分辨率時的電壓精度為19.53mV。如果作為由IN+與IN-輸入的輸入時,可是將電壓值設定在某一個較大范圍之內,從而提高轉換的寬度。但值得注意的是,在進行IN+與IN-的輸入時,如果IN-的電壓大于IN+的電壓則轉換后的數據結果始終為00H。

  • 顯示模塊
首先要了解的是此數碼管為共陽極數碼管,即三極管Q1、Q2、Q3、Q4導通時數碼管才能點亮,亦即相應的單片機P2.3、P2.、P2.、P2.0為低電平。
采用LED動態掃描顯示原理如下:
  • P23、P22、P21、P20輸出高電平,關閉所有數碼管;
  • 顯示個位——把要顯示的數據送到P0.0-P0.7P23送低電平,延時5毫秒(時間不能太長,否則數碼管會閃爍),P23送高電平;
  • 顯示十位——把要顯示的數據送到P0.0-P0.7P22送低電平,延時5毫秒(時間不能太長,否則數碼管會閃爍),P22送高電平;
  • 顯示百位——把要顯示的數據送到P0.0-P0.7,P21送低電平,延時5毫秒(時間不能太長,否則數碼管會閃爍),P21送高電平;
  • 顯示千位——把要顯示的數據送到P0.0-P0.7,P20送低電平,延時5毫秒(時間不能太長,否則數碼管會閃爍),P20送高電平。
  • 以此順序循環,把它做成子程序,在主循環中調用。

  • 晶振電路
MCS-51系列單片機的時鐘信號通常用兩種電路形式得到,即內部震蕩方式和外部振蕩方式,本設計才用內部震蕩方式。在引腳XTAL1和XTAL2外接晶體振蕩器,就構成了內部振蕩電路,如上圖所示,圖中C1 、C2起穩定震蕩頻率、快速起振的作用,電容值一般在5PF到30PF。晶體常選用6MHz 、12MHz 或24MHz采用串口時常使用11.0592MHz。內部震蕩方式所得到的時鐘信號比較穩定。

  • 復位電路
復位操作通常有兩種形式:上電復位和按鈕復位,本設計采用的是上電復位,如右圖所示。其工作原理為:上電瞬間RC電路充電,RST引腳端出現正脈沖,只要RST端保持在兩個時鐘周期以上的高電平,就能使單片機有效復位。

  •   原理圖
  • 仿真
仿真結果如下,順利完成實驗:


  • 心得體會
1、選擇芯片和傳感器時,夠用易用就可以,綜合考慮選擇性價比最好的。
2、在進行電路實際制作之前,應該用仿真軟件進行仿真,可以使開發進程加快。
3、在實際制作電路時,需要注意電源端和地端要檢測過不導通后才能通電檢測,防止燒壞芯片。

單片機源程序如下:
  1. #include<reg52.h>
  2. #include "intrins.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. //ADC0832的引腳
  6. sbit ADCS =P3^1;  //ADC0832 chip seclect
  7. sbit ADDI =P3^2;  //ADC0832 k in
  8. sbit ADDO =P3^2;  //ADC0832 k out
  9. sbit ADCLK =P3^0;  //ADC0832 clock signal080307208

  10. unsigned char dispbitcode[8]={
  11.         0xf1,0xf2,0xf4,0xf8,0xef,0xdf,0xbf,0x7f
  12.         };  //位掃描
  13. unsigned char dispcode[11]={
  14.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff
  15.         };  //共陽數碼管字段碼
  16. unsigned char dispbuf[4];
  17. uint temp;
  18. uchar getdata; //獲取ADC轉換回來的值

  19. void delay_1ms(void)  //12mhz delay 1.01ms
  20. {
  21.         unsigned char x,y;   
  22.         x=3;
  23.         while(x--)
  24.         {
  25.         y=40;
  26.         while(y--);
  27.         }
  28. }

  29. void display(void)  //數碼管顯示函數
  30. {
  31.         char k;
  32.         for(k=0;k<4;k++)
  33.         {
  34.                 P2 = dispbitcode[k];
  35.                 P0 = dispcode[dispbuf[k]];
  36.                 if(k==1)      //加上數碼管的dp小數點
  37.                 P0&=0x7f;
  38.                 delay_1ms();      
  39.         }
  40. }

  41. /*讀ADC0832函數*/
  42. //采集并返回
  43. unsigned int Adc0832(unsigned char channel)     //AD轉換,返回結果
  44. {
  45.         uchar i=0;
  46.         uchar j;
  47.         uint dat=0;
  48.         uchar ndat=0;
  49.         if(channel==0)channel=2;
  50.         if(channel==1)channel=3;
  51.         ADDI=1;
  52.         _nop_();
  53.         _nop_();
  54.         ADCS=0;//拉低CS端
  55.         _nop_();
  56.         _nop_();
  57.         ADCLK=1;//拉高CLK端
  58.         _nop_();
  59.         _nop_();
  60.         ADCLK=0;//拉低CLK端,形成下降沿1
  61.         _nop_();
  62.         _nop_();
  63.         ADCLK=1;//拉高CLK端
  64.         ADDI=channel&0x1;
  65.         _nop_();
  66.         _nop_();
  67.         ADCLK=0;//拉低CLK端,形成下降沿2
  68.         _nop_();
  69.         _nop_();
  70.         ADCLK=1;//拉高CLK端
  71.         ADDI=(channel>>1)&0x1;
  72.         _nop_();
  73.         _nop_();
  74.         ADCLK=0;//拉低CLK端,形成下降沿3
  75.         ADDI=1;//控制命令結束
  76.         _nop_();
  77.         _nop_();
  78.         dat=0;
  79.         for(i=0;i<8;i++)
  80.         {
  81.                 dat|=ADDO;//收數據
  82.                 ADCLK=1;
  83.                 _nop_();
  84.                 _nop_();
  85.                 ADCLK=0;//形成一次時鐘脈沖
  86.                 _nop_();
  87.                 _nop_();
  88.                 dat<<=1;
  89.                 if(i==7)dat|=ADDO;
  90.         }  
  91.         for(i=0;i<8;i++)
  92.         {
  93.         j=0;
  94.         ADDO=1;//收數據
  95.         ADCLK=1;
  96.         _nop_();
  97.         _nop_();
  98.         ADCLK=0;//形成一次時鐘脈沖
  99.         _nop_();
  100.         _nop_();
  101.         j=j<<7;
  102.         ndat=ndat|j;
  103.         if(i<7)ndat>>=1;
  104.         }
  105.         ADCS=1;//拉低CS端
  106.         ADCLK=0;//拉低CLK端
  107.         ADDO=1;//拉高數據端,回到初始狀態
  108.         dat<<=8;
  109.         dat|=ndat;
  110.         return(dat);            //return ad k
  111. }

  112. /*主程序*/
  113. void main(void)
  114. {  
  115.         while(1)
  116.         {      unsigned int temp;
  117.                 float  press;                 
  118.                 getdata=Adc0832(0);
  119.                 if(14<getdata<243)                           //當壓力值介于15kpa到115kpa之間時,遵循線性變換
  120.                 {               
  121.                         int vary=getdata;                        //y=(115-15)/(243-13)*X+15kpa            
  122.                         press=((10.0/23.0)*vary)+9.3;            //測試時補償值為9.3
  123.                         temp=(int)(press*10);                    //放大10倍,便于后面的計算
  124.                         dispbuf[3]=temp/1000;                     //取壓力值百位
  125.                         dispbuf[2]=(temp%1000)/100;                //取壓力值十位
  126.                         dispbuf[1]=((temp%1000)%100)/10;            //取壓力值個位

  127. ……………………

  128. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
壓力測量儀的仿真與設計.rar (672.72 KB, 下載次數: 201)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:236336 發表于 2019-3-25 10:38 | 只看該作者
有用,幫大忙了
回復

使用道具 舉報

板凳
ID:513208 發表于 2019-5-17 10:25 | 只看該作者
挺有幫助的,謝謝樓主大大
回復

使用道具 舉報

地板
ID:544477 發表于 2019-5-22 15:51 | 只看該作者
MPX4250和4115在使用上有沒有區別誒 就是代碼和電路連線上
回復

使用道具 舉報

5#
ID:707851 發表于 2020-3-13 19:25 | 只看該作者
為什么我把程序導入后,顯示器不工作呢
回復

使用道具 舉報

6#
ID:413568 發表于 2020-3-26 14:01 | 只看該作者
第四個三極管為什么和前三個不一樣
回復

使用道具 舉報

7#
ID:733895 發表于 2020-5-2 15:36 | 只看該作者
感謝樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人狠狠干 | 成人精品毛片国产亚洲av十九禁 | 亚洲精品自在在线观看 | 国产高清精品在线 | 亚洲欧美bt| 日日综合 | 国产成人综合在线 | 一区二区三区欧美 | 伊人狠狠 | 99国产精品99久久久久久 | 亚洲欧美日韩在线 | 天天爽综合网 | 国产精品久久久久无码av | 欧美456| 91在线一区 | 日韩精品一区二 | 99av成人精品国语自产拍 | 欧美 日韩 亚洲91麻豆精品 | 网站黄色av| 国产精品99 | 国产精品久久久久久久久久免费看 | 亚洲444eee在线观看 | 97视频人人澡人人爽 | 黄色免费网站在线看 | 成人在线视频免费观看 | 欧美一区二区三区 | 夜夜爽99久久国产综合精品女不卡 | 亚洲国产成人精品久久久国产成人一区 | 人人看人人草 | 免费在线观看一区二区三区 | 在线免费观看一区二区 | 亚洲精品久久久一区二区三区 | 精品国产一区二区 | 亚洲电影专区 | 午夜免费看 | 91精品国产一区二区三区 | 亚州中文字幕 | 久久久av一区 | 国产三级精品三级在线观看四季网 | 久久久久国| 国产精品久久久久免费 |