历史上的今天
返回首页

历史上的今天

今天是:2024年11月09日(星期六)

正在发生

2020年11月09日 | 单片机+MPX4115压力测量仪

2020-11-09 来源:51hei

一、设计要求:

本课程设计用MPX4115传感器来检测压力参数,ADC0832进行模数转换后,利用单片机AT89C52进行数据处理后,用四个八段数码管显示压力值。压力测量的量程在15.3KPA~114.9KPA,分度值位0.1kpa。

二、构思

2.1 主控模块的选型。

方案一:

采用MSP430系列单片机,该单片机是TI公司1996年开始推向市场的一种16位超低功耗的混合信号处理器。其内部集成了很多模拟电路、数字电路和微处理器,提供强大的功能。不过该芯片昂贵不适合一般的设计开发[3]。

方案二

采用51系列的单片机,该单片机是一个高可靠性,超低价,无法解密,高性能的8位单片机,32个IO口,且STC系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。

因此选用方案二中的51系列单片机作为主控芯片

2.2 显示模块的选型

方案一:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较合适,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示。

方案二:

采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用单片机口线少。

所以本设计中方案二中LED数码管的作为显示模块

2.3 传感器的选型。

压力传感器对于系统至关重要,需要综合实际的需求和各类压力传感器的性 能参数加以选择。一般要选用有温度补偿作用的压力传感器,因为温度补偿特性 可以克服半导体压力传感器件存在的温度漂移问题。

本设计要实现的数字气压计显示的是绝对气压值,同时为了简化电路,提高 稳定性和抗干扰能力,要求使用具有温度补偿能力的压力传感器。MPX4115可以产生高精度模 拟输出电压,数据采集模块由压力传感器MPX4115构成。


三、设计:

3.1 总体设计方案

本次设计是基于8051单片机的测量与显示。利用传感器将压力转换为电信号后,在经过ADC0832的模数转换器经A/D转换后由单片机进行有效处理,然后用数码管进行显示。

3.2 流程框图



3.3 单片机最小系统

由AT89C52单片机、时钟电路、复位 电路组成AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C52是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的于将多功能MCS-518指令集和输出管脚相兼容。位CPU和闪烁存储器组合在由单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C52是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案

单片机系统电路

3.4 A/D转换模块

ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用 ADC0832 可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。8位分辨率双通道A/D转换输入输出电平与TTL/CMOS 相兼容5V电源供电时输入电压在0~5V之间工作频率为250KHZ,转换时间为32μS。 ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在 0~5V 之间。

ADC0832模数转换电路

3.5 传感器模块

MPX4115系列压电电阻传感器是一个硅压力传感器。这个传感器结合了高级微电机技术,薄膜镀金属。还能为高水准模拟输出信号提供一个均衡压力。在0℃-85℃的温度下误差不超过1.5%,温度补偿是-40℃-125℃。为了克服干扰,在MPX4115输出电路中增加了RC滤波电路。如下图所示:


MPX4115信号处理电路

3.6系统总体电路图


四、仿真

通过仿真,调节传感器的+和-,可以观察到数码管数值的变化,压力测量的范围在15.3KPA~114.9KPA之间,基本可以达到要求。

五、心得体会:

传感器课程设计结束了,我的收获很多,我做的是基于AT89C52单片机的压力测量仪的设计,用到的主要芯片是 AT89C52和ADC0808,实现的功能是将传感器采集到的模拟信号转换成单片机可以识别的数字信号,再经单片机转换成数码管可以识别的信息,最后显示输出。通过这些我的硬件和软件开发能力都获得了提高。首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。基本掌握了Proteus原理图的方法,从网上搜索的资料对我帮助很大,遇到不懂的问题自己解决不了,就和大家一起讨论。通过发现问题、分析问题、解决问题,我又学到了许多新的知识,在工程实际应用才能有切身的体会,实践出真知,自己亲自动手去做,才知道知识的匮乏。

