蜂鸣器换了 |
注意!有源蜂鸣器有极性的!接错了也不会叫! |
这个应该是无源蜂鸣器 |
你这个要换有源蜂鸣器,这样给高电平就能响了哦! |
这种无源的蜂鸣器,必须施加合适的方波,模拟正弦波,才能发声。声音大小,和声波的频率、强度有关。也就是说,你需要调整方波的输出频率和占空比才行。看你的电路图, 估计电压是不能改了,但是还可以试试换放大倍数大一些的三极管。另外可以参考网上用方波模拟音乐发声的程序,应该有很多。以下是一个模拟发声的程序,使用STC89C52,+5V电源,声音还是比较明显的: #include <reg52.h> #include <intrins.h> //频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍; sbit Beep = P0^4 ; unsigned char n=0; //n为节拍常数变量 unsigned char code music_tab[] ={ 0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数, 0x20, 0x40, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x10, 0x1C, 0x10, 0x18 , 0x40, 0x1C, 0x20, 0x20 , 0x20, 0x1C, 0x20, 0x18 , 0x20, 0x20, 0x80, 0xFF , 0x20, 0x30, 0x1C, 0x10 , 0x18, 0x20, 0x15, 0x20 , 0x1C, 0x20, 0x20, 0x20 , 0x26, 0x40, 0x20, 0x20 , 0x2B, 0x20, 0x26, 0x20 , 0x20, 0x20, 0x30, 0x80 , 0xFF, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x20, 0x15 , 0x20, 0x1C, 0x20, 0x20 , 0x20, 0x26, 0x40, 0x20 , 0x20, 0x2B, 0x20, 0x26 , 0x20, 0x20, 0x20, 0x30 , 0x80, 0x20, 0x30, 0x1C , 0x10, 0x20, 0x10, 0x1C , 0x10, 0x20, 0x20, 0x26 , 0x20, 0x2B, 0x20, 0x30 , 0x20, 0x2B, 0x40, 0x20 , 0x15, 0x1F, 0x05, 0x20 , 0x10, 0x1C, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x20, 0x15 , 0x20, 0x1C, 0x20, 0x20 , 0x20, 0x26, 0x40, 0x20 , 0x20, 0x2B, 0x20, 0x26 , 0x20, 0x20, 0x20, 0x30 , 0x30, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x40, 0x1C , 0x20, 0x20, 0x20, 0x26 , 0x40, 0x13, 0x60, 0x18 , 0x20, 0x15, 0x40, 0x13 , 0x40, 0x18, 0x80, 0x00 }; void delay (unsigned char m) //控制频率延时 { unsigned i=3*m; while(--i); } void delayms(unsigned char a) //豪秒延时子程序 { while(--a); } void main() { unsigned char p,m; //m为频率常数变量 unsigned char i=0; TMOD&=0x0f; TMOD|=0x01; TH0=0xd8;TL0=0xef; IE=0x82; play: while(1) { a: p=music_tab[i]; if(p==0x00) { i=0, delayms(1000); goto play; //如果碰到结束符,延时1秒,回到开始再来一遍 } else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a; //若碰到休止符,延时100ms,继续取下一音符 } else { m=music_tab[i++], n=music_tab[i++]; //取频率常数 和 节拍常数 } TR0=1; //开定时器0 while(n!=0) //等待节拍完成,输出音频 { Beep=~Beep; delay(m); } TR0=0; //关定时器0 } } void int0() interrupt 1 //采用中断定时器0 控制节拍 { TH0=0xd8; TL0=0xef; n--; } |
无源发声.jpg (36.25 KB, 下载次数: 78)
有源蜂鸣器底部是黑色封装而不是电路板,你看看是不是 |
要换有源蜂鸣器,这样给高电平就能响了,而且用5V的话会非常响(把贴纸撕掉的情况下) |
可能需要加三极管放大信号吧。再给引脚方波 |
我个人喜欢用pnp来驱动
![]() |
明显的供电电压太低,做过试验的,低压太低声音小甚至完全不响 |
3.3V去掉9013的压降,可能电压不够了吧 |
量下3.3V电是否正常 |
你这个蜂鸣器应该是无源蜂鸣器 |
材料表写的不一定就对,需要自己检查,可以拿个5V电源按极性触碰一下蜂鸣器看是否会鸣叫(无源的只有触碰瞬间会有一声响);另外,有源的一般都是5V供电,你这个电压不足肯定不够响(甚至可能都会不响),蜂鸣器有问题也会造成响声不够大 |