采用adalp2000套件制作的音频信号采集前端电路
麦克风采集音频信号放大后输出,同时使用单片机打印采集到的音频信号波形到电脑端显示。
标签
模拟电路
音频前端
AD7920
qewtry
更新2023-03-21
354

一.项目介绍:

      FgF-RJxDMVfAev5lTAXYngqUg-BM

        这是一块音频前置放大电路,采用了麦克风作为信号输入,用一片低噪声四运放对音频信号进行放大滤波,音频信号的输出默认为功放电路,在接入音频头的时候自动切换到3.5mm音频座输出。左上角51单片机的作用是驱动AD7920将放大后的音频信号转为数字信号,并发送到串口工具Vofa+显示。受单片机和串口工具的限制连续采集模式最高采样率只能达到15KHz,缓存模式采样率可以达到96KHz,但会丢失一部分波形。

二.设计思路:

         从ADALP2000套件中选取麦克风作为信号输入源,电路图如下:

Fj5UHPTD7P0BYmlyQBj_jPCikFQn

 

        图1:麦克风驱动电路

        其功能是拾取声音转换为电信号并进行音频放大。麦克风内部包含有一个场效应管作放大用,可以将震动引起的微弱电流放大,灵敏度较高。图1中以V1代替,V2为5V供电电源与电阻R1,R2,R4,R5共同给麦克风提供合适的偏置电压。C1,C22,C23可以滤除电路中的共模差模干扰,信号从C2,C3隔直后给到后续电路。

        Fv6NhymeTwHt2iyQhrsrPbCl7lvX

      图2:一级放大

       麦克风产生的正负差分信号给到第一级放大电路;放大倍数由R18/R3决定。R18可以改成50K电位器,调节电位器可以调节放大倍数。R19,R20可以为电路提供2.5V的电压偏置,以达到最大测量动态范围,这两个电阻不宜过大,不然会产生噪声,为了降低电阻产生的噪声加入C13滤波。下半部分电路与以上同理。

FiVLAKXzyYLdjg1dF-7EISg7HqN_

图3:第二级是差分放大电路

      第二级放大电路的作用是将前面的差分信号重新合并为单端信号, 放大倍数由R11,R24,R9,R25决定。采用以上一二级电路结构的目的是为了降低信号噪声,按实际搭建电路测试情况看这种接法确实比单端放大噪声小很多。

FsfGcjWbIkXvkP9rqYkUNujJGeRq

 

      图4:滤波电路

        放大后的信号经过C5,R13,R14,C7滤波,滤波频率按照高通100Hz,低通16KHz设计。这里的U2为跟随器不做放大,R15,R16提供2.5V偏置电压。

FkaY4I3Wrjw5TyE3PCtHKDycMFBQ

图5:输出电路

        经过放大的信号经过R33,C21滤波后给到AD7920输入端,此处RC滤波器做抗混叠滤波器用,频率设计16KHz,AD7920的采样率为96K,应付16KHz以内的信号足够了,也不会产生混叠。信号切换电路:采用了一个P型,一个N型MOS设计为互斥输出。由于官方提供的MOS管ZVP2210 ,ZVN3310的导通电压较高,增加C14,R10,R12偏置电路,给Pmos提供一个合适的电压范围。电路中R30,R26可以换成电位器,用来调节输出信号幅值。开关信号由V4代替,实际电路中开关信号脚接到3.5mm音频接口的4号引脚,该引脚在接入音频头的时候会被拉到地。

FmrV5B46AG4WOvZoP7yfc_aVJepg

图6:输出电路

       功放电路如图6,增益由R2,R1决定,W1可以调节声音大小。

 

三.仿真:

      FtwI1ZuY8p687OsdiE27MdwWPmRe   

图7:仿真结果

        如图7,电路增益51dB,在100Hz和16KHz的衰减为3dB满足要求带通滤波要求。切换电路也可以正常工作。

