基于MPX2100型压力传感器的高精度数据采集系统

本文介绍了一种基于Motorola高精度X型硅压力传感器MPX2100的通用高精度压力数据采集系统。系统采用AT89S52单片机控制,通过ICL7135进行A/D转换,确保了数据采集的高精度和抗干扰能力。文中详细阐述了硬件组成、信号调理电路、单片机外围电路、模数转换接口电路以及软件设计等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引言

    在石油、化工、冶金、电力、纺织、轻工、水利等工业及科研领域中,都必须进行相关的压力检测与分析。通常压力值的变化速度较缓慢,但在测量压力值并把它由 非电量转变成电量这一过程中,要求精度非常高,本文介绍了一种通用的高精度压力数据采集系统。系统的压力传感器选用Motorola公司的高精度X型硅压 力传感器MPX2100,转换精度高、灵敏度高,具有极好的线性度,在高性能单片机AT89S52的控制下,放大调理后的模拟电量通过高精度、高性能芯片 ICL7135进行A/D转换,可以保证系统具有很高的数据采集精度和很强的抗干扰能力,使用寿命长。系统采用液晶显示及PS/2键盘接口,实现了良好的 人机交换。PLD技术的应用,节省了硬件电路的开销。

二、系统的硬件组成及工作原理

    高精度压力数据采集系统框图如图1所示。压力传感器输出的模拟信号被放大调理后经模/数转换模块转换为数字量,传送给单片机,经过标定、运算及零点补偿等 处理,在液晶显示模块上显示出来,同时可经串行接口传送到上位机,实现良好的人机交换,键盘提供人机交互的手段。

1、压力数据采集及信号调理电路

    压力传感器是一种将压力转换成电流/电压的器件,可用于测量压力、位移等物理量。压力传感器的种类很多,其中硅半导体传感器因其体积小、重量轻、成本低、 性能好、易集成等优点得到广泛的应用。硅压阻式传感器属于其中的一种,它是在硅片上用扩散或离子注入法形成四个阻值相等的电阻条,并将它们接成一个惠斯登 电桥。当没有外加压力时,电桥处于平衡状态,电桥输出为零。当有外加压力时,电桥失去平衡而产生输出电压,该电压大小与压力有关,通过检测电压,即可得到 相应的压力值。但这种传感器由于四个桥臂电阻不完全匹配而引起测量误差,零点偏移较大,不易调整。 

    Motorola公司生产的X型硅压力传感器则可以克服上述缺点。如图2所示,与惠斯登电桥不同,Motorola专利技术采用单个X型电阻元件,而不是 电桥结构,其压敏电阻元件呈X型,因而称为X型压力传感器。该X型电阻是利用离子注入工艺光刻在硅膜片上,并采用计算机控制的激光修正技术,温度补偿技 术,使Motorola硅MPX系列压力传感器的精度很高,其模拟输出电压正比于输入的压力值和电源偏置电压,具有极好的线性度,且灵敏度高,长期重复性 好。此系列中的MPX2100DP压力传感器是一种高精度硅压式压力传感器,本系统采用MPX2100DP作为压力传感器,可以很好地满足系统的要求,它 具有如下特点:

    ①由于采用激光微调技术,使电桥零漂输出很小,一般小于±1mV;
    ②传感器灵敏度较高,为40mV±1.5mV;
    ③传感器由热敏电阻组成温度补偿网络,在-40℃~ +125℃范围内有较好的温度补偿效果,从而提高了传感器的精度;
    ④具有极好的线性度(±0.25%F.S);
    ⑤有较宽的工作温度范围(-40℃~ +125℃);
    ⑥允许过载大(400%)。