单片机源码:

//线性区间标度变换公式:    y=(115-15)/(243-13)*X+15kpa   


#include

#include

#include



#define R24C04ADD 0xA1

#define W24C04ADD 0xA0


//ADC0832的引脚

sbit ADCS =P2^2;  //ADC0832 chip seclect

sbit ADDI =P2^4;  //ADC0832 k in

sbit ADDO =P2^4;  //ADC0832 k out

sbit ADCLK =P2^3;  //ADC0832 clock signal



sbit SDA = P2 ^ 1;                                //数据线

sbit SCL = P2 ^ 0;                                //时钟线

bit bAck;                                          //应答标志 当bbAck=1是为正确的应答


unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};  //位扫描

unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};  //共阳数码管字段码

unsigned char dispbuf[4];

unsigned int temp;

unsigned char getdata; //获取ADC转换回来的值



void delay_1ms(void)  //12mhz delay 1.01ms

{

   unsigned char x,y;   

   x=3;

   while(x--)

  {

       y=40;

       while(y--);

    }

}

void display(void)  //数码管显示函数

{

  char k;

  for(k=0;k<4;k++)

  {


  P1 = dispbitcode[k];

  P0 = dispcode[dispbuf[k]];

  if(k==1)          //加上数码管的dp小数点

          P0&=0x7f;

  delay_1ms();         

  }

}


/************

读ADC0832函数

************/


//采集并返回

unsigned int Adc0832(unsigned char channel)     //AD转换,返回结果

{

    unsigned char i=0;

    unsigned char j;

    unsigned int dat=0;

    unsigned char 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;//控制命令结束

    _nop_();

    _nop_();

    dat=0;

    for(i=0;i<8;i++)

    {

        dat|=ADDO;//收数据

        ADCLK=1;

        _nop_();

        _nop_();

        ADCLK=0;//形成一次时钟脉冲

        _nop_();

        _nop_();

        dat<<=1;

        if(i==7)dat|=ADDO;

    }  

    for(i=0;i<8;i++)

    {

        j=0;

        j=j|ADDO;//收数据

        ADCLK=1;

        _nop_();

        _nop_();

        ADCLK=0;//形成一次时钟脉冲

        _nop_();

        _nop_();

        j=j<<7;

        ndat=ndat|j;

        if(i<7)ndat>>=1;

    }

    ADCS=1;//拉低CS端

    ADCLK=0;//拉低CLK端

    ADDO=1;//拉高数据端,回到初始状态

    dat<<=8;

    dat|=ndat;

    return(dat);            //return ad k

}


//启动I2C总线,即发送起始条件

void StartI2C()

{

        SDA = 1;                              //发送起始条件数据信号

        _nop_();

        SCL = 1;

        _nop_();                                    //起始建立时间大于4.7us

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        SDA = 0;                              //发送起始信号

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        SCL = 0;                                //时钟操作

        _nop_();

        _nop_();

}

//结束I2C总线,即发送I2C结束条件

void StopI2C()

{

        SDA = 0;                                //发送结束条件的数据信号

        _nop_();                                      //发送结束条件的时钟信号

        SCL = 1;                                //结束条件建立时间大于4us

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        SDA = 1;                                //发送I2C总线结束命令

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();        

}

//发送一个字节的数据

void        SendByte(unsigned char c)

