单片机与PC串行通信在实时控制系统中仿真应用探讨

(整期优先)网络出版时间:2024-03-11
/ 2

单片机与PC串行通信在实时控制系统中仿真应用探讨

常全

皖江工学院 安徽马鞍山 邮编:243031

摘要:单片机与PC串行通信可用于实时控制系统中。本文首先简单介绍了实时控制系统中的微处理器系统,接着定义了串口通信协议,并在此基础上采用多线程编程工具CserialPort类,用VC++编写基于对话框的MFC串口通信程序来控制移动机器人的行进。通过实验验证,该串口通信设计方案能较好地控制移动机器人,达到了预期效果。

关键词:PC机;单片机;通信协议;CserialPort类;VC++

1 引言

  近年来,随着科学技术的发展,PC机以其优越的性价比和丰富的软件资源成为计算机应用的主流机种,在工业控制中得到广泛的应用。单片机具有体积小、价格低廉、开发应用方便、可应用于恶劣工业环境的特点,在分布式控制系统中多采用单片机进行数据采集和现场控制。由于单片机的计算能力有限,难以进行复杂的数据处理,因此在功能复杂的控制系统中常采用上位机下位机系统,单片机用作下位机进行数据采集和设备控制,而PC机用作上位机进行复杂的数据处理和对单片机的控制。对于传统的移动机器人,多采用红外遥控的方式控制移动机器人的行进,而目前移动机器人的自主行进方式还不太成熟,所以采用串口通讯的方式来控制移动移动机器人的行进也是不错的选择。并且串口通讯简单灵活易控制,通讯过程中所采用的协议具有统一的标准。因此,无论是在工控系统、遥感控制、实时控制系统中都得到了广泛应用。

2 实时控制系统介绍

  实时控制系统主要包括上位机(PC机)、单片机、串口通信模块以及2.4G的无线摄像头视频采集模块。该系统主要实现功能是利用2.4G的无线摄像头采集移动机器人周边的环境,根据不同的环境给单片机发送不同指令,实现方法是利用串口通信把上位机(PC机)所发送指令通过串口发送到单片机,进而远程控制移动机器人的行进。

3 串行通信设计

  串行通信设计包括选择合适的微处理器系统、制定串口通信协议、串口通信编程、人机控制界面。其主要目的是通过串口通信把PC机发送的不同组合指令给单片机,单片机解析出相应指令,根据指令来控制机器人的前、后、左、右运动。

3.1 微处理器系统

AT89C2051是Atmel 公司生产的与MCS-51系列兼容的单片机。片内含2k bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,可以提供以下标准功能:2K字节闪速存储器,128字节RAM,15根I/O口,两个16位定时器,一个五向量两级中断结构,一个全双工串行口,一个精密模拟比较器以及两种可选 的软件节电工作方式。空闲方停止CPU工作但允许RAM、定时器/计数器、串行工作口和中断系统继续工作。掉电方式保存RAM内容但振荡器停止工作并禁止有其它部件的工作到下一个硬件复位。ATMEL的AT89C2051是一强劲的微型处理器,它对许多嵌入式控制应用提供一定高度灵活和成本低的解决办法。由于该系统用于简单的移动机器人控制,且从性价比方面考虑,AT89C2051完全满足设计的要求。
3.2 串口通信协议

通讯口设置为“9600,N,8,1”,控制指令为:88HT88H ,T有四种可能,分别为01H、02H、03H、04H,对应的控制分别为前、后、左、右。其中确认帧为67H。当单片机收到的控制指令为所定义的格式时,即接收到的信号无差错,确定为控制机器人行进,单片机就发送确认帧67H给PC机,如果在某一时间间隔内未收到确认帧就重新发送指令。
3.3 串口通信编程

PC机通过串口发送指令给单片机,通过串口发送指令就必须涉及到串口通信程序。对串口通信编程的方式很多,如Cserial 类、Windows API串口编程、MSCOMM控件、Qt串口、多线程编程工具CserialPort类,在此选用了CSerialPort类。CSerialPort类是基于多线程的,由Remon Spekreijse提供的免费串口类。在该类中,其主程序工作流程仍然是打开串口、配置串口、读写操作以及关闭串口。
  1.设置串口参数InitPort()。串口的通信参数一般涉及到波特率、串口号、奇偶校验方式、数据位、停止位等。在CserialPort类中用串口初始化函数InitPort来设置串口参数。
  2.串口通信检测StartMonitoring()。在串口通信中,对于串口接收的一端,因为不知道何时数据到来,也不知道有多少数据需要被接收。因而需要一个串口通信检测线程来检测串口事件的响应(串口接受数据、流控制事件以及其他串口事件)。在此就串口接收数据而言,通过开启串口通信检测线程StartMonitoring()来随时检测串口是否接受到数据,一旦检测到该事件就以消息方式来通知主程序,激发消息处理函数来进行数据处理。对于串口发送的一端,可直接向串口发送数据。


  3.串口发送数据WriteToPort()。在打开串口并启动串口通信检测线程后,可调用WriteToPort()来发送数据。而对串口接收一端通过编写串口接收函数即可。
  4.停止或暂停线程检测StopMonitoring()。用来暂停或停止对串口的检测。
  5.关闭串口ClosePort()。关闭串口和停止或暂停线程检测有很大的区别,即使停止了对串口的检测,但串口资源仍然被暂时,为了释放该资源,就必须调用关闭串口函数。一旦关闭串口后,要想重新对串口通信则必须从InitPort()开始。
4 控制界面设计
  对移动机器人的控制方式即通过键盘或按钮控制来发送指令,键盘控制是利用键盘上的上下左右键控制,按钮控制则通过界面上点击四个方向控件(前进、后退、左转、右转)来发送指令,这些指令分别对应的是移动机器人的前进、后退、左转、右转。

5 室内行走实验
  基于前面所述的串口通信系统设计,在室内对移动机器人进行了遥控操作,该系统基本能实现以下功能:根据摄像头采集到的移动机器人周边环境,可以用两种不同的方式来控制移动机器人的前、后、左、右运动,基本上能实现机器人安全、可靠、稳定的行进。不过在实验过程中还存在一些不足之处,由于2.4G无线摄像头传输的数据有一定的延迟,导致在控制的过程中还不能太精确。所以在接下来的工作中会利用无线传输模块和相应的视频采集模块来提高视频数据的传输效率和质量,进而更加准确的控制机器人的运动。
6 总结
  实验表明,该系统基本实现设计所需功能,方法简单可靠。随着近年来PC在国内应用范围的日益壮大,在工业控制、数据采集等领域越来越多的采用PC,本文可以算作是一个有益的尝试。由于软硬件知识比较简单,容易掌握,编程易实现,且设计界面友好,开发周期短,比较适合小型的实时控制系统,在实际应用中也取得了较好的效果。
参考文献
[1]谢印忠,张保洲.MScomm控件在自动测控系统中的应用[J].电脑学习,2009(4).
[2]曾自强,王玉菡.用VC++实现单片机与PC机串口通信的三种方法[J].自动化与仪器仪表,2005(3).
[3]杜梅,贾辉然.基于VC 的PC机与单片机无线串行通信的实现[J].电脑知识与技术,2007(1).