标题: 关于单片机控制无源蜂鸣器驱动电路 [打印本页]

作者: QWE4562012    时间: 2020-9-7 17:02
标题: 关于单片机控制无源蜂鸣器驱动电路
这是一款购买的机器驱动的无源蜂鸣器测试到的波形,声音还比较大,用的是两个IO口直接连接到蜂鸣器两端。

自己设计的如果只用一个IO口用三极管驱动,蜂鸣器一端接电源3V另一端经过三极管到地反而声音更小!为了达到同样的声音大小,也想用两个IO和蜂鸣器直接连接!我要怎么跟软件工程是说?就说驱动的频率3.7K就可以?还需要告诉他哪些信息才能达到和参考产品一样的效果?比如声音大小

参考的产品两个IO口驱动.jpg (74.13 KB, 下载次数: 111)

参考的产品两个IO口驱动.jpg

参考的产品无源蜂鸣器驱动的波形.jpg (107.42 KB, 下载次数: 114)

参考的产品无源蜂鸣器驱动的波形.jpg

一个IO驱动.jpg (7.73 KB, 下载次数: 131)

一个IO驱动.jpg

作者: xianfajushi    时间: 2020-9-7 20:18
这样的2个IO不会增大驱动电流,若想声音大,可能要运放。
作者: 学习单片机lq    时间: 2020-9-7 22:09
如果有更高的供电,比如5V,直接单独供电就行了,这里不值得下功夫。
作者: TTQ001    时间: 2020-9-8 01:24
哪种类型的无源压电蜂鸣器? 它的规格是什么? 我们需要知道蜂鸣器的额定电流和谐振频率等。
作者: wulin    时间: 2020-9-8 08:00
普通电磁式无源蜂鸣器采用图1方式驱动没有多少实际意义,常见是图3方式驱动,但要求IO口有足够的高电平驱动能力,否则晶体管不能饱和导通从而音量小。另外市售电磁式无源蜂鸣器的品质差异很大,相同电气环境音质音量天差地别。图2驱动波形可能更适合压电式无源蜂鸣器。
作者: yzwzfyz    时间: 2020-9-8 16:19
对于蜂鸣器来说,它不管是谁驱动它,只要给足电压,它就给足振动(对应音量)。
你想想看,音量大的时候它两端的电压是多少?音量小的时候它两端的电压是多少?
这个问题不难解。
作者: QWE4562012    时间: 2020-9-8 18:49
学习单片机lq 发表于 2020-9-7 22:09
如果有更高的供电,比如5V,直接单独供电就行了,这里不值得下功夫。

电源是3V 兄弟
作者: QWE4562012    时间: 2020-9-8 18:49
TTQ001 发表于 2020-9-8 01:24
哪种类型的无源压电蜂鸣器? 它的规格是什么? 我们需要知道蜂鸣器的额定电流和谐振频率等。

压电型的   3.7K
作者: QWE4562012    时间: 2020-9-8 18:50
wulin 发表于 2020-9-8 08:00
普通电磁式无源蜂鸣器采用图1方式驱动没有多少实际意义,常见是图3方式驱动,但要求IO口有足够的高电平驱动 ...

到位     
作者: QWE4562012    时间: 2020-9-8 18:50
wulin 发表于 2020-9-8 08:00
普通电磁式无源蜂鸣器采用图1方式驱动没有多少实际意义,常见是图3方式驱动,但要求IO口有足够的高电平驱动 ...

振幅是6.6V了 也就是两倍的VCC  这个怎么做到的?比如IO口B3是给高3.3V  B2给低也就是0V   交替给电平 反相 也就是0-3.3V啊    要有一个是-3.3V   3.3-(-3.3) 才能到6.6V啊!   我是这个疑问
作者: wulin    时间: 2020-9-8 20:46
QWE4562012 发表于 2020-9-8 18:50
振幅是6.6V了 也就是两倍的VCC  这个怎么做到的?比如IO口B3是给高3.3V  B2给低也就是0V   交替给电平 反 ...

