找回密码
 注册
关于网站域名变更的通知
查看: 858|回复: 2
打印 上一主题 下一主题

转——【小梅哥FPGA进阶教程】第五章 无源蜂鸣器驱动设计

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-29 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
无源蜂鸣器驱动设计
. W, V8 o& W" y3 v

' m8 L, n1 g0 E/ ?
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
压电式蜂鸣器:压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
电磁式蜂鸣器:电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
根据蜂鸣器本身是否集成了震荡源,蜂鸣器可以分为有源蜂鸣器与无源蜂鸣器。
有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。
有源蜂鸣器与无源蜂鸣器的区别:
注意:这里的“源”不是指电源,而是指震荡源。
也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫;
而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K-5K的方波去驱动它
有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。
无源蜂鸣器的优点是:
1. 便宜
2. 声音频率可控,可以做出“多来米发索拉西”的效果
3. 在一些特例中,可以和LED复用一个控制口
有源蜂鸣器的优点是:程序控制方便。

  J) d$ i/ Y8 l1 u/ T
以上介绍了蜂鸣器的种类以及有源蜂鸣器、无源蜂鸣器的特点。接下来,我们将介绍芯航线FPGA学习套件主板上使用的蜂鸣器电路,并使用Verilog设计一个蜂鸣器驱动电路,来驱动蜂鸣器发声。

