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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

3 {, v. T$ L5 N" T$ ]# u
以上介绍了蜂鸣器的种类以及有源蜂鸣器、无源蜂鸣器的特点。接下来,我们将介绍芯航线FPGA学习套件主板上使用的蜂鸣器电路,并使用Verilog设计一个蜂鸣器驱动电路,来驱动蜂鸣器发声。
' z6 b! C/ s* k
蜂鸣器电路介绍

  s7 e  _. `. k3 F) y) P8 ^
芯航线FPGA学习套件主板上使用了一枚3.3V驱动的无源蜂鸣器,其电路如下所示:
; H. r( d1 ?% _6 G! j# M; g2 h

+ b, C$ Y: {- w2 _, d( s
电容 C37 用于提高电路抗干扰性能。 D1 起保护三极管的作用,当三极管突然截止时,无源蜂鸣器两端产生的瞬时感应电动势可以通过 D3 迅速释放掉,避免叠加到三极管集电极上从而击穿三极管。
beep端口接FPGA输出管脚,使用时,只需要在beep信号上输出2~5KHz的pwm波,就能驱动蜂鸣器发声。
1 v# w# L0 T4 o( C" }5 l% a
无源蜂鸣器控制器设计
* P( D# n0 p9 e8 u- R0 h1 Z
通过前面对无源蜂鸣器的特点介绍可知,要使无源蜂鸣器能够正常发声,需要在控制端beep给出相应频率的PWM波。因此,对于无源蜂鸣器的控制,就转化为了设计一个PWM波发生电路。因此,接下来我们将介绍PWM波发生电路的设计。
何为PWM波?PWM的英文全名叫Pulse Width Modulation,即脉冲宽度调制。通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。 PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,广泛应用在从测量、通信到功率控制与变换的许多领域中。
       以下为周期为1KHz,脉冲宽度(占空比)分别为20%50%90%的波形图:
# q( O  h; c: p" [: n9 K. K, u, s

* \3 @. Z& q# Z0 D2 w. L
5 B& |$ `. g" v( d8 @  w: g

' P8 Q1 V- R2 D

, f7 t6 b8 Q, G' ], X* I
, q2 C  k: b6 l8 n9 I/ e. D
由图可知,当信号周期一定,信号高电平时间所占总时间的百分比不一样,即为不同占空比的PWM波。在逆变电路中,当使用这样的波形去驱动MOS管的导通时,因为一个周期内不同占空比的PWM信号其高电平持续长度不一样,因此使得MOS管的开通时间也不一样,从而使得电路中的平均电流也不一样,因此,通过调整驱动信号的占空比即可调整被控制电路中的平均电流。
而除了调整PWM信号的占空比,PWM信号的周期也是可以调整的,例如,在逆变电路中,使用IGBT作为开关器件,常见开关频率为几K到几十K,而使用MOS管作为开关器件,其开关频率则可高达几百K。因此,对于不同的器件,对驱动信号的频率要求也不一样。所以,还需要能够对PWM波的频率进行调整。
通过以上分析,可以知道,要设计一个PWM发生电路,需要能够实现对信号的频率和占空比的调节。使用过单片机或者DSP产生PWM波的朋友应该知道,在单片机或者DSP中,产生PWM波的方法就是使用片上定时器进行循环计数,通过设定定时器的一个定时周期时长来确定对应输出PWM信号的频率,同时还有一个比较器,该比较器比较定时器的实时计数值与用户设定的比较值的大小,根据比较结果来控制输出信号的电平高低。通过设定不同的比较值,即可实现不同占空比的PWM信号输出。
0 u( V) j) {) Z0 i/ O* O
! i2 u" @; W6 I' F4 B* B* _: z: q
对于FPGA来说,要产生PWM波,也可以借鉴单片机或DSP使用定时器产生PWM波的思路。
基于FPGA的PWM电路设计
根据DSP产生PWM波典型原理,在FPGA中设计PWM发生器时,也可提取出如下两个主要电路:
1、  定时器/计数器电路
2、  输出比较电路
, W! e, {+ z! Y
定时器/计数器电路设计
定时器电路设计较为简单,在《小梅哥FPGA设计思想与验证方法视频教程》中,04课“计数器设计与验证”介绍了最简单的计数器设计。参考各种mcu的计数器输出PWM波时的典型配置,可知该定时/计数器采用循环递减的计数方式,计数器循环从设定的计数初始值递减到0,然后再回到计数初始值再次递减。这样,只需要设定一个计数初始值,并确定计数时钟源频率,即可确定计数一个完整周期的时间,也即PWM信号频率。
在本节中,我们设计定时/计数器的计数时钟源频率为芯航线FPGA学习套件主板上晶体振荡器的输出频率50MHz,定时/计数器位宽为32位,则计数器代码如下所示:
& `" N, @, j' O+ f9 L2 E. w6 R6 s
0 B4 d4 W0 z& a# u- {7 X
6 U4 T2 ^. j! ^  J. U; _
输出比较电路
       输出比较电路通过比较计数器实时计数值与比较寄存器中的设定值,来确定最终PWM输出信号的电平状态。这里,我们可以定义,当计数器计数值大于等于比较值时,PWM输出端输出低电平,当计数值小于比较值时,PWM输出端输出高电平。因此输出比较电路设计代码如下:

7 t7 w2 ^+ z+ I8 j" D( I1 V5 c
) o1 w) L) L9 e6 p) n完整PWM发生电路设计
通过以上设计,一个最简单的PWM产生电路主要电路就设计完成了,以下为PWM产生电路的完整代码:

& H) _5 @& E5 l

' y; f8 B: C( l4 j8 C1 }
& x! n8 w6 r% P8 j# n- c) ?: T$ N% v( Q' G: J2 _- J" e
PWM发生电路仿真验证
对本PWM发生电路的验证思路比较简单,只需要产生50MHz基准计数时钟源(其他频率也可以,只需要修正频率和占空比计算公式中的相关参数),然后给出预重装值和输出比较值,然后使能计数,即可启动PWM输出。在运行过程中,修改预重装值可以设置输出PWM信号的频率,并将同时影响输出占空比,而在预重装值确定的情况下,修改输出比较值,则可以设置输出占空比。
最终输出PWM波的频率计算公式为:
) v( Q- v$ ?+ `7 T

" H2 M% `3 ^) J) j- c, t6 I
因此,当输出频率确定时,可计算得到预重装值,计算公式为:

6 N3 i' p- m) E2 h, M$ Z4 ?; A
  q8 v, D7 h3 E: e
例如,当希望设置输出信号频率为5KHz时

% W: P- x; P5 e* Z0 k
/ b, L1 t$ h- ]/ [! A
因此,我们只需要设置counter_arr值为9999即可使得最终输出信号频率为5KHz。
当输出PWM频率确定后,其输出占空比计算则为输出比较值与预重装值之商。计算公式为:
( j" t& _, O2 P& o6 r/ ^; P) H
) t( h- `1 S2 G1 U
       因此,当输出占空比确定时,可计算得到输出比较值,计算公式为:

3 z4 d! h" a' i
  g" [  C% O& d8 ~, u$ K. C
例如,当输出频率为5KHz,输出占空比为70%时
. W' p$ @: U4 x& Q* f5 p
3 {$ l( [6 [: e
PWM发生电路testbench设计
根据上述计算公式,可以设计pwm_generator模块的仿真文件如下所示:

3 o/ c9 G6 R( V$ k

; w' k1 P$ j% z3 ~. q7 l/ W4 q

! v, [) D; c7 E( _( y( d$ }( S& q, o/ S
4 Y1 S2 z: Q7 E5 n* \* t$ o, q6 @
仿真结果分析
下图为设置输出PWM波频率为50KHz(counter_arr为999)、占空比为40%(counter_ccr为400)时的仿真波形,由图可知,低电平周期为12us,高电平周期为8us,整个信号周期为20us,即频率为50KHz。占空比为8/20= 0.4。
4 t' Y! G. G/ m/ l: d  U2 Q6 E/ h) E/ ~

- C) ^9 L" X# X7 q! Y( k9 [3 g
下图为设置输出PWM波频率为50KHz(counter_arr为999)、占空比为70%(counter_ccr为700)时的仿真波形,由图可知,低电平周期为6us,高电平周期为14us,整个信号周期为20us,即频率为50KHz。占空比为14/20= 0.7。
' ?6 n( A: Q0 _
, C5 H7 f; V2 @$ l5 i: x
下图为设置输出PWM波频率为100KHz(counter_arr为499)、占空比为50%(counter_ccr为250)时的仿真波形,由图可知,低电平周期为5us,高电平周期为5us,整个信号周期为10us,即频率为100KHz。占空比为5/10= 0.5。

6 ?! J  o0 h( \8 Q: G' ]0 _
3 s& \% ~1 S# c- b0 L
下图为设置输出PWM波频率为100KHz(counter_arr为499)、占空比为20%(counter_ccr为100)时的仿真波形,由图可知,低电平周期为8us,高电平周期为2us,整个信号周期为10us,即频率为100KHz。占空比为2/10= 0.2。

* w) y! ~" q0 n0 l* K
1 ?. F. z; F6 g' H' s
由此可知,该PWM生成电路能够正确的产生PWM输出信号。
PWM驱动蜂鸣器板级验证
通过仿真验证,我们确认了该PWM发生电路理论设计正确,接下来,我们将使用该PWM发生模块来驱动芯航线FPGA开发板上的无源蜂鸣器,让无源蜂鸣器能够循环依次发出“哆来咪发梭拉西”的音调。(本想让蜂鸣器能够演奏一曲的,可是无奈本人音乐天赋为负数,学不会谱曲,因此只能把最基本的“哆来咪发梭拉西”放出来了,希望有音乐天赋的朋友能在此基础上谱写演奏出美丽的乐章)。
以下为查资料得知的每个乐调对应的频率。   

) [0 q* q( |1 X: q  O2 j, j
1 z: Y0 b' S; |( _) U6 R! n
3 k; a, x+ k3 y9 T$ D! c
根据每个音调的频率值,可以计算得出PWM发送模块的预重装值,以下为计算得出的音调频率与对应PWM发送模块输出相应频率的预重装值。

9 `8 n4 p/ d/ c3 _0 E' ?  L/ p; @. F  L' L( M/ j5 S

. v5 P. z" u1 O9 ]& O
本例中,保持PWM波的占空比始终为50%即可,而通过前面仿真验证可知,占空比为50%时,输出比较值刚好为预重装值的一半,因此,我们只需要将预重装值除以2(右移一位)的结果直接赋值给输出比较值即可,这样可以避免再重复计算输出比较值。
7 o: ?6 t. c! i7 [! N$ M
另外,为了保证音调的切换能够让我们容易分辨,因此设计一个500ms的定时器,每500ms切换一次音调。该部分电路非常简单,因此本板级验证部分将不再讲解代码的详细设计思路,只给出具体代码。
音调播放电路的代码如下所示:
0 ]! Z; k8 c5 Q8 Q9 I$ h3 R
! [, `. p+ g% G( C# Y
  [3 Y! o: m3 _9 u1 Y$ K: C: Q# ~

% c$ C- \/ [. `

$ e$ x+ \+ n- w8 Z

+ }: d4 \) k" [

8 v7 h# \; E: ]) O# |7 r0 f1 S/ O, r& M1 y$ X
/ }& v, k0 S6 H1 y' Z
蜂鸣器音调播放电路的引脚分配如下表所示:

- f/ t1 D) c$ q% @- {7 N
9 j( \% K9 ~+ L: V; @7 E
引脚分配完成后对工程全编译,然后下载到芯航线FPGA开发板上,下载完成后蜂鸣器即开始循环从低音1播放到高音7。
- L; {/ @5 d8 O$ y, K0 P; r* C
小梅哥
芯航线电子工作室
. @) R- r1 ?; b; o" O# P- ]
7 ]7 A$ X) [# l! L9 h
游客,如果您要查看本帖隐藏内容请回复

+ O0 R1 Y5 R1 Z9 I' x8 A; P" y
. N* p: k/ Y# K9 q9 @% i6 [$ |  x

' L- v) z) ^2 U! Z# S( F' {

' P: u. ?( P' O: P8 `0 `& E2 u5 ~

6 N% s, N* k' `
1 W% v' ]7 e0 \" t8 d) g6 }' a- ~: R3 C: v

# G  l3 P( ^3 V2 v$ N# F
& c9 ]2 z" E! a. Z% R1 A+ N
& j$ m0 U; d* F: M* n1 [$ j
+ t3 ^* f6 g& R4 V# F
, P4 B0 ^$ Z$ v4 G9 Z! b' y7 U& i# D  F# Q

7 e& O2 y4 b5 A! d. B  v0 d
& w" g+ S' T- W0 _1 ?7 p, G; s! k% G

+ {1 o/ a/ R& A! {$ N

  ?( }  c$ u! F3 A5 f
+ n8 g6 W6 s- _3 Q( ]; z- C: K
# ^" U  c! ^" U3 J! ?/ Y9 K' q
5 }8 \7 B$ y. g1 i2 A& N: z% A+ V

/ L' N/ l) f- d' Y1 o% ^0 `- z7 m2 O& D" [
/ q6 Z& F% s1 A" Q/ b

/ p5 ?' a' s( Y+ w  q% N0 p  j

. O& z' e5 j3 E6 S8 a3 l+ f
, @- P* c4 E. ~% a7 E! g5 e1 t7 U2 K
% F/ d0 Y5 A+ ]4 L  P3 L) \  ^
- G1 q* V: o( J7 t* m) d$ B
) [. s5 N/ A  v; ~
. g3 N3 M$ V% K2 ?# ?8 n7 d

5 ]9 i, j, X$ V. v4 `! e9 z/ a' h' `: e5 b+ V- y4 \" h
+ B7 O& v3 R" A

  \* x& Y+ @/ \: h. C
5 P0 {- _) n. G
2 b; A7 E, m6 x% t

- T, q  T$ o! I" v  m2 m

" R& p) M% d4 W% ]3 e# T

: ^4 D, x: F  i$ I4 G; j

- s8 w( F, [1 y* y1 U
' z% g' e, \4 R9 b8 o) o

该用户从未签到

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

该用户从未签到

3#
发表于 2021-9-28 09:47 | 只看该作者
XUEXIXUEXI
3 x  R3 M; ^; x8 G: v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 04:07 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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