蜂鸣器声音优化
1、优化思路
蜂鸣器的控制,在单片机领域,大多数人都是给一定周期的脉冲,蜂鸣器就会发出声音,而本质上,蜂鸣器只是一个金属弹片,声音大小取决于弹片的幅值,而幅值取决于施加的电压大小。电压大小可以使用PWM进行控制,所以这里跟电机的控制一样,可以使用SVPWM进行调制。一个调制频率一个运行频率。在蜂鸣器弹片的发声时间宽度内,用调制频率下PWM波形进行驱动。但是用这种方式,需要使用两个定时器,并进行串联。这种方式会多耗费一个定时器资源。
还有一种方式,是直接使用PWM波形进行驱动,脉宽控制电压,周期控制声音频率,这种方式程序实现更简洁,对硬件资源也更友好,但是有两个缺点,第一,就是声音的大小控制不线性(SVPWM是否线性,未验证)。第二,在低频率段比较生硬,工作在较高音频下效果比较好。
本文采用第二种方式实现蜂鸣器的声音优化,加上强弱控制,颤音控制。
2、强弱控制算法
2.1、 线性衰减
2.1.1、公式
y
=
a
x
+
b
y = ax +b
y=ax+b
当 x = 0时,y = b;
当 y = 0时,x = -b/a;
2.1.2、程序
x为0时,y为最大的音量,y为0时,x为最大的时间长度,所以具体实现函数如下:
//线性衰减
float Voice_Curve_Linear(float volume,float len,uint16_t cnt)
{
float a = -volume/len;
float b = volume;
float y = a*cnt + b;
return y;
}
2.2、 抛物线衰减
2.2.1、公式
y
=
a
∗
x
2
+
b
∗
x
+
c
y = a*x^2 + b*x +c
y=a∗x2+b∗x+c
1 、当 x = 0时,y = c ,即最大音量;
2 、抛物线顶点公式
(
−
b
/
2
a
,
(
4
a
c
−
b
2
)
/
4
a
)
(-b/2a,(4ac-b^2)/4a)
(−b/2a,(4ac−b2)/4a)
顶点处:
x
=
−
b
/
2
a
;
x = -b/2a;
x=−b/2a;
y
=
(
4
a
c
−
b
2
)
/
4
a
;
y = (4ac-b^2)/4a;
y=(4ac−b2)/4a;
3、由顶点公式推出
a
=
c
/
l
e
n
2
(
l
e
n
为
最
大
时
间
,
c
为
最
大
音
量
)
a = c/len^2(len为最大时间,c为最大音量)
a=c/len2(len为最大时间,c为最大音量)
b
=
−
2
c
/
l
e
n
b = -2c/len
b=−2c/len
所以
y
=
v
o
l
u
m
e
/
l
e
n
2
∗
x
2
−
2
v
o
l
u
m
e
/
l
e
n
∗
x
+
v
o
l
u
m
e
;
y =volume/len^2 * x^2 - 2volume/len * x + volume;
y=volume/len2∗x2−2volume/len∗x+volume;
2.2.2、程序
程序实现如下:
//抛物线衰减
float Voice_Curve_Para(float volume,float len,uint16_t cnt)
{
float a = (float)volume/((float)len*(float)len);
float b = - 2*(float)volume/(float)len;
float y = a*cnt*cnt + b*cnt +(float)volume;
return y;
}
2.3 、sin曲线衰减
在整个的发声的时间段内,通过6个周期的正弦波进行衰减,将小于0的值,直接翻转到第一象限。
2.3.1、公式
正弦函数的公式如下
y
=
K
s
i
n
(
w
x
+
f
i
)
y = Ksin(wx + fi)
y=Ksin(wx+fi)
周
期
T
=
2
P
I
/
w
周期T = 2PI/w
周期T=2PI/w
2
P
I
/
w
=
l
e
n
/
6
2PI/w = len/6
2PI/w=len/6
所以
w = 12PI/len
因为正弦函数在x为0时,有也为0,所以需要进行相移PI/4(2PI为一个周期),所以实际的相移为:
f
i
=
l
e
n
/
24
fi = len/24
fi=len/24
2.3.2、程序
//sin
float Voice_Curve_Sin(float volume,float len,uint16_t cnt)
{
float w,f,K;
w = 12*3.14/(len*0.001);
f = len/24;
K = Voice_Curve_Linear(volume,len,cnt);
return (fabs(K*sin(w*cnt*0.001 + f)));
}
3、单片机硬件配置
单片机硬件配置为定时器基础配置,这里不表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)