(2)信号调理电路
    电路图如图3所示(图中只以一路传感器输出信号为例,未画出多路开关CD4051)。
    信号经高精度压力传感器MPX2100DP变为电信号,通过CMOS型8选1多路开关CD4051选择之后,再送入放大电路,进行调理后输出到A/D模块 ICL7135进行高精度模数转换。MPX2100DP的供电电压取为8V,它的满量程输出x由下式确定: x =40mV×8V/10V =32mV    (1)
    对于电压输出逻辑电平定为5V,显然32mV的电压要进行适当的放大。
    放大器采用MC33274四运算放大器,它组成一个仪表放大电路,具有高差模增益和高共模抑制比,输入阻抗高,可调节偏置电路。差模放大主要由U1A完 成,U1B为电压跟随器,用来防止运放的反馈电流流入传感器的负端。零压力时,传感器的2和4端之间的电压差为零。设2端和4端的共模电压各为4V(传感 器电源电压的一半),则U1A的端电压也是4V,该电压经U1C和U1D电路使其输出为零。输出端的零压力偏置由R4和RP1引入。R7值的选择从13端 看过去的阻抗约为1kW,放大器的增益为:

                            (2)

  选择125的增益使传感器满量程输出摆幅32mV可放大到125×0.032 = 4V(为电源电压的一半)。

2、单片机及其外围电路部分
    单片机外围电路如图4所示。
    (1)AT89S52介绍
    单片机选用的是ATMEL公司新推出的AT89S52,该芯片具有低功耗、高性能的特点,是采用CMOS工艺的8位单片机。AT89S52有以下主要特点:/
    ①采用了ATMEL公司的高密度、非易失性存储器(NV-SRAM)技术;
    ②其片内具有256字节RAM,8KB的可在线编程(ISP)FLASH存储器;
    ③有2种低功耗节电工作方式:空闲模式和掉电模式;
    ④片内含有一个看门狗定时器(WDT),WDT包含一个14位计数器和看门狗定时器复位寄存器(WDTRST),只要对WDTRST按顺序先写入 01EH,后写入0E1H,WDT便启动,当CPU由于扰动而使程序陷入死循环或“跑飞”状态时,WDT即可有效地使系统复位,提高了系统的抗干扰性能。

(2)外围电路部分
    接口电路的片选信号由74LS138对高位地址线P2.0(A8)、P2.1(A9)、P2.2(A10)译码后生成,主要有8155可编程接口电路片选 信号CS_8155(Y0)、键盘接口片选信号CS_KEY(Y1)及液晶模块片选信号CS_LCD(Y2)等。LCD选用OCULAR公司生产的字符点 阵液晶显示模块GD1602S,该模块能显示20×2的5×7点阵字符,功能强,与8位MCU接口方便;键盘接口设计为通用PC机接口(PS/2),是因 为通用PC机键盘具有价格低廉、可靠性高、通用性好及操作方便等优点,而且维护方便,限于篇幅本文未介绍。A13、A14、A15组成多路模拟开关 4051的编码地址线,Vxi即为4051按照键盘输入的地址选出的一路模拟信号,它将被送往信号调理模块进行放大调理。在恶劣的工业工作环境中,串行通 信接口芯片很有可能受到静电的冲击而损坏,特别是在传输线架设于户外的使用场合,接口芯片乃至整个系统还有可能遭致雷电的袭击。本文选用的RS-485接 口芯片SN75LBC184不但能抗雷电的冲击而且能承受高达8kV的静电放电冲击,最大传输距离约1219m,最大传输速率为10Mb/s;可以保证与 上位机进行通信时稳定可靠。

