完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F103VCT6 用DAC通道1的直接输出wav音频数据后,出现破音现象。在DAC引脚输出后,经过两级无源低通滤波(截止频率10k),一级有源低通滤波(截止频率10k),再接功放电路。
贴上代码 //dac初始化 void DAC_Configuartion(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); //??TX PIN??? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PA4 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // GPIO_Mode_AIN GPIO_Init(GPIOA, &GPIO_InitStructure); DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;//DAC_Trigger_Software; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits8_0;//DAC_LFSRUnmask_Bit0; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_1, &DAC_InitStructure); DAC_Cmd(DAC_Channel_1, ENABLE); //DAC_SetChannel1Data(DAC_Align_12b_R,4000/*0x0000*/); //DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); } void TIM_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3;//PA0,PA1,PA2,PA3 //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//????????? //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 125;//GetARRValue(8000);//80; TIM_TimeBaseStructure.TIM_Prescaler = 71;//0;//; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);// TIM_ClearITPendingBit(TIM6, TIM_IT_Update); //Çå3y¸üDÂÖD¶Ï±êÖ¾ // TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); //éèÖøúDÂê¼t TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); //ê1Äüdma } void TIM6_IRQHandler(void) { if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) { } if(0 == is_finish) { DAC_SetChannel1Data(DAC_Align_12b_R, (((u8)(p_test1[a1+1]-0x80)<<4)|(p_test1[a1]>>4))); DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); a1 += 2; if(a1 >= 320) { a1 = 0; is_finish = 1; } } TIM_ClearITPendingBit(TIM6, TIM_IT_Update); } 软件调试过程,各段频率多试过。。出现结果语音播放快慢。 dac 波形输出波形,三角波,方波,及其附带参数也调过。。 没多大用。 硬件方面,增加各种滤波,用示波器看可以看出波形比较圆滑。 经过以上调试,输出音质还是不行,没有杂音,出现破音现象。。。 求各路大神解。。。。。 |
|
相关推荐
12个回答
|
|
喇叭是没问题的,我把功放电路接到一个MTK DAC输出音频是没有出现破音的,但是我接到STM32 DAC输出音频就出现这个问题了,附件是STM32 DAC引脚输出其中一段的波形 |
|
|
|
喇叭是没问题的,我把功放电路接到一个MTK DAC输出音频是没有出现破音的,但是我接到STM32 DAC输出音频就出现这个问题了,附件是STM32 DAC引脚输出其中一段的波形
|
|
|
|
|
|
|
|
原始波形不是很正常,但是已经有语音出来了,我通过硬件低通滤波,破音这个现象还是没有办法消除,功放的比例没有调整过。这通过软件或者硬件怎么让它正常,不出现破音? |
|
|
|
会偶一笑 发表于 2016-9-2 09:45 你这个原始波形就有问题的话,你通过功放放大,就把缺陷放大了啊.你的破音有可能来源自这里 |
|
|
|
软件方面现在就只能调成这样的波形了,硬件有没有什么好的方法把它弄好? |
|
|
|
你的STM32的DAC是自己画的板么,我觉得你还是应该先处理好芯片出来的波形,是不是STM32芯片电路设计有问题?不至于你说的波形不好 |
|
|
|
是自己画的板,用STM32内置的DAC,我们通过软件调出来这个就是比较好的波形了,现在软件也不知道怎么调了,硬件我就是用低通滤波让波形平滑而言,现在还没找到具体原因是什么导致的。我这里有DAC原始输出的波形和一阶低通滤波后的波形
|
|
|
|
楼主还有源代码吗?
|
|
|
|
某宝上有类似的开发板,关键词“STM32 DAC语音”找找
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
253 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
806 浏览 2 评论
1991 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1095 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1520 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 01:27 , Processed in 0.826186 second(s), Total 72, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号