OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5548|回复: 9

求助,USB MIC ADC采集后能够传输正常的数据,但是声音波形不对

[复制链接]

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
发表于 2016-6-23 22:02:52 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 xavierchen 于 2016-6-23 22:06 编辑

看到论坛中做的USB 收音机非常不错,非常感谢大牛的分享,自己想研究研究,遇到了问题。
使用了定时器中断来采集ADC,采用了16k的采样周期。
USB通信也没有了问题,但是采集到的声音通过GoldWave查看波形,发现只有一半的波形,另外一半消失了。
感觉可能的问题是:
(1)转换的问题,12bit的采集转换到PCM
(2)可能还有些地方设置不对,如果是USB的设置不对,不会采集到正确的声音。
声音波形如下:(有比较大的噪音因为mic附近有一个服务器)
wave.jpg

附上中断处理的函数:
[mw_shl_code=c,true]//¶¨ê±Æ÷3ÖD¶Ï·tÎñ3ìDò
void TIM3_IRQHandler(void)   //TIM3ÖD¶Ï
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //¼ì2éTIM3¸üDÂÖD¶Ï·¢éúóë·ñ
                {
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //Çå3yTIMx¸üDÂÖD¶Ï±êÖ¾
               
                //printf(".");
                        
                //ADCvalue=((ADC_GetConversionValue(ADC1)<<4));
                //ADCvalue=(uint8_t)(ADC_GetConversionValue(ADC1)>>4);                                        //ADC&#187;&#241;è&#161;&#214;μPA1£&#172;12bit\4096\FFFH
                //TIM_SetCompare3(TIM4, (uint8_t)(ADCvalue>>4));        //TIM4OC3\PB82¥·&#197WM£&#172;12&#206;&#187;×a8&#206;&#187;£¨2aê&#212;&#214;±&#189;ó2é&#209;ù2¢2¥·&#197;£&#169;



                        if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ))
                                ADCvalue = ADC_GetConversionValue(ADC1);
                        else
                                ADCvalue = 0x0800;
                        
               
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_71Cycles5);        //ADC2é&#209;ùê±&#188;&#228;£¨71.5+12.5)/(72/6)=7us , audio2¥·&#197;&#194;ê 16K=62.5us&#161;¢32K=31.25us
                        ADC_SoftwareStartConvCmd(ADC1, ENABLE);

                        
                        
                        if (tag_buff==0)
                        {
                                Stream_Buff_0[buff_Offset*2+1]=(uint8_t)(ADCvalue>>8);
                                Stream_Buff_0[(buff_Offset*2)]=(uint8_t)(ADCvalue&0x00ff);
                                if (buff_Offset==15)
                                {
                                        tag_buff=1;
                                        buff_Offset=0;
                                }
                                else
                                        buff_Offset++;                        
                        }
                        else
                        {
                                Stream_Buff_1[buff_Offset*2+1]=(uint8_t)(ADCvalue>>8);
                                Stream_Buff_1[(buff_Offset*2)]=(uint8_t)(ADCvalue&0x00ff);
                                if (buff_Offset==15)
                                {
                                        tag_buff=0;
                                        buff_Offset=0;
                                }
                                else
                                        buff_Offset++;        
                        }  

                }
}
[/mw_shl_code]

希望大神帮助
另外,如何实现多声道多通道的采集,请大神指点迷津。。

最佳答案

查看完整内容[请看2#楼]

已经解决了,是我没开启AD中断的原因,好像是要使用DMA中断必须开启AD中断,我用的CUBE库
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
发表于 2016-6-23 22:02:53 | 显示全部楼层
xavierchen 发表于 2016-7-21 20:04
这个还真不太了解,USB库的话,需要看看,里面东西还需要了解。另外,如果你用st的方案的话,可能自己要 ...

已经解决了,是我没开启AD中断的原因,好像是要使用DMA中断必须开启AD中断,我用的CUBE库
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
 楼主| 发表于 2016-6-24 11:47:20 | 显示全部楼层
有那位帮帮不??
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
 楼主| 发表于 2016-6-26 11:06:13 | 显示全部楼层
单声道的基本搞定了,问题出现在ADC和DMA中。
现在开始搞双声道,但是问题就出来了。
usb audio的USB描述琢磨着该的,应该声道的数据传输是没有问题的,但是发现录音的声音不给力,噪声大,而且还会自己增加。
(1)哪位介绍一下ADC采样的数值抓换成PCM数据的方法
(2)另外就是103的USB速度是否能够采集多路
(3)附上我的图,大家讨论讨论看看问题。
(4)我使用的方法就是定时器按照16k的速度不断的采样完成数据拼装,然后usb发送的EP1in不断的发送数据,这个是否会有问题?
mic1.jpg
mic2.jpg

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-7-2 23:44:14 | 显示全部楼层
xavierchen 发表于 2016-6-26 11:06
单声道的基本搞定了,问题出现在ADC和DMA中。
现在开始搞双声道,但是问题就出来了。
usb audio的USB描述 ...

继续努力
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
 楼主| 发表于 2016-7-3 14:08:20 | 显示全部楼层

这个帖子好像发错了,用的是103,现在两路的mic已经完美,4路的也没有什么大问题,6路的话mic的波束成形算法有点儿复杂,4路OK,声音加强完全没有问题。谢支持!!
回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
发表于 2016-7-21 14:57:45 | 显示全部楼层
xavierchen 发表于 2016-7-3 14:08
这个帖子好像发错了,用的是103,现在两路的mic已经完美,4路的也没有什么大问题,6路的话mic的波束成形 ...

你好我用的是ADC采集后DMA传输然后写U盘,但是不知道为什么一直失败,好像DMA中断和USB的process函数有冲突是吗?请问您当时的问题是什么
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
 楼主| 发表于 2016-7-21 20:04:05 | 显示全部楼层
mengheli 发表于 2016-7-21 14:57
你好我用的是ADC采集后DMA传输然后写U盘,但是不知道为什么一直失败,好像DMA中断和USB的process函数有冲 ...

这个还真不太了解,USB库的话,需要看看,里面东西还需要了解。另外,如果你用st的方案的话,可能自己要做的比较多,可以看看别的方案。
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
 楼主| 发表于 2016-7-22 23:04:00 | 显示全部楼层
mengheli 发表于 2016-7-21 22:50
已经解决了,是我没开启AD中断的原因,好像是要使用DMA中断必须开启AD中断,我用的CUBE库

恭喜,恭喜,加油,加油
回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
发表于 2016-7-24 13:54:26 | 显示全部楼层
xavierchen 发表于 2016-7-22 23:04
恭喜,恭喜,加油,加油

非常感谢您的帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 20:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表