将原子哥 USB声实验中的PWM输出换成DAC输出后 声音有很大噪声

2019-10-16 02:09发布

将原子哥 USB声实验中的PWM输出换成DAC输出后 声音有很大噪声是什么原因,有谁遇到过吗?
改动如下代码
void TIM7_IRQHandler(void)
{                                                                   
        if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)
         {
                LED1=!LED1;
                if ((Out_Data_Offset < In_Data_Offset) && ((u8)(MUTE_DATA) == 0))
                {
                       //TIM4->CCR1=Stream_Buff[Out_Data_Offset]; //&#184;&#196;±&#228WM DACμ&#196;&#214;μ
                        DAC_SetChannel1Data(DAC_Align_8b_R, Stream_Buff[Out_Data_Offset]);
                        Out_Data_Offset++;
                }                                                                                                       
         }                                               
        TIM_ClearITPendingBit(TIM7, TIM_IT_Update  );  
}
在工程中添加 void Dac1_Init(void)
{

        GPIO_InitTypeDef GPIO_InitStructure;
        DAC_InitTypeDef DAC_InitType;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );          //ê1&#196;üPORTAí¨μàê±&#214;ó
           RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );          //ê1&#196;üDACí¨μàê±&#214;ó

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                 // &#182;&#203;&#191;ú&#197;&#228;&#214;&#195;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                  //&#196;£&#196;aê&#228;è&#235;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_4)        ;//PA.4 ê&#228;3&#246;&#184;&#223;
                                       
        DAC_InitType.DAC_Trigger=DAC_Trigger_None;         
        DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;
        DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
        DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;         
    DAC_Init(DAC_Channel_1,&DAC_InitType);         

        DAC_Cmd(DAC_Channel_1, ENABLE);  //ê1&#196;üDAC1

    DAC_SetChannel1Data(DAC_Align_8b_R, 0);   

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-10-16 06:12
你的DAC直接输出,不滤波应该都OK了。
重点检查下你的DAC输出吧。
可以上位机播放一个正弦表/三角波,然后看DAC输出,和预期差多少。
正点原子
2楼-- · 2019-10-16 07:50
 精彩回答 2  元偷偷看……
空中暗雷
3楼-- · 2019-10-16 09:45
正点原子 发表于 2016-8-13 18:52
输出正弦波,看下PWM输出滤波后的波形。

第一次发帖就得到原子哥回复,好感动. 还有点不明白,我是改成DAC输出的,为什么躁音会比PWM输出的大呢,还有如何用PWM功能输出正弦波?
正点原子
4楼-- · 2019-10-16 12:09
空中暗雷 发表于 2016-8-15 10:52
第一次发帖就得到原子哥回复,好感动. 还有点不明白,我是改成DAC输出的,为什么躁音会比PWM输出的大呢 ...

DAC输出滤波了么?
PWM输出都是经过滤波来实现电压转换的.

空中暗雷
5楼-- · 2019-10-16 16:31
正点原子 发表于 2016-8-17 22:05
DAC输出滤波了么?
PWM输出都是经过滤波来实现电压转换的.

DAC输出我是照这个图片接的滤波电路,由于没有102的电容,用150的电容代替的,经过二级滤波后,接耳机 声音变小很多,接功放后杂音还是很大.不知道什么原因影起的。 还有个问题一直想不明白,你的USB声实验中定时中断是22Khz的,见下代码
void TIM7_IRQHandler(void)
{                                                                   
        if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
         {
                LED1=!LED1;
                if ((Out_Data_Offset < In_Data_Offset) && ((u8)(MUTE_DATA) == 0))
                {
                        TIM4->CCR1=Stream_Buff[Out_Data_Offset]; //改变PWM DAC的值
                        Out_Data_Offset++;
                }                                                                                                       
         }                                               
        TIM_ClearITPendingBit(TIM7, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
}
如何保证 Out_Data_Offset 永远比In_Data_Offset小,如果USB发送数据快一点或慢一点会不会影响音效?最近老在纠结这个问题,希望原子哥帮忙解答下.
空中暗雷
6楼-- · 2019-10-16 20:57
正点原子 发表于 2016-8-24 23:20
你的DAC直接输出,不滤波应该都OK了。
重点检查下你的DAC输出吧。
可以上位机播放一个正弦表/三角波,然 ...

谢谢原子哥,我又用公司的示波器试了下PWM输出正弦波后经过二阶滤波效果很好,USB声卡输出信号放大后噪音大是我放大器的问题.

一周热门 更多>