PCM音频输出,实际是一个DA转换的过程。而PWM接口输出端接RC滤波电路,不同的PWM占空比可以设定RC电路后端能输出不同的电压。 例如,PCM的格式为22050Hz采样率,16bit采样精度,单声道,无数据类型。则要求PWM输出较高频率的载波(频率超高,RC越容易过滤,能量分布越均匀),每隔1/22050=45us切换一次占空比,占空比的精度同样16bit或以上,即可完整的播放出声音。 由于PWM为数位电路,有数位限制。sv6x66芯片最大12bit 占空比精度,并随着频率的增大,精度的位数会下降: PWM频率 = 总线时钟 /占空比范围 例如总线时钟80M,当占空比精度位8bit时,PWM最大频率313.725KHz 1. 播报机PWM播放实例SDK地址:repo/tiramisu/turismo/sdk/dev/SSV.tiramisu.6x66.18Q4_announcer R991版本 1、申请FiFo,用于helix与PWM的数据通信
2、初始化PWM与定时器
3、定时器每隔45us从Fifo中读出数据,如果有数据,则修改占空比
4、解码器输出数据处理 a) 由于PWM使用8bit精度,而MP3解码后是16bit精度,所以右移8位,去掉低位数据 b) 由于MP3解出来的精度带符号的,所以需要+128,让所有数据转换为正数 c) 当需要调整音量时,可以按比例调整outBuf的值,然后再右移与+128 d) 注意duty不要超过255或小于0
2. 实测效果编译固件make clean;make setup p=announcer;make 目前使用GPIO 02为PWM输出,GPIO 01控制PA开关 输入:AT+PLAY_AMOUNT1000000可以听到"xxxxx"
|