将原子哥 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]; //¸Ä±ä
WM DACμÄÖμ
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ÄüPORTAí¨μàê±Öó
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); //ê1ÄüDACí¨μàê±Öó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // ¶Ë¿úÅäÖÃ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //Ä£Äaêäèë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_4) ;//PA.4 êä3ö¸ß
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ÄüDAC1
DAC_SetChannel1Data(DAC_Align_8b_R, 0);
}
重点检查下你的DAC输出吧。
可以上位机播放一个正弦表/三角波,然后看DAC输出,和预期差多少。
第一次发帖就得到原子哥回复,好感动. 还有点不明白,我是改成DAC输出的,为什么躁音会比PWM输出的大呢,还有如何用PWM功能输出正弦波?
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发送数据快一点或慢一点会不会影响音效?最近老在纠结这个问题,希望原子哥帮忙解答下.
谢谢原子哥,我又用公司的示波器试了下PWM输出正弦波后经过二阶滤波效果很好,USB声卡输出信号放大后噪音大是我放大器的问题.
一周热门 更多>