-
2022/09/09
-
可能有些同学在使用多个模块进行通信时会遇到一个问题,模块A向模块B发送数据,单独测试模块A,发送出来的数据是正确的,单独测试模块B,接收到正确的数据时也能执行相应的指令。但是在把模块A和B进行连接时,模块B死活不能执行相应的操作,在网上一番冲浪之后发现是要把两者的负极进行连接,即
共地
。那到底什么是共地,又为什么要进行共地呢? -
首先来看一个例子:有两个身高差不多的小人打雪仗,左边的小人说我把雪球从脸的高度平着扔出去,肯定能把雪球糊到右边小人的脸上。然而呢?当左边的小人把雪球从脸的高度扔出去时只打到了右边小人的肚子。从下图也能直观地看出来,归根到底是因为两个小人所站的高度不同,右边的小人站的高于左边的小人,因此左边的小人只能打到右边小人的肚子。
-
其实在电路中也是这样的,例如当我们使用两个独立的模块进行通信时,规定左边的模块向右边的模块发送信号,其中3.3V代表发送的是信号1,0V代表发送的是信号0,而这3.3V和0V是相对于谁而言的呢?是的,这两个电压都是相较左边电路的负极而言的,但是左边的电路和右边的电路是完全分开的两个电路,就像上图中的两个小人,他们之间没有任何的牵扯,两者的0V并不能保证是相等的呀。
-
这时问题就来了,由于左边和右边的模块之间是相互独立的,右边的模块0V可能会高于左边的模块,此时当左边的模块向右边的模块发送信号1即3.3V时,对于右边模块而言,这3.3V对它来说可能只是1V,而发送0时则成了负的电压,违背了3.3V代表发送的是信号1,0V代表发送的是信号0的约定。因此此时的信号就不能成功解析,两者之间的通信就会出现问题。这也就是为什么当我们使用两个模块进行通信不把负极相连接时模块B不能执行相应的操作。例如下图。
-
为了解决两者参考电位的问题,我们可以使用一根杜邦线将两个的0V连接起来,即
共地
,此时两个模块的0V相同,高电平的3.3V也必然相同,再次让左侧的模块向右侧的模块发送0101信号,右侧电路可以正确进行解析,数据通信也因此成功。即当我们把两个模块的负极相连接时,模块B能执行正确的操作。如下图。
04-11
3279

08-09
2996

05-14