{

        unsigned char BitCnt;

        for(BitCnt = 0;BitCnt < 8;BitCnt++)                                  //一个字节

                {

                        if((c << BitCnt)& 0x80) SDA = 1;                   //判断发送位

                        else        SDA = 0;

                        _nop_();

                        SCL = 1;                              //时钟线为高,通知从机开始接收数据

                        _nop_();

                        _nop_();

                        _nop_();

                        _nop_();

                        _nop_();

                        SCL = 0;

                }

        _nop_();

        _nop_();

        SDA = 1;                                                //释放数据线,准备接受应答位

        _nop_();

推荐阅读

史海拾趣

FOCI Fiber Optic Communications Inc公司的发展小趣事

FOCI Fiber Optic Communications Inc.公司发展的五个故事

故事一:成立与初创期

FOCI Fiber Optic Communications Inc.(以下简称FOCI)成立于1995年,由台湾工业技术研究院(工研院)的核心团队创立。这家公司自诞生之初就专注于光纤互连技术的发展,致力于设计、制造和销售高性能的光纤组件和集成模块。初创时期,FOCI凭借其对光纤技术的深刻理解和市场需求的敏锐洞察,逐步在市场上站稳脚跟,成为光纤通信领域的一股新兴力量。

故事二:技术创新与突破

FOCI在发展过程中,始终将技术创新视为企业发展的核心驱动力。公司不断投入研发资源,在光纤耦合器、PLC分配器、薄膜粗波分复用/密集波分复用以及多光纤电缆组装模块等领域取得了多项技术突破。这些技术创新不仅提升了产品的性能和质量,还大幅降低了生产成本,使得FOCI的产品在市场上更具竞争力。

故事三:与奇景光电的战略合作

2024年,半导体解决方案无晶圆厂巨头奇景光电(Himax Technologies)宣布向FOCI投入5.22亿新台币(折合约为1610万美元)的资金。这次投资不仅是两家公司财务合作的结果,更是双方在技术融合与应用拓展上迈出的重要一步。根据合作协议,FOCI的共封装光学器件(CPO)与奇景光电的晶圆级光学器件(WLO)将被整合到多芯片模块中,这些模块将广泛应用于高性能计算、云服务器、人工智能等多个领域。

故事四:全球化布局与市场拓展

随着全球光纤通信市场的快速发展,FOCI积极实施全球化战略,不断拓展国际市场。公司通过参加国际展会、建立海外销售网络等方式,将高性能的光纤组件和集成模块带到了世界各地。特别是在光纤到户(FTTH)和云计算领域,FOCI的产品因其高效、低成本的特性而广受欢迎,成功在全球市场占据了一席之地。

故事五:子公司设立与多元化发展

为了进一步拓展业务领域和市场份额,FOCI在国内设立了多家子公司,如中山上诠通信科技有限公司等。这些子公司不仅继承了FOCI在光纤通信领域的深厚底蕴和技术优势,还根据当地市场需求进行了产品和服务的本地化调整。同时,FOCI还积极探索多元化发展路径,涉足光纤高速数据传输技术开发设计、研发和咨询等多个领域,为公司未来的持续发展奠定了坚实基础。

启英泰伦(Chiplntelli)公司的发展小趣事

随着技术的不断进步和市场需求的日益增长,启英泰伦的芯片产品历经了多次迭代。从最初的AI语音芯片,到后来的AI语音Wi-Fi芯片、AI语音BLE芯片,公司形成了系列化的芯片产品布局。这些芯片广泛应用于智能家居、智能家电、智慧照明等领域,为客户提供了更自然、更简单、更智能的人机交互体验。启英泰伦的芯片产品在市场上获得了广泛的认可,服务客户超过5000家,累计装机量突破2000万台。

AiT Semiconductor Inc公司的发展小趣事

在半导体行业,技术创新是企业持续发展的关键。AiT公司深知这一点,因此始终将创新作为公司的核心竞争力。他们投入大量资金和资源用于研发,不断推出具有创新性和领先性的半导体产品。同时,公司还积极与高校、科研机构等合作,共同开展技术研发和人才培养工作。这些创新举措使得AiT公司在行业中始终保持领先地位。

Crameda Intersys公司的发展小趣事

Crameda Intersys公司自创立之初,便以技术创新为核心竞争力。在公司成立早期,团队经过长时间的研发,成功推出了一款具有颠覆性的集成电路产品,其高效能和低能耗的特点在当时市场上独树一帜。这一技术突破不仅为公司赢得了大量的订单,也为公司的长远发展奠定了坚实基础。随着产品市场的逐步拓展,公司的知名度和影响力不断提升,为后续的技术研发和市场拓展积累了宝贵的经验和资源。

FRIWO公司的发展小趣事

为了更好地服务中国市场和亚太地区的客户,FRIWO在中国深圳设立了生产基地——飞煌德商科技(深圳)有限公司。该生产基地负责开发、生产、加工电源变换器、电源充电器等产品,并承担自产产品及同类商品的批发、佣金代理、进出口及相关配套业务。飞煌德商科技(深圳)有限公司的成立和发展,不仅增强了FRIWO在中国市场的竞争力,也为公司的全球化战略提供了有力支持。通过不断优化生产流程、提升产品质量和服务水平,飞煌德商科技(深圳)有限公司逐渐成为了FRIWO在全球供应链中的重要一环。

FORYARD公司的发展小趣事

在快速发展的同时,FORYARD始终不忘企业的社会责任和可持续发展目标。公司积极推广绿色生产和环保理念,采用环保材料和节能技术降低生产过程中的碳排放和资源消耗。此外,FORYARD还积极参与社会公益事业和慈善活动,为贫困地区的教育和医疗事业贡献力量。这些举措不仅提升了公司的社会形象和品牌价值,也为实现可持续发展目标做出了积极贡献。

问答坊 | AI 解惑

为什么我的中断响应时间会那么长?

我的时钟周期为1/20uS,那么我的中断响应时间应该在5/20uS左右,但实际上测出来的响应时间在2.5uS左右,这个时间长了好多,不知道是什么原因造成的?那个高手有这方面经验的请指点一下。…

查看全部问答>

51汇编编程

用51单片机汇编语言写 假设一个班有50个人, 1) 共有3门选修课,找出同时选了三门课的同学: 2)计算机算法,学号存放100 H开始的单元,首单元存放选修总人数,学号由小到大顺序存放 3) 服装CAD设计,学号存放130 H开始的单元,首单元存放选修 ...…

