微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32 DAC 音频音质不清晰求解

STM32 DAC 音频音质不清晰求解

时间:10-02 整理:3721RD 点击:
  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 波形输出波形,三角波,方波,及其附带参数也调过。 没多大用。
硬件方面,增加各种滤波,用示波器看可以看出波形比较圆滑。
经过以上调试,输出音质还是不行,没有杂音,出现破音现象。
求各路大神解。

波形没有失真?或者喇叭的问题

喇叭是没问题的,我把功放电路接到一个MTK DAC输出音频是没有出现破音的,但是我接到STM32 DAC输出音频就出现这个问题了,附件是STM32 DAC引脚输出其中一段的波形

喇叭是没问题的,我把功放电路接到一个MTK DAC输出音频是没有出现破音的,但是我接到STM32 DAC输出音频就出现这个问题了,附件是STM32 DAC引脚输出其中一段的波形


你的STM32的原始输出波形正常么?功放的放大比例调整过?

谢谢小编啊  谢谢小编啊

原始波形不是很正常,但是已经有语音出来了,我通过硬件低通滤波,破音这个现象还是没有办法消除,功放的比例没有调整过。这通过软件或者硬件怎么让它正常,不出现破音?

你这个原始波形就有问题的话,你通过功放放大,就把缺陷放大了啊.你的破音有可能来源自这里

软件方面现在就只能调成这样的波形了,硬件有没有什么好的方法把它弄好?

你的STM32的DAC是自己画的板么,我觉得你还是应该先处理好芯片出来的波形,是不是STM32芯片电路设计有问题?不至于你说的波形不好

是自己画的板,用STM32内置的DAC,我们通过软件调出来这个就是比较好的波形了,现在软件也不知道怎么调了,硬件我就是用低通滤波让波形平滑而言,现在还没找到具体原因是什么导致的。我这里有DAC原始输出的波形和一阶低通滤波后的波形



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top