你把压电式蜂鸣器看成电容就能比较容易理解为什么在蜂鸣器两端测得峰峰值电压2倍于VCC。如果示波器表笔一端接地,另一端分别接IO口,就可以看到互为反相的3.3V矩形波。至于怎么编程你只要对软件工程师(合格的)一说他就能会意,不必担忧。
作者: Y_G_G    时间: 2020-9-8 22:26
这到底是有多难呢?
市面上的无源蜂鸣器它实际上是有两种的的:一种是常用的线圈式的,用的驱动方法就是图3的那种,不存在用两个IO来驱动声音就会大的,这种蜂鸣器是标有正负的
另一个里面是压电片,这种是要用交流电驱动的,你用的这个有可能就是这种,如果是压电片的话,不需要的两个IO的,难不成你要加四个三极管给它?
在压电片的两端并联一个电感就可以了,这种蜂鸣器虽说是有红黑线,但实际上是不分正负的
把你那个资料上传一下不行吗?
作者: QWE4562012    时间: 2020-9-9 18:29
wulin 发表于 2020-9-8 20:46
你把压电式蜂鸣器看成电容就能比较容易理解为什么在蜂鸣器两端测得峰峰值电压2倍于VCC。如果示波器表笔一 ...

APP转岗做嵌入式的。。。
作者: QWE4562012    时间: 2020-9-9 18:29
wulin 发表于 2020-9-8 20:46
你把压电式蜂鸣器看成电容就能比较容易理解为什么在蜂鸣器两端测得峰峰值电压2倍于VCC。如果示波器表笔一 ...

直接0 1   0  1这样吗
作者: QWE4562012    时间: 2020-9-9 18:30
Y_G_G 发表于 2020-9-8 22:26
这到底是有多难呢?
市面上的无源蜂鸣器它实际上是有两种的的:一种是常用的线圈式的,用的驱动方法就是图3的 ...

看来你不懂无源和有源蜂鸣器
作者: Y_G_G    时间: 2020-9-9 19:12
QWE4562012 发表于 2020-9-9 18:30
看来你不懂无源和有源蜂鸣器

不讨论个人能力问题
你图3用三极管驱动的叫线圈式(专业名词:电磁式无源蜂鸣器),驱动方法就和图3用三极管驱动那样的,方波驱动
还有另外一个是用压电片的,专业名词叫作压电无源蜂鸣器,驱动的方法是并联一个电感,电感取值要根据压电片频率来计算的,也是方波驱动
我用过的无源蜂鸣器都是这样用的,请问,哪里有不对的,你可以指正一下.

作者: 845    时间: 2020-9-9 19:22
续流二极管与滤波电容是必须有吗
作者: QWE4562012    时间: 2020-9-11 10:01
Y_G_G 发表于 2020-9-9 19:12
不讨论个人能力问题
你图3用三极管驱动的叫线圈式(专业名词:电磁式无源蜂鸣器),驱动方法就和图3用三极管 ...

你这么说。说明你是懂的!你知道并联电感的选取吗?只能用磁珠,空间不够。-----------如果是压电片的话,不需要的两个IO的-----------------你这句话啥意思?念起来不顺
作者: QWE4562012    时间: 2020-9-11 10:05
wulin 发表于 2020-9-8 20:46
你把压电式蜂鸣器看成电容就能比较容易理解为什么在蜂鸣器两端测得峰峰值电压2倍于VCC。如果示波器表笔一 ...

为什么有人说对地测量是测不到反相的?我等下试试看
作者: QWE4562012    时间: 2020-9-11 10:21
Y_G_G 发表于 2020-9-8 22:26
这到底是有多难呢?
市面上的无源蜂鸣器它实际上是有两种的的:一种是常用的线圈式的,用的驱动方法就是图3的 ...

你好玉工 这是蜂鸣器规格书

蜂鸣器规格书.jpg (90.36 KB, 下载次数: 72)

蜂鸣器规格书.jpg

作者: QWE4562012    时间: 2020-9-11 10:22
wulin 发表于 2020-9-8 08:00
普通电磁式无源蜂鸣器采用图1方式驱动没有多少实际意义,常见是图3方式驱动,但要求IO口有足够的高电平驱动 ...