四.波形显示:

         波形显示部分采用EFM8单片机驱动AD7920采集放大后的音频信号,再通过串口发送到PC端VOFA+显示方案。为达到更高的采样率,做了两处优化:1.将SPI和UART通讯时序进行穿插,在UART发送间隙启动SPI时序;2. int型数据改为数组形式,节约数据处理时间。关键代码如下:

        {

       ad7920_cs = 0;                             //
       SPI0DAT = 0x00;                            ////
       putchar(arr[1]);
       while (!SPI0CN0_SPIF);                     //
       SPI0CN0_SPIF = 0;                          //
       temp = 0;                                  //
       temp = SPI0DAT;                            //
       main_count[(eo+1)%2] += temp * 256;        //
       putchar(arr[2]);
       SPI0DAT = 0x00;                            ////
       putchar(arr[3]);
       while (!SPI0CN0_SPIF);                     //
       SPI0CN0_SPIF = 0;                          //
       ad7920_cs = 1;                             //
       putchar(0x0A);
       delay_us(1);
       temp = 0;                                  //
       temp = SPI0DAT;                            //
       main_count[(eo+1)%2] += temp;              //
       main_count[(eo+1)%2] -= 1500;              //
              //arr[0]=main_count[eo%2]/1000+0x30;
              main_count[eo%2] = main_count[eo%2]%1000;
              //putchar(arr[0]);
              arr[1]=main_count[eo%2]/100+0x30;
              main_count[eo%2] = main_count[eo%2]%100;
              arr[2]=main_count[eo%2]/10+0x30;
              main_count[eo%2] = main_count[eo%2]%10;
              arr[3] = main_count[eo%2]%10+0x30;
        eo++;
        }

五.遇到的问题:

        遇到的问题有两方面:噪声采样率

        噪声问题:一开始采用单端放大方案,面包板搭建电路。但是在接上喇叭后发现有较大噪声,拔掉麦克风后噪声略有减小,说明电源与放大电路都存在噪声;

       然后转为洞洞板焊接,电源噪声得到改善。但是接上麦克风噪声依旧,更换电路运放发现精密运放效果优于通用型运放,噪声进一步改善。为了追求更高的信噪比,将信号源改为差分接法,排除零点漂移影响。

        采样率问题:

        51单片机性能限制,SPI跑满4M,UART最高2M,且只能单线程工作。多次调整通讯时序,数据处理方式,实时采样频率也只能做到15KHz;这意味着3KHz-16KHz的信号会出现失真和混叠的问题;

FtjBu56xraYSOmLAXzSLLHUCmbY0

       图8:混叠

       连续采样模式采样频率为15KHz,由定理可知被测频率超过7.5KHz的时候出现混叠失真。如图8:音频信号12KHz的波形和3.3KHz的波形,频率基本一致符出现混叠失真。但该频率仍为有效信号,采用滤波电路只会将有效信号一并过滤,所以不可取。唯一的解决办法是提高采样频率。

      为解决该问题,引入缓存模式,即采集一段时间数据(51单片机内存有限,此处只能存储40个数据),然后一次输出。连续模式用于100Hz-3KHz的信号,缓存模式用于3KHz--16KHz的信号。       Fnf8DfeYHYYuU3oUOPi4xOV6lkWZ

      图9:提高采样率

       如图9;采样率提高到96KHz后可以将3.3KHz和12KHz的信号明显区分开,但由于单片机缓存、上位机打印速率限制波形会有丢失问题,看起来比较奇怪。

       缓存模式代码如下:

else if(count_flag==1)
    {

          if(count<=arr_count)
          {
           ad7920_cs = 0;
           main_count[count] = 0;

           SPI0DAT = 0x00;
           temp = 0;
           while (!SPI0CN0_SPIF)
             ;
           SPI0CN0_SPIF = 0;
           temp = SPI0DAT;
           main_count[count] += temp * 256;
           SPI0DAT = 0x00;
           temp = 0;
           while (!SPI0CN0_SPIF)
             ;
           SPI0CN0_SPIF = 0;
           temp = SPI0DAT;
           main_count[count] += temp;
           ad7920_cs = 1;
           count++;
           ad7920_cs = 1;ad7920_cs = 1;ad7920_cs = 1;ad7920_cs = 1;ad7920_cs = 1;
            }
          else
            {
              count_flag=2;
              count=0;
            }
    }
      else if(count_flag==2)
         {
           if(count<arr_count)
             {
               printf ("%d\n", main_count[count]-1500);
               count++;
             }
           else{count=0;count_flag=1;}
         }

六.优化方向:

       1.在测试过程中发现不同的喇叭频率特性不同,ADALP2000配件中的喇叭在高频和人声部分表现都不错。但在高频时候容易出现破音,所以还需要根据喇叭特性对前面电路参数进行微调。

       2.采样率:现有系统的瓶颈在串口上位机软件,最高只能跑到2MHz,且在发完一次数据后需要延时几十uS,如果去掉延时,误码率会上升很多。后续可增加一块显示屏来显示波形。

       3.输入信号范围为0.1mV-1V,现有电路可以通过调节反馈电阻的大小改变放大倍数,使得信号不会出现饱和失真。后续可以增加MOS开关,单片机通过读取AD值来判断放大倍数,做到自动切换量程。

软硬件
电路图
附件下载
Draft9.asc
LTSPICE图
mic.zip
EFM8工程
团队介绍
长草的小破号
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号