查看完整版本: 高压平流泵控制系统设计与实现,软硬件协同

admin 发表于 2015-4-27 23:20:40

高压平流泵控制系统设计与实现,软硬件协同

1前言
        1.1高压平流泵控制现状
        高压平流泵是利用电机驱动柱塞泵,使液体以稳定的流量及压力输出的一种设备,作为分析仪器的动力源,广泛应用于石油、化工、食品、制药、煤炭、环保等工业领域。其主要技术要求:压力范围0~42MPa,流量范围0.001~9.999mL流量误差小于0.5%,从技术参数可知,如此小流量、高精度、高压力的流量计较难制造。平流泵又称恒流泵,要求流速恒定。平流泵流量的设定,实质上就是改变电机的转速,所以恒流效果如何主要取决于电机速度的稳定性。
       
        目前,国内生产的恒流泵大多为步进电机驱动。这种泵成本低,调试方便,但致命弱点是在低流量下有较大脉动,很难保证恒流效果。这是因为步进电机是按照一定拍节和相序运行。为了解决这一问题,可借鉴国外仪器,使用直流电机取代步进电机,使恒流泵的性能大为提高。直流电机具有良好的线性调速特性,简单的控制性能,高的效率,优异的动态特性,特别适用于要求调速的系统。
       
        现在市场上通用的电机控制器大多采用单片机和DSP。但是传统单片机的数据处理能力有限,对采用复杂的反馈控制的系统,由于需要处理的数据量大,实时性和精度要求高,往往不能满足设计要求。近年来出现了各种高速SOC单片机,其性能得到很大提高,价格却比DSP低很多。其相关软件和开发工具越来越多,功能也越来越强,但价格却在不断降低。现在越来越多的厂家开始采用SOC单片机来提高产品性价比。
       
        1.2本文主要内容
        系统采用PWM技术闭环调节直流电机转速,从而精确控制平流泵流量。
        系统对高压平流泵精度要求非常高,流量精度要求小于0.5%。如此高精度需要有高性能控制器来采集调节直流电机转速,PIC32MX460F512L可很好满足要求,它采样直流电机转速,经过分析处理,发送适当占空比的PWM信号给电机,从而精确控制直流电机转速。为提高系统稳定性,电机驱动采用电机专用驱动芯片LMD18200。
       
        系统提供压力、电流和热报警三重保护,以防平流泵损坏。压力和电流采用PIC32MX460F512L提供的A/D模块采样,精度高达10位。
       
        为便于人机交互和调试系统,系统提供了稳定可靠的通信功能,通信部分采用光耦隔离,提供RS232通信方式。
       
        2相关技术和原理
        2.1 直流电机控制方法
        在各类机电系统中,由于直流电机具有良好的启动、制动和调速性能,直流电机调速系统已广泛运用于工业、航天领域的各个方面。随着半导体技术的进步,电力电子技术飞速发展,使直流电机的传动技术得到改进,以往普遍采用的三种基本调速方法,即:(1) 改变电枢回路总电阻;(2)改变电枢的供电电压;(3) 改变励磁磁通,发展为晶闸管相控整流电机调压系统,以及全波不控整流——PWM轧波直流电机调压调速系统。直流电机脉宽调制(PWM)直流调速具有调速精度高、响应速度快、调速范围宽和耗损低等特点,使之成为直流电机应用的主要调速方式。
       
        2.2 PWM直流调速原理
        PWM控制是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进行调解,来有效地获得所需要的波形。基于PWM控制的调速电路把流电压“轧”成一系列脉冲,通过改变脉冲的占空比来获得所需的输出电压。在PWM驱动控制的调速系统中,通过改变电机电枢电压接通时间与通电周期的比值(即占空比)来控制电机的转速。用脉宽调制的方法,把恒定的直流电源电压调制成频率一定宽度可变的脉冲电压序列,从而改变平均输出电压的大小,以调节电机转速。可见,在直流电压下,当调制脉冲频率一定时,脉冲宽度与占空比成线性关系。
       
        在脉冲作用下,按一个固定的频率来接通和断开电源,就能够实时控制电机的运转速度。当电机通电时速度增加;电机断电时速度减小。设电机直接接通电源时(即占空比为100%),电机的转速为Vm,设占空比为D=t/T,则电机的平均速度为
                                       (2-1)
        式中:Ve——平均速度;Vm——全速(即直接通电时的速度);D=t/T——占空比(0-100%)。
        由式(2-1)可见,Vm是直流电机直接通电时的速度(全速),只跟电机本身的特性相关,电机一定时,Vm为一个定值。改变占空比D=t/T,就能得到不同的平均速度,从而就能够对电机转速进行实时控制。严格地讲,平均速度与占空比D并不是严格的线性关系,在一般的应用中,可将其近似看成线性关系。
       
        2.3 H桥型电机驱动原理
       
        图2-1 H桥PWM驱动
       
        常见的PWM驱动系统的主电路(功率放大器)结构有:H型和T型。这里以H型结构为例说明PWM双极式驱动的电路工作原理。
       
        H桥PWM驱动如图2-1,图中VD1、VD2、VD3、VD4为续流二极管,用来保护VT1、VT2、VT3、VT4三极管,Ub1=Ub4=-Ub2=-Ub3。
       
        当Ub1=Ub4为正时,VT1和VT4导通,VT2和VT3截止,UAB=Us。
       
        当Ub2=Ub3为正时,VT1和VT4截止,VT2和VT3不能立即导通,因为电机的反电势使AB存在续流,续流流经VD3和VD2,保护了四个三极管,若续流在这个过程没有得到很大衰减,而Ub1=Ub4为正的阶段已经来临,则VT2和VT3一直不能导通;若续流在这个过程中得到很大衰减,则VT2和VT3导通,UAB=-Us。
       
        显然,Ub1=Ub4为正的时间和Ub2=Ub3为正的时间相同时,UAB的平均电压为0,电机动态静止;当Ub1=Ub4为正的时间长于Ub2=Ub3为正的时间时,UAB的平均电压>0,电机正转,UAB的值越大,转速越高;当Ub1=Ub4为正的时间短于Ub2=Ub3为正的时间时,UAB的平均电压<0,电机反转,UAB的值越小,转速越高。
       
        可见,只要控制Ub1、Ub2、Ub3、Ub4的脉冲宽度,就可控制直流电机的转向和速度,且可以达到动态静止,有利于正反转死区电压的消除。
        2.4 电机驱动H桥组件LMD18200
        小型机电一体化产品要求直流电机的驱动器既有较小的体积,又能提供较大的电流、电压输出。采用达林顿三级管可搭建H桥实现PWM脉宽调制控制系统,但由于分立器件各个元件的特性并不相同,调速性能并不太好,而且电路不能达到很高的稳定性。相比而言,采用美国国家半导体公司推出的专用于运动控制的H桥组件LMD18200具有很大好处。该芯片上集成有CMOS控制电路和DMOS功率器件,峰值输出电流高达6A,连续输出电流高达3A,工作电压高达55v,还具有热报警和过热与短路保护功能。
       
        原理框图如图2-2。因为电机由LMD18200驱动,对电机的控制就是对LMD18200控制,所以这里将详细介绍一下该芯片的用法。
       
       
        图2-2 LMD18200原理框图
       
       (1) PWM信号类型
        LMD18200可采用两种不同类型的PWM信号:①类型1PWM信号中既包含方向信息又包含幅值信息,50%占空比的PWM信号代表零电压。使用时,该信号应加于方向输入端(脚3),同时将PWM信号输入端置逻辑高电平。②类型2分别由方向信号与幅值信号组成。幅值由PWM信号的占空比决定,零脉冲时代表零电压。在实际使用时,脚3接方向输入信号,脚5接PWM信号。
       
        (2) 电流取样限流
        每输出1A电流,脚8输出377nA取样电流。接在8脚与地之间的电阻将其转化为电压信号,该电压幅值在5-8v之间时,线性度与精度最佳。该端最高电压为12v。电流取样电路并不检测反馈电流,仅检测桥臂上端晶体管中的电流。
       
        (3) 温度报警标志
        该端(9脚)为OC门输出,对多芯片使用可进行线与。该端通常接到系统控制器的中断输入,以便过热时对系统采取适当措施。该端最高电压为12v。
       
        (4) 限流
        LMD18200内部含有限流保护电路,用于检测器件中的浪涌电流,该电流接近10A时,迅速关断功率器件。器件关断后,保护电路周期性试图开通功率器件。一旦外界短路故障消失,器件就恢复正常运行。由于短路将产生大量热量,在实际使用时,LMD18200必须配备面积足够大的散热器,同时芯片电源端Vcc(脚6)在PCB上需要1平方英寸的铜箔。
       
        (5) 工作原理
        LMD18200内部集成了4个DMOS管,组成了一个标准的H桥驱动电路。H桥高侧DMOS功率器件要求其栅极驱动电压大于电源正极约8V以上才能导通。为此该集成电路设置了内部充电泵电路,它由一个300kHz振荡器控制,充电泵电容被充电至14v左右。此栅极驱动电压上升时间典型值为20us,适用于工作频率1kHz左右的情况。如果要求更高的工作频率,需要外接自举电容。推荐用两个10nF的电容器分别接于引脚1、2和引脚10、11之间,使栅极驱动电压上升时间在100ns以下,允许开关频率高达500kHz。引脚2、10接直流电机的电枢两端,正转时电流的方向应该从引脚2到引脚10;反转时电流的方向应该是从引脚10到引脚2。电流检测引脚8可以外接一个对地电阻,通过此电阻来检测输出电流的情况。内部保护电路设置的过电流阈值是10A,当超过该值时会自动封锁输出,并周期性地自动恢复输出。如果过电流持续的时间过长,过热保护将关闭整个输出。过热信号可以通过引脚9输出,当结温达到145度时引脚9有输出信号。
       
       