还没达到样品的频率  是不是这样?声音还没达到样品的音量

蜂鸣器.jpg (89.71 KB, 下载次数: 83)

蜂鸣器.jpg

作者: wulin    时间: 2020-9-11 10:59
QWE4562012 发表于 2020-9-11 10:05
为什么有人说对地测量是测不到反相的?我等下试试看

你没有理解 “互为反相的3.3V矩形波” 的含义。如果你用双踪示波器或逻辑分析仪就能看明白。示意图如下:


作者: Y_G_G    时间: 2020-9-11 11:52
QWE4562012 发表于 2020-9-11 10:21
你好玉工 这是蜂鸣器规格书

你这个是压电陶瓷片,是要用交流电的,简单的开关是不行的
图1可以驱动,单片机端口设定成强推挽输出,输出波形不是0101,而是:当A端口=0时,B端口=1,然后,B=0,A=1,使两个端口输出的是交流信号
图3是要把二极管换成电感的,大概是几mH左右,如果没有空间就不管了
使用图1的接法,先用示波器看效果:示波器的地线接一个端口,探头接另外一个端口,看波形就知道频率了

作者: wulin    时间: 2020-9-11 17:49
QWE4562012 发表于 2020-9-11 10:22
还没达到样品的频率  是不是这样?声音还没达到样品的音量

要想蜂鸣器声音大不但要有足够的驱动电压还要求驱动频率与蜂鸣器的谐振频率相同或相近。楼主这个驱动波形不太好,有点交越失真,是程序没有写好。

作者: lfc315    时间: 2020-9-11 18:17
压电蜂鸣器,可以直接把两个引脚接到IO口,让软件工程师写程序,发出蜂鸣器谐振频率的脉冲
作者: univers    时间: 2020-9-12 09:26
这有啥难的,驱动电路看是没问题的,三极管要用高放大倍数的为好,比如TO92封装的,放大倍数200以上。想声压大,就上+5V 或+10V

作者: QWE4562012    时间: 2020-9-12 10:47
wulin 发表于 2020-9-11 17:49
要想蜂鸣器声音大不但要有足够的驱动电压还要求驱动频率与蜂鸣器的谐振频率相同或相近。楼主这个驱动波形 ...

这位兄弟 先说声谢谢。这是参考产品压电无源蜂鸣器的驱动波形和自己产品压电无源蜂鸣器驱动波形   这是软件的延时搞得不对吗?我要怎么跟他讲?波形都不对!阶梯状

自己机器压电无源蜂鸣器驱动波形.jpg (202.15 KB, 下载次数: 78)

自己机器压电无源蜂鸣器驱动波形.jpg

参考机器压电无源蜂鸣器驱动波形.jpg (206.23 KB, 下载次数: 79)

参考机器压电无源蜂鸣器驱动波形.jpg

压电无源蜂鸣器规格书.jpg (107.17 KB, 下载次数: 80)

压电无源蜂鸣器规格书.jpg

作者: QWE4562012    时间: 2020-9-12 10:48
Y_G_G 发表于 2020-9-11 11:52
你这个是压电陶瓷片,是要用交流电的,简单的开关是不行的
图1可以驱动,单片机端口设定成强推挽输出,输出 ...

4K的蜂鸣器  如果用两个IO口的话 是否需要电感?这个电感的计算方法说下
作者: QWE4562012    时间: 2020-9-12 10:49
Y_G_G 发表于 2020-9-11 11:52
你这个是压电陶瓷片,是要用交流电的,简单的开关是不行的
图1可以驱动,单片机端口设定成强推挽输出,输出 ...

是的  必须用交流电  图刚更新了 贴出来了
作者: QWE4562012    时间: 2020-9-12 10:50
yzwzfyz 发表于 2020-9-8 16:19
对于蜂鸣器来说,它不管是谁驱动它,只要给足电压,它就给足振动(对应音量)。
你想想看,音量大的时候它 ...

