摘要:本设计是采用单片机作为从机(也称下位机),而PC机作为中央控制机的主从式系统。主机同时根据从从机接收的过程参数进行判断处理并给从机发送各种控制命令。利用单片机的串行口与PC机的串行口进行串行通信,PC机可对远程前端单片机进行控制,将单片机采集的数据传送到PC中去,由PC机对数据进行处理和显示,同时把反馈信号发到单片机,实现闭环控制和管理。本设计在VC++6.0的环境下,编写使用C++语言,SQL数据库的串口通信程序,控制由单片机控制的智能小车。
0 引言
随着多微机系统的应用和微机网络的发展,通信功能越来越显得重要。在工业控制系统(尤其是多点现场工业控制系统)设计实践中,单片机与PC机组合构成分布式控制系统便是一个重要的应用;主控计算机通过485网络监督管理下位分机的运行状况。在以单片机为基础的数据采集和实时控制系统中,通过计算机中的RS-232接口进行计算机与单片机之间的命令和数据传送,就可以利用计算机对生产现场进行监测和控制。本文设计是以单片机AT89C51为控制核心,附以外围电路,采用反射光耦(1550-01)检测黑白线,霍尔传感器(A04E)+磁钢来实现智能车行驶的计程,采用四位共阴LED实现行驶计程和时间的交替计数显示。同时还充分利用单片机的串口、并口资源和运算、处理能力,来实现小车的按轨迹直线行走、按轨迹转弯、计数小车行驶的距离,最后停车等智能控制系统。避免了当前的电动小汽车基本上只能采取的是基于纯硬件电路的一种开环控制方法,或者是直线行驶,或者是在遥控下做出前进、后退、转弯、停车等基本功能。
1 系统的设计思路
本文设计是采用PC机做上位机和单片机(作为智能小车的外围电路的设计)做下位机的主从式系统。PC机控制小车的模拟框图如图1所示。利用单片机的串行口与PC机的串行口进行串行通信,通过设置PC机的控制界面(智能小车运行的各种控制功能)来实现上位机的数据采集,并由上位机不断发送握手协议(通信协议)信号,直到下位机回应“发送下一帧”为止。之后上位机开始发送正常数据。若下位机反馈“发送下一帧”信息,则继续发送下一帧;若下位机反馈“重发上一帧”,则重发刚刚发送过的那一帧数据;若下位机反馈“无效地址”,则继续发送下一帧数据,从而实现PC机对远程前端单片机的控制。同时将单片机采集的数据通过判断握手协议(通信协议)传送到PC中去,由PC(主)机同时根据从从机接收的过程参数进行判断处理并给从机(单片机)发送各种控制命令。从而实现PC机(上位机)对智能小车外围电路(下位机)的控制。
下位机设计采用AT89C51单片机芯片来实现智能车模型的自动寻迹、自动控制等功能,利用反射光耦(1550-01)检测黑白线来实现;采用霍尔传感器(A04E)+磁钢来实现智能车行驶的计程;同时采用四位共阴LED实现行驶计程和时间的交替计数显示。本文上位机设计采用在Visu al C++环境中,直接使用Windows提供的API函数实现一个串行通信动态链接库(DLL),通过编程工具(VC)设计一个与智能小车通信的上位机控制界面,在上位机和下位机之间通过MAX485接口芯片与控制软件结合来监测。MAX485是半双工的,可以先检测/RE和DE的电平,判断芯片是处于接收信号还是发送信号,然后再检测AB的电平,当A引脚的电平高于B端时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。从而实现上位机与下位机(由AT89C51单片机控制的智能小车)的半双工串行通信。
2 系统的软件设计
单片机的通信软件采用AT89C51的汇编语言编写,单片机的发送和接收采用中断程序。准备发送的数据存放在以内存50H为首地址的连续10个单元中。本设计采用单片机芯片AT89C51为核心控制器,通过编写控制程序(汇编语言)来控制小车的正常行驶、左右转弯、后退行驶、停止行驶、检测金属、计程、行驶时间、告警和上位机与下位机的通信等。
2.1 系统的下位机软件设计
2.1.1 控制主程序设计
单片机主程序图如图2所示。控制主程序是通过中断服务程序实现的,采用外部中断0、外部中断1和T0中断来实现主程序的控制,使各中断子程序交替运行,显示不会产生干扰,且能在显示部分交替进行显示。
2.1.2 小车行驶程序设计
小车行驶流程图如图3所示。小车行驶控制程序启动后程序进入5S的倒计时状态,并开启四位数码显示工作;5S倒计时结束后程序开始运行黑带检测程序,由通过光电传感器(1550-01)检测到通过LM324放大电路放大的信号输入来判断小车是否正常行驶,若否,则由相应的程序来控制小车的左转或右转来达到正常行驶;当传感器检测到停止线时小车立即停止。
2.1.3 时间计数程序设计
时间计数子程序图如图4所示。小车行驶的时间长短需要通过时间计数程序来控制。时间计数程序通过累加器每秒钟计数一次来实现计数功能,并由十进制调整指令(DA A)来进行个位转换为十位的功能,同时特定的检测控制指令(CJNEA.#59H.JJX1)来判断是否达59S,若否,则进行高低位分别存储并送显示部分显示;若是,则分位加1秒位清0并送显示部分显示。
2.1.4 行驶距离记录程序设计
距离中断子程序图如图5所示。小车行驶距离的记录通过霍尔传感器来检测小车车轮行驶转动的圈数,并通过中断服务子程序来进行换算成相应的十进制的(距离)数据,再特殊的换算控制指令:
MOV B,#100 MOV A,B MOV A,#1
MOV B,#100 MOV B,#10 MUL AB
DIV AB DIV AB MOV 3CH,A
MOV 3EH,A MOV 3DH,A MOV A,3EH
来进行换存储,同时送到显示部分进行显示。
2.1.5 下位机查询、发送数据和接收数据程序设计
在软件设计时一定要注意单片机与PC之间应该遵守相同的协议,其主要包括波特率、传输帧格式、校验位等。除些之外,如果要实现PC机与单片机的通信,PC机还应该向单片机发送欲寻单片机的编码,而单片机中要编写地址识别程序段。本文的通信协议约定如下:1)波特率:1200B/S;2)帧格式:1位起始位,8位数据位,1位停止位,无奇偶校验;3)传送方式:PC机采用查询方式收发数据,51单片机用中断方式接收数据,查询方式发送数据;4)数据长度:1字节;校验方式:累加和校验;握手方式:软件握手。
下位机通信程序流程图如图6所示。本设计实现一个简单的通信过程,它是由上位机控制下位机(智能小车)运行,即由上位机发送不同的通信信号协议代码(如表1所示),下位机接收到相对应运行通信信号协议代码后下位机程序执行相对应的运行程。
2.2 系统的上位机程序设计
上位机通信部分控制的上位机软件采用VisualC++(简称VC)编程,上位机设计需要提供一个控制界面,再通过简称VC编程,而使用VC具有强大功能的通信控件MSCOMM,该控件可对串口状态及串口通信的信息格式和协议进行设置,直接利用PC机的串口发送数据。为实现单片机与PC机的可靠通信,须保证双方具有相同的数据格式和波特率。而上位机与下位机通过协定的特定通信协议进行通信。
3 结论
计算机控制智能小车,本文在软件方面基本能够实现设计任务的要求,能够从起点沿引导线行驶到终点,并在到达终点时能够自动停止行驶;在行驶的过程中能检测到铁片且发出声光提示,然后继续行驶;同时能实时交替显示检测到铁片的个数、行驶的距离和行驶时间;且在停车时能交替显示总程检测到铁片的个数、行驶的距离和行驶时间。本设计的扩展部分有:下位机可设置相应的控制开关来控制小车行驶的周期、时间长短、行驶距离和小车行驶转弯的角度等;上位机部分可设置时间显示、检测到铁片的个数、行驶的距离和行驶时间等的控制显示界面窗口。