模拟电路前端工程化第1部分项目:设计一款音频信号采集前端电路
1.设计思路和相关知识点介绍 2.需要用到的硬件和软件实现过程介绍
标签
嵌入式系统
测试
Titan
更新2023-06-30
640

.项目介绍  

1.项目要求介绍

音频信号采集前端电路的目的是:在如下特征的音频信号输入时,采用带通滤波器,以保证后端ADC:AD7920能进行正确的信号采集。

1)信号幅度:0.1mVpp到1Vpp
2)信号频率:100Hz到16KHz
3)搭建一个带通滤波器,滤除高频和低频部分

2.项目要求分解以及硬件实现过程: 

1. 音频信号源的硬件设置

a. 根据AD7920的SPEC,AD7920的供电电压是 2.35 V to 5.25 V,模拟输入为-0.3V~Vdd+0.3V,由此需要提前准备前端输出电压不能超AD7920的SPEC要求。

b. 根据ADALP2000套件中驻极体麦克风的SPEC,了解到音频信号频率大概为100HZ~16000HZ,在此处说明:选取输入的音频信号源有多种选择,比如直接用电脑的耳机接口,在电脑中用软件模拟音频信号输出,也可以根据题目要求,采用套件中的麦克风,但是如果采用驻极体麦克风,需要根据SPEC要求,在麦克风输出端加2V的偏置电压,并且需要加电容隔离直流电压。在此处,我选用了10uF的隔离电容,这样会有大约1V的电压输出(根据后面带通滤波器的设置来进行匹配)

Fin1awkHDS5RlUsF-wrpOa174lNR

2. 带通滤波器的硬件设置 

a. 首先了解带通滤波器的设置工具,根据课程中的讲解,目前有LC Filter Design Tool和Analog Filter Wizard等,因为这次选用的是ADI的套件,个人认为原厂的配套性最好,因为选用Analog Filter Wizard。

  这个网页工具的使用比较简单,硬禾课堂有非常详细的讲解:

首先,根据需求,选择滤波器的类型(高通,低通,带通),此处选择带通后,进行指标设置,在此处有个-3dB的最低截止频率需要设置,有个计算公式:10^[(log 20k + log 20)/2],另外根据自己的实际需求,设置频率范围,这个频率范围只要是根据后续在LTSpice模拟中的结果进行调整。在指标这栏其他设置保持默认。(请教了解到:此处音频频率范围是用20HZ~20KHZ,另外stopband的依据是:你最不想要的频率在哪个频点,以及需要衰减多少倍这两个参数决定),另外需要注意在Filter Response中,可设置滤波器类型,根据实际情况看需要分为几部分,这里我选用的是2 stages.

Fj17gNw5gxHYJsRbZaX25CB55JFN

接下来进行器件选择:设置供电电压,根据实际情况,此处使用USB供电,所以会有+5V供电,但是因为器件和时间的限制,-5V暂时没有研究,不过按SPEC说明,可以尝试使用套件中的LT1054来输出-5V,在这边我选用的电压是+5V和0V,此时右边已经出现了参考的线路,这时候,根据实际情况,自己选择器件类型,这里我选择的是AD8542,再设置stages,其中A和B都需要调整,已满足已有的器件型号。FthSLZhpt7T70wztaxTQP-DHP1Tk

第三步的Tolerance不作过多介绍,一般按默认设置即可。

最有一步的选择,一般按自己需求导出文件,如果线路中用的某个元件没有LTSpice symbol,那就不会导出LTSpice文件,同时会提示,比如如果选用OP97,那就没有LTSpice文件

Fuhcf__hf_tplI9mLM1mkDYUzLRf

 

b. 根据滤波器设置工具导出文件后,使用LTSpice进行调整,此处的调整主要是为了在实际搭建电路时,电路中的元件实际值有差异,将这些差异要在LTSpice中调整到,然后进行模拟,以确保实际搭建的线路是符合要求的。
FrlQZfyYwMneRlYO4qLt9fyjl8I6
Fjc7x6UEQhKTnudnVR9vv_8iikGV
比如我这边,搭建电路时发现,需要用到2.5V的电压,那就要在套件中找符合的器件,综合下来,发现AD584可以满足条件,如上面谈到的,可以设置-5V,但是会发现电流源的配套外置元件需要不少,那按实际情况处理AD584不需要外置元件,同时精确度也比较高,按SPEC看,Pin1输入10V时,Pin3有2.5V输出,Pin2有5V输出,那现在实际情况是输入5V,经过实际测量,在Pin2有2.1V输出,所以需要在LTSpice中修改2.5V为2.1V,另外用到的电阻电容也是有误差的,根据实际选择的器件值在LTSpice中修改好,最后模拟看是否是完整的带通滤波器,如上面的图。

最终在面包板上搭建的硬件如下:

