四个单片机串口通信电路设计
1.前言
单片机的串口通信,是简单的通信协议,STC单片机就是通过串口协议进行下载程序的。这里说的串口通信是指UART,当然广泛意义上的串口通信是指非并口通信,比如SPI,IIC等。
一般我们设计的单片机板子,只有一个单片机,我想,如果有多个单片机会怎么样呢?一个单片机算是很常见的模式了,编写代码也是常规的套路,但是两个,三个单片机呢,还是简单的以一个个进行程序编写,然后逐个下载到单片机内部,然后单片机之间仅进行一些数据交流吗?这个算是一种多个单片机电路设计的一种方式。
上述的方式存在一个问题,单片机之间的数据交流需要一定的时间,当然这个我们可以用DMA+硬件串口的方式节省这个时间。那可不可以让单片机共用数据存储器(SRAM)呢。这个场景对于大量数据需要先行处理的情况会好一些,但是这个也是有一定问题的,就是两个单片机是不能同时访问SRAM的。(附图:STC单片机外部扩展SRAM电路)
上述是我对多个单片机协作处理信息方式的一个看法,回归本题,假如我们要做一个多片单片机的板子,我们要如何设计电路呢?
2.一般串口通信电路
一般的串口通信,两个芯片U1和U2,U1的TXD接到U2的RXD,U2的TXD接到U1的RXD。如果只需要单向通信,其实只需要接一根线就可以了,当然还需要共地。
两个单片机可以直接交叉连接,3个呢,3个单片机,任意两个都要进行交叉,最终的电路会是什么样子?
假如我们只看U1和其他两个单片机通信,那么连接图是这个样子。单片机U1确实可以和U2,U3通信,但是U2和U3却不能通信,因为他们的发送端接在了一起。
要解决这个问题,我们可以给U3的串口接一个TXD和RXD可交换的电路结构,比如模拟开关,然后这个开关可以被U1,U2,U3去控制,因为这个三个单片机都可能是串口数据发送方,发送方去选择接收方合情合理。
3.模拟开关CD介绍
CD,52,53是模拟开关系列的芯片,通过使用模拟开关即可实现电路连接的改变。今天来介绍一下CD。
CD是16引脚的芯片,常见的封装是DIP16和SOP16。因为这个芯片同时存在模拟和数字电路部分,所以同时存在VSS和VEE引脚,我一般接一地,不做区分。6号引脚是使能引脚,低电平有效。1-5号,11-15号引脚是两组单刀四掷开关,其中3号和13号引脚是公共端。而公共端和哪个端连接,是由9,10号引脚的地址决定的,一般A是低位,B是高位。因为只有一个地址选择,所以这是一个联动开关,两组开关选择的端子序号一致。所以CD叫双刀四掷模拟电子开关。CD的内部结构如图。
4.双CD组成四机通信电路
既然CD可以选择出某一路和公共端连接,那么我们可以使用一个CD选择出一个单片机的串口,让其输出到公共端。然后再用一个CD,再选出一个串口,两个CD的公共端交叉连接即可实现通信。原理图如下。
网络编号含义解释:4个单片机的名称分别是UA,UB,UC,UD。而他们的串口2之间要进行相互通信。UP20-UP23是4个单片机的公共端,也就是4个单片机的P20-P27直接并联在一起,在单片机不推挽输出的情况下,是不会烧坏IO口的。并联在一起是为了便于每个单片机知道当前的单片机通信情况。如果不想单片机之间进行通信,可以将INH,也就是UP24口置高电平即可。串联R的电阻也是为了保险起见,防止短路烧坏单片机。
假如UA要和UD通信,那么上边的CD选择输出UA的串口,也就是地址为0,下边的CD输出UD串口,当然反过来也是可以的。至于哪个单片机去选择,去改变UP20-UP24的电平,可以交给主动通信的单片机来决定。
UA选择和UD通信,改变了UP20-UP24的电平,UA发送数据后,UD的串口接收到,UD可以通过判断UP20-UP24口的电平,来判断是谁发送的数据。
至此,四机通信电路原理已经解释完成,至于CD能否传递高波特率的串口信息,我测试过波特率是没有问题的。
5.四个单片机怎么下载程序
上述的方案其实可以应用于给单片机下载程序,但是我还是选择使用开关去选择,下边是下载程序的电路图。
在这里我使用了双刀三掷开关(目前手里最多的掷数了),其实还有更多掷的开关存在,不过因为不常用,所以卖的少,价格也贵。
SW2和SW3分别可以去选择哪个单片机可以和下载接口进行连接,可以选择UA和UB中的一个,UC和UD中的一个去下载程序,如果下载的内容相同,是可以同时下载的。
6.我的四个单片机核心板
上述问题解决后,4个单片机在一个板子上自然可以实现了,当然最终要实现什么功能我暂未考虑,先做出来再说。PCB的3D仿真图如图,PCB基本设计完成了,只有少部分细节需要调整。
目前计划实现的第一个程序是:四个单片机协作流水灯程序。
板子上有一圈流水灯,4个单片机下载同一个程序,每个单片机可以通过四机通信结构,选择和自己通信时的地址以区分出自己是哪个单片机,UA,UB,UC,UD。然后根据事先写好的程序,运行对应的情况。
7.结束
四机通信的电路实现了,这个很像单片机内部的特殊功能切换。
那么就有一个问题,四个单片机做在一个核心板上有什么用呢,这个目前我也回答不出来,其实之前也有思考过,还有就是近期苹果发布会把两个芯片拼接在一起,都是我设计这个四单片机核心板的原因所在。
其实还有很多问题需要解决,最大的问题就是编程问题,如果还用之前的软件编写,是不是就是4个独立的单片机开发呢,只是在一个板子上。如果4个单片机下载同一个代码,那这个运行效率是不是太低了,好像和单核没什么差别。
所以我的想法是搞个能写四核心的编译器去写代码,当然这只是一个想法。暂时没有考虑去实现。
LYQ电子工作室