$ g+ j( n4 ^0 H/ s
蜂鸣器电路介绍
& U! O, H" B! S" M- c
芯航线FPGA学习套件主板上使用了一枚3.3V驱动的无源蜂鸣器,其电路如下所示:

# }9 ^( v9 H+ U$ |# o& D3 a* Y+ F1 [
电容 C37 用于提高电路抗干扰性能。 D1 起保护三极管的作用,当三极管突然截止时,无源蜂鸣器两端产生的瞬时感应电动势可以通过 D3 迅速释放掉,避免叠加到三极管集电极上从而击穿三极管。
beep端口接FPGA输出管脚,使用时,只需要在beep信号上输出2~5KHz的pwm波,就能驱动蜂鸣器发声。
% ^1 D' K$ ~$ m4 n5 b5 T- V
无源蜂鸣器控制器设计
/ {9 w4 q2 z3 F( }$ V4 d# S2 i0 m
通过前面对无源蜂鸣器的特点介绍可知,要使无源蜂鸣器能够正常发声,需要在控制端beep给出相应频率的PWM波。因此,对于无源蜂鸣器的控制,就转化为了设计一个PWM波发生电路。因此,接下来我们将介绍PWM波发生电路的设计。
何为PWM波?PWM的英文全名叫Pulse Width Modulation,即脉冲宽度调制。通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。 PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,广泛应用在从测量、通信到功率控制与变换的许多领域中。
       以下为周期为1KHz,脉冲宽度(占空比)分别为20%50%90%的波形图:
- h$ ^: I; p, x& H( [
' f) N4 z2 M7 E3 H: }
7 B" _9 W0 l: S# V" B' X. R& q
  [) |0 {- E0 o# U/ X; e% L( Z
( P0 Z2 {! m9 d3 J# x4 o5 C$ w

. ?, I/ O& X; C% j4 S
由图可知,当信号周期一定,信号高电平时间所占总时间的百分比不一样,即为不同占空比的PWM波。在逆变电路中,当使用这样的波形去驱动MOS管的导通时,因为一个周期内不同占空比的PWM信号其高电平持续长度不一样,因此使得MOS管的开通时间也不一样,从而使得电路中的平均电流也不一样,因此,通过调整驱动信号的占空比即可调整被控制电路中的平均电流。
而除了调整PWM信号的占空比,PWM信号的周期也是可以调整的,例如,在逆变电路中,使用IGBT作为开关器件,常见开关频率为几K到几十K,而使用MOS管作为开关器件,其开关频率则可高达几百K。因此,对于不同的器件,对驱动信号的频率要求也不一样。所以,还需要能够对PWM波的频率进行调整。
通过以上分析,可以知道,要设计一个PWM发生电路,需要能够实现对信号的频率和占空比的调节。使用过单片机或者DSP产生PWM波的朋友应该知道,在单片机或者DSP中,产生PWM波的方法就是使用片上定时器进行循环计数,通过设定定时器的一个定时周期时长来确定对应输出PWM信号的频率,同时还有一个比较器,该比较器比较定时器的实时计数值与用户设定的比较值的大小,根据比较结果来控制输出信号的电平高低。通过设定不同的比较值,即可实现不同占空比的PWM信号输出。

/ c# t/ [: v, ^* f2 |
* c4 y9 }4 K: \
对于FPGA来说,要产生PWM波,也可以借鉴单片机或DSP使用定时器产生PWM波的思路。
基于FPGA的PWM电路设计
根据DSP产生PWM波典型原理,在FPGA中设计PWM发生器时,也可提取出如下两个主要电路:
1、  定时器/计数器电路
2、  输出比较电路

+ O! L8 X9 ]- d! H* B: V! }定时器/计数器电路设计
定时器电路设计较为简单,在《小梅哥FPGA设计思想与验证方法视频教程》中,04课“计数器设计与验证”介绍了最简单的计数器设计。参考各种mcu的计数器输出PWM波时的典型配置,可知该定时/计数器采用循环递减的计数方式,计数器循环从设定的计数初始值递减到0,然后再回到计数初始值再次递减。这样,只需要设定一个计数初始值,并确定计数时钟源频率,即可确定计数一个完整周期的时间,也即PWM信号频率。
在本节中,我们设计定时/计数器的计数时钟源频率为芯航线FPGA学习套件主板上晶体振荡器的输出频率50MHz,定时/计数器位宽为32位,则计数器代码如下所示:
  p  n- ~0 o/ ^5 V

2 B% {+ J* ^1 _( M- L
0 j8 G8 _8 o9 T- ]3 Q% Z输出比较电路
       输出比较电路通过比较计数器实时计数值与比较寄存器中的设定值,来确定最终PWM输出信号的电平状态。这里,我们可以定义,当计数器计数值大于等于比较值时,PWM输出端输出低电平,当计数值小于比较值时,PWM输出端输出高电平。因此输出比较电路设计代码如下:

  N, G; `1 [. a8 m0 ~8 a+ L2 S5 |
% d+ C: N/ S* W5 [! K9 x完整PWM发生电路设计
通过以上设计,一个最简单的PWM产生电路主要电路就设计完成了,以下为PWM产生电路的完整代码:
. |& Y; F2 q4 x: @4 n

( U, H7 |  m" {+ l9 [7 O8 s4 H% Y5 w/ `+ D$ ?2 {- T: u- I
3 P: l# ^# r+ A. x: d
PWM发生电路仿真验证
对本PWM发生电路的验证思路比较简单,只需要产生50MHz基准计数时钟源(其他频率也可以,只需要修正频率和占空比计算公式中的相关参数),然后给出预重装值和输出比较值,然后使能计数,即可启动PWM输出。在运行过程中,修改预重装值可以设置输出PWM信号的频率,并将同时影响输出占空比,而在预重装值确定的情况下,修改输出比较值,则可以设置输出占空比。
最终输出PWM波的频率计算公式为:

9 r( `( m6 H. C: f$ u4 W; n& w. }, r" m& U
因此,当输出频率确定时,可计算得到预重装值,计算公式为:

, g6 {  P4 {& v% ?
% j/ r4 G* S3 q  @
例如,当希望设置输出信号频率为5KHz时

" ^7 C+ [9 s5 d1 ^/ t- ?( z4 C) u9 q
因此,我们只需要设置counter_arr值为9999即可使得最终输出信号频率为5KHz。
当输出PWM频率确定后,其输出占空比计算则为输出比较值与预重装值之商。计算公式为:

" p6 `- u# b) S/ `' Z% g; F& t. b, F$ L+ r1 E5 e
       因此,当输出占空比确定时,可计算得到输出比较值,计算公式为:

( |- u" Z( ~- r, o4 c! y: a% l+ V/ j- q8 C# Z5 {2 s
例如,当输出频率为5KHz,输出占空比为70%时
# e% c" _  c/ ~5 y. E
' U( r. `' X/ N0 o; B
PWM发生电路testbench设计
根据上述计算公式,可以设计pwm_generator模块的仿真文件如下所示:
) i) U  F8 z7 _; h: {0 f
$ y( L0 V$ M4 W- s% ~
& \' L0 M3 U$ P2 F- K  o- \

2 R% C6 y9 X" C7 }0 ~
% M1 y& O, u+ q' J仿真结果分析
下图为设置输出PWM波频率为50KHz(counter_arr为999)、占空比为40%(counter_ccr为400)时的仿真波形,由图可知,低电平周期为12us,高电平周期为8us,整个信号周期为20us,即频率为50KHz。占空比为8/20= 0.4。

% l7 i; }+ ]: C- E9 b3 J, H
  o$ r0 c4 u# p0 [) E
下图为设置输出PWM波频率为50KHz(counter_arr为999)、占空比为70%(counter_ccr为700)时的仿真波形,由图可知,低电平周期为6us,高电平周期为14us,整个信号周期为20us,即频率为50KHz。占空比为14/20= 0.7。
, X+ T+ t' [9 V1 |7 R

5 P3 a# u8 g0 R5 H/ [4 U
下图为设置输出PWM波频率为100KHz(counter_arr为499)、占空比为50%(counter_ccr为250)时的仿真波形,由图可知,低电平周期为5us,高电平周期为5us,整个信号周期为10us,即频率为100KHz。占空比为5/10= 0.5。

- C+ J  f0 j. }+ O! q3 G
9 |& R# F9 n' A  o
下图为设置输出PWM波频率为100KHz(counter_arr为499)、占空比为20%(counter_ccr为100)时的仿真波形,由图可知,低电平周期为8us,高电平周期为2us,整个信号周期为10us,即频率为100KHz。占空比为2/10= 0.2。
+ C" B' q9 y2 n
/ _# }2 x6 y6 P- m3 c
由此可知,该PWM生成电路能够正确的产生PWM输出信号。
PWM驱动蜂鸣器板级验证
通过仿真验证,我们确认了该PWM发生电路理论设计正确,接下来,我们将使用该PWM发生模块来驱动芯航线FPGA开发板上的无源蜂鸣器,让无源蜂鸣器能够循环依次发出“哆来咪发梭拉西”的音调。(本想让蜂鸣器能够演奏一曲的,可是无奈本人音乐天赋为负数,学不会谱曲,因此只能把最基本的“哆来咪发梭拉西”放出来了,希望有音乐天赋的朋友能在此基础上谱写演奏出美丽的乐章)。
以下为查资料得知的每个乐调对应的频率。   
0 p: B4 F$ u8 p/ |& H/ A! ~

) j' K  [( F  E
* J) f9 b$ w1 m! D  a
根据每个音调的频率值,可以计算得出PWM发送模块的预重装值,以下为计算得出的音调频率与对应PWM发送模块输出相应频率的预重装值。

! V0 M! Y8 a) e" |3 V1 @$ h+ c
2 X+ ]  {& J- G- a# V7 e  c  {0 ~0 L! A8 e3 Q
本例中,保持PWM波的占空比始终为50%即可,而通过前面仿真验证可知,占空比为50%时,输出比较值刚好为预重装值的一半,因此,我们只需要将预重装值除以2(右移一位)的结果直接赋值给输出比较值即可,这样可以避免再重复计算输出比较值。
# M+ V. @; s! v9 w6 m5 M- q* V
另外,为了保证音调的切换能够让我们容易分辨,因此设计一个500ms的定时器,每500ms切换一次音调。该部分电路非常简单,因此本板级验证部分将不再讲解代码的详细设计思路,只给出具体代码。
音调播放电路的代码如下所示:
% d+ H& W8 g# z3 U0 `- O# g# Z
8 e% f3 S9 z, b- _2 z
: U# K7 b$ e/ w3 {
8 i; r4 f9 F& A6 S; H/ C4 o
! E" R1 C  d% k* k& j

. }* R: z1 O5 e  Q; I8 x! K; U
4 u+ d  w1 N, z! t* h9 B% o, L. f
- O8 G7 E* A4 t4 c2 \
; m+ c: E- Z3 Y+ V* ^
蜂鸣器音调播放电路的引脚分配如下表所示:

. d% {2 _) H* K$ \: N$ |! ]8 O" s6 B9 J* l4 U" w1 Z. h2 F# y
引脚分配完成后对工程全编译,然后下载到芯航线FPGA开发板上,下载完成后蜂鸣器即开始循环从低音1播放到高音7。
# e2 G6 |: Q, F
小梅哥
芯航线电子工作室