3、双积分模/数转换接口电路
    (1)芯片ICL7135介绍
    ICL7135是美国MAXIN公司生产的一个双积分式A/D转换集成电路,该芯片抗干扰能力强、分辩率高、价格低廉。它的分辩率相当于14位二进制数, 转换误差为±1LSB,转换输出为0~19999;当测量量程为0kN~2000kN时,这样的精度使得仪表的分辩率达到0.1kN;模拟输入可以保证0 点在常温下的长期稳定性。由于7135输出的转换结果是动态扫描BCD码,因此常规设计一般通过并行接口与单片机连接,以节省单片机的硬件开销,同时 8155中的定时器还可以满足7135对时钟的需要。
    (2)A/D转换电路及其原理
    电路原理图如图5所示。

   7135与8155的连接是通过4位2选1数据多路开关74LS157来实现的。其选通信号由7135的D5输出控制。当A/D转换结束时,D5输出高电 平,74LS157选通B类通道,单片机通过PA0~PA3读入万位数B1、状态位POL(极性)、OVR(过量程)和UR(欠量程);当D5输出完成 时,变为低电平(这一过程包括D4~D1数据输出周期在内),74LS157选通A类通道,单片机通过PA0~PA3将依次读入8421码值B8,B4, B2及B1,即低位BCD码,依次形成万、千、百、十、个各位BCD码(即转换结果)。8155A口中断请求线PC0反相后形成单片机的外中断0触发信 号。当7135完成1次转换后,产生5个数据选通脉冲,分别将各位BCD码和位标志送入A口;A口收到一个数据后,中断线PC0变为高电平,启动单片机的 中断服务程序,读取A/D转换的数据结果。7135的转换启动由P14控制,高电平转换开始,低电平保持。
    经调理后的0V~2V的模拟信号通过RC低通滤波后,从IN+,IN-输入。A/D转换后的结果包括2部分:极性和量程,反映转换性质的结果。转换后的数 字信号为D1,D2,D3,D41及D5,其中D5(万位)只能是1或0,其他几位为0~9的BCD码。而7135所需的参考电压为量程的确良1/2,如 果量程为2V,则参考电压为1V。为了保证转换的温度稳定性和精度,采用高精度基准电源MC1403,通过金属膜多圈进口电位器调节得到。参考电压上并联 的CBB电容C46(0.1mF) ,C47(1mF)主要是保证参考电压的稳定性。

    积分电容是决定转换精度的关键器件。按照7135应用特性,积分电容C8和积分电阻R3与量程等有关,选用时必须满足以下要求:

    R3=满度电压/20mA                            (3)
    C8=1000×20mA×T/积分器输出摆幅             (4)
    式中,T=1/fcl k。
    fclk—7135的时钟频率,一般可选择250kHz,166kHz、125kHz、及100kHz、典型值为125kHz,此时7135的转换速率为3次/s。
    在±5V系统中,如模拟地为0V,则摆幅为±4V,此时量程为 ?C2V~ +2V,则:R3=100kW,C8=0.47mF。
   (3)PLD技术的应用
    为节省了硬件电路的开销,减少硬件电路产生的电磁干扰,系统的部分电路应用了PLD技术,其可编程逻辑电路(见图5)由可编程逻辑陈列芯片GAL16V8 组成,主要完成A/D转换模块所需的时钟信号和转换结束选通信号  产生单片机外中断0中断信号的逻辑转换,其逻辑方程如下:
    P16= +  (与非门)                      (5)
    P14=P7+P8   (或门)                        (6)
    P13=        (非门)                        (7)
    式中,P2 、P3、 P7分别为单片机的  、  、ALE信号;
    P8—与非门输出; P9—8155的A口中断信号;P13—生成的单片机外中断触发信号。
    按照上述逻辑关系生成的PLD文件经FM软件编译后,产生熔丝文件*.LED,然后通过编程器写入GAL16V8即可。


三、系统软件设计

    系统软件设计采用模块化结构,采用汇编语言编程,整个程序由主程序、显示、键盘扫描、A/D转换处理等子程序模块组成。限于篇幅在此只列出了A/D转换处理子程序流程图,如图6所示。

四、非线性误差的修正

    传感器、放大器、A/D转换器总是存在非线性误差,由于上述非线性关系的存在,带来了精度的降低,为了保证在整个范围内满足精度的要求,所以在实际应用中 应根据控制要求对测量值进行误差修正,修正一般通过软件较准实现。其具体的修正方法应根据信号的工作区段和质量要求来确定。利用单片机的运算和控制能力对 非线性关系找出修正算法,并在反复测试调整后使其达到设计要求。本系统采用分段线性插值法对测量值的曲线进行了误差修正处理。方法为:将0~XMAX分为 若干工作区段,每段曲线用一段对应的折线来代替,对每段折线可求出VQ:

     N t : VQ = ai×N t+bi         (8)
    式中,I—某段折线的序号;ai—该段折线的斜率;bi—该段折线的截距。
    它们的修正程序流程图如图7所示,处理关系示意曲线如图8所示。
    预先将每段的之值存于单片机中,在不同的工作区段,单片机自动地将对应的每段的上述值调出进行运算处理。(限于篇幅,定量的分析没有讨论)
                 