[*]                 LMD18200逻辑正值表
        LMD18200逻辑正值表如下(表2-1),通过控制PWM信号,Dir信号和Brake信号可控制驱动电流,从而控制电机的转向及启停。
       
        表2-1 PWM逻辑正值表
                                                                                                                      PWM
                                                                                                                       转向
                                                                                                                       刹车
                                                                                                                       实际输出驱动电流
                                                                                                                       电机工作状态
                                                                                                                                                       H
                                                                                                                       H
                                                                                                                       L
                                                                                                                       流出1、流入2
                                                                                                                       正转
                                                                                                                                                       H
                                                                                                                       L
                                                                                                                       L
                                                                                                                       流入1、流出2
                                                                                                                       反转
                                                                                                                                                       L
                                                                                                                       X
                                                                                                                       L
                                                                                                                       流出1、流出2
                                                                                                                       停止
                                                                                                                                                       H
                                                                                                                       H
                                                                                                                       H
                                                                                                                       流出1、流出2
                                                                                                                       停止
                                                                                                                                                       H
                                                                                                                       L
                                                                                                                       H
                                                                                                                       流入1、流入2
                                                                                                                       停止
                                                                                                                                                       L
                                                                                                                       X
                                                                                                                       H
                                                                                                                       NONE
                                                                                                                       
                                                <div style="clear:both;">                   3需求分析
        3.1系统所需的主要功能
        3.1.1 电机速度检测
        可实时精确检测电机转速,以便系统调速和用户设定转速。
        平流泵冲程为2mm,管道直径为3.175mm,由此可计算出平流泵冲程体积为15.83mm3,平流泵取最大流量10ml/min时,冲程次数为10*1000/15.83=632次。大齿轮转一圈产生2个冲程,因此最大流量时,大齿轮转速为632/2=316rpm。皮带传送的转速比为10:1,电机转速要求为316*10=3160rpm,因此电机最高转速应选4000rpm以上,这里选择5000rpm。电机转速范围1~5000rpm,转速范围大,不易精确采样。
       
        3.1.2 电机调速
        根据用户设置的电机速度,系统自动调节电机转度,使系统稳定工作,以便用户控制平流泵流量,电机调速精度在1.0%范围内。
       
        3.1.3 电机保护功能
        平流泵精度高,电机质量好,应提供适当措施保护电机,特别是压力保护,压力精度为0.1MPa。
       
        3.1.4 通信功能
        要求系统具有串口通信功能,以便与用户交互和调试系统。
       
        3.1.5 其他功能
        本系统是平流泵产品的一部分,要求为产品的其他部分提供所需接口,如风扇电源接口,压力检测接口等。
       
        3.2 性能需求
        3.2.1 精度需求
        在精度需求上,根据使用需要:平流流量精确控制,要求电机速度精确检测控制,电机调速精度在1.0%范围内,电机转速范围为1~5000rpm。
       
        3.2.2 时间需求
        电机保护,电机速度设定都要求较高的响应时间,特别是电机保护。
       
        3.2.3 接口需求
        (1) 通信接口
        本系统要求提供UART串口接口,最好也嵌入485接口,以方便用户调试程序和控制系统。
       
       (2) 正交编码接口
        为了检测电机转速,系统应提供正交编码器接口。
       
        (3) 压力检测接口
        为便于检测平流泵压力,系统应提供压力检测接口。
       
        (4) JTAG接口
        下载调试程序都要用到JTAG接口。
       
        3.3 系统目标
        (1) 电机速度精确可控,以保证平流泵流量的高精度。电机转速范围1~5000rpm,调速精度为1.0%。
        (2) 给高压平流泵提供压力和电流两重保护措施,压力精度为0.1MPa。
        (3) 人机良好交互,电机速度可设置,以便平流泵流量调试。
        (4) 高可靠通信功能,以保证与用户交互顺畅。
       
        4概要设计
        4.1 综述
        高压平流泵控制系统是一个嵌入式系统,为完成系统所要求的功能,需要软件硬件协调工作。
       
        控制系统控制器采用PIC32MX460F512L。PIC32MX460F512L基于80MHz, 1.56 DMIPS/MHz, 32-bit MIPS M4K Core设计的微控制器,它将高性能的32位计算引入到对价格敏感的嵌入式微控制器应用中,在提高性能的同时降低了成本。它提供了丰富的外设接口,足够满足该系统的设计需要,内置的PWM模块可用来控制直流电机,广泛应用于直流电机控制系统,本系统就采用其作为控制核心单元。
       
        LMD18200作为电机驱动芯片,前面已介绍过其性能。硬件电路采用PIC32MX460F512L+LMD18200方案,比分立电路设计可靠,比单片机控制系统性能高,是一个不错的设计方案。
       
        硬件可很好的实现了电机控制,软件所要做的就是驱动硬件和精确采样,保证平流泵工作的精度。本系统用循环和中断机制控制系统,不采用操作系统,主要基于以下考虑:
       
        (1)本系统中任务较少,主要有测速并控制速度,采样电流,采样压力和协议处理,PIC32MX460F512L提供了丰富的中断资源,大部分任务可通过中断机制实现,如测速调速,采样电流,采样压力。
       
        (2)操作系统本身要占用存储空间,任务调度和切换需要消耗时间,当任务切换频繁时所耗时间更多,而操作系统并不能减少中断时间。
       
        对重要信息的采集采用中断方式,减少延迟,提高系统响应速度,缩短系统响应时间。此外,能用硬件实现时尽量用硬件实现,以提高系统可靠性和响应。
       
        4.2 硬件设计
        本系统的硬件设计总框图如下:
       
        图4-1 硬件系统总框图
       
        硬件系统主要分为五个模块,分别为:电源模块,MCU模块,电机驱动模块,通信模块及其它。
        系统要工作就需要有电源,电源模块为整个系统提供合适可靠的动力。
        MCU是系统“大脑”,系统要井然有序工作,就需要协调各模块甚至各个器件的工作顺序,这个任务就由MCU来完成。此外,它还是系统的计算中心,各个模块的信息反馈给它,它经过对信息的分析计算,之后再作用于相应模块器件。它通过分析正交编码器反馈的信息可计算出电机的速度,并根据要求值和实际值来适当调节电机转速。它接受串口传来的用户命令,经过分析可作用于相应模块以达到用户的目标,例如用户通过串口可向MCU发送设定转速命令,MCU经过分析通过调节PWM信号的占空比作用于电机驱动模块,从而达到设置电机速度的目的。它可接收电机驱动模块反馈的电流及热报警信息,经过分析,可采取适当措施作用于电机驱动模块,以实现电机的保护功能。此外,它还实现了ADC接口可实现压力检测,JTAG接口可实现程序的下载和调试。
       
        电机驱动模块是系统的主要工作模块。本系统就是为了实现电机控制,电机驱动模块是直接作用于电机的模块,MCU通过对LMD18200的精确控制可实现电机的精确控制,从而精确控制了平流泵。
       
        通信模块主要实现与用户的交互,为提高可靠性,设计中采用光耦隔离。本系统设计中提供了两类接口,RS232和RS485
       
        其他模块主要为了根据系统具体情况增加接口。例如:风扇电源接口。
       
        4.3 软件设计
        软件设计层次图如下,共包括3部分内容:底层,驱动层,应用层和上位机。
       
        图4-2 软件设计层次图
       
        4.3.1 下位机
        驱动库为上层驱动层设计提供接口,便于驱动层编程设计。
        驱动层包含了系统所需外围接口的驱动程序,主要包括:直流电机驱动、PWM驱动、温度检测驱动、蜂鸣器驱动、ADC(模数转化)驱动和串口驱动。
       
        直流电机驱动主要完成速度的采样及调速,它接受正交编码器的脉冲信号,通过脉冲采样来完成速度采样,并根据采样值与设定值差值对PWM进行调节。
       
        PWM驱动完成PWM模块的初始化,PWM占空比的设置,对电机进行直接控制。
       
        温度检测完成LMD18200热报警的处理,主要完成相应引脚的初始化及对热报警的检测,系统中采用中断方式进行处理。
       
        蜂鸣器驱动完成蜂鸣器的初始化及一些简单操作,供其他程序调用。
       
        ADC驱动把模拟量转化为数字量,完成压力采样和电机电流采样。根据采样量的要求采取不同处理,压力采样除保护电机外,还提供给用户查看,以供用户使用;电机电流采样主要为保护电机,防止电流过大时损坏电机。
       
        串口驱动完成串口初始化及相应操作,主要为接受和发送字符。
       
        应用层包括串口命令解析和main()函数。串口命令解析程序接受用户的命令,并根据命令对系统进行控制。main()完成整个系统的调度,使系统以合适的顺序井然有序工作。
       
        通过以上分析可知,系统硬件软件协调工作,可很好的实现用户所要求的功能。
       
        4.3.2 上位机
        上位机用户界面主要用于实现交互功能,用户可以通过此界面向系统发送命令来实现对系统的控制,同时此界面可以实时显示当前系统运行的各项参数,如平流泵压力、电流、电机转速等信息,并可以以波形的形式直观的显示到界面上。另外,本系统还配有数据库,他将实时记录系统的各项参数,以供对系统进行二次研发提供相应数据。
       
        5详细设计
        5.1硬件设计
        5.1.1电源模块
        电路要正常工作,就需要有合适的电源供电。一个好的供电系统是电路正常工作的首要条件。微控制器需要3.3v电源,直流电机要稳定工作需要24v电压,本设计中从外部引入24v电压,经变压后提供3.3v电源供电路板正常工作。此外通信模块需要5v电源供电,因5v只在通信模块中用到,所以把5v电压放到通信模块介绍。
       
        为了防止大电流或大电压给电子设备造成损毁,通常使用保险丝作为电路保护元件,最好采用自复保险丝,免去更换元件的烦恼。此外,采用二极管IN4007稳压,其只允许单向电压通过,保护了整个电路元器件。
       
        24v电压变压为3.3v主要用到芯片LM2575-3.3,其应用如图5-1,芯片两端都要用电容滤波去耦。
       
       
        图5-1 LM2575-3.3应用电路
       
        为便于观察电路板上电情况,在电源模块加LED灯指示上电状态。
       
        5.1.2 MCU模块
        本设计中用到的处理器为PIC32MX460F512L,可采用两种方式安装到电路板上:插座和SMD。采用SMD焊接芯片时,微处理器芯片损坏时,可把带有PIC32MX460F512L芯片的小主板插到电路板插座上;当采用插座方式安装处理器芯片时,芯片损坏时,只需更换小主板,同时也为电路板的调试带来方便。
        这时设计就要熟悉小主板上电路,通过查阅数据手册知道小主板实现了5v转3.3v电压变化电路和复位电路(如图5-2)及晶振电路,在电路板上需要重新设计这些电路。小主板供电采用5v电源,由于本设计中除通信模块采用5v电压外,其余全为3.3v供电,所以在此设计中小主板亦采用3.3v供电,不过此时小主板的复位功能就消失了。由于电路板采用3.3v供电,所以在电路板上要设计的电路就剩下晶振电路和复位电路。
       
        图5-2 小主板上电压转化及复位电路
       
        系统中晶振电路设计简单,只需在晶振两端增加两个30pF去耦电容即可。
        复位电路设计如图,本设计中复位电路只是简单的阻容耦合电路,没有采用复位芯片,是因为芯片内部嵌有看门狗电路,可很好实现复位。
       
       
        图5-3 复位电路
       
        再来看一下小主板插座设计,小主板3.3v供电,插座中只需要一个3.3v的电源引脚接3.3v电源即可使小主板稳定工作,插座中接地端都要接地以防干扰。
        5.1.3 电机驱动模块
        驱动电机是本次设计的目标,理所当然电机驱动模块是设计的重点。前面已介绍过电机驱动芯片LMD18200,现就本设计介绍具体应用。
       
        电机驱动模块总结构框图如图5-4。微处理器通过PWM控制驱动芯片,从而达到控制电机运转及调速的目的,同时LMD18200电机驱动芯片向微处理器传输热报警信号(TFLAG)和采样电流(CTEST)。为了检测和控制电机速度,增加了QE编码器,编码器输出信号直接传输到微处理器,以便MCU计算并设置PWM,从而精确控制电机转速。
       
       
        图5-4 电机驱动模块图
       
        LMD18200数据手册中一典型电路如下图,其中,PWM信号采用类型2。
       
        图5-5 LMD18200典型应用
       
        本设计中LMD18200引脚连接图如下。
       
        图5-6 LMD18200应用
       
        前面已经较为详细地介绍了LMD18200的性能及应用,现就本设计中的具体应用做一下简单介绍。Vs为电源输入端,接105电容滤波,GND为接地端。引脚1、2间,10、11间接入了10nF的自举电容,引脚2、10输出驱动电机运转。这里PWM类型采用类型2,即从引脚5输入PWM信号,引脚3作为电机方向信号输入端。引脚4是电机制动信号,直接接地就可以,表示永不制动,当然可通过其他方式使电机停止运转,如PWM信号。引脚9是集电极开路输出端,应用中要接上拉电阻,可接最大电压为12v,根据系统需要接3.3v电压,该引脚接到MCU一中断引脚上,以便产生中断时系统采取适当措施。引脚8为电流取样信号输出端,提供377uA/A电流,通过下拉电阻使电流信号转化为电平信号。在这里考虑下拉电阻的大小,取峰值输出电流6A时,3.3v/(6A×377uA/A)约为1.46k,在这里取电阻为1k,主要考虑到电流可能大于6A,数据手册中提到有时达到10A,故在此最好加一稳压二极管(这里选择IN4728)。
       
        电流取样时,由于电流为模拟信号最好加放大器,这里采用AD623放大信号,因为信号已经较强,不需要增大放大倍数,故在此引脚1,8间不接电阻悬空即可。在电路原理图中把它与压力检测方到一起,因为两者均为模拟信号处理,在PCB中要特别处理。
       
       
        图5-7 AD623应用设计
       
        5.1.4 通信模块
        电路设计中一般都需要通信模块来调试程序及通信,本系统也不例外,这里设计了232串口接口。此外,为了保证数据可靠性,采用光耦进行隔离。总结构图如下:
       
       
        图5-8 通信模块框图
       
        具体设计如下:
        首先是变压,为通信模块正常稳定工作提供5v电压。有两种方案可选,第一种3.3v变压到5v,第二种方式是从外部引入的24v直接变压为5v。由于3.3v电压本身就是经24v变压所得,经过两次变压,可靠性及稳定性不好,且由低电压变为高电压存在一定缺陷,不如高电压变为低电压,这里采用第二种变压方式。具体设计如下图,芯片两端只需加电容滤波去耦即可。
       
       
        图5-9 24v转5v电路
       
        现在来考虑光耦,光耦一端接MCU(电压端3.3v),一端接233芯片和485芯片(电压端5v)。具体设计如下,芯片采用4N30,MCU引出信号U2Tx、U2Rx,连接通信芯片的信号为TX2S、RX2S。
       
       
        图5-10 光耦应用
       
        232接口芯片MAX232电路如下:
       
        图5-11 RS232设计图
       
        485接口芯片电路设计如下:
       
       
        需要特别指出的是:1)这里增加了一跳线,配置跳线可单独实现232功能或485功能,如图中S1。这里之所以让两个接口共用同一MCU通信线路,主要考虑到MCU出故障可能性很小(若是采用小主板形式组装MCU,当MCU 出故障时只需更换小主板即可)。此外,若要实现另外一组串口通信,必要增加相应的光耦,增加了电路板面积,增加了成本。2)485芯片的使能信号接在一起,此信号有晶体管驱动。当向外发送时,若输出低电平,晶体管不导通,输出使能;若输出为高电平时,晶体管导通,输出禁能,输出引脚为高阻状态。与软件串口通信协议联系起来,串口通信中,无信号时输出高电平,起始位为一低电平。当要向外输出高电平时,晶体管导通把控制信号DE变为低电平,输出禁能,默认情况下,串口输出仍为高电平,芯片能正常工作。当然,使能信号可直接由MCU控制,但那样增加了软件难度,这里体现出硬件和软件相通的思想,即硬件的功能可有软件来实现,软件的功能也可有硬件来实现。
        5.1.5 其他模块
        (1) 直流蜂鸣器
        通过控制晶体管的导通与否来控制蜂鸣器的响停,所以蜂鸣器部分只需一个GPIO接口控制即可,把引脚方向设为输出,引脚高电平时蜂鸣器响,引脚低电平时蜂鸣器响停。
       
        (2) 正交编码器接口
        正交编码器安在电机上,用来检测电机速度,需要一个7孔接口。起作用的信号有三个:A相,B相和索引信号,三信号均为脉冲信号。A相,B相信号用于检测速度和方向,索引信号用来确定绝对位置,电机转动一圈可产生多个相脉冲信号和一个索引脉冲信号。CCP引脚可捕获A相、B相脉冲信号,用于检测电机转速。索引信号可简单与一GPIO相连,当有脉冲时,引脚启动一中断即可。
       
        (3) 压力传感器
        压力为模拟信号,信号微弱,需要信号放大,这里采用AD623放大器。电路连接与电机电流取样连接相似,只是在引脚1和引脚8间接一电阻用于放大输入信号。设计中电阻取10k,放大倍数为11。
       
        (4) 位置检测器
        位置检测器安装在转轮上,用于判断大转轮位置。
       
        5.1.6 PCB设计
        硬件电路原理图设计完成后,就需要设计元器件的封装,从而得到合适正确的网络报表。根据所选元器件及其实际物理尺寸设计元器件的封装,这里要注意的是,Altium Designer Summer 09封装库提供了许多标准元件的封装,元器件有标准封装的尽量采用标准封装,免去制版厂商定制。将元器件封装与元器件匹配,提取网络报表,为导入到PCB中做准备。
       
        PCB设计按PCB板物理特性设置,布局,布线和DRC流程设计。
        PCB板物理特性设置主要是根据产品需要设置合适的板尺寸,设置安装孔位置及大小和一些其他的有关PCB板物理特性的设置。本设计中PCB采用两层板,板的大小为100*85(单位:mm)。
       
        布局主要完成PCB板上元器件的放置。这里要按模块将元器件分开放置,需要注意的是模拟模块要与数字模块隔离,以减少相互干扰。此外,要根据产品的需要合理放置外部接口,如电源接口,串口等。
       
        布线主要完成PCB板上元器件引脚的连接。首先设置布线规则,设置各个线路的宽度,然后自动布线看是否能布通。若能布通说明布局成功,否则需要适当调整布局以方便布线。这里采用手动布线与自动布线相结合的方式布线,首先将电源线与地线布通以方便元器件连接,需要注意的是元器件的电源和地线网络之间形成的回路要最小,以减少电源供电电流形成的回路电流产生的电磁干扰。其次,要预布重要信号线,如PWM信号线,PWM信号是高频信号,是电机调速信号,应首先考虑。因本PCB板线路不复杂,大部分信号采用手动布线。最后按设计规则自动布线,完成后做适当调整。
       
        布线完成后,在制板之前要进行DRC检查,以防止电路板出现重要错误。
       
        5.2 软件设计
        5.2.1 驱动层设计
        5.2.1.1 串口驱动设计
        程序要调试,首先要实现串口。在串口驱动文件中包含四个函数,串口初始化函数InitUart2 (),串口发送函数Uart2Send(),串口接收函数GetCharInBuf()以及串口服务子程序void __ISR(_UART2_VECTOR, ipl2) ntUart2Handler(void)。
       
        (1) InitUart2 ()完成串口初始化。
        (2)Uart0Send(),GetCharInBuf()和UART0_ISR()共同完成串口的发送和接受。系统发送机制为程序有数据要发送,串口就发送数据且直到发送完成(阻塞发送);字符接受处理在串口中断中实现。这里采用了循环数组来储存接受的数据,循环数组有三个属性:CharsInBuf指示数组中存储的元素个数,CircIn指示要存储数据的数组下标,CircOut指示要读取的数据的数组下标。每接收一个数据并且存储到数组中,CharsInBuf++,CircIn++,当从数组中取出一个数据时CircOut++,当CircIn、CircOut等于数组长度时,重新设置其值为0。
       
        这里重点介绍一下中断服务子程序,其实现如下:
        void __ISR(_UART2_VECTOR, ipl2) IntUart2Handler(void)
        {
             
             if(mU2RXGetIntFlag())             //判断中断是否为接收中断
             {
                   mU2RXClearIntFlag();                //接收中断标志位清零
       
                   if(CharsInBuf<UART0_LEN)       //将串口中的数据写入Buffer中
                      {
                       Buffer = (char)ReadUART2();      
                         if(CircIn<UART0_LEN-1) CircIn++;
                         else CircIn=0;
                          CharsInBuf++;
                      }
       
             }
             if ( mU2EGetIntFlag() )         //判断中断是否为错误中断
             {
                      mU1EClearIntFlag();
             }
             if ( mU2TXGetIntFlag() )            //判断中断是否为传送中断
             {
                      mU2TXClearIntFlag();
             }
        }
        }
        5.2.1.2 PWM驱动设计
        PWM驱动完成PWM模块的初始化和PWM占空比的设置。PWM模块初始化按照数据手册内容调用相应库函数进行设置即可,PWM模块可产生PWM信号。PWM占空比设置函数为SetPWMdutycycle(int v);
       
        5.2.1.3 直流电机驱动设计
        直流电机驱动主要完成电机速度采样和控制。为了精确采样,电机上安装有正交编码器,电机每转一转,输出400个脉冲。现将计数器设为边沿触发,则采样精度进一步提高,相当于电机转速放大了400倍。
       
        因为PIC32MX460F512L内核没有内嵌QEI模块,所以需要通过软件采样正交编码器传来的脉冲信号。Initmdc( )配置与采样相关的定时器/计数器。这里配置TIMER4为16位定时器,定时采样周期;配置TIMER5为16位计数器,计数采样周期内正交编码器传来的脉冲信号。
       
        调节电机转速在采样中断处理函数中完成,其原理前面已介绍,主要思想是当电机一定时,电机速度与占空比成线性关系。当PWM脉冲周期一定时,脉冲宽度与占空比成正比,所以电机转速与PWM脉冲宽度成线性关系。代码实现位函数void Setspeed( )如下
       
        void Setspeed()
        {
             PWMValue=(unsigned int)ReadDCOC2PWM(); //读取当前状态的pwm的占空比
             if(PrPumpstatus==0) SetPWMdutycycle(0); //判断当前的电机状态是否为停止,停止设占空比为0
             else
             {   
                       if(MotorSpeed > PrPumpMTRSpeed )//当前电机转速大于设定值
                          {
                                if( MotorSpeed - PrPumpMTRSpeed >(PrPumpMTRSpeed*0.01))
                                        {   
                                              width=PWMValue*(PrPumpMTRSpeed)/MotorSpeed;
                                              if(width==0) width=1;   
                                                  SetPWMdutycycle(width);
                                           }
                          }
                      else
                          {
                               if( PrPumpMTRSpeed-MotorSpeed>(PrPumpMTRSpeed*0.01))
                                        {                                 //当前电机转速小于设定值的0.01
                                               if(MotorSpeed==0)
                                                       SetPWMdutycycle(0x0fff);
                                                  else
                                                  {
                                                 width=PWMValue*(PrPumpMTRSpeed)/MotorSpeed;
                                                 if(width>4095)                  //4095为占空比最大值
                                                        width=4095;
                                                 if(width==0) width=1;
                                                 SetPWMdutycycle(width);
                                                  }
                                           }
                          }
                }
        }
        其中,PWMValue为当前PWM脉冲正相部分宽度,MotorSpeed为当前电机转速,PrPUMP.MTRSpeed为设定的转速。
        5.2.1.4 温度检测驱动设计
        温度检测驱动主要使能与LMD18200 pin9相连的引脚,使其可接受电机热报警信息,并提示用户,这里根据LMD18200热报警低电平输出特性,采用了低电平中断触发机制。当中断发生时,通过蜂鸣器告知用户。
       
        5.2.1.5 蜂鸣器驱动设计
        MCU通过对一GPIO引脚的控制来控制蜂鸣器的响停。这里主要实现了引脚的初始化及一个简单的服务(蜂鸣器响一段时间)。
       
        5.2.1.6ADC驱动设计
        ADC驱动实现了压力检测和电机电流取样功能,包括ADC模块初始化,压力采样检测和电机电流采样检测三部分。ADC模块初始化配置了两个采样序列分别采样压力信号和电机电流信号,两个采样序列的触发方式不同,压力信号的采样序列触发方式为处理器触发,根据系统需要,在需要的时候触发即可得到获得压力信息;电机电流信号的采样序列触发方式为定时器触发,不受用户控制,主要为了保护电机,需要两个中断服务程序实现采样。
       
        电流采样需要在时间中断配合使用:定时器定时触发ADC采样序列0,ADC中断完成采样信息的处理,当过流时简单地使电机停止转动,其控制流程如下:
       
        图5-14 电流采样处理流程
       
        5.2.2 应用层设计
        5.2.2.1 通信协议设计
        通信协议实现函数为HandleProtocol(),主要解析了三条简单命令,实现了泵的转动,泵的停止和泵速度的设定。命令解析主要通过字符串匹配,本设计中采用case语句匹配字符串,需要增加命令时只需增加case语句即可,为后续开发提供方便。
       
        表5-1 串口命令解析
                                                                                                                      命令
                                                                                                                        数据流向
                                                                                                                       含义
                                                                                                                                                       UXXXX/uXXXX
                                                                                                                       上位机→下位机
                                                                                                                       泵启动
                                                                                                                                                       DXXXX/dXXXX
                                                                                                                        上位机→下位机
                                                                                                                       泵停止
                                                                                                                                                       S????/s????
                                                                                                                        上位机→下位机
                                                                                                                       设置泵转速
                                                                                                                                                       B????/b????
                                                                                                                        下位机→上位机
                                                                                                                       显示当前流量
                                                                                                                                                       P????/p????
                                                                                                                        下位机→上位机
                                                                                                                       显示当前转速
                                                                                                                                                       C????/c????
                                                                                                                        下位机→上位机
                                                                                                                       显示当前电流
                                                <div style="clear:both;">                   5.2.2.3 上位机用户界面
        上位机用户界面主要是便于操作人员和高压平流泵控制系统的交互。实时地直观的显示出系统反馈的相关信息和方便的设置调控系统相关参数。
       
        该界面主要实现上位机与下位机之间的通信,在实现通信时,为了方便主要用CMSComm控件来完成。该软件还实现了把从串口中传过来的数据做分析处理后,实时的显示传来,并且把分析后的数据根据发送过来的时间画出了相应的波形。
页: [1]
查看完整版本: 高压平流泵控制系统设计与实现,软硬件协同