最近工作太忙了,天天加班到凌晨,项目虽然早就完成了,但是一直没时间写成果贴,今天趁着周末,赶紧结项,不然又要被管理员催了,上班被研发助理催进度,下班被管理员催进度,最近工作真的是太忙了,果断时间忙完,也来写几篇工作总结,来供大家参考案例,
一、 项目介绍
本项目是一个基于STM32F103芯片开发的一款娱乐电子鼓,主要实现是通过六个触摸金属纸加上触摸芯片对应六个按键输入,MCU通过判断不同的按键触发,发出不同的声音,声音是采集真实的架子鼓的声音,通过Adobe Audition 软件进行截取每一个鼓点的声音,通过python脚本转换成二进制,然后存储到数组里面,从而使用MCU控制音频驱动使喇叭发出对应的声音,大鹏老师给我们准备了三种实现方式,直接DAC、PWM_DAC和R/2R_DAC,体验效果当然是DAC直接输出最简单,R/2R_DAC实现最复杂,R/2R使用了16路,可以实现电压的2的16次方,也就是65536种电压变化,极大的提高了音质。供电使用了锂电池供电,使用苹果最新使用的typeC充电接口。
二、硬件设计
大鹏老师和师兄们介绍的都非常详细了,我在这里就不再进行过度多的叙述了,我主要讲一些我理解的R/2R_DAC设计及其原理,方便大家以后的学习使用,刚开始接触我同样是很疑惑,学习之后发现真的很神奇。
DAC(Digital to Analog Converter)是将数字信号变换为模拟信号的器件,在数字电路中得到广泛应用。数字电路中使用数字信号处理数据,可以使电路获得更高的抗干扰能力,同时数据处理方法也更加灵活,但在信号的输入和输出端,反馈信号与被控对象控制量仍然可能是模拟信号,模拟输入量可以通过ADC(Analog to Digital Converter)变换为数字信号,在信号输出端使用DAC将数字信号还原为模拟信号。STM32单片机自带DAC输出,但只有12位的数字输出,也就是说电压最多只有4096种变化,这对于一般控制当然是足够,但对于音频控制,就有点不足了,所以就使用了R/2R的方式。
R2R电阻网络DAC是单纯的电阻网络,不需要运放的辅助,一个n位的R2R电阻网络DAC需要n-1个R电阻和n+1个2R电阻,只需要两种阻值,方便手工制作,在精度要求不高的应用中,可以直接使用电阻搭建,避免使用集成DAC,从而降低成本。
如图为16bit的R2R电阻网络DAC的原理图,这个电路最神奇的地方在于,无论从哪个位置断开,向内看阻抗均为R。输出阻抗固定为R,由于输出阻抗恒定且容易计算,因此在输出做阻抗匹配时候比较方便。
D0的值可以为0或Vref,Vout的值就是0或者Vref/2,输出阻抗为两个电阻的并联值,即一倍的R,可以将两个电阻等效为1个,输出表达式为D0*Vref/2.等效为一个电压源连接一个输出阻抗的结构,这个等效方法,以后会详细分析,我给它命名为匠人电路等效定理(无耻的样子很有我当年的神韵),可以将上面的8bitDAC反复等效,最终得到输出表达式。加入第二个有效位D1以后,又出现了两个2R电阻分压,输出等效为D0*Vref/4+D1*Vref/2,如此一直将8bit的网络简化到一个电压源和一个电阻,表达式为D0*Vref/256+D1*Vref/128+D2*Vref/64+D3*Vref/32+D4*Vref/16+D5*Vref/8+D6*Vref/4+D7*Vref/2。如此每一位都发挥了有效的位权,输出电压有256种变化。这种DAC电路可以在的精度要求时直接用单片机引脚驱动。
三、成品展示
四、视频演示
视频演示放到了B站上面,点击可进行直接跳转,目前是每一个按键对应了一个鼓点,很遗憾是没有完整的演奏一首完整的音乐,奈何手太笨了,完全没有音乐基础,尝试学习了一下被劝退了,以后有时间再慢慢练习一首完成的音乐上传,大家尽情期待吧。
五、总结
通过这次活动确实学到了挺多的东西,更加熟悉可hal库的使用方法,了解到了音频控制的原理及使用,并没有那么难,以后有时间更多的音频小玩具出来玩。唯一的遗憾是最近半个月时间太忙了,还没有完全吸收大鹏老师的知识,就要急着结束了本次活动,真的很感谢大鹏老师,希望以后能多多交流。