查看全部问答>

利用FPGA实现高性能数字电视系统

由于MPEG-2压缩技术的采用,绝大多数市场都已接受数字电视(DTV),但情况并非如此简单。H.26?-AVC (MPEG-4 第10部分)和微软的VCI压缩标准承诺可为标准和高清(HD)电视带来更大幅度的进步。广播设备OEM将需要采用这些新兴的压缩编码标准,以有效地满足 ...…

查看全部问答>

承接WinCE外包项目

本人有丰富的WindowCE应用开发经验,现承接Windows CE/Mobile平台上的应用外包项目,质量保证。有意者请与我联系: QQ:17632892 MSN:kerlw@hotmail.com…

查看全部问答>

数据库和嵌入式

我们学校就要分方向了。。。有数据库和嵌入式。。。 请各位大虾指点下。。这两个方向的应用方面和现今社会需求那方面的人才要些。。。。 清大虾们给我点小小的建议。。。谢谢!!!!!!!…

查看全部问答>

紧急求助

我想问一下,如果直接输出3.3V,那么是不是就可以直接用纽扣电池,不需要再用TPS70633芯片转换了呀…

查看全部问答>

这套号称最低成本的方案,哪些兄弟再用啊

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 有7月初参加过茁壮和富士通的高清机顶盒推广活动的兄弟举举手,MB86H61+iPanel3.0大家都有用起来了吗?300块的整转成本实现了吗?话说今年的高清整体转移启动年来着,都快年底了,目前动静不是 ...…

查看全部问答>

QuartusII编译task的问题

我在用QuartusII模拟I2C总线的时候,写了一个任务 task shift_in; output [7:0] shift;     begin      @(posedge  scl) shift[7] = sda;         @ (po ...…

查看全部问答>