上一期讲的是PLC如何通过232串口模块发数据,PLC串口模块与单片机之间还需要一个总线驱动电路,下图是一种非常实用的数据总线驱动电路,图中的P1接9针插口接PLC的串口模块,IC1为ADM232电路是将串口的电平转换为TTL电平,这种IC电路上网一查一大推是常用电路,然后通过LM339比较器和晶体管Q1以及Q2驱动数据总线,这条数据总线是由4个1K电阻(这里是为了增大瓦数,可以用一个250欧姆的大电阻代替)并联上拉到24V,也就是说在没有数据或发数据“1”时总线为24V,数据“0”为8.2V,串口复位脉冲下拉到0V,接收端解码时很简单,判断大于18V为数据“1”,小于18V为“0”,小于8.2V位复位脉冲。
(未完待续,下期继续讲单片机如何接收数据)。
PLC与单片机(5)
下面的电路是单片机从总线收发数据电路,单片机选用的是PIC16F882,Q5Q8是射随器为了增大总线的驱动能力,IC3是运放当比较器使用,解出总线复位脉冲到PIC16F882的C2引脚,Q14Q5解出数据到C7引脚,C6引脚通过Q6Q7向232总线回传数据,J2用于单片机地址编码输入(用短路端子接地为0悬空为1),这样一条总线可以带很多单片机,BO~B7引脚内部有上拉电路,J3为程序编程烧写接口。
PIC单片机的编程还需要MPLAB_IDE 集成开发环境(上网一搜有很多)和KIT3编程下载器(100元左右)。
PLC与单片机的通讯方式是以PLC主动对单片机不断的查询方式进行的,单片机核对地址正确才做应答,这种通讯方式不会出现数据冲突,可靠性很高。在自动化领域单片机一般用于工件的状态监测,分为开关量和模拟量,模拟量要通过单片机内部的A/D转换器转换为数据回传PLC。
关于总线通讯协议,自己随意设定,之前定义的是PLC下行查询指令是双8位结构,例如下图。
单片机的应答也用双8位结构,因为单片机的A/D结果一般是10位或12位,剩余位用于开关量数据回传。
如何保证单片机100%的从总线接收数据并且应答回传数据,靠的是PLC输出的串口复位脉冲(接入单片机的B0引脚INT外部中断输入)用上升沿关闭串口,下降沿开启串口,这样完成单片机的串口复位。由于这个Y1串口复位脉冲是PLC发出的,所以PLC和单片机是在规定的时间段发送和接收数据,是一种很可靠的总线技术。
下面是串口复位子程序,是用汇编语言写的。
PIC单片机的串口可以同时接收和发送2个8位数据,这是由于PIC单片机串口缓存结构决定的,下图是串口接收部分的汇编程序。
首先,判断地址是否相同,如果相同再判断是读还是写,如果是读指令,需要回传数据,先将数据存到TX_WWW_H和TX_WWW_L,这时自己定义的发送数据暂存器,在主程序中始终调用下面这个后台发送数据子程序,总在监测TX_WWW_H和TX_WWW_L是否为零,只要有数据就发送。
到此PLC与单片机的通讯就可以完成了。