FlT2B19RP49E3DtJMuTWrbV5lbfa

.项目要求分解以及软件需求:  

按照题目要求搭建硬件完成后,已经可以在滤波器输出端能用万用表交流档测量到信号变化,但是如果可以的话,还是想能通过连接ADC,抓到ADC的数据。

在这边,先去AD7920的页面确认:可以看参考线路和驱动代码,这里的驱动是C的,尝试了STM32和RP2040(Arduino和Thonny Micropython),发现使用硬禾学堂的RP2040游戏机平台,使用Arduino时,会偶尔有数据输出,但是因为一次频率设置错误,RP2040游戏机平台连接电脑端口丢失,后面一直无法找到端口,最后重新直接用RP2040 Pi Pico,使用Thonny编译,使用micro python,会有数据输出,但是一直没有有效数据,都是X00,还需要进一步确认问题,这里先把已经做的这部分程序附在文章后面供参考。

ADC和单片机的连接:

因为ADC采用了SPI总线,但是只有3个端口:CS,SCLK,SDATA,所以对于主机RP2040来说,也只需要连接MISO/SCK/CS即可。

Fn_1Dizs_2Ie8IU-nPLfpxRWt8JQ

Fk2TDNbYznW7HzXDN4e9Z8KGmBBJ

当使用MIcroPython时,需要先载入对应的库文件:

from machine import Pin, SPI
import utime

再进行Pin定义和总线的初始化:这里总线初始化的信息需要从SPEC和AD7920 driver中来确认

# 定义SPI相关引脚
spi_clk = Pin(2)   # CLK引脚
spi_miso = Pin(4)  # MISO引脚
spi_cs = Pin(1)    # CS引脚

# 初始化SPI0
spi = SPI(0, baudrate=1536000, polarity=0, phase=0, sck=spi_clk, miso=spi_miso)

# 设置AD7920 CS引脚为输出模式
spi_cs.init(Pin.OUT)

另外也需要定义寄存器位置,AD7920 Driver中对寄存器的定义如下:

# 辅助函数:向AD7920发送命令并读取数据
def AD7920_GetRegisterValue():
    data = bytearray([0x03, 0x00, 0x00])  # 定义存储数据的字节数组
    receivedData = 0x00  # 初始化接收数据的变量
    # 将spi_cs引脚置为低电平
    spi_cs.value(0)
    # 通过SPI总线读取AD7920返回的数据
    spi.write_readinto(data, data)
    # 将spi_cs引脚置为高电平
    spi_cs.value(1)
    # 将data[0]左移8位后的值加到receivedData上
    receivedData += (data[0] << 8)
    # 将data[1]加到receivedData上
    receivedData += data[1]
    return receivedData

.效果演示

硬件上,可直接测量到ADC的前端输出如下,使用万用表的交流档,当对着麦克风吹气时,交流档上能显示会有最大约0.9V的交流输出,如下:

FtiRZvtVY_XGFmi7to0JLn2FuS8A

lpKAriluLLvM_zDgfA_kx-eoMgQa

程序输出目前是这样的,现在调试后已经可以看到数据输出了,在Thonny中也可以看到声音变化时图形的变化,源码更新在附件中

Fj1uJNNBdcV904Q_EprfFOVB3bp9

 

.第一阶段的学习总结

这是模拟电子前端工程化这个课程的第一阶段作业,主要以ADALM2000的线路为示例,系统学习示波器的线路原理和信号处理方法,在第一阶段,围绕ADC学习了相关概念,包括ADC的关键技术指标,示波器前端的信号处理方法,探头原理,频带处理,基准源等概念,其中介绍到的LTSpice是一个关键的工具,对信号模拟有很重要的作用。

经过第一阶段的学习和实际使用,对ADC,运放,滤波器,信号源,电压源等有了更深的认识,也是一次根据需求到实现电路的完整过程,当然也借助了ADI的工具(Analog Filter Wizard和LTSpice),这和我们实际工作的过程很类似:根据客户需求,做到对应功能的线路,并根据实际情况进行元器件的调整,个人感觉,这个经验对于从学校出来刚进入工作的同学会非常有帮助。因为个人原因,做的线路很仓促,里面有很多值得改进的地方:比如可以设置-5V,哪怕多一些器件,这样有+5V/-5V,尝试用LTSpice模拟了一下,发现前端滤波器输出信号更完美,实际工作中,这种情况就需要做权衡,因为BOM成本会增加,如果客户不同意,那就只能妥协输出信号的质量。另外还可以选择读取ADC的单片机,如果正常低端的51单片机可实现,就不需要用泛用性差点的RP2040,更不需要昂贵的STM32了。

 

 

附件下载
LTSpice and Code.zip
Analog Filter Wizard Simulation.zip
AD7920 modify 0630.py
0630 modify for AD7920
团队介绍
个人
团队成员
Titan
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号