当前位置:首页 > 电源 > 数字电源
[导读]1. 引言:随着计算机系统的应用和微机网络的发展,各种控制设备之间的通信功能越来越显得重要。在设计的减振控制系统中,控制器(下位机)采用两片AT89C52单片机,分别用于对左右减振器实施控制,同时将测量的温度、

1. 引言:

随着计算机系统的应用和微机网络的发展,各种控制设备之间的通信功能越来越显得重要。在设计的减振控制系统中,控制器(下位机)采用两片AT89C52单片机,分别用于对左右减振器实施控制,同时将测量的温度、电流、速度等信号按一定采样时间保存在E2PROM ATC256中。为了能测试控制器的工作情况,包括初始安装时的状况测试和读取历史记录并做测试诊断以及能根据参数变化情况进行故障诊断,为此,同时开发了通信系统,上位机采用便携式PC机,上、下位机之间通过MAX485芯片实现串行数据通信。

2. 通信系统硬件电路设计

通信系统硬件电路设计的突出特点是,控制器的外围一改传统的并行扩展,而采用新型串行芯片进行串行总线扩展。与传统的并行扩展相比,具有体积小、性能价格比高、工作可靠性高的优点。存储器ATC256、通信芯片MAX485均是I2C总线器件。单片机AT89C52的串行数据发送端TXD和串行数据接受端 RXD分别与MAX485驱动器输入端DI和驱动器输出端D0,接受器输出使能端RE接地,驱动器输出使能端DE接单片机的T1端(P3.5脚)。存储器 ATC256的串行数据线SDA和串行时钟线SCL分别AT89C52的P3.7和P3.6相连,具体硬件电路框图如图1所示:

3.数据的存储—ATC256①

测得的温度、电流和速度等信号需实时保存,以便根据参数变化情况进行故障诊断和对加速度变化情况进行分析等。系统设计存储器采用美国ATMEL公司推出的串行E2PROM——24C256。24C256遵从I2C总线协议,通过数据线SDA和时钟线SLA两根线直接与单片机相连,不需要其它器件和外围电路。它具有256Kbit的位存储容量,按8位一个字节的方式可提供32K字节的存储空间。对ATC256的读写操作完全符合I2C总线的数据传送,传送的每一帧数据为一个字节,要求每传送一个字节后,对方回应一个应答位。发送时先放送数据最高位,每次传送开始有起始信号,结束时有停止信号。在系统的设计中,对ATC256的写操作采用字节写,读操作采用顺序读的方式。根据系统要求,每到一分钟就向ATC256中写入1条记录(包括三个温度、电流、速度等 5个数据),上位机需要读取数据时,可根据上位机的读取指令读取任意条记录。

对ATC256的读/写程序流程如图2所示:


图2 字节写(左),连续读(右)程序流程             

4.串行数据通信程序设计

4.1通信协议

本系统串行通信采用异步通信方式。协议如下:

1. 一帧数据由1位起始位、8位数据位、无奇偶校验位、1位停止位共10位组成。

2. 波特率设为2400bps。单片机串行口按方式1工作,波特率由定时器T1控制,

PC机串口波特率通过VB通讯控件的Settings属性设置,为保证数据传送的准确性,两者的波特率必须一致。

[!--empirenews.page--]

4.2下位机(单片机)串行通信及程序设计

单片机可以采用中断方式或查询RI(接受中断标志位)或TI(发送中断标志位)方式进行数据通信②。设计采用查询方式,在定时器T2中断子程序中查询 RI,一旦检测到RI=1则转入接受数据子程序,在子程序中单片机读取从上位机发送的通信指令、读取记录个数等数据,经校验正确后,即从ATC256存储器中将历史记录数据上传给PC机,单片机发送数据子程序流程图如图3:


图3单片机发送数据子程序流程图

4.3上位机(PC机)串行通信及程序设计

1.编程方法

上位机利用Visual Basic 6.0编程。用VB6.0开发串行通信程序有两种法,一种是利用Windows的API函数;另一种是采用VB6.0的通信控件MSComm。利用API 函数编写串行通信程序较为复杂,需要掌握大量的通信知识,其优点是可实现的功能更丰富、应用面更广泛,适合于编写较为复杂的低层次通信程序。而VB6.0 的MSComm通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解决了串口通信问题。