五、结束语

    本文描述的是一种通用的高精度压力数据采集系统,它有许多优点,可在各种恶劣的环境中正常地工作,而且抗干扰能力强、使用寿命长、分辨率高。采用液晶显示 及PS/2键盘接口,实现了良好的人机交换。可广泛地应用于石油、化工、冶金、电力、纺织、轻工、水利等工业及科研领域的压力数据采集、检测与分析。

<think>好的,我现在要解决的问题是如何实现八灰度传感器的并行通信。用户提到了使用IIC总线,但需要并行通信的方案。首先,我需要理解用户的需求,可能他们觉得IIC的串行通信速度不够,或者需要同时读取多个传感器的数据,以减少延迟。 首先,我得回顾一下常见的通信方式。IIC是两线制的串行通信,虽然可以连接多个设备,但确实是逐个访问的,这可能会导致延迟,尤其是当设备数量较多时。而并行通信通常指的是每个传感器有独立的信号线,可以同时读取数据。但八并行的话,可能需要更多的IO口,这可能会对微控制器的资源造成压力。 接下来,我需要考虑用户提供的参考资料。引用[2]中提到他们使用了八传感器并通过IIC进行通信,主程序初始化了Huidu_Init(),并启动了Huidu_GetNum_Start(),然后在循环中获取数据。这可能说明他们的当前实现是串行的,用户现在想改为并行。 可能的方案有几个方向: 1. 使用多复用器:虽然多复用器通常用于切换输入,但如果每个传感器有自己的地址,可能还是需要分时读取,这并不能真正实现并行。 2. 每个传感器单独连接到MCU的IO口:这需要足够的IO资源,例如8个模拟或数字输入。如果传感器输出的是数字信号,可以直接读取;如果是模拟的,需要多个ADC通道。 3. 使用多个ADC模块或外部ADC芯片:如果灰度传感器输出模拟信号,可能需要多个ADC同时采样。例如,使用带有多个ADC通道的MCU,或者外部ADC扩展板,支持多同时转换。 4. 采用并行总线设计:例如,使用FPGA或CPLD来处理多个传感器的信号,然后通过并行接口将数据一次性传输给主控制器。这可能在高性能或实时性要求高的系统中使用,如引用[1]中提到的FPGA应用。 5. 中断驱动的并行读取:为每个传感器配置中断,当数据准备好时触发,但这样可能增加软件复杂性。 另外,需要确认传感器的输出类。灰度传感器通常输出模拟电压或数字信号(比如通过比较器后的高低电平)。如果是模拟的,需要ADC转换;数字的可能可以直接读取。 假设传感器输出的是数字信号,那么可以设计每个传感器连接到MCU的一个独立IO口,通过端口寄存器一次性读取所有8位的状态。例如,使用8个GPIO引脚,配置为输入模式,然后读取整个端口的值,这样一次读取就能获取所有8个传感器的状态,实现并行读取。这种方法需要MCU有足够的数字输入引脚,并且传感器输出是数字信号。 如果传感器输出模拟信号,那么需要多个ADC通道。例如,STM32系列MCU有多个ADC通道,可以配置为交替采样或同时采样(取决于具体号)。但大多数情况下,ADC是逐个转换的,所以即使有多个通道,可能也无法真正同时采样,但可以通过快速切换通道来近似并行,减少总读取时间。或者使用外部ADC芯片,如ADS1115这样的多通道ADC,但同样可能需要分时读取。 另一种思是使用多个IIC或SPI接口的ADC,每个传感器连接到一个ADC,这样可以通过不同的总线同时读取数据。不过这会增加硬件复杂性和成本。 综合考虑,最直接的并行方案可能是将每个传感器的数字输出连接到MCU的不同IO口,然后一次性读取整个端口的状态。例如,使用8个GPIO引脚,配置为输入,然后通过读取端口寄存器(如GPIOA->IDR)获取所有8位的状态。这种方法在硬件上需要足够的引脚,软件上则简单高效。 如果传感器输出是模拟的,可以考虑使用多个ADC通道,并利用MCU的扫描模式,在单次扫描中快速转换所有通道,然后DMA传输以减少CPU开销。虽然这并非严格同时采样,但转换时间极短,可以近似为并行。 此外,引用[1]中提到使用FPGA,可能暗示用户有FPGA的资源。如果系统中有FPGA,可以利用其并行处理能力,同时读取多个传感器信号,进行预处理后,再通过高速接口(如SPI或并行总线)传输给主控制器。FPGA的并行特性非常适合同时处理多信号,确保真正的同步采集。 总结可能的步骤: 1. 确定传感器输出类(模拟/数字)。 2. 评估MCU的IO资源或是否需要扩展IO(如使用IO扩展芯片)。 3. 设计电连接,每个传感器连接到独立的IO或ADC通道。 4. 编写代码一次性读取多个IO状态或快速扫描多个ADC通道。 5. 考虑使用FPGA或外部ADC进行真正的并行数据采集。 可能的问题:如果传感器需要供电或控制信号,还需考虑电源和信号同步的问题。此外,布线复杂性和抗干扰措施也需要考虑,尤其是当信号线增多时,容易引入噪声。</think>### 八灰度传感器并行通信实现方案 #### 1. **传感器信号类分析** - **模拟信号**:若传感器输出模拟电压(如光强变化导致的电阻分压),需通过ADC转换。 - **数字信号**:若传感器集成比较器输出高低电平(如阈值触发),可直接通过数字IO读取。 #### 2. **硬件设计方案** - **方案一:独立IO并行读取(数字信号)** - 将每个传感器的数字输出端连接到MCU的独立GPIO引脚(需8个空闲引脚)。 - 通过读取端口寄存器一次性获取8状态,例如: ```c uint8_t sensor_data = GPIO_ReadPort(GPIOA); // 假设8信号连接至GPIOA的0-7位 ``` - **优点**:实时性强,无延迟[^2]。 - **缺点**:占用较多IO资源。 - **方案二:多通道ADC快速扫描(模拟信号)** - 使用支持多通道ADC的MCU(如STM32),配置为扫描模式+DMA传输。 - 代码示例(STM32 HAL库): ```c ADC_ChannelConfTypeDef sConfig = {0}; hadc1.Init.ScanConvMode = ENABLE; hadc1.Init.ContinuousConvMode = ENABLE; HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 8); // 自动循环采样8 ``` - **优点**:接近并行采样,资源占用较少。 - **缺点**:受ADC转换速度限制,非严格同步。 - **方案三:FPGA并行采集(高实时性需求)** - 使用FPGA同时读取8信号(模拟需外接ADC芯片,数字直接接入)。 - FPGA内部逻辑实现信号同步与预处理,通过SPI/UART将结果传输至主控[^1]。 - **优点**:严格并行,延迟极低。 - **缺点**:硬件复杂度高,成本增加。 #### 3. **软件优化策略** - **中断触发**:为每传感器配置中断,实时响应状态变化(适用于事件驱动场景)。 - **端口批量操作**:利用MCU的位带操作或掩码技术快速读取/处理多数据。 - **数据缓冲**:使用DMA或环形缓冲区减少CPU开销。 #### 4. **抗干扰设计** - **硬件**:为每信号添加滤波电容(如0.1μF),走线尽量等长。 - **软件**:采用均值滤波或滑动窗口算法去噪。 #### 5. **参考实现示例(方案一)** ```c // 初始化8GPIO为输入模式(以STM32为例) GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | ... | GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 读取传感器状态 uint8_t sensor_states = GPIOA->IDR & 0x00FF; // 获取低8位状态 ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值