前言本片我们使用pwm输出不同频率占空比的信号来驱动喇叭,实现midi音乐播放器的demo。
pwm驱动喇叭原理pwm驱动喇叭有两种方法
一种是pwm-adc方法,即控制pwm占空比实现不同电压等级的输出,来模拟dac的输出;
一种是控制pwm频率,直接播放数字midi音乐即不同频率代表不同的音调。
我们这里采用第二种方式来实现音乐播放。
以国际标准音a-la-440hz为准:
do的频率为261.6hz,
re的频率为293.6hz,
mi的频率为329.6hz,
fa的频率为349.2hz,
sol的频率为392hz,
la的频率为440hz,
si的频率为493.8hz。
我们升一个八度则
do频率为261.6x2=523.2hz,其他的类推。
控制pwm频率就可以输出上述音调,控制pwm占空比则可对应声音的大小,播放时间长度则可对应音节时长。
以两只老虎为例
播放音乐需要三个参数
频率:beepfrep对应音调
声音大小: beepduty 占空比
播放时间: beeptime 对应节拍
简谱中可以看到
2/4拍子 4分音符一拍 每小节2拍
一分钟76拍。
于是可以定义音调和上述参数如下
do = 523re = 587mi = 659fa = 698_so = 392so = 784la = 880si = 987no = 523duty0 = 0meters = 76 #拍数76 1分钟76拍 每拍60/76秒#2/4 4分音符一拍 每小节2拍note_4 = (60/meters) #先定一拍对应的音符 4分音符note_8 = (note_4/2) # 8分音符 一个下划线note_16 = (note_8/2) # 16分音符 二个下划线beepfrep = [do,re,mi,do,do,re,mi,do,mi,fa,so,no,mi,fa,so,no,so,la,so,fa,mi,do,so,la,so,fa,mi,do,do,_so,do,no,do,_so,do,no]beepduty = [400,400,400,400,400,400,400,400,400,400,400,duty0,400,400,400,duty0,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,duty0,400,400,400,duty0,]beeptime = [note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_16,note_16,note_16,note_16,note_8,note_8,note_16,note_16,note_16,note_16,note_8,note_8,note_8,note_8,note_8,note_16,note_8,note_8,note_8,note_16,]代码完整代码如下
import timefrom machine import pin, pwmpwm = pwm(pin(21))do = 523re = 587mi = 659fa = 698_so = 392so = 784la = 880si = 987no = 523duty0 = 0meters = 76 #拍数76 1分钟76拍 每拍60/76秒#2/4 4分音符一拍 每小节2拍note_4 = (60/meters) #先定一拍对应的音符 4分音符note_8 = (note_4/2) # 8分音符 一个下划线note_16 = (note_8/2) # 16分音符 二个下划线beepfrep = [do,re,mi,do,do,re,mi,do,mi,fa,so,no,mi,fa,so,no,so,la,so,fa,mi,do,so,la,so,fa,mi,do,do,_so,do,no,do,_so,do,no]beepduty = [400,400,400,400,400,400,400,400,400,400,400,duty0,400,400,400,duty0,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,duty0,400,400,400,duty0,]beeptime = [note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_8,note_16,note_16,note_16,note_16,note_8,note_8,note_16,note_16,note_16,note_16,note_8,note_8,note_8,note_8,note_8,note_16,note_8,note_8,note_8,note_16,]while(1): for i in range(len(beepfrep)): pwm.freq(beepfrep[i]) pwm.duty_u16(beepduty[i]) time.sleep(beeptime[i])测试接上喇叭,这里使用了功放
pwm使用p21
运行程序
可以听到演奏的效果,详细见视频。
沃尔沃上不上市?要看东家吉利的决定!
电路板的工作原理与组成
企业应用SRM采购管理系统具有哪些重大意义
商汤科技助力通用人工智能基础研究和生态构建
大唐电信2011年净利润2477万元跌62%
【FireBeetle 2 ESP32-S3开发板测评】MIDI音乐播放器
HTC U11 Life评测 主攻中端市场
自动驾驶多传感器数据融合方法
鹰眼大数据智能营销怎么样,主要是干什么的
使用RTOS时问题如何检测和纠正
进行SMT贴片加工需要关注哪些要点
手持式电能质量分析仪功率测量方法
如何制作带后方向盘的遥控三轮车
贴装准确度、精密度和分辨率简介
施耐德Quantum PLC在曲轴调质热处理生产线的应用
基于主动遥感技术和匹配滤波技术的电子学系统的设计
三星s8售价曝光:大屏贵了100欧元,3月29日发布!
微控制器(MCU)由什么组成
微控制器是什么?微控制器的应用
RV蜗轮减速机电动机的优势