在项目中原理图如下:
如果不能保证I/O的输出性能可以根据情况增加上拉或者下拉电阻。
切入正题:在程序里面这个蜂鸣器的驱动就是个高低电平驱动。高电平三极管导通、蜂鸣器发声,低电平三极管关断、蜂鸣器不发声。这的确很简单,程序上最开始我是这样写的:
当然,如果单片机没有很好的I/O跳变函数也可以这样修改:
这里稍作解释:
1)
函数功能:蜂鸣器发声驱动
传入参数:蜂鸣器发声的次数
2)
传入的次数cnt需要再函数内翻倍。这是因为传入的参数是想让蜂鸣器连续的发cnt声。但是蜂鸣器除了发声还有不发声的时候。也就是说蜂鸣器每响一次都需要关闭一次,如果没有关闭操作肯定就不会出现响几声而是连续的响一声,这个也很容易推理。
3)
在while循环完之后需要加一个蜂鸣器关闭操作。
这里假如传进的参数是2,目的是让蜂鸣器响两声。根据程序的执行步骤:
cnt2变成4。
第1次while(4) 蜂鸣器开 cnt自减到3
第2次while(3) 蜂鸣器关 cnt自减到2
第3次while(2) 蜂鸣器开 cnt自减到1
第4次while(1) 蜂鸣器关 cnt自减到0
第5次while(0) 跳出while
可以看出其实在while之后蜂鸣器状态已经是关闭的了,但是保险起见,确保函数调用完之后蜂鸣器是关闭的状态。比如第一个函数I/O跳变的就更需要保障了,因为代码上只能看出跳变,看不到跳变之后的状态。
至此,一个简单的蜂鸣器电路和驱动程序就都温习完了,接下来上干货:
在写程序的时候很多时候讲究程序的效率,比如这个蜂鸣器驱动,驱动过程中会降低效率,厉害的人很快能看出来,就是这个Delay延时的问题。但是上面也说了,不延时也是不行的。所以趋于效率我尝试着换了一种方法驱动蜂鸣器。
代码如下:
实现起来也很简单,简单说下原理:
1)首先是提供蜂鸣器驱动的I/O配置,
2)其次是定时器的配置
3)最后是定时器中断函数实现
我选用的定时器是项目单片机中最简单的一个定时器,配制成1ms中断,能够提供溢出中断。其实这个定时器我常用做计系统运行时间Systick_ms。但是该项目对这个系统时间没有用到,那就用这个定时器做文章把。
实现方法:
1、同样函数在调用蜂鸣器驱动的时候接口是一样的,传入的参数还是蜂鸣器的响声次数。
2、函数体变了,这里改成了两个变量的赋值,第一个BELL_CNT同普通方法中的cnt2,这里不再赘述。第二个是FLAG_BELL是用来保存蜂鸣器是否需要驱动的状态变量。所以既然是调用驱动函数,那肯定这个变量要为真。
3、定时器中断函数里面加上了一个静态变量NOW,他的作用就是和Systic_ms产生一个50ms的时间片,干嘛用?肯定是给蜂鸣器开关之间的延时用咯。模拟软件延时嘛。然后再来分析下这段代码:
1)首先这个NOW和Systic_ms是无条件需要赋值保证50ms时间片的。对应的代码为NOW=Systick_ms+50;
2)判断蜂鸣器驱动状态变量是不是真,如果不为真就关闭蜂鸣器,这个也是无条件的。
3)如果状态变量为真:蜂鸣器先跳变Bell_Tog();当然如果没有这个跳变函数也可以用上述的判断cnt的方法,就不多写了都是一样的。同时次数自减BELL_CNT--;同时判断是不是减到0了,减到0了说明响完了啊,那就把状态变量赋值为假。再次进来不管蜂鸣器是开着的还是关着的都会执行关闭操作,这个跟上面说的保险一样。
4)最后,这两个变量用的是全局变量,这里是以结构体的形式呈现的,因为很多情况这两个函数不在一个C里面。如果硬要写在一个C可以忽略本条。
容-源-电-子-网-为你提供技术支持本文地址:http://www.dziuu.com/dz/22/15445095132760.shtml
本文标签:
猜你感兴趣:
深圳市永阜康科技有限公司现在大力推广一颗单相正弦波/方波直流无刷电机驱动IC-ACM6252. 工作电压3.1V-18V、工作电流1.2A, 可覆盖大多数中小功率(<1A)的风机、泵机类应用。
关键词: 所属栏目:其他文章
关键词: 所属栏目:开关电源电路图
YSX321SL石英谐振器的核心特点是其频率稳定性和精确性。采用27.12MHz频率,经过精密设计和优化,常温频差仅为±10PPM,能够提供高精度的时钟信号输出。这为电动车仪表提供了准确可靠的时间参考,使得仪表显示更加精准,功能操作更加流畅。
关键词: 所属栏目:电子基础
深圳市永阜康科技有限公司现在大力推广一颗三相无传感器正弦波驱动直流无刷马达驱动IC-ACM6753,集成驱动算法+预驱+MOS,内置电流检测,外围元件仅需5个电容,应用极其简单。
关键词: 所属栏目:其他文章
VK1640是一种数码管或点阵LED驱动控制专用芯片,内部集成有数据锁存器、LED 驱动等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持8SEGx16GRID的点阵LED显示。适用于小型LED显示屏驱动。采用SOP28的封装形式。
关键词: 所属栏目:元器件知识
工作电压 : 2.4V~5.2V,内建 256KHz RC oscillator 提供 1/4 偏压 1/8 COM 周期省电模式
64x8 LCD 駆动器内建 64x8 bit 显示内存,3-wire serial interface
软件程控
资料及指令模式自动增加读写地址 
概述
PC1625 是一个 64x8 的 LCD 駆动器. 可软件程控使其适用于多样化的 LCD 应
关键词: 所属栏目:集成块资料
PC1621B是一个32*4的LCD驱动器,可软体程控使其适用于多样化的LCD应用线路,仅用到3至4条讯号线便可控制LCD驱动器,除此之外也可介由指令使其进入省电模式
特色:
 工作电压:2.4-5.2V
 内建256KHz RC oscillator
 可外接 32.768KHz石英震荡器或256KHz频率
 可选择1/2,1/3 偏压,也可选择1/2,1/3或1/4的COM周期