电源是3.0  这个没得选  不可能升压
作者: QWE4562012    时间: 2020-9-12 10:52
univers 发表于 2020-9-12 09:26
这有啥难的,驱动电路看是没问题的,三极管要用高放大倍数的为好,比如TO92封装的,放大倍数200以上。想声 ...

怎么就那么多人叫我提高电压。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。真是无语
作者: QWE4562012    时间: 2020-9-12 11:42
wulin 发表于 2020-9-11 10:59
你没有理解 “互为反相的3.3V矩形波” 的含义。如果你用双踪示波器或逻辑分析仪就能看明白。示意图如下: ...

您好   按照您的指示  用逻辑分析仪也抓了下波形(因为是方波,不知道选取哪个协议,选的IIC的协议,)波形如图,请进一步指示,谢谢

参考样品 逻辑分析仪采到的两个IO的驱动波形.png (70.94 KB, 下载次数: 83)

参考样品 逻辑分析仪采到的两个IO的驱动波形.png

自己产品逻辑分析仪采样到的MCU两个IO口驱动压电无源蜂鸣器的波形.jpg (155.34 KB, 下载次数: 93)

自己产品逻辑分析仪采样到的MCU两个IO口驱动压电无源蜂鸣器的波形.jpg

作者: wulin    时间: 2020-9-12 13:08
QWE4562012 发表于 2020-9-12 11:42
您好   按照您的指示  用逻辑分析仪也抓了下波形(因为是方波,不知道选取哪个协议,选的IIC的协议,)波 ...

图1的的波形非常清楚的表示两个端口电压互为反相且时序准确,难道你看不出来???只是为了看波形和时序不必纠结选取哪个协议。与任何通讯协议也没有丝毫关联。
图2波形两个端口翻转有明显时间差,还叠加了异常短脉冲。明显是软件编写有缺陷才会出现的现象。你把时间轴展开看会非常明显。
作者: ice615    时间: 2020-9-12 14:07
一个软件问题讨论了五六天也不见把程序贴上来
作者: Y_G_G    时间: 2020-9-12 14:19
QWE4562012 发表于 2020-9-12 10:48
4K的蜂鸣器  如果用两个IO口的话 是否需要电感?这个电感的计算方法说下

你没有示波器吗?直接用示波器两个线接到两个IO看波形就知道了,A=0的时候B=1,然后A=1,B=0,频率使用蜂鸣器的频率,这真不难呀!你上传的波形已经可以了,至于波形的延时有毛刺什么的,难道不能先试一下效果吗?烧录到单片机上先试下效果,如果是声音电流都符合了,再去找一下问题不行吗?
如果是用两个IO驱动的话是不用电感的,这要的是交流电的
一个IO驱动就要电感,我说得很明白了,既然是没有空间,那就不管了,如果你要测试,可以试一下,从1mH电感慢慢的调试
作者: QWE4562012    时间: 2020-9-12 14:40
ice615 发表于 2020-9-12 14:07
一个软件问题讨论了五六天也不见把程序贴上来

兄弟啊  我是搞硬件的  软件不是我写的  我周一让他发给我
作者: QWE4562012    时间: 2020-9-12 14:43
学习单片机lq 发表于 2020-9-7 22:09
如果有更高的供电,比如5V,直接单独供电就行了,这里不值得下功夫。

本来你这个回复我不想理睬的  既然来了就回复下你   提高电压这种方法说都不要说出来  谁不知道?这是电池产品,容量很小,而且这是IO口反相驱动  单片机电压是3V 明白?如果空间够  直接用电磁式的就行了,或者有5V系统 直接用5V供电就行了
作者: QWE4562012    时间: 2020-9-12 14:59
wulin 发表于 2020-9-11 10:59
你没有理解 “互为反相的3.3V矩形波” 的含义。如果你用双踪示波器或逻辑分析仪就能看明白。示意图如下: ...

就这一个帖就能看出是高手。吴工你是高手!我喜欢你的回帖!受益匪浅!
作者: QWE4562012    时间: 2020-9-14 15:45
ice615 发表于 2020-9-12 14:07
一个软件问题讨论了五六天也不见把程序贴上来

