极客秀
搜索

FireBLE裸奔之四欣赏Firefly精心设计之作-五向按键的驱动电路

一直没机会玩航模,玩智能车的时候也不屑于用遥控去控制,最多就是用遥控控制启动和停止!
所以一直没机会真正的使用五向按键做的手柄(倒是和我弟弟抢过遥控车玩过几次),所以在FireBLE板卡上存在五向按键时,还是非常兴奋的!那么果断的分析按键的内部电路和它的驱动电路!这是编写驱动Demo必须做的一件事。
1、确定五向按键内部原理。



如上图,可以确定了五向按键的A、B、C、D、中键的电路原理了!将其分解,其实就是五个普通的机械可弹性按键。它存在一个公共端,公共端连接分解后的每个按键的一端!呵呵!这就太简单了!
2、分析欣赏硬件电路!
外观就不看了!咱的拍照技术太挫!先扒拉FireBLE的底板原理图出来再说!下图为五向按键的硬件驱动电路图!

从图中可以得知!此驱动电路分成3个部分组成!

  1. 第一就是五向按键的主体部分了!可见,其公共端COM连接电源VCC,而其他与按键电路相关的引脚都通过电阻与地相连(注:在此为什么我没说是下拉电阻?值得思考)。
  2. 第二部分就是由74HC32组成的电路了!通过与MCU引脚连接的标注(JOY_INT/P1_2)可以看出,其与MCU的P1.2脚相连。
  3. 第三部分就是由一个叫LM258的双向放大器的芯片组成的电路了,且与MCU的接口也只是一个,标注为(JOY_ADC/P3_0)。
    呵呵!貌似还挺复杂,区区一个按键的驱动电路,使用的器件不少啊,一堆电阻+74系列逻辑IC+双向放大器!不简单啊!那么它到底是怎么一个不简单法呢?
    切听我一一道来!因为从图中可以看出,此部分驱动电路与MCU共有两个接口存在!所以以MCU为主体,将其分为两个部分进行讲解。
    第一部分:74HC32的作用。
    通过查询Datasheet可知,此IC为74系列的四组2输入端或门IC。如下图:

    这就是74HC32芯片的引脚图和内原理图了!没错,它就是四组2输入或门逻辑IC。那么它的出现在这个电路中有何意义呢?
    咱们现将此部分电路与MCU之间的联系搞清楚!如下图:

    就是这个图了,第一个蓝色框说明了,QN9021共有4通道精度为10位的通用ADC。通过查找Datasheet,得如下图:

    此部分电路与MCU的唯一接口P2.0接口没有ADC功能。又从前面图中的红色框得知,所有的GPIO口均可以作为外部中断源。那么再从标号JOY_INT/P1_2就可以分析出,此接口的主要是作为MCU的中断源。
    那么久不难想象,当五向按键往一个方向有按下时,应该会产生一个边沿信号触发MCU产生中断,作为判别有按键按下的手段的一部分(为毛说是一部分呢?因为还有另一个接口呢)。
    OK!到此就可以再一次欣赏原理图了!如下图:

    因为74HC32是或门,所以上图此部分电路就都是数字电路了,因为按键的按下/抬起只会触发电平信号。数字电路分析起来就超容易了!
    现在,将以上两部分电路进行分解,如下图:

    没错!我将FireBLE原理图的五向按键电路进行分解了!现在先分析这部分。首先是将5向按键分解成为5个独立按键。并且每个独立按键都存在下拉电阻(对于上图这部分电路来说,果断的可以成为下拉电阻)。

因为是或门,所以,假设当SW2_1按键按下时,UP短接VCC即为高电平,即或门输入1A为真,则1Y为真,则2A为真,则2Y为真,则3A为真,则3Y为真,则4A为真,则4Y为真,即4Y为高电平。

又因为Q6为N沟道MOS管,所以高电平触发,使其导通,即P1.2脚与地GND短接,又由于P1.2脚本身存在上拉电阻R46,所以使得P1.2口产生一个下降沿,判断没错的话!这个边沿就可以触发外部中断的产生了。其他按键按下,同理!
总结一下可知,此部分电路就是专门为了触发中断而设计的。那么问题就来了!为毛触发个中断要搞如此复杂的电路呢?
真可谓是劳民伤财啊!一堆电阻和一个4组的或门IC,怎么的可能也要5毛钱啦!对于产品的设计这可不少了(既要达到功能、性能等要求,又要尽量减少器件,减少成本)!
第二部分:双向放大器LM258的作用。
只要一谈到放大器,相信好多人和我这个菜鸟一样,想到的无非就是,做放大电路,进行电压源的放大、做比较器,得到数字电平,做微积分电路等等。
那么在这里,这个LM258的作用是什么呢??先进行一个猜测,首先在电路中存在一个电容,那么有木有可能是做微分电路或者积分电路呢?
如果真是微积分电路之一的话,打死我也看不懂啊(谁叫我是半路出家的呢),那么这种猜测想放一边,只能祈求上苍,它不是这种电路。
第二种猜测是,它作为比较器,但是很明显这种猜测是不成立的,首先作为比较器,那么怎么区别五个方向的按键按下的时候,如何区别是哪一个方向的按键按下?再者是其与MCU端口连接的标号为JOY_ADC/P3_0,那么查看QN9021的Datasheet如下图:

可以看出来了,P30口可以复用为ADC口,并且为通道0。所以就不难猜测,这个电路采用了ADC进行电压的采集,根据电压采集值的不同,可以区分5个方向的按键键值来判断是哪一个方向的按键按下的。
那么久能更直接的猜出了,LM258在此电路有放大器的作用。但是,想想又觉得不对了,因为按键的公共端可是连接的VCC啊,那么怎么可能还需要放大器来放大电压进行采集呢?而通常我们在设计开发中所用的AD按键组无非也就是如下图所示之一:

此图是一组为10个按键的AD按键组,通过按键的按下,使得ADC采集到不同的电压值,并对ADC数据进行处理,得以识别所按下的按键是哪一个。


首先有一点声明是:

此电路是绝对正确的,是通过无数产品进行验证的电路。可以很清楚的看到,这样的ADC按键组是不需要放大器的存在的。那么到底是为什么呢?使得FireFly用上了放大器。那么还得回到FireBLE的原理图上分析,如下图:

嘿嘿!我将FireBLE的源图移了一下位置,从图中可知,只有4向的按键与LM258建立了连接,为毛呢?后面会有结果。
因为LM258是双向放大器,通过其Datasheet得:

嘿嘿!门电路原理就出来了!这就是我所需要的!所以我将FireBLE的此部分原理图分解成如下图:

嘿嘿!你没看错!就如上图。
这好像是一个加法器+放大电路(露个隐私底,其实我既不是电子通信类专业出身,也不是软件类专业出身,而是机械专业出身,所以,呵呵!没专业的学过模电,只能大概的进行分析)。那么既不是就可以确定一件事了,在电路中电压V3和电压V4的值总是相等的,那么V1和V3的电压值也是必然相等的;
V1不变,当有按键按下时,由于R36~R45有这串并联的关系,当不同方向的按键按下时,由于电路并联分流的原因,导致电流I的值发生变化,从而导致V2的电压值发生变化,V2在通过放大器进行电压放大(经过推算大约是1.4倍左右),就得到了V0。
这就实现了4个方向不同的按键按下,使得V0出有不同的电压值,从而被ADC采集进行判断键值。此部分电路只是粗略分析,知道原理写驱动代码就好,谁叫我是半路出家的呢。
那么其实还有一个疑问就是,为毛中键,在这里的电气标号为PUSH没有连接在此部分放大电路中呢?
我能想象的原因是:

过使用5向按键,基本上可知,经常没一个方向的按下,都是先触发中键,再触发方向键,而中键是和或门电路连接在一起的,所以,当单独按下中键时,产生中断后,再采集ADC的电压,因为其他方向键没有按下,所以ADC的电压肯定为一个稳定值,那么可以据此就判断出是不是中键单独按下了,如果有其他按键按下,那么中断后,采集到的就是其他方向按键的键值(因为按键需要消抖,所以存在延时),就可以确定按键的方向了。
那么,还有一个问题没有解决,就是,为什么要用如此复杂的电路?两颗IC,再加上五向按键和一堆电阻,成本就已经是一块多RMB了。为何要这样做呢?
我总结的原因是:

为了隔离,没错就是为了隔离!既能做到按下任意一个方向的按键会触发中断,同时使得ADC电路的电压发生变哈,给ADC进行采集,从而根据键值判断是哪一个方向的按键按下。
但是如果电路设计的不好,没有做到完全的隔离,那么影响将会很大的,严重者会使得整个按键功能瘫痪,因为在或门的电路会影响按键部分的电压值,所以这样不稳定的因素是绝对不能进行ADC采集判断的,所以FireFly的工程师选择了使用LM258。
这样的电路是我前面提供的ADC按键方案所做不到的,如果要达到相同功能,我能想到的是除了使用和FireBLE类似的方案外,就是使用一堆MOS管进行电路的搭建,但是可想而知,电路的复杂度会提高很多并且成本应该比这个方案高多了。
OK!电路基本上就算是分析完毕了!下面提供一个完全的分解电路图,如下图:

总结: **
本文只是粗略的分析了FireBLE五向按键的硬件驱动原理!再就是欣赏这个进行精心设计的电路。没错,我认为这个电路绝对是精心设计的。理解了其实现原理之后,能体现的就还有这种设计的美感。真是太爽了。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容