2.VB6.0的通信控件及通信方式③

MSComm是VB6.0提供的ActiveX控件,使用前需将该控件添加到VB工具栏。MSComm控件具有功能完善的串口数据发送和接受功能,有两种处理通信的方式,即事件驱动方式和查询方式,事件驱动方式是利用MSComm控件的OnComm事件捕获并处理通信错误事件,是处理串行端口交互作用的一种非常有效的方法;查询方式是通过检查CommEvent属性的值来判断事件和错误。

本系统采用事件驱动方式进行串口通信设计,图4为上位机通信界面,设计4个命令按纽,分别为发送命令、退出、保存、浏览数据;两个文本框,Text2用于输入需从下位机读取的记录个数,Text3用于显示下位机发送来的数据;进行数据通信的单片机和串行通信口的选择通过两组单选按纽完成。在发送命令按纽的 Click事件中,将通信指令通过串行口发送给上位机,当选择左侧单片机时(变量LR(1)=1),通信指令为“ET”,选择右侧单片机时(变量LR(1)=2),通信指令为 “DT”,数据传送以回车符(十进制ASCII码为13)作为结束标记。

下面是MSComm控件的初始化程序、部分数据发送和接受程序:
MSComm控件的初始化(属性设置)程序:
MScomm1.ComPort=1   ;设置串行端口(com1)
MScomm1.Settings=2400,n,8,1 ;设置波特率及数据帧格式
MScomm1.InputMOde=1 ;数据接受按字节(binary)方式
MScomm1.InbufferSize=4000 ;数据接受缓冲区大小为4000字节
MScomm1.InputLen=0 ;INPUT读取缓冲区的所有内容

[!--empirenews.page--]

数据发送程序:
Private Sub Command1_Click()
Dim outbuf(1 To 6) As Byte
Dim lstr1 As String
Dim hstr2 As String
Dim len1 As Integer
Command1.Enabled = False
len1 = Len(Hex(Val(Text2.Text)))
………
If LR(1) = 1 Then
outbuf(1) = 69       ;对应字符“E”
Else
outbuf(1) = 68       ;对应字符“D”
End If
outbuf(2) = 84           ;对应字符“T”
outbuf(3) = LR(1)
outbuf(4) = stoby(hstr2) 
outbuf(5) = stoby(lstr1)
outbuf(6) = 13
MScomm1.RThreshold = 5 * Val(Text2.Text)
MScomm1.Output = outbuf
End Sub

数据接受程序:
Private Sub MScomm1_OnComm() 
Select Case MScomm1.CommEvent
Case comEvReceive
Dim inbuf() As Byte, i%, buf$
      buf = ""
      inbuf = MScomm1.Input
      Rev_num = UBound(inbuf)
      ReDim lnum(0 To Rev_num) As Integer
   For i = 0 To Rev_num
        lnum(i) = inbuf(i)
        buf = buf + Str(inbuf(i)) + "    "
  Next i
Case comEvSend
End Select
End Sub

由于MSComm控件数据接受设计为按字节方式,可接发的数值范围为0~255。当上位机读取数据个数超过255(1字节)时,为了能让下位机正确接受,解决方法是通过编制的函数stoby将文本框Text2输入的记录个数(字符型)转化成字节型,并分成两个字节送给下位机。另外,系统中有关数据保存、数据图表处理、打印等功能的实现在此不再赘述。

5.结论

2C总线器件的采用简化了硬件电路设计,提高了可靠性。本系统已投入使用,经过实际应用表明,通信系统工作稳定、可靠。满足系统要求,每到一分钟就向 ATC256中写入1条记录(5个数据),ATC256可保存12小时的记录,下位机需要读取数据时,可根据下位机的读取指令读取任意条记录。

[参考文献]
[1]ATMEL 2-wires Serial EEPROMs  AT24C128/256[DK].
[2]何立民,单片机高级教程[M],北京:北京航空航天大学出版社,1999年.
[3]范逸之 陈立元,Visual Basic 与RS-232串行通信控制[M],北京:中国青年出版社,2002年.
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