void Beep(int iNum)
{
int i, j;

DrvGPIO_PT9_EnableOUTPUT(0x01);
DrvGPIO_PT9_EnableOUTPUT(0x02);
for(i = 0; i < iNum; i++)
{
  for(j = 0; j < 90; j++)
  {
   DrvGPIO_PT9_SetPortBits(0x01);
   DrvGPIO_PT9_ClrPortBits(0x02);
   Delay(43);//Delay(125);130
   DrvGPIO_PT9_ClrPortBits(0x01);
   DrvGPIO_PT9_SetPortBits(0x02);
   Delay(43);//Delay(125);130
  }
}
// if(iNum > 1)
//  Delay(10000);

DrvGPIO_PT9_DisableOUTPUT(0x01);
DrvGPIO_PT9_DisableOUTPUT(0x02);
}


请赐教
作者: wulin    时间: 2020-9-14 18:59
QWE4562012 发表于 2020-9-14 15:45
void Beep(int iNum)
{
int i, j;

这段代码DrvGPIO_PT9_EnableOUTPUT(0x01);DrvGPIO_PT9_EnableOUTPUT(0x02);两条指令之间会有时间差,做不到2个端口同时翻转。要用总线操作方法使2个端口同时翻转。
作者: juncedz    时间: 2020-9-14 19:24
以前的硬件方式:
用1个直径10*高度15mm三脚的绕线电感,103电容,几个三极管与电阻电容,
就用单片机开关一下三极管也声音响的车喇叭一样,可能达到80--90db。
有电容,开关一下,有延时,就不停的响。
软件不懂,以前就这样硬件用过。里面需要一定空间,
现在的报警器可能还是用这样的硬件的才声音好响。
作者: juncedz    时间: 2020-9-14 19:41
一个IO驱动.jpg    这个电路是驱动轰鸣器的,不是轰鸣片
这样的:

蜂鸣片8.jpg (21.13 KB, 下载次数: 124)

蜂鸣片8.jpg

蜂鸣片4.jpg (1.96 KB, 下载次数: 104)

蜂鸣片4.jpg

作者: QWE4562012    时间: 2020-9-15 18:32
wulin 发表于 2020-9-14 18:59
这段代码DrvGPIO_PT9_EnableOUTPUT(0x01);DrvGPIO_PT9_EnableOUTPUT(0x02);两条指令之间会有时间差,做不 ...

总线操作方法?我怎么跟他说呢?他这里是直接操作的库函数是吗
作者: QWE4562012    时间: 2020-9-15 18:33
ice615 发表于 2020-9-12 14:07
一个软件问题讨论了五六天也不见把程序贴上来

兄弟  程序它来了  有空看下   
作者: wulin    时间: 2020-9-15 19:29
QWE4562012 发表于 2020-9-15 18:32
总线操作方法?我怎么跟他说呢?他这里是直接操作的库函数是吗

由于你发的代码不全,控制蜂鸣器端口翻转的核心部分看不到,只能猜想是用的Px的Px.0和Px.1。所以很难用简单几句话表述清楚,直接给你写个示例程序,稍有点C言语基础就能看明白,既可以用仿真软件仿真运行,也可以搭建实际电路测试。至于使用的端口不同,略改一下即可。有详细注释,别说还是看不懂。
  1. //以51系列单片机,晶振12MHz为基础编写的测试程序
  2. //蜂鸣器驱动端口P2.0、P2.1,可以根据实际管脚修改
  3. //按键程序作为测试蜂鸣器使用,每按一次响铃1/4秒
  4. #include <reg52.h>
  5. #include <intrins.h>
  6. #define uint unsigned int
  7. #define uchar unsigned char

  8. sbit key=P2^2;

  9. bit flag=0;

  10. void Delay115us()                //@12.000MHz
  11. {
  12.         uchar i;
  13.         i=55;
  14.         while(--i);
  15. }

  16. void key_scan()
  17. {
  18.         static uchar temp=0; //消抖计数
  19.         static bit sign=0;        //按键状态记忆
  20.         if(!key)
  21.         {
  22.                 if(++temp==100 && sign==0)
  23.                 {
  24.                         sign=1;
  25.                         flag=1;//开启蜂鸣器
  26.                 }
  27.         }
  28.         else
  29.         {
  30.                 temp=0;
  31.                 sign=0;
  32.         }
  33. }

  34. void Beep()//频率4KHz/周期250us
  35. {
  36.         uint i;
  37.         if(flag)
  38.         {
  39.                 P2|=0x01;//蜂鸣器端口置位,P2.0=1、P2.1=0,不影响P2其它端口状态
  40.                 for(i=0;i<2000;i++)//响铃1/4秒
  41.                 {
  42.                         if(i%2==0)
  43.                                 P2+=0x01;//P2.0、P2.1同步翻转,不影响P2其它端口状态
  44.                         else
  45.                         {
  46.                                 P2-=0x01;//P2.0、P2.1同步翻转,不影响P2其它端口状态
  47.                                 _nop_(); //补偿2us,正负半周脉冲等宽
  48.                                 _nop_();
  49.                         }
  50.                         Delay115us();
  51.                 }
  52.                 P2&=0xfc;//蜂鸣器端口复位清0,不影响P2其它端口状态
  53.                 flag=0;        //关闭蜂鸣器
  54.         }
  55. }

  56. void main()
  57. {
  58.         P2&=0xfc;//初始化蜂鸣器端口P2.0、P2.1清0。
  59.         while(1)
  60.         {
  61.                 key_scan();
  62.                 Beep();
  63.         }        
  64. }
复制代码

作者: QWE4562012    时间: 2020-9-16 18:09
wulin 发表于 2020-9-14 18:59
这段代码DrvGPIO_PT9_EnableOUTPUT(0x01);DrvGPIO_PT9_EnableOUTPUT(0x02);两条指令之间会有时间差,做不 ...

要用总线操作方法使2个端口同时翻转。--------------------具体如何做?方法说下
作者: QWE4562012    时间: 2020-9-16 18:12
juncedz 发表于 2020-9-14 19:24
以前的硬件方式:
用1个直径10*高度15mm三脚的绕线电感,103电容,几个三极管与电阻电容,
就用单片机开 ...

空间和成本      所以用的是压电的无源  因为体积比较小      你那种应该是大才产品   直接用的喇叭吧?或者是电磁式的   
作者: QWE4562012    时间: 2020-9-16 18:14
juncedz 发表于 2020-9-14 19:41
一个IO驱动.jpg    这个电路是驱动轰鸣器的,不是轰鸣片
这样的:

你好   用了三端电感?产品空间很小  不可能放这么大插件电感的。。。还有你这种是有源蜂鸣器吧
作者: QWE4562012    时间: 2020-9-16 18:15
wulin 发表于 2020-9-15 19:29
由于你发的代码不全,控制蜂鸣器端口翻转的核心部分看不到,只能猜想是用的Px的Px.0和Px.1。所以很难用简 ...

谢谢大神  不甚感激  
作者: gf.shao    时间: 2020-9-17 11:37
交流、频率
作者: juncedz    时间: 2020-9-17 23:09
QWE4562012 发表于 2020-9-16 18:14
你好   用了三端电感?产品空间很小  不可能放这么大插件电感的。。。还有你这种是有源蜂鸣器吧

是轰鸣片,         基本上报警声音响的都是用这样的,并且拆开看了好多。

如果没有空间,也没办法,  单片机直接二口能够驱动轰鸣片发声音没有看过,

不过那些音乐片  是直接有 io口 驱动 小喇叭的。声音也可以的,

作者: QWE4562012    时间: 2020-9-22 18:25
juncedz 发表于 2020-9-17 23:09
是轰鸣片,         基本上报警声音响的都是用这样的,并且拆开看了好多。

如果没有空间,也没办法,  ...

无源的就是这样驱动的  推挽  最大的功率




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1