嵌入式 MCGS 串口通信快速入门及编程实例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第5章 万能通信之只收不发——转速测量

只收不发是指下位机定时向上位机发送数据,无须上位机下发指令,这种情况多限于价格低廉、成本仅十几元到几十元之间的变送器系列,例如,温度变送器、湿度变送器、温湿度变送器、速度变送器、流量变送器、位移变送器等。本章介绍从单片机上传数据给上位机的案例。

LKSC_A测速表是利用霍尔元件对磁场感应进行测速的传感器,采用的霍尔元件为AH201,当磁铁靠近霍尔元件时,输出高电平;磁铁远离霍尔元件时,输出低电平。电平的高低可以通过计数器记录,输出到数码管,如图5-1所示。该测速表将测得的值通过TTL电平传给上位机,传感器上电后,LKSC_A便始终通过TTL串口向上位机上传数据,而上位机不需要向单片机发送指令,对于上位机而言,属于只收不发的一种通信状态。数据传输采用ASCII方式,接下来,按步骤进行连接与调试。

图5-1 LKSC_A测速表实物图

(1)LKSC_A测速表检测 给LKSC_A测速表供直流电12V,正、负极性不能接反,用磁铁在AH201探头附近反复靠近与远离,交替产生和消隐磁场,使AH201以一定频率产生高电平与低电平,模拟转速。或者将磁铁粘贴在转轮上,使转轮旋转,磁铁会周期性地经过AH201探头,代表轮子的转速,此时数码管会显示转速值,如图5-1所示。LKSC_A测速表工作正常后,接下来建立与台式机的通信。

(2)物理通信线路连接 为了获得数据通信格式及通信协议,首先应正确连接物理通信线路,如图5-2所示,台式机的串口输出为公头,通过“RS-232转TTL接口”将RS-232电平转为TTL电平,此时仅留下发送、接收与地三根引脚,即只能传输数据,省去了控制信号针。在本例中,台式机TTL的TxD与单片机的TxD相连、RxD与单片机的RxD相连、GND与单片机的GND相连。读者可能感到奇怪,为什么不是台式机的TxD与单片机的RxD相连,这主要取决于厂家单片机内部结构与设置,本例中使用的LKSC_A测速表经过测试发现只有这样连接才能进行通信。可参考二维码视频讲解。

图5-2 LKSC_A测速表与台式机连接示意图

(3)设定串口号与串口参数 根据厂家给定的说明文档,其通信电平为TTL,即电平为3.3~5.0V,通信波特率为4800,无奇偶校验位,8个数据位,1个停止位,串口参数的完整设置为“4800,N,8,1”。通信协议相当于台式机与单片机的一种约定,双方按相同的通信频道、数据传输方式进行交流,与人与人之间的对话一样,中国人与中国人可以互相交流,但是中国人与美国人就无法沟通,需要一个翻译,两者不在一个通信信道内。

(4)确定通信数据格式 这个过程要借助串口调试工具,如图5-3所示,本例采用“串口助手”软件,与台式机通信,使用COM1串口,按“4800,N,8,1”设置串口通信参数,在串口助手中点击“串口配置”按钮,在弹出的对话框中按条件进行设置,如图5-4所示。

图5-3 LKSC_A测速表上传数据实时显示器

图5-4 串口参数设置界面

串口参数设好后,点击图5-3中的“打开串口”按钮,此时发现图中出现字符,“接收”标签后面的计数值会不断增加,说明单片机一直向台式机通过串口上传数据。如果“HEX显示”前面不勾选“√”,则显示为ASCII码;如果勾选“√”,则显示为十六进制编码,其数据格式如图5-5所示,转速为569.0转/分,十六进制显示时为35 36 39 2E 30 2C,每组数据之间都以逗号分隔。如果数据位数不同,例如,3.5,24.6,108.6,1492.0等,在数码管中最多只能显示四位。因此,1492.0仅能显示整数部分的1492。如果转速低于四位数,则可以显示小数点后一位,但是,上传的数据格式却是统一的,即无论数大数小,小数点后保留一位,小数点前最少一位,数大了,向前扩展,而且,数与数之间是以逗号分开的。这样,在后续脚本编写中可以根据数据格式采集逗号分隔的不定长数据。数据每次上传,总是先有逗号,然后是数据,紧跟着又是逗号。可参考二维码视频讲解。

图5-5 数据格式分解图