&
关键词: 所属栏目:集成块资料
兆科推荐高导热硅脂来帮助LED驱动器散热,高导热硅脂是电子元器件的热传递介质,如:CPU与散热器填隙、大功率三及管、可控硅元件二及管、基材铝、铜接触的缝隙处填充,均可降低发热元件的工作温度。
关键词: 所属栏目:led
GC4931F/S 是一款三相无刷直流电机预驱动芯片。 芯片可以驱动N型功率MOSFET,最高电源到 36V。芯片状态切换逻辑受三个相位差为 120°的霍尔输入确定。兼容替代A4931,MS4931芯片集成固定衰减时间的脉冲调制来控制电流并且抑制励磁涌流;堵转保护时间可调;过温保护,过压监测,同步整流等等。其中内置的同步整流器通过在衰减周期内,打开合适的低内阻的开关管以取代反向续流二极管来降低功耗。当芯片监测到过压时芯片会关断同步整流以减小变化电流引起的电源电压波动。
GC4931F/S 的逻辑输入脚有
关键词: 所属栏目:集成块资料
GC8837是一款12V直流电机驱动芯片,为摄像机,消费类产品,玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动步进电机。
GC8837可以工作在0-12V的电源电压上,能提供高达1.5A持续输出或则2A峰值电流,睡眠模式功耗小于1Ua.
GC8837具有PWM(IN/IN)输入接口与行业标准器件兼容,并具有过温保护功能,芯片集成了过温保护,欠压保护,短路保护,过流保护等功能
芯片特点
关键词: 所属栏目:集成块资料
GC8549 是一款双通道 12V 直流电机驱动芯片,为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用来驱动两个直流电机或者驱动一个步进电机。GC8549 可以工作在 3.8~12V 的电源电压上,每通道能提供高达 1.5A 持续输出电流或者2.5A峰值电流, 睡眠模式下功耗小于1uA。GC8549 具有 PWM(IN/EN)输入接口,与行业标准器件兼容,并具有过温保护,欠压保护,短路保护,过流保护等功能。GC8549 内置 LDO,不需要逻辑电源,
关键词: 所属栏目:集成块资料
在MOS管的结构中可以看到,在GS,GD之间存在寄生电容,而MOS管的驱动,实际上就是对电容的充放电。对电容的充电需要一个电流,因为对电容充电瞬间可以把电容看成短路,所以瞬间电流会比较大。选择/设计MOS管驱动时要注意的是可提供瞬间短路电流的大小。
关键词: 所属栏目:元器件知识
光耦驱动芯片HCPL-316J是Agilent公司[编者注:2014年8月更名为keysight(是德)公司]生产的栅极驱动电路产品之一,可用于驱动150A/1200V的IGBT,开关速度为0.5?s,有过流
关键词: 所属栏目:元器件知识
GC4931F/S 是一款三相无刷直流电机预驱动芯片。 芯片可以驱动N型功率MOSFET,最高电源到 36V。芯片状态切换逻辑受三个相位差为 120°的霍尔输入确定。兼容替代A4931,MS4931芯片集成固定衰减时间的脉冲调制来控制电流并且抑制励磁涌流;堵转保护时间可调;过温保护,过压监测,同步整流等等。其中内置的同步整流器通过在衰减周期内,打开合适的低内阻的开关管以取代反向续流二极管来降低功耗。当芯片监测到过压时芯片会关断同步整流以减小变化电流引起的电源电压波动。
GC4931F/S 的逻辑输入脚有
关键词: 所属栏目:集成块资料
首先看看,GC9110T 是一款 12V 直流电机驱动芯片,为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动一个步进电机。GC9110T 是 GC9110(低压 6V 驱动)的 12V 升级版本,客户根据应用电压与成本
来选择芯片。GC9110T 可以工作在 3.8~12V 的电源电压上,能提供高达 1.5A 持续输出电流或则2.5A 峰值电流,睡眠模式下功耗小于 1uA。GC9110T 具有 PWM(IN/IN
关键词: 所属栏目:集成块资料
GC8548 是一款双通道 12V 直流电机驱动芯片,为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用来驱动两个直流电机或者驱动一个步进电机。GC8548 可以工作在 3.8~12V 的电源电压上,每通道能提供高达 1.5A 持续输出电流或者 2.5A 峰值电流,睡眠模式下功耗小于1uA。GC8548 具有 PWM(IN/IN)输入接口,与行业标准器件兼容,并具有过温保护,欠压保护,短路保护,过流保护等功能。GC8548 内置 LDO,不需要逻辑电源
关键词: 所属栏目:电子报
首先看看,GC9110T 是一款 12V 直流电机驱动芯片,为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动一个步进电机。GC9110T 是 GC9110(低压 6V 驱动)的 12V 升级版本,客户根据应用电压与成本
来选择芯片。GC9110T 可以工作在 3.8~12V 的电源电压上,能提供高达 1.5A 持续输出电流或则2.5A 峰值电流,睡眠模式下功耗小于 1uA。GC9110T 具有 PWM(IN/IN
关键词: 所属栏目:电子报
完全兼容A4931、MS4931,价格实惠。
关键词: 所属栏目:集成块资料
描述
GC9110 是一款低压 5V 全桥驱动芯片,为摄像机、 消费类产品、 玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。GC9110 能提供高达 1.3A 的持续输出电流。 可以工作在 1.2~7V 的电源电压上。GC9110 具有 PWM(IN/IN) 输入接口,与行业标准器件兼容, 并具有过温保护功能。GC9110S 是 SOP8pp 封装, GC9110D 是DFN 封装。
关键词: 所属栏目:集成块资料
IR2110采用HVIC和闩锁抗干扰CMOS制造工艺,DIP14脚封装。具有独立的低端和高端输入通道;悬浮电源采用自举电路,其高端工作电压可达500V,dv/dt=±50V/ns,15V下
关键词: 所属栏目:其他文章