单片机科普:单片机的IO口不够用了怎么办?如何扩展单片机的IO口
单片机是一种可编程器件,在各种消费类电子、工业电子、汽车电子等行业应用广泛,目前开发产品的构架就是以单片机为核心,根据不同的功能搭建不同的外设电路。同样的功能,每个人、每个团队所做的技术方案都不会相同,但是单片机加外设的构架不会变。足可以看出单片机在电子设计中的重要性。
1-华为荣耀体脂秤电路板-芯海的单片机
在设计单片机电路的过程中,往往会遇到这种情况:单片机的GPIO口不够用,但是又不是缺很多,如果要更换更多引脚的单片机可能会贵一些,如果是老产品的话,还要涉及到代码的移植,比较方法。有没有扩展方法?答案是肯定的。
有很多的芯片都可以实现单片机GPIO口的扩展功能,下面和大家分析几种常用的扩展方法。
1.输入扩展1-矩阵按键
对于单片机的按键输入,大学课程里有专门的讲解,按键输入可以分为独立式按键和矩阵式按键两类。独立式按键占用单片机IO口比较严重,而矩阵式按键就是利用较少的IO口实现较多的按键检测,也属于GPIO口扩展的范畴。
2-输入扩展-矩阵式按键
上图中(上拉电阻为画出),就是利用了单片机的八个GPIO口,扩展了4×4的矩阵式按键。四行键盘分别连接单片机的4个IO口,四列键盘分别连接单片机的另外4个IO口,总共占用了8个IO口,扩展出16个按键输入。
矩阵式按键的工作原理
在编程时一般采用扫描的方式,先将列设置为输入状态,将列设置为输出状态,并依次输出低电平,此时依次扫描列的输入状态,如果检测到低电平则说明有按键按下并记录状态,否则无按键事件发生。再将行设置为输入状态,将列设置为输出状态,并依次输出低电平,此时依次扫描行的输入状态,如果检测到低电平则说明有按键按下并记录状态,否则无按键事件发生。经过以上两次判断,就可以得出是否有按键发生,并可确定出按键的编号。
矩阵式按键的优缺点分析
矩阵式按键可以实现单片机IO口的扩展,但是只能用作输入,如果占用7个IO,可以扩展处3×4的矩阵。但是其缺点非常明显,程序需要不停的扫描端口的状态,比较浪费单片机的资源,实时性效率较低。4×4按键的实物图如下图所示。
3-矩阵式按键-实物图
2.输入扩展2-电阻采样型扩展
采用单片机的AD采样功能也可以实现输入按键的扩展,通过设置不同的电阻,按下键时,单片机采到不同的电压值,由此来识别按键。这种扩展形式有两种方法可以实现:电阻并联型和电阻串联型。
电阻并联型扩展按键的实现原理
通过电阻分压的原理,每个按键和一个不同阻值的电阻串联,再并联后和一个定值电阻串联,公共点接到单片机的AD采样端口。设置后电阻,以区分不同的分压值,使每个按键按下后,所得到的电压值都不同,单片机采集该电压就可以确定按键的编号。电阻并联型按键的原理图如图4所示。
4-电阻并联型扩展输入
另一种方式就是电阻串联型,前一个电阻依次和后边的电阻串联,按下键后所有的电阻都参与分压,该种方式的电路原理图如图5所示。
5-电阻串联型扩展输入
电阻采样型扩展方法的优缺点分析
这种方式的最大优点就是通过一个AD采样口就可以实现多个按键的输入,价格便宜。但是缺点太明显:1)接入的按键越多,对AD采样的结果要求越精准;2)不能接入过多的按键,因为必须要计算电阻的阻值,必须保证,每个按键动作都有不同的电压值可以区分;3)多于两个的按键同时按下时较难区分,既要考虑单个按键发生时的电压值,又要考虑多个按键时的电压值,导致电阻值难以设计。
3.输入/输出扩展3-逻辑芯片实现
74系列逻辑芯片非常经典,而且功能强大,也可以实现对单片机IO口的扩展。常用的扩展芯片有74HC138、74HC165、74HC595、74HC164、74HC148等。这类数字芯片可以使用较少的单片机IO,即可实现多路输入或者多路输出,但是需要根据芯片的时序图或者真值表进行编程。
逻辑芯片实现扩展输出
以74HC164为例,介绍如何通过逻辑芯片实现单片机IO口的扩展输出,74HC164是串入并出的移位寄存器,占用单片机3个IO口就可以实现8个IO口的输出。与该芯片类似的芯片是74HC595,该芯片是带锁存的移位寄存器,并且可以级联扩展,即通过3个IO口就能实现多个八路输出的扩展。典型电路原理图 如6所示。
6-数字芯片实现输出扩展
逻辑芯片实现扩展输入
以74HC165为例,介绍如何通过逻辑芯片实现输入扩展,74HC165是并入串出的移位寄存器,单片74HC165可以扩展8路输入,只需要占用单片机3个IO口。并且可以级联,实现多个8路输入的扩展。典型的74HC165的扩展电路图如下图所示。
7-数字芯片实现输入扩展
逻辑芯片实现扩展的优缺点分析
逻辑芯片实现输入输出IO口的扩展时,其硬件电路非常简单,电路原理非常清晰,关键是价格非常便宜,国产逻辑芯片价格只有几毛钱。其稍微复杂的地方是真值表和时序图。以上介绍的逻辑芯片都是需要通过编程来实现扩展的,程序虽然不复杂,但如果是第一次使用,可能需要费一番功夫的。
4.模拟口的扩展-多路选择开关实现
在设计产品的时候,可能要用到多路AD采样端口,如实现多路PT100温度采样。单片机虽然有多路AD采样通道,但是多通道的AD采样在程序的时序上稍微复杂,或者所剩与AD口不足,这时候就要扩展,对于采样类扩展选用多路选择开关是一个不错的选择。以HCF4051为例介绍。
单片机使用三个IO口作为HCF4051的通道选择控制端,一个AD采样口接第3引脚,可以实现8路模拟量的采集。其实现电路原理图如图8所示。
8-模拟口的扩展
除了用这种多路选择开关实现外,还可以使用专用的模拟量扩展芯片,如ADS1015,这类芯片即可以作为四通道的单端采样使用,又可以当作两通道的差分采样使用,其与单片机的接口为IIC接口。
模拟口扩展的优缺点分析
使用4051之类的多路选择开关,虽然只占用一个AD采样口,但是只能使用多路轮询的方式采集每一个通道,导致采样周期过长,而且采样的时序不好控制;采用ADS1015类的采样芯片,由于是通过IIC与单片机通讯的,所以采样时许容易控制,但是价格比较贵。
电子设计的特点就是实现同一个功能的技术方案有很多,每个人的方案可能都不一样,在扩展IO时,每个人使用的方法也不一样,以上只是一个简单的总结,还有很多的方法没有总结到。如果大家有其他的方法可以留言讨论。