2 q/ a8 C' ]& O1 N: {( J
0 I2 y! K, ^) z9 `& t. Z/ _
游客,如果您要查看本帖隐藏内容请回复
9 c0 w0 Q: V4 Z) h6 }
# \1 z5 T2 @$ L' W0 H

4 X6 @7 l8 y4 ]& _' |
* R3 P+ h& M7 K" b. B

2 F" P; n2 _2 [/ K+ F6 E3 T
& I2 X1 ^. w8 Z' s/ C" \8 [3 K  M$ m7 \: J- X6 ?1 r' p- [+ \& L
5 b, \: U! m" z

* D& i6 N* s; K& @  Y
$ |4 s) c; c/ i  ^1 E) B$ g. m' V8 a% x3 [  [* X+ {* l% A; k' K
6 S/ z: i3 t8 }: K6 S

. Z5 J. J$ c$ e; t9 v

0 o* M3 L- T- s8 G1 H4 A
* m: z  K! f# U) V! e

% K  c, T3 F- U0 Q" O# T

; u7 I/ k8 ~% n7 W+ f+ Z2 F: ~# ^

* F/ y9 ~  n4 X/ I* m
6 n9 t, z5 o* u$ \2 {
! p' P8 O* d1 {+ G/ I2 p

' \* S, S2 B  O% T* v# F
& A. Z) }" J* E1 ~( z
% R  c/ V, L: `6 t9 N8 V5 ]; O2 l! G: a) s' l) \0 I0 `
4 @3 N* r) c$ A0 p) W1 j

  f# u8 [% F7 f8 G( o+ _0 U8 B
7 S, p9 t# ^0 c5 X0 q4 h$ s. b# d8 x

1 A' e3 o' h4 {* f- T+ `  @
  z& o& R  I( Z) [5 ?
- a" M% _% R! s2 ~

+ b# l) X7 j, ?) a0 ]  _4 H2 s2 ?4 j1 z8 G1 f3 j8 X* f0 ~) @
, Z3 ]6 [  F( r) v* V0 `# h% M
7 w5 m9 K5 o9 t# R
* a: _, ]& U2 \
+ L. m) C6 X! N- o6 h

: k% Y, V5 {  Q
$ F. E7 x5 \. U' {' R( V  ~, f
5 \3 d: y' D+ j

& c3 P8 d. G- `. K
& o$ ]4 r0 D: I

该用户从未签到

2#
发表于 2019-3-29 15:14 | 只看该作者
最近正在找这方面的资料 谢谢楼主分享

该用户从未签到

3#
发表于 2021-9-28 09:47 | 只看该作者
XUEXIXUEXI4 ]8 Z6 S( ?- K& d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 21:59 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表