蜂鸣器声音优化

1、优化思路

蜂鸣器的控制,在单片机领域,大多数人都是给一定周期的脉冲,蜂鸣器就会发出声音,而本质上,蜂鸣器只是一个金属弹片,声音大小取决于弹片的幅值,而幅值取决于施加的电压大小。电压大小可以使用PWM进行控制,所以这里跟电机的控制一样,可以使用SVPWM进行调制。一个调制频率一个运行频率。在蜂鸣器弹片的发声时间宽度内,用调制频率下PWM波形进行驱动。但是用这种方式,需要使用两个定时器,并进行串联。这种方式会多耗费一个定时器资源。

还有一种方式,是直接使用PWM波形进行驱动,脉宽控制电压,周期控制声音频率,这种方式程序实现更简洁,对硬件资源也更友好,但是有两个缺点,第一,就是声音的大小控制不线性(SVPWM是否线性,未验证)。第二,在低频率段比较生硬,工作在较高音频下效果比较好。

本文采用第二种方式实现蜂鸣器的声音优化,加上强弱控制,颤音控制。

2、强弱控制算法

2.1、 线性衰减

2.1.1、公式

y=ax+by = 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∗x2+b∗x+cy = a*x^2 + b*x +c y=a∗x2+b∗x+c
1 、当 x = 0时,y = c ,即最大音量;

2 、抛物线顶点公式

(−b/2a,(4ac−b2)/4a)(-b/2a,(4ac-b^2)/4a) (−b/2a,(4ac−b2)/4a)
顶点处:

x=−b/2a;x = -b/2a; x=−b/2a;

y=(4ac−b2)/4a;y = (4ac-b^2)/4a; y=(4ac−b2)/4a;
3、由顶点公式推出

a=c/len2(len为最大时间,c为最大音量)a = c/len^2(len为最大时间,c为最大音量) a=c/len2(len为最大时间,c为最大音量)

b=−2c/lenb = -2c/len b=−2c/len
所以

y=volume/len2∗x2−2volume/len∗x+volume;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=Ksin(wx+fi)y = Ksin(wx + fi) y=Ksin(wx+fi)

周期T=2PI/w周期T = 2PI/w 周期T=2PI/w

2PI/w=len/62PI/w = len/6 2PI/w=len/6
所以

w = 12PI/len

因为正弦函数在x为0时,有也为0,所以需要进行相移PI/4(2PI为一个周期),所以实际的相移为:

fi=len/24fi = 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、单片机硬件配置

单片机硬件配置为定时器基础配置,这里不表。

单片机如何发出类似和弦的声音相关推荐

  1. LP-630K打印机无法插入放发票或纸张,只要一碰到就发出滴滴滴滴的声音的解决方法

    原文地址为: LP-630K打印机无法插入放发票或纸张,只要一碰到就发出滴滴滴滴的声音的解决方法 以今天公司财务开发票时出现:LP-630K打印机无法插入放发票或纸张,只要一碰到就发出滴滴滴滴的声音为 ...

  2. 用计算机弹出黑人才关的声音,计算机突然变黑,风扇发出很大的声音?

    突然屏幕变黑并且声音很大.这可能是由于内存和图形卡造成的: (1)这可能是图形卡风扇的问题,该问题导致图形卡加热得太高而无法冷却,从而导致图形卡崩溃和黑屏. (2)处理方法:关闭电源,打开主机,卸下图 ...

  3. 联想拯救者R720 加内存条组成双通道图解教程(遇到了意外:开不了机、发出滴答滴答的声音)

    首先,购买与原装内存条频率.电压一样的内存. 我买的是金士顿的DDR4 2400Hz的. 找一把螺丝刀,去掉后盖的螺丝. 去完之后,找一张银行卡,把后盖撬开. 如下图 然后,去洗手,去除静电. 去掉小 ...

  4. 计算机主机发出滴滴声音,电脑开机没有显示出主机一直发出滴滴滴的声音

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:电脑开机没有显示出主机一直发出滴滴滴的声音屏幕没显示出 问题详情:电脑开机没有显示出主机一直发出滴滴滴的声音屏幕没显示出来有回答:1 ...

  5. 碰到了开机启动笔记本 发出嘀嘀嘀...的声音的问题之后

    这周一,我下班回家打开电脑,不再是以前那样直接登录,而是停留在选择操作系统界面,没关系,可能是我上次关机不正确,回车之后就一开始加载操作系统就莫名其妙的发出嘀嘀嘀的声音,这一个过程大概持续了30秒.我 ...

  6. 【为什么电脑进入系统卡卡的,开机进入BIOS黑屏,点击键会发出嘟嘟嘟的声音】

    首先我们一步一步分析问题: 1.先检查显示器与主机的接线是否可以正常使用. 2.你可能把显示器接到了集成显卡上面了,独立显卡的性能要比集成显卡的性能强大很多,所以会感觉进入系统不太流畅,感觉卡卡的,开 ...

  7. 笔记本电脑风扇声音大怎么办_车子才开几年发动机就发出哒哒哒的声音怎么办?不一定是大问题_搜狐汽车...

    当一些老爷车怠速运转的时候,如果环境比较安静的话,不难听到发动机发出的持续不断的"哒哒哒"声.有些汽车会发出很大的噪音,如果你问一些所谓的"老司机",他们可能会 ...

  8. 如何用单片机写出类似printf的函数

    实现功能:stm32用类似printf的函数,通过串口发送数据. 首先,让我们在qt中用C语言模拟串口输出(用printf("%c",ch)代替void USART_SendDat ...

  9. 计算机开机后嘟嘟响,笔记本电脑发出嘟嘟嘟的声音

    撕扯罒丶 回答数:127  |  被采纳数:101 2017-07-18 13:55:11 一般都是内存接触不好.会长时间发出嘟嘟的长音.如果是电脑实在用了很久了,建议把内存拿下来,再用橡皮擦好好的擦 ...

最新文章

  1. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) B. Little Artem and Grasshopper 模拟题...
  2. 一打在2019年亮相的迷人科技项目:飞行汽车、子弹头列车、登月、……
  3. 分栏报表-物品清单报表实现
  4. Bit,Byte,Word,Dword,Qword
  5. WAMP_DEDE兼容配置
  6. Flask实战1-轻博客
  7. python自动安装apk文件
  8. pjsip php,VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP
  9. oracle表压缩比,oracle的compress 特性介绍
  10. 复杂电网三相短路计算的matlab仿真,复杂电网三相短路计算的MATLAB仿真电力系统分析课设报告 - 图文...
  11. snmp 获得硬件信息_计算机网络基础课程—简单网络管理协议(SNMP)
  12. Eclipse之Project facet Java version 1.8 is not supported.
  13. LINUX 文件夹打包
  14. 剑指 offer set 8 树的子结构
  15. C语言数据类型大小分析(基于VC2005编译器)
  16. 响应式餐饮牛杂小吃类网站源码 dedecms织梦模板 (带手机端)
  17. 科大讯飞AIUI评估板开发笔记
  18. java模拟键盘按键
  19. 先验概率、后验概率以及共轭先验
  20. 1.23 定语从句 感叹句

热门文章

  1. 12v电量显示制作方法_由分立器件设计的汽车12V电池电量指示器(上) | 电子懒人的基础硬件电路图讲解...
  2. FPGA 处理视频SDRAM带宽计算(四画面视频分割器 4K@30输出)
  3. 生信技能9 - 生物信息分析必须掌握的生物学基本概念(建议收藏)
  4. 当图片404时显示默认图片
  5. 2020年度 个人随笔
  6. AngularJS 精妙绝伦的控制器
  7. 安装Python包,网络不可达解决方法
  8. 对归并排序的浅薄理解
  9. 瑞萨,尝试flash刷写代码放到ram中,OK
  10. python中列表(list)的基本操作