文章主要以库函数出发,因为本人以智能车硬件出身主要以硬件去理解STM32.本章节主要从GPIO的硬件出发理解按键扫描,蜂鸣器模块分析与相关外设的学习思路。本文章会针对性去思考实际应用不同硬件设计的可能性,以及通过硬件角度分析不只是通过软件。本人的所有文章会随着本人理解逐步更新,若有不足之处请各位大神指出。
一.实验内容及要求
1、请使用STM32F407完成蜂鸣器每隔300ms响一次的程序,硬件连接图如下:
2、请在以上代码基础上使用STM32F407完成按键作为输入,当按键按下蜂鸣器响的程序,按键部分硬件连接如图:
1.
硬件分析
分析这一个电路蜂鸣器电路。从蜂鸣器自身出发,由于我们在学习的过程之中并不清楚具体外设的型号。所以我们从原理图的外设电压去假设分析,我们可以看到beep为VCC3.3供电。 我们在嘉立创中查找压片式3.3V蜂鸣器.我们以TMB12A03为例,在其芯片手册中详细的说明了工作电流,工作电压,震荡频率,以及封装。在驱动电路之中我们很清晰知道该元件的理想驱动电路。
根据芯片手册得到Buzz需要将io口的电流进行放大。但发现两个驱动模块的电路不同。芯片手册的为蜂鸣器的原始电路只是在io口加入了一个R1电阻去作为限流起到一定的保护作用。
而正点原子的开发版进行一些保护但电路还有很多可以改进的地方,下面来进行分析这个电路和增加我个人的电路分析。
分析电路:
R59:为限流电阻,防止流过基极电流过大损坏三极管。
R61:相当于基极的下拉电阻。如果beep端被悬空则由于R61的存在能够使三极管保持在可靠的关断状态(在电路关断时,因为三极管有结间电容,三极管be段端电压由0.7V缓慢下降,三极管没有完全关断,且处较于长时间放大状态,会损坏三极管)。如果删除R61则当BUZZER输入端悬空时则易受到干扰而可能导致三极管状态发生意外翻转或进入不期望的放大状态,造成蜂鸣器意外发声。所以加个下拉电阻,进行放电。
提升高电平的门槛电压。如果删除R61,则三极管的高电平门槛电压就只有0.7V,即A端输入电压只要超过0.7V 就有可能导通,添加R61的情况就不同了,当从A端输入电压达到约2.2V 时三极管才会饱和导通,具体计算过程如下:
假定β =120为晶体管参数的最小值,蜂鸣器导通电流是15mA。那么集电极电流IC=15mA。则三极管刚刚达到饱和导通时的基极电流是 IB=15mA/120=0.125mA。流经R2的电流是0.7V/3.3kΩ=0.212mA,流经R1的电流 IR1=0.212mA +0.125mA=0.337 mA。最后算出BUZZER端的门槛电压是0.7V+0.337mA× 4.7kΩ=2.2839V≈2.3V。
改进:
首先在原来的基础上添加一些电容和一个反向二极管
C3:滤波电容将脉冲信号滤除。在有源蜂鸣器的两端添加一个104的滤波电容C3。
C2:主要是将电源进行高频滤波。
C1:主要是将提高蜂鸣器的抗干扰环境,在智能车的赛道上就发生过蜂鸣器因为电磁线的磁场导致蜂鸣器自己发声。