0%

接口其实包括对 “接口” (interface)和 “连接器” (connector)这两个方面的讨论,“连接器”我们通常也称之为“接头”或“插头”。 “接口”定义了电子设备之间连接的物理特性,包括传输的信号频率强度,以及相应连线的类型数量,还包括插头插座的结构设计;而“连接器”则是在物理上实现设备之间连接的装置。

TRS

TRS端子(TRS connector)是一种常用于连接音响设备,用以传递音频信号的连接器。该词是其三个组成部件的首字母缩写:Tip(尖)、Ring(环)、Sleeve(套)。

由于该种接头一般用于接插耳机和麦克风,因此也称 Phone Jack。虽然统称TRS,但也可依据具体的插头/插座的环(R)数 不同而分别称为TS(无环,即尖和套各提供一个接触点)、TRS(一环,三个接触点)、TRRS(两环,四个接触点)等等。

日常生活中我们见得最多的就是TRS接口,它的接头外观是圆柱体形状,通常有三种尺寸1/4"(6.3mm)、1/8"(3.5mm)、3/32"(2.5mm),最常见的是3.5mm尺寸的接头。

img

TRS 的含义是Tip(signal)、Ring(signal)、Sleeve(ground),分别代表了这种接头的3个触点,我们看到的就是被两段绝缘材料隔离开的三段金属柱。因此,3.5mm接头和6.3mm接头也被人称为“小三芯”和“大三芯”。

TRS接口就是一个圆孔,其内部与接头对应,也有三个触点,彼此之间也被绝缘材料隔开。

常见设备

通常,手机上的耳机插口都是TRRS,而电脑上通常是两个TRS,一个传声音的左右声道,一个传话筒的左右声道。

而为了使得双TRS的耳麦可以插到手机上,产生了转接头,也就是图中的第二个设备。不过我们考虑一下会发现,两个TRS都是3个信号,合并到一个TRRS接口上,信号变成了4个,减少了两个。除去一个共地的GND,还少了一个信号,去哪了呢?其实这是因为它会把LMIC和RMIC合并成一个MIC,而且TRRS本身就是只能传输一个MIC信号的,不存在左右声道。

当然了,也有反过来将TRRS转接成两个TRS接口的转接头。

此外,还有TS麦克风,如图中的第四个设备。如果话筒采用的这种接口,就默认了MIC只有一个声道,这种一般是用在小蜜蜂扩音器上。

img

当然,既然能加芯,那也可以减芯。二芯的TRS接头可以用来传送非平衡的单声道音频信号,比如电吉他用的线就是二芯的TRS线。所以,单从TRS接口外观来看,我们不会知道它是否支持平衡传输;单从芯数来看,我们也不能确定四芯及以上的TRS接头是否支持平衡传输,具体情况需要看设备。

尖和套是一定要有的,但环可以根据需要加,常见的有0-2个环的,也就是TS、TRS和TRRS。环越多,可以传输的信号数量越多。

因此,普通双声道耳机需要3个信号,即TRS;而如果是带麦克风的耳机,就需要4个信号了,即TRRS。注意,这里除了左声道(L)、右声道(R)以及带麦耳机所需的麦克风(MIC)信号,必须还要有地线(GND),因为没有绝对电压而只有相对电压。

在3.5mm接口上传输的是模拟信号,使用电压模拟声波。

此外,还有一种用于耳机的四芯3.5mm插头则是用来传输平衡信号的。6.3mm的“大三芯”插头可用来传输平衡信号或非平衡立体声信号,也就是说它可以和XLR平衡接口一样,能够传输平衡信号,但因制作这样的平衡线成本比较高,所以一般只用在高档专业音频设备上。

拒绝做小白 你应该知道的常见音频接口

二芯6.3mm TRS电吉他线

TRS母头

ADI公司旗下的 ADAU1772 评估板采用的就是CUI公司旗下型号为 SJ-3523-SMT-TR 的TRS母头

说明书如:sj-352x-smt.pdf ,其规格如下:

image-20210511164353982

RCA

RCA接口在我们日常生活中也非常常见,音箱、电视、功放、DVD机等设备上基本都有。它得名于美国无线电公司的英文缩写(Radio Corporation of America),上世纪40年代的时候,该公司将这种接口引入市场,用它来连接留声机和扬声器,也因此,它在欧州又称为PHONO接口。我们对它更熟悉的接头称呼则是“莲花头”。

拒绝做小白 你应该知道的常见音频接口

RCA接口在我们日常生活中非常常见

拒绝做小白 你应该知道的常见音频接口

被称为“莲花头”的RCA接头

RCA接口采用同轴传输信号的方式,中轴用来传输信号,外沿一圈的接触层用来接地。每一根RCA线缆负责传输一个声道的音频信号,因此,可以根据对声道的实际需要,使用与之数量相匹配的RCA线缆。比如要组双声道立体声就需要两根RCA线缆。

XLR

XLR接口又被称为“卡农口”,这是因为James H. Cannon创立的Cannon Electric公司是它最初的生产商。它们最早的产品是“cannon X”系列,后来改进产品增加了一个锁定装置(Latch),于是在“X”后面增加了一个“L”;再后来又围绕着接头的金属触点增加了橡胶封口(Rubber compound),于是又在“L”后面增加了一个“R”。人们就把三个大写字母组合在一起,称这种接头为“XLR connector”。

比较常见的三芯XLR接口

有的耳放上面会提供四芯平衡XLR接口

我们通常见到的XLR插头是3脚的,当然也有2脚、4脚、5脚、6脚的,比如在一些高档耳机线上,我们也会看到四芯XLR平衡接头。XLR接口与“大三芯”TRS接口一样,可以用来传输音频平衡信号。这里我们简单说一下平衡信号与非平衡信号。声波转换成电信号后,如果直接传送就是非平衡信号,如果把原始信号反相180度,然后同时传送原始信号和反相信号,这就是平衡信号。平衡传输就是利用相位抵消原理,将音频信号传输过程中受到的其他干扰降至最低。 当然,XLR接口也跟“大三芯”TRS接口一样,可以传输非平衡信号,因此光从接口看,我们是看不出来它到底传输的是哪种信号。

晶振

滤波器

自百度百科

滤波器是由 电容电感电阻 组成的滤波电路。滤波器可以 电源线中特定频率的频点 该频点 以外的频率 进行有效滤除,得到一个特定频率的电源信号,或消除一个特定频率后的电源信号。

自Bilibili视频

滤波器是具有频率选择作用的 电路运算处理系统, 具有 滤除噪声分离各种不同信号 的功能。

即滤波器有模拟滤波器和数字滤波器两类,模拟滤波器主要依靠电路实现滤波,数字滤波器依靠运算处理系统进行滤波。滤波主要是为了滤除噪声或者分离不同信号。

自Wikipedia

电子滤波器(英语:electronic filters)可执行信号处理功能的电子线路组件或设备,它专门用于去除信号中不想要的成分或者增强所需成分。

电子滤波器有音频滤波器(wave filter)与噪声滤波器(noise filter)等应用设备,可以是: - 无源的或者有源的 - 模拟的或者数字的 - 离散时间(采样)的或者连续时间的 - 线性的或者非线性的 - 无限脉冲响应(IIR)或者有限脉冲响应(FIR)

简介

自百度百科

滤波器是一种选频装置,可以使信号中特定的频率成分通过,而极大地衰减其他频率成分。利用滤波器的这种选频作用,可以滤除干扰噪声或进行频谱分析。换句话说,凡是可以使信号中特定的频率成分通过,而极大地衰减或抑制其他频率成分的装置或系统都称之为滤波器。滤波器,是对波进行过滤的器件。“波”是一个非常广泛的物理概念,在电子技术领域,“波”被狭义地局限于特指描述各种物理量的取值随时间起伏变化的过程。该过程通过各类传感器的作用,被转换为电压或电流的时间函数,称之为各种物理量的时间波形,或者称之为信号。因为自变量时间是连续取值的,所以称之为连续时间信号,又习惯地称之为模拟信号(Analog Signal)。

滤波是信号处理中的一个重要概念,在直流稳压电源中滤波电路的作用是尽可能减小脉动的直流电压中的交流成分,保留其直流成分,使输出电压纹波系数降低,波形变得比较平滑。

滤波

主要参数

品质因数

仅针对2阶滤波器有效,对1阶和3阶滤波器无效。

中心频率(Center Frequency)

滤波器通带的频率f0,一般取 f0=(f1+f2)/2,f1、f2为带通或带阻滤波器左、右相对下降1dB或3dB边频点。窄带滤波器常以插损最小点为中心频率计算通带带宽。

截止频率(Cutoff Frequency)

指低通滤波器的通带右边频点及高通滤波器的通带左边频点。通常以1dB或3dB 相对损耗点 来标准定义。

相对损耗的参考基准为:低通以DC处插损为基准,高通则以未出现 寄生阻带 的足够高通带频率处插损为基准。

通带带宽

指需要通过的频谱宽度,BW=(f2-f1)。f1、f2为以中心频率f0处插入损耗为基准。

插入损耗(Insertion Loss)

由于滤波器的引入对电路中原有信号带来的衰耗,以中心或截止频率处损耗表征,如要求 全带内插损需强调

纹波(Ripple)

指1dB或3dB带宽(截止频率)范围内,插损随频率在损耗均值曲线基础上波动的峰值。

带内波动(Passband Ripple)

通带内插入损耗随频率的变化量。1dB带宽内的带内波动是1dB。

带内驻波比(VSWR)

衡量滤波器通带内信号是否良好匹配传输的一项重要指标。理想匹配VSWR=1:1,失配时VSWR 大于1。对于一个实际的滤波器而言,满足VSWR小于1.5:1的带宽一般小于BW3dB,其占BW3dB的比例与滤波器阶数和插损相关。

回波损耗(Return Loss)

端口信号输入功率与反射功率之比的分贝(dB)数,也等于20Log10ρ,ρ为电压反射系数。输入功率被端口全部吸收时回波损耗为无穷大。

阻带抑制度

衡量滤波器选择性能好坏的重要指标。该指标越高说明对带外干扰信号抑制的越好。通常有两种提法:一种为要求对某一给定带外频率fs抑制多少dB,计算方法为fs处衰减量;另一种为提出表征滤波器幅频响应与理想矩形接近程度的指标——矩形系数(KxdB大于1),KxdB=BWxdB/BW3dB,(X可为40dB、30dB、20dB等)。滤波器阶数越多矩形度越高——即K越接近理想值1,制作难度当然也就越大。

延迟(Td)

指信号通过滤波器所需要的时间,数值上为传输相位函数对角频率的导数,即Td=df/dv。

带内相位线性度

该指标表征滤波器对通带内传输信号引入的相位失真大小。按线性相位响应函数设计的滤波器具有良好的相位线性度。

主要分类

  • 按所处理的信号分为 模拟滤波器数字滤波器 两种。

    • 模拟滤波器在实时性方面较有优势,且发展较早,更为成熟。
    • 数字滤波器依赖于计算速度。
  • 按所通过信号的频段分为 低通高通带通带阻全通 滤波器五种。

    低通滤波器:它允许信号中的低频或直流分量通过,抑制高频分量或干扰和噪声;

    高通滤波器:它允许信号中的高频分量通过,抑制低频或直流分量;

    带通滤波器:它允许一定频段的信号通过,抑制低于或高于该频段的信号、干扰和噪声;

    带阻滤波器:它抑制一定频段内的信号,允许该频段以外的信号通过,又称为陷波滤波器。 [1]

    全通滤波器:全通滤波器是指在全频带范围内,信号的幅值不会改变,也就是全频带内幅值增益恒等于1,即全通滤波器并不滤波。一般全通滤波器 用于移相,也就是说,对输入信号的相位进行改变,理想情况是相移与频率成正比,相当于一个时间延时系统。

  • 按所采用的元器件分为 无源有源 滤波器两种。

    • 无源滤波 常见有 LC无源滤波RC无源滤波特殊元件无源滤波(应用较少) 等。
      • LC滤波器中的 L电杆 和 C电容 都是理想元件,本身不耗能,但电杆体积较大,现一般不使用。
      • RC滤波器中的 R电阻 是会消耗能量的。
    • 有源滤波 常见有 RC有源滤波
  • 按照传递函数微分方程的介数分为 一阶滤波器二阶滤波器高阶滤波器

  • 根据滤波器的安放位置不同,一般分为 板上滤波器面板滤波器

    板上滤波器安装在线路板上,如PLB、JLB系列滤波器。这种滤波器的优点是经济,缺点是高频滤波效果欠佳。其主要原因是:

    1、滤波器的输入与输出之间没有隔离,容易发生耦合;

    2、滤波器的接地阻抗不是很低,削弱了高频旁路效果;

    3、滤波器与机箱之间的一段连线会产生两种不良作用: 一个是机箱内部空间的电磁干扰会直接感应到这段线上,沿着电缆传出机箱,借助电缆辐射,使滤波器失效;另一个是外界干扰在被板上滤波器滤波之前,借助这段线产生辐射,或直接与线路板上的电路发生耦合,造成敏感度问题;

    滤波阵列板、滤波连接器等面板滤波器一般都直接安装在屏蔽机箱的金属面板上。由于直接安装在金属面板上,滤波器的输入与输出之间完全隔离,接地良好,电缆上的干扰在机箱端口上被滤除,因此滤波效果相当理想。

image-20210509151758365
image-20210509152214883

常用滤波器

有源滤波及无源滤波比较

无源滤波(Passive Filter) 有源滤波(Active Filter)
组成 仅由无源元件(R、L 和C)组成
即不使用任何需要电源的器件
由无源滤波 + 有源器件(如运放)组成
优点 - 电路比较简单
- 不需要直流电源供电
- 可靠性高
- 输出阻抗可以很低
- 可以使用放大器进行增益
- 不使用电感,因为电感是高容差型元件,频率较低时,体积会很大
- 通带内的信号不仅没有能量损耗,而且还可以放大
- 负载效应不明显
- 多级相联时相互影响很小
- 利用级联的简单方法很容易构成高阶滤波器
- 并且滤波器的体积小、重量轻、不需要磁屏蔽(由于不使用电感元件);
缺点 - 通带内的信号有能量损耗
- 负载效应比较明显
- 使用电感元件时容易引起电磁感应
- 当电感L较大时滤波器的体积和重量都比较大,在低频域不适用。
- 通带范围受有源器件(如集成运算放大器)的带宽限制,需要直流电源供电
- 可靠性不如无源滤波器高,在高压、高频、大功率的场合不适用。
应用场景 电源滤波器
廉价且噪声较高的电源
处理10MHz以上的高频信号
不能应用于电源滤波,因为有源滤波也需要其他电源进行供电

注意:有源滤波器的设计所用运算放大器的频率通常要比设计截止频率高100倍左右,具体数值取决于峰化和其他多种因素。即(目前)无法使用有源滤波器处理10MHz以上的高频信号,这需要GHz规格的有源滤波器。

数字滤波器和模拟滤波器比较

数字滤波器 模拟滤波器
优点 - 可编程(有一组系数和一个时钟频率,容易更改)
- 可重复性(即可复用性,数字滤波器的特性受环境影响较小)
- 采用FIR滤波器,会产生(框架中固有的)恒定时间的延迟(应该是受计算性能影响)
- 无混叠(No aliasing)
- 降低对数字滤波的要求
- 降低对ADC的要求

注意:在数字滤波器中,一个超过奈奎斯特频率的频率通过ADC时,滤波器将无法区分该频率和较低的频率。

image-20210509162541363

数字滤波器

定义

数字滤波器是与模拟滤波器相对应的,我们在常用的离散系统中, 使用数字滤波器。它的主要作用是利用离散时间系统的特性,在这里 时间就是一个变量,然后在对外部输入的信号,进行处理,这里的输 入信号一般都是广义上的波形型号,信号可以是电压、电流、功率等。 当然也有类似于频率等这种。在实际的操作中,我们也可以把输入的信号波形变成输出,也就是将输入和输出倒置。从而实现我们将信号的频谱修改的目的。

实现技术手段

数字滤波器有多种方式可以实现信号的处理,我们介绍在实际中使用最多的两种,一种是我们集成电路的方式将集成电路的各种元器件组成一个专用的设备,这种设备称之为数字信号处理机,类似于arm架构或者单片机架构的数字处理机就是我们常用的一种,这种方式对于成套批量的需求商用价值比较高,因为造价成本比较低,受到了市场的欢迎;另一种就是使用我们平常使用的x86/x64的商用或者工控计算机进行模拟仿真,这个完全是使用应用软件进行仿真的,这种方式也在实验室或者大型的数字滤波项目中使用,这种方式成本较高,不适宜与大批量的生产与配套。但是在实验室是最好的一种模拟方式,在高阶模拟和运算中有非常大的优势。

数字滤波器的对比

数字滤波器主要有两种,一种是IIR,我们称之为无限的冲激响应滤波器,另外一种是FIR,这种滤波器是与IIR相对应的,这个是有限的冲激响应滤波器

两个系统都是有各自的特点的,FIR的滤波器是没有闭环的反馈的环路信号,它的结构比较简单,可以实现比较严格的线性方程的相位的计算,一般情况下相位的要求不严格一般不会使用FIR滤波器,相反的话,会采用这种滤波器。

当然在很多的场景下面,我们要对信号进行一些实时的处理,当现场的信号数据越来越多的情况下,我们对硬件的性能要求就越来越高,市面上很多的单片机已经无法满足我们实际的功能需求,一般的8位的16位的乃至32位的单片机以及ARM芯片已经不能在对算法进行支撑,由于专门为数字处理设计的DSP控制器的出现,提高了我们滤波器的效率,DSP很多情况下可以使用多组总线的方式,并行处理多组实时的数据,独立的一些算法器充分的使用大大提高了我们滤波器的效率。

对于硬件上的短板完全可以由DSP的芯片进行弥补,做到对数字信号的实时处理与计算。DSP与普通的微处理器相比有很大的数字信号的处理优势,他是单片机以及ARM的继承,为信号处理做了一些局部的开发和改进,大大的增强了数字处理的能力,它有特定的数据流程格式、有特定的算法器,有特殊的系统结构为解决复杂的数字信号的处理提供了很多优越的条件和基础,通过对DSP的编程可以实现IIR滤波器。 FIR滤波器实际上有一定的缺陷,这类系统只有零点,它不会跟IIR系统的那样容易获取比较好衰减的特性,但是也有更加明显的优势。他是通过非硬件电路实现的,相比硬件电路实现滤波器主要优点有很多,例如,效率很高、有极点、有反馈等。

程控滤波系统

程控滤波系统是在传统滤波器的不足中提出的,传统滤波器在工作时产生误差,会影响整个系统的精确度。低精度的滤波器在使用时会造成很多不良后果,而且传统滤波器对波形要求越高就意味着需要跟多的运放,这是非常麻烦的。所以程控滤波器的数字化能够减少生产过程中的不确定因素和人为参与的环节数,可以有效地解决电源模块中诸如可靠性、智能化和产品一致性等工程问题,极大地提高生产 效率和产品的可维护性。

无源滤波器

无源滤波器是利用电阻电抗器电容器元器件构成的滤波电路。谐振频率时,电路阻抗值最小,非谐振频率时,电路阻抗比很大,将电路元器件数值调整到某一特征谐波频率,则能滤除该次谐波电流;当若干谐波频率的调谐电路组成在一起,则能滤除对应的特征谐波频率,通过低阻抗旁路实现对主要次数谐波(3、5、7)的过滤。主要原理就是针对不同次数谐波,设计该谐波频率的阻抗为很小,实现谐波电流的分流效应,即为预滤除的高次谐波提供旁路通道,实现净化波形。

无源滤波器按接线形式可分为电容滤波器、电厂滤波电路、L型RC滤波电路、π形RC滤波电路、多节π形RC 滤波电路、π形LC滤波电路。按功能可分为单调谐滤波器双调谐滤波器、高通滤波器。无源滤波器具有如下优势:结构 形式简单、投资费用低,能够补偿系统中的无功分量、改善电网功率因数;工作稳定性较高、维护简单、技术成熟等,在有源滤波器出现以前被广泛采用。无源滤波器的缺点也有很多方面:受电网参数的影响较大,系统阻抗值和主要次数谐振频率往往随着工况发生变化;谐波滤除的频带也较窄,只能滤除主要次数的谐波,或因发生并联谐振,放大一些次数的谐波;滤波和无功补偿及调压之间的协调较困难 ;随着流经滤波器的电流升高,可能造成设备过负荷运行;耗材多,重量和体积都较大;运行稳定性较差等缺点。因此,整体性能更优的有源滤波器得到越来越多的应用。 [4]

有源滤波器

有源滤波器主要作用不仅能动态追踪并抑制谐波,而且可以补偿电网中较低的无功分量。它能够对幅值和频率都波动的高次谐波分量进行补偿,以及对变化的系统无功分量进行动态补偿,克服了传统型式谐波治理方案和无功补偿的缺点,达到了动态跟踪补偿的效果。APF的基本原理是检测当前系统的电压和电流信号,通过指令电流运算电路的运算,产生补偿电流信号,并将其指令由补偿电流发生电路按谐波信号放大,从而得到补偿电流,再与系统中的高次谐波分量及无功等电流抵消,实现系统波形的正弦化,滤除电网谐波,提高电能质量。有源滤波器和无源滤波器的区别,在于需要电源供电,且既补谐波又补无功。指令电流运算电路和补偿电流发生电路是有源滤波器的两个重要组成部分。指令电流运算电路的作用是检测出系统所需补偿的谐波分量和无功分量等。补偿电流发生电路的作用是按照上述检测到的谐波分量和无功分量,发出补偿电流指令,产生能够抵消的补偿电流,它主要由三部分构成 :电流跟踪控制电路、驱动电路和主电路。

根据储能元件的不同,有源滤波器可以分为电压型有源滤波器和电流型有源滤波器。电压型有源滤波器,因其损耗少、效率高,被广泛使用。电流型有源滤波器,因损耗大、效率低,而较少采用。按照交直流电源可分为直流 APF 和交流 APF。按照电路拓朴结构分类,可分为串联型 APF、并联型 APF 和串并联型,以及APF和PPF的混合型使用方式。与无源滤波器相比,有源滤波器有许多优点:响应速度快,可控性能非常强;具有自适应功能,能够动态跟踪和补偿系统高次谐波;稳定性高,不受系统阻抗影响,避免谐振的发生;能够抑制闪变;补偿系统不足的无功分量等。机柜式系统采用模块化结构,联络设计细密,可随时根据现场实际需求扩容,可拓展性强,模块化的配置方式和小巧的体积让设计者有更多的选择,并可最大程度节省用户空间,可实现弹性的容量配置,支持后续现场容量扩展。现场安装和维修维护更是简单拔插即可。 抽屉式结构,能够满足用户单独对模块设计,选用优良的架构形式,具备DSP处理能力,运用大型可编程控制器操作,选用大功率电力电子组件,具有可外传的通信端口,还可附于其他盘柜中独立工作。 [4]

注意事项

板上滤波器虽然对高频的滤波效果不理想,但是如果应用得当,可以满足大部分民用产品电磁兼容的要求。在使用时要注意以下事项:

如果决定使用板上滤波器,在布线时就要注意在电缆端口处留出一块“干净地”,滤波器和连接器都安装在“干净地”上。通过前面的讨论,可知信号地线上的干扰是十分严重的。如果直接将电缆的滤波电容连接到这种地线上,会造成严重的 共模辐射 问题。为了取得较好的滤波效果,必须准备一块干净地。并与信号地只能在一点连接起来,这个流通点称为“桥”,所有信号线都从桥上通过,以减小信号环路面积。

并排设置:同一组电缆内的所有导线的未滤波部分在—起,已滤波部分在一起。否则,一根导线的耒滤波部分会将另一根导线的已滤波部分重新污染使电缆整体滤波失效。

靠近电缆:滤波器与面板之间的导线的距离应尽量短。必要时,使用金属板遮挡一下,隔离近场干扰。

与机箱接:安装滤波器的干净地要与金属机箱可靠地搭接起来,如果机箱不是金属的,就在线路板下方设置一块较大的金属板来作为滤波地。干净地与金属机箱之间的搭接要保证很低的射频阻抗。如有必要,可以使用电磁密封衬垫搭接,增加搭接面积,减小射频阻抗。

接地线短:考虑到引脚的电感效应,其重要性前面已讨论,滤波器的局部布线和设计线路板与机箱(金属板)的连接结构时要特别注意。

滤波电容

旁路:一般出现在电路的输入端,为交流信号提供一个分支,滤除不需要的交流成分。

image-20210509154852357 image-20210509155438601

下图是带有低频扰动和高频尖刺的直流信号,使用所示电路对该信号进行过滤,可获得稳定直流信号。

image-20210509155705572 image-20210509155806309

其中,0.1uF 用于滤除高频成分;1000uF 用于滤除/抵抗 低频扰动 信号。

去耦:既有 滤波 的作用也有 储能 的作用。

当芯片电路需要拉去较大的电压时,VCC可能会突然供电不足,此时用于VCC的去耦电容发挥了储能的作用,为芯片电路提供较稳定的电源。

image-20210509155156432

image-20210509154226811

运算放大器

运放定义

同相输入端,Vp和Vn

虚短:

虚断:

运放分类

按照电源电压分类:单端运放、双端运放。

单端运放是指运算放大器的供给电源为正向电源和地;双端运放是指运算放大器的供给电源为正向电源和负向电源。

增益与音量

增益

增益(Gain)的一般含义简而言之就是放大倍数

在电子学上,通常为一个系统的讯号输出与讯号输入的比率,如天线增益表示定向天线辐射集中程度的参数,为定向天线和无方向天线在预定方向产生的电场强度平方之比。放大器增益,表示放大器功率放大倍数,以输出功率同输入功率比值的常用对数表示等。

增益一般指对元器件、电路、设备或系统,其电流、电压或功率增加的程度,以分贝(dB)数来规定,即增益的单位一般是分贝(dB),是一个相对值。电子学上常使用对数单位量度增益,并以贝(bel)作为单位:

  • Gain = log10( P2 / P1 ) bel

其中P1与P2分别为输入及输出的功率。

由于增益的数值通常都很大,因此一般都使用分贝来表示:

  • Gain = 10×log10( P2 / P1 ) dB

这就是增益的绝对值与相对值分贝之间的关系。

常见增益

天线增益

天线增益是指:在输入功率相等的条件下,实际天线与理想的辐射单元在空间同一点处所产生的信号的功率密度之比。天线增益是入网测试时极其重要的标准,它表示了天线的方向性和信号能量的集中程度。增益的大小影响天线发射信号覆盖范围和强度。主瓣越窄,旁瓣越小,能量就会越集中,那么天线增益越高。

一般来说,增益的提高主要依靠减小垂直面向辐射的波瓣宽度,而在水平面上保持全向的辐射性能。天线增益对移动通信系统的运行质量极为重要,因为它决定蜂窝边缘的信号电平。增加增益就可以在一确定方向上增大网络的覆盖范围,或者在确定范围内增大增益余量。任何蜂窝系统都是一个双向过程,增加天线的增益能同时减少双向系统增益预算余量。

天线增益的单位一般有两种:dBidBd,其中dBi是以理想点源天线为参考的基准,在各方向的辐射是均匀的;dBd是以半波阵子(偶极子)的天线为参考基准,相对于对称阵子天线的增益dBi=dBd+2.15。相同的条件下,增益越高,电波传播的距离越远。一般地,GSM定向基站的天线增益为18dBi,全向的为11dBi。同一个天线增益,dBi比dBd在数值上大2.15 dB。

放大器增益

放大器增益是放大器输出功率与输入功率比值的对数,用以表示功率放大的程度。亦指电压或电流的放大倍数。同样,分贝就是放大器增益的单位。

放大器输出与输入的比值为放大倍数,单位是“倍”,如10倍放大器,100倍放大器。

当改用“分贝”做单位时,放大倍数就称之为增益,这是一个概念的两种称呼。电学中分贝与放大倍数的转换关系为:

AV(I)(dB)=20lg[Vo/Vi(Io/Ii)];Ap(dB)=10lg(Po/Pi)

分贝定义时 电压(电流)增益功率增益 的公式不同,但我们都知道功率与电压、电流的关系是P=V2/R=I2R。采用这套公式后,两者的增益数值就一样了:

10lg[Po/Pi]=10lg(V2o/R)/(V2i/R)=20lg(Vo/Vi)。

使用分贝做单位有很大好处。 电子系统的总放大倍数常常是几千、几万甚至几十万,一架收音机从天线收到的信号至送入喇叭放音输出,一共要放大2万倍左右。用分贝表示先取个对数,数值就小得多。放大器级联时,总的放大倍数是各级相乘。用分贝做单位时,总增益就是相加。若某功放前级是100倍(20dB),后级是20倍(13dB),那么总功率放大倍数是100×20=2000倍,总增益为20dB+13dB=33dB

功率增益

功率增益(Power gain)是指一个电路里输出功率和输入功率的比例。不像其他的信号增益,例如电压增益和电流增益,功率增益由于“输入功率”和“输出功率”本身有着相对模糊的定义,因此有时显得有点混淆。

三种重要的功率增益包括:运算功率增益(operating power gain)、转换功率增益(transducer power gain)和 有效功率增益(available power gain)。

值得注意的是,上述三种增益的定义均基于功率的平均效果,而非瞬时功率,不过“平均”二字经常被省略,在有的情况会引起混淆。

环路增益

环路增益(loop gain)为电子学及控制工程的名词,是指一反馈回路中的总增益,一般会以比例或是分贝表示。

环路增益常用在放大器及电子振荡器的线路中,后来更扩展到控制工厂及设备的工业控制系统中。环路增益的概念也用在生物学中。在反馈回路中,为了控制输出,会量测设备、程序的输出,取样后,再以此影响输入信号,使输出控制的更理想。环路增益和环路相位移决定了设备的特性,也决定输出是否稳定,或是不稳定(振荡)。

海因里希·巴克豪森在1921年最早发现环路增益在电子反馈放大器特性分析中的重要性,后来在1930年代由贝尔实验室的亨德里克·韦德·波德及哈里·奈奎斯特继续发展。 在通讯上,环路增益可以指载波终端或是二线中继器上的可用功率增益。最大的可用增益是由闭回路的总损失决定,可用增益不能大于总损失。

Volume/音量

音量(Volume)又称音强、响度,是指人耳对所听到的声音大小强弱的主观感受,其客观评价尺度是声音的振幅大小。这种感受源自物体振动时所产生的压力,即声压。物体振动通过不同的介质,将其振动能量传导开去。人们为了对声音的感受量化成可以监测的指标,就把声压分成“级”——声压级,以便能客观的表示声音的强弱,其单位称为“分贝”(dB)。

音量影响的是后级最终输出的响度。

增益和音量的关系

增益多与“敏感度”相关,比方说:你的麦克风需要更“灵敏”吗?那么就把增益开大些。但是增益开得过大,信噪比会降低,底噪声就会更加明显。还会因电流输出限制产生削波失真。 这就是我们所说的“过载”效果的真正来源。也是很多朋友想要通过开大clean通道的volume去制造过载却不明显的原因。

如果把增益开大,把音量关小的话,可以得到过载的效果。很多60,70年代的音乐作品中可以听到这种音色;关小增益开大音量的话,音符会很清晰,颗粒性也很好。

原文出处:https://www.21ic.com/app/analog/201207/134812.htm

用可编程增益放大器(PGA)处理数据采集系统中传感器/变送器模拟输出和信号处理数字之间的接口。单片和高集成度PGA现在被可编程、更高精度、更高吞吐量和更小封装尺寸的模块和混合方案替代。

由于来自传感器/变送器的模拟信号的本性,使其工作必须具备相当大的动态范围。这要求采用连续增益级在进行任何实际的数字处理之前增大这些信号,PGA能满足这种要求。

PGA是可变增益放大器(VGA)的一种。VGA提供可变和连续增益控制,而PGA 必须在软件控制下以固定步(通常6dB步)做到可变增益控制。达到更精细的分辨步0.5dB是可能的。 一般多通道数据采集系统用很多不同类型的传感器/变送器,这包括 热电偶惠斯登电桥热敏电阻应变计超声系统。虽然,传感器/变送器是基于不同的物理原理,但大多数产品是 以电压做为输出。甚至这会产生中间值(如电容或电阻),但最终变换为电压,以便在数据采集系统中进行

传感器/变送器的输出可覆盖非常大的范围,需要PGA来处理传感器/变送器输出到ADC的接口。

例如,在工业过程控制系统中,低频信号可以几毫伏到几伏变化。需要PGA来匹配这种宽传感器/变送器输出范围到特定的ADC输入范围。通常,在输入数据采集通道最低信号电平与最高信号电平之比是2个量级或更大。 12位ADC接收小于ADC满标输入十分之一的信号仅可提供8位分辨率,除非在信号到达ADC之前用PGA放大。PGA允许在软件控制下使接收信号的增益达到宽范围增益一带宽乘积。这可避免钳位并允许采用较便宜的ADC,如用12位ADC替代16位ADC。

PGA可做更多事情。PGA缓冲来自前级(通常是多路转换器)ADC的输入,防止多路转换器导通电阻所引起的加载。PGA也提供差分别单端的变换,大多数跟踪和保持型ADC需要单输入。把PGA连接到差分多路转换器输出时,PGA提供共模抑制。

在市场上可以得到很多种PGA和支持元件。这包括可独立应用的运放被专门设计成PGA、ASIC、集成有可编程滤波器的PGA、仪表放大器PGA、用于运放的数字电位器前端、PGA用数字可编程分压器、ADC驱动器。有时把PGA和DAC集成在同一芯片上。

对于不需要信号宽动态范围的应用,PGA不是必须的。放大器可以直接接口传感器/变送器到ADC。

例如,Maxim的MAX1494仪表放大器适合于250V/V或更小增益范围的应用。

各种性能的PGA

对于特殊性能参量(如高增益稳定性和高精度,低漂移,低失真,高输出驱动电流,高转换率,快速建立时间,高共模抑制比,低功率和小尺寸)有很多PGA是最佳的。

  • Microchip公司的MCP6S2X家族PGA具有2、6和8通道输入,包含多路转换器并可通过串行外设接口(SPI)总线进行增益控制和通道选择。
  • NS公司的LMH6718IC是双PGA,具有高输出(200mA)驱动信号。
  • 高性能小封装的PAG有ADI公司的AD8555,这是封装在微型8引线SOIC中的数字可编程信号调理自动零放大器,它包含放大器,比较器,用Digit Trim技术的电阻调节分压器和缓冲器。其500V/℃总输入失调漂移是其他竞争产品的1/20。
  • Linear公司的LTC6915A也是小封装高性能PGA。此仪表放大器封装为16引线SSOP或12引线DFN,可把它放置在最靠近传感器/变送器的地方。它所占电路板面积是等效分立方案的1/6。零漂移特性具有高达4096的宽可编程动态范围(增益精度0.1%)。它也有50mV/℃漂移和与增益无关的125dB CMRR。
  • 对于低失真是主要考虑因素的应用,可以选择Intersil公司PGA缓冲器HFA11XX,其低失真电平低到-73dBc、噪声电平低到7"9nV/√Hz。
  • TI公司的THS7001/7002单/双PGA采用Power PAD封装,包含分离的低噪声前置放大器和增益放大级。此器件可达到非常低的噪声电平(低到1.7nV/√Hz)。
  • 其他可注意的PGA包括ADI公司的AD628首款具有可编程增益的共模差分放大器和Linear公司的LTC1564 PGA(除放大器外,它还具有8阶软件可编程抗混淆滤波器)。

PGA也集成有其他前端电路。

如Maxim公司的MAX14XX家族,这是包含PGA的信号调理ASIC。这种器件直接用于传感器/变送器和ADC之间。

Maxim公司的ADC驱动器MAX2055具有低失真(-76dBc 2次谐波和-69dBc 3次谐波)特性,其差分输出是为驱动高速ADC专门设计的。

一些PGA供应商也提供驱动PGA前端的数字电位计和分压器IC。

例如,Maxim公司的MAX5420/21数字可编程电压分压器;

ADI公司的AD5321数字电位计(常用于可编程增益和衰减的非易失性存储器)。

另外,Xicor也提供不少PGA器件,这些PGA器件对于执行数字控制的电位计(DCP)是最佳的。

集成方案

现在,很多公司把PGA和其他信号调理电路直接集成在ADC芯片上。这种方法有利于所占空间更小,比分离PGA和ADC方案具有更好的性能。然而,其成本比较高,集成PGA在ADC上除灵活性较低外,还有 较高的时钟噪声电平

带线化前端的Maxim公司的MAX1457(图2)传统器线性化IC就是其中一种,它包含12位ADC。

ADI公司的ADC7707高精度信号调理16位S-D ADC包含多路转换器、缓冲器、PGA、电荷平衡电路、串行接口和时钟产生器。

ADI公司的ADC7708/18S-D6位/24位ADC具有与AD7707相同的电路,但它们的目标是低电压和低功率应用。

img

一个感兴趣的高集成度ADC是ADC7731 24位S-D器件,它具有ADC77017的所有电路。另外,还加上定标微控制器(图3)。此IC的目标是低噪声高吞吐量应用。

Maxim公司也有带集成PGA的双6位ADC,它具有90Sample/s吞吐率、功耗仅550mW。

我们将会看到更多包含PGA和其他信号处理电路的ADC吗?

不可回避的事实是高集成度是IC业的准则,而PGA和其他信号调理支持电路也不例外。所以希望看到PGA与ADC集成在同一芯片,并能解决片上性能参量(如时钟引起的噪声)和降低高分辨率器件的单个ADC价格。

事实上,设计人员主要的目标是把传感器/变送器电路放在高集成度ADC上。

这将是最终解决问题:现实世界模拟信号与计算机的数字世界结合起来的途经。

这也将聚焦在模拟和数字电路设计的两种不同方法。

Wikipedia

分貝

分贝(decibel)是量度两个相同单位之数量比例的单位,常用dB表示。“”(deci-)指十分之一,个位是“贝”或“贝尔”(bel,纪念发明家亚历山大·格拉汉姆·贝尔),但一般只用分贝。

dB 声能比 声压比
100 10 000 000 000 100 000
90 1 000 000 000 31 623
80 100 000 000 10 000
70 10 000 000 3 162
60 1 000 000 1 000
50 100 000 316 .2
40 10 000 100
30 1 000 31 .62
20 100 10
10 10 3 .162
6 3 .981(≈4) 1 .995(≈2)
3 1 .995(≈2) 1 .413(≈√2)
1 1 .259 1 .122
0 1 1
-3 0 .501(≈½) 0 .708(≈√½)
-6 0 .251(≈¼) 0 .501(≈½)
-10 0 .1 0 .316 2
-20 0 .01 0 .1
-30 0 .001 0 .031 62
-40 0 .000 1 0 .01
-50 0 .000 01 0 .003 162
-60 0 .000 001 0 .001
-70 0 .000 000 1 0 .000 316 2
-80 0 .000 000 01 0 .000 1
-90 0 .000 000 001 0 .000 031 62
-100 0 .000 000 000 1 0 .000 01

这是一个说明声源能量 (x), 声压 ({}),与声音分贝数 dB ({_{10}{x}}) 正比关系的对照表 从声音分贝数 dB 只有 2~3 个数字的差异,相比声源或声压 9~10 个数字的差异,dB可帮助人们更快的理解数字代表的意义

计算方法

分贝(dB)是十分之一贝尔(B):1B = 10dB。1贝尔的两个功率量的比值是10:1,1贝尔的两个场量的比值是{}:1[1]。'

场量(field quantity)是诸如电压电流声压电场强度速度电荷密度等量值,其平方值在一个线性系统中与功率成比例。功率量(power quantity)是功率值或者直接与功率值成比例的其它量,如能量密度音强发光强度等。

分贝的计算,依赖于是 功率量 还是 场量 而不同。

两个信号具有1分贝的差异,那么其功率比值是1.25892(即10^{},)而幅值之比是1.12202(即{}^{},)[2]

好处

使用分贝有很多便利之处:

  • 分贝实际上是对数值,因此可以用常用的数量来表示非常大的比值,可以清楚地表示非常大的数量变化。
  • 多部件系统的整体增益(如级联的放大器)可以直接用各部件的增益分贝相加而求得。不必把这些增益值相乘(例如log(A × B × C) = log(A) + log(B) + log(C))。
  • 人对强度的感知,如声音或者光照,更接近与强度的对数成正比而不是强度值本身,依据韦伯定理,因此分贝值可用于描述感知级别或级差。

使用

声学

声学中,声音的强度定义为声压。计算分贝值时采用20微帕斯卡为参考值[5]。这一参考值是人类对声音能够感知的阈值下限。声压是场量,因此使用声压计算分贝时使用下述版本的公式:

声音强度公式

在空气中 1帕斯卡等于94分贝声压级。在其他介质,如水下,1微帕斯卡更为普遍[6]。这些标准被ANSIS1.1-1994.所收录[7]

人耳对声音感知具有很大的动态范围。从短期暴露即会永久损害听力的声强到最静的人耳能听到的声强,其比值是1万亿(1012)。[8]这么大的比值范围表示为对数度量:1万亿(1012)基于10的对数为12,用分贝表示是240。人的听力并不是对所有频率都是相同敏感,最敏感的频率范围是20Hz~20kHz.

当一个空间受外来声音干扰,而影响预期的正常作息时,需要建置一个六面结构的宁静空间,而当宁静空间建置完成后,能否达到预期的效果,则于施工前制定一个规范,此规范即为声学规范。

电子学

电子学中,通常用分贝表示功率或幅值之比(增益),而不常用算术比或者百分比。一项好处是一些列部件组成的系统的总增益是各部件增益之和。类似的,电信领域中,从一个发射器到一个接收器通过一些媒介(光无线通信波导同轴电缆光纤等等)的信号增益用分贝表示,用于链路预算

分贝也可以组合一些后缀,表示电功率的绝对单位。例如,后缀"m"表示"毫瓦"组合出"dBm",0 dBm等于1毫瓦,1 dBm约为1.259 毫瓦。

在专业声学领域,常用单位是dBu。"u"代表"unloaded"。dBu是电压的平方平均数(RMS)度量的单位,其参考电压约为 0.775 VRMS。由于历史原因,此参考电压是在600欧姆电阻上耗散1 mW功率的电压,用于电话音频电路的标准阻抗。

后缀与参考值

dB与后缀的组合,指出计算比值时的参考值。例如dBm指示功率值与1毫瓦的比值的分贝数。

如果计算分贝时的参考值明确、确切地给出,那么分贝数值可以作为绝对量,如同被测量的功率量或者场量。例如,20dBm即为100毫瓦。

SI国际单位制不允许使用分贝与后缀的组合形式如dBm, dBu, dBA,等等[13]。但这种不遵从SI单位制的表示却广泛应用于很多场合。

使用ADAU1761 PGA / ALC的DSP控制模式

ADAU1761模拟前端具有ALC(自动电平控制)功能,可根据输入信号的电平动态设置差分输入路径的增益。但是,可以绕过ALC,DSP程序可以直接控制应用于 差分输入 的增益量。

为此,一个或两个通道的差分路径需要启用和取消静音。为了启用 差分路径,还应根据需要将LDBOOST(和/或RDBOOST)设置为0 dB或20 dB。

img

然后,应将ALCSEL位设置为DSP控制模式。

img

现在,在DSP程序原理图中,用户可以将AIGC输出单元添加到项目中:

img

通道0映射到左侧的PGA。

img

通道1映射到右侧的PGA。

img

现在,馈送到这些单元中每个单元的5.23信号确定了相应PGA的增益。

作为一个简单的示例,要将每个PGA的增益设置为0.5(或-6 dB),请从Sources库创建一个DC Input Entry单元并将其设置为0.5,然后将其连接到AIGC输出

img

在下一个示例中,使用“乘”和“加”单元缩放并移动10 Hz的正弦音调,使其范围在0到1之间,然后将其发送到AIGC输出单元。这会导致PGA增益在0 dB和静音之间快速来回移动,从而产生颤音效果。

img

在下面的示例中,每个输入的峰值电平由“峰值包络”单元检测,并且使用“除法”单元和“ DC输入条目”单元创建该信号的反相。结果发送到AIGC输出单元。这意味着输入峰值电平的倒数用于缩放PGA增益。结果是,当输入信号为低电平时,增益较高;但是,当输入电平增加时,增益将降低以避免削波。

img

这些只是在ADAU1761的PGA上使用DSP控制模式可以完成的操作的几个示例。

sohu.com

阻抗介绍

仅针对音频系统中的电路进行说明

  • 在对电路施加电压时,电阻抗是 对电路中交流电的抵抗力的度量
  • 阻抗以欧姆为单位(类似于电阻)测量,并且 可以认为是交流电路中的一种“交流电阻”
  • 音频信号是交流电压,因为它们同时具有负电压和正电压(信号的正振幅和负振幅)。因此,音频信号是交流电(具有负电流和正电流)。
  • 仅当上级设备输出连接到前置放大器(或串联的下一个音频设备)时,音频信号才会通过。(上级设备的输出必须创建一个带有负载的电路,以使音频信号流动。)

img

在音频系统的连接中,有各式各样的设备进行设备串联,首先说两个概念:

输出阻抗: 音频设备输出端上的固有阻抗。

负载阻抗: 音频设备下一级(通常是前置放大器)的输入阻抗,该阻抗与上级的输出共同构成电路。

在音频行业内,行业规定 输入接口的阻抗应为输出阻抗的10倍以上,这样才能保证音频信号的传输质量

这样的 “阻抗匹配” 其实是为了 “电压匹配” ,而不是传统电学概念中的输入输出等阻抗的“阻抗匹配”。

源输出阻抗和输入阻抗之间的电压传递公式:

VL= ZL·VS / (ZS+ ZL)

VL输入端 =前置放大器输入端的电压。

VS输出端 =麦克风输出端的电压。

ZL输入端 =前置放大器的输入阻抗(麦克风负载阻抗)。

ZS输出端 =麦克风输出阻抗。

可以将其可视化为简单的分压器:

img

图 简化电路

不难推算,如果其他所有条件保持不变,增加负载阻抗“ Z输入端”可使上级设备的输出电压与前置放大器的输入电压之间的匹配度更高。

Z输入端起码要达到Z输出端的10倍以上,电压才可达到源输出端电压的90%,但是我们也不希望输入端的阻抗过大,因为阻抗过高会增加线路出现噪音的可能。

这种最大化的电压传输称为“阻抗桥接”,或者称为“电压匹配”。

音频信号

HOLA,在了解完阻抗的秘密之后,在这里我们简单说一下各个种类的信号等级和阻抗的差异。我们在这说下经常遇到的三类信号:麦克风信号线路信号乐器信号

表 各类信号参数表

img

麦克风信号,就是麦克风输出的信号,其电平大概在 -60dBV和-40dBV(0.001V - 0.010V)之间,通常需要前级放大器的放大才能正常使用,麦克风的输出阻抗通常在150Ω至200Ω之间

所以呢,你的声卡或者话放的Mic Input(麦克风输入)接口的阻值应至少该有1500Ω。

img

图 麦克风信号输入接口

线路信号也就是Line Level Signal,一般由TRS(大三芯)平衡线缆传递,比如一些播放器、效果器的输出信号都为线路信号,其电平约为0dBV(1V)是麦克风信号电平的100倍-1000倍其输出阻抗通常在100Ω至600Ω之间,Line Input(线路信号输入)接口的阻抗通常大于10,000Ω。有些音频接口有独立的Line Input,有的则是复合型。比如M-Audio Air192 | 4

M-Audio  Air192|4

图 M-Audio Air192 | 4

乐器信号 - Instrument Level Signal,乐器信号的电平位于麦克风信号和线路信号之间,通常以TS(大两芯)线缆传递,通常需要前级放大器将其提升到合适的线路电平等级;电吉他、电贝斯、带有拾音器的原声乐器输出的信号均为乐器信号,通常这些乐器的输出阻抗非常高,约在7,000Ω至15,000Ω甚至更高。因此你经常能看到话放、声卡的线路输入通道上有“Hi-Z(高阻抗)”或者“Line/Instrument”切换开关,能使线路输入接口的阻值增加,以适配乐器信号输入,有些音频接口则直接独立出来高阻乐器输入接口。乐器输入接口阻值通常在1MΩ(100万欧姆)左右。

在前文说过,如果乐器输入接口阻值过低时,信号会失真、高频丢失,声音听起来会很沉闷;而阻值过高时,会增加线路出现噪音的可能。而有一类设备能完美的解决这一问题,让你随心所欲的调节满意的音色。比如:

IK Multimedia的Z‑Tone系列产品可对这些变量进行控制,通过使用高质量的前置放大器,并配备可调的输入阻抗,以使各种拾音器都能发出其完美的声音。Z-Tone系列有两款相关产品,有体积较大的Z‑Tone DI和更紧凑的Z‑Tone Buffer Boost。

Z‑Tone Buffer Boost
图 Z‑Tone Buffer Boost

实际应用

如果将高阻抗输出输入到低阻抗麦克风电平输入中,它通常会使前置放大器过载。这将导致失真,甚至可能损坏前置放大器的电路

例如,如果你想将合成器、吉他等高阻信号插入调音台、音频接口的麦克风(XLR)输入,建议你使用DI盒转换,将高阻抗信号转换为低阻抗信号。

img

图 使用Z-Tone DI录制箱琴

注意:最好将DI盒尽可能靠近高阻抗输出源,较长的走线应将转换后的低阻抗信号传送到调音台或声卡。通俗点说就是,连接时,两芯线短,卡农线长。这将有助于节省更多的音频信号高端频率。

那么有的好奇的同学会问,低阻抗的输出接入高阻抗会怎样呢?按理论来说,低阻出,高阻入,很完美呀!但是…

举个栗子🌰,我们的麦克风是低阻输出,你的吉他单块效果器是高阻输入,串联在一起是理想的选择,也有一些朋友想实现这样的操作,让声音变得更有意思。但是你直接拿XLR卡农转TS大两芯,从麦克风插到效果器上,这样是有问题的。

问题在于,线路或乐器输入需要线路或乐器信号等级。线路和乐器信号的电压比麦克风信号高得多。

将低阻抗麦克风插入高阻抗乐器或线路输入会产生很低的电平信号。音频信号将接近接收端设备本底噪声,因此当你提升放大器的增益时也会产生更大噪声,这种不良的信噪比是很令人绝望的。

这时候你就需要Re-amp盒或者类似AXE I/O这种带有Re-amp功能的音频接口来实现你的这一想法。

img

图 IK Multimedia AXE I/O

tutorialspoint.com

Arjun Thakur

Digital Computers use Binary number system to represent all types of information inside the computers. Alphanumeric characters are represented using binary bits (i.e., 0 and 1). Digital representations are easier to design, storage is easy, accuracy and precision are greater.

There are various types of number representation techniques for digital number representation, for example: Binary number system, octal number system, decimal number system, and hexadecimal number system etc. But Binary number system is most relevant and popular for representing numbers in digital computer system.

Storing Real Number

These are structures as following below −

img

There are two major approaches to store real numbers (i.e., numbers with fractional component) in modern computing. These are (i) Fixed Point Notation and (ii) Floating Point Notation.

In fixed point notation, there are a fixed number of digits after the decimal point, whereas floating point number allows for a varying number of digits after the decimal point. 在定点表示法中,小数点后有固定位数,而浮点数允许小数点后有不同位数。

Fixed-Point Representation

This representation has fixed number of bits for integer part and for fractional part. For example, if given fixed-point representation is IIII.FFFF, then you can store minimum value is 0000.0001 and maximum value is 9999.9999. There are three parts of a fixed-point number representation: the sign field, integer field, and fractional field.

img

We can represent these numbers using:

  • Signed representation: range from -(2(k-1)-1) to (2(k-1)-1), for k bits.
  • 1’s complement representation: range from -(2(k-1)-1) to (2(k-1)-1), for k bits.
  • 2’s complementation representation: range from -(2(k-1)) to (2(k-1)-1), for k bits.

2’s complementation representation is preferred in computer system because of unambiguous property and easier for arithmetic operations.

Example

Assume number is using 32-bit format which reserve 1 bit for the sign, 15 bits for the integer part and 16 bits for the fractional part.

Then, -43.625 is represented as following:

img

Where, 0 is used to represent plus(+) and 1 is used to represent minus(-) . 000000000101011 is 15 bit binary value for decimal 43 and 1010000000000000 is 16 bit binary value for fractional 0.625.

The advantage of using a fixed-point representation is performance and disadvantage is relatively limited range of values that they can represent. So, it is usually inadequate for numerical analysis as it does not allow enough numbers and accuracy. A number whose representation exceeds 32 bits would have to be stored inexactly.

img

These are above smallest positive number and largest positive number which can be store in 32-bit representation as given above format. Therefore, the smallest positive number is 2-16 ≈ 0.000015 approximate and the largest positive number is (215-1)+(1-2-16)=215(1-2-16) =32768, and gap between these numbers is 2-16.

We can move the radix point either left or right with the help of only integer field is 1.

Floating-Point Representation

This representation does not reserve a specific number of bits for the integer part or the fractional part. Instead it reserves a certain number of bits for the number (called the mantissa or significand) and a certain number of bits to say where within that number the decimal place sits (called the exponent).

The floating number representation of a number has two part: the first part represents a signed fixed point number called mantissa. The second part of designates the position of the decimal (or binary) point and is called the exponent. The fixed point mantissa(定点尾数) may be fraction or an integer. Floating -point is always interpreted to represent a number in the following form: Mxre.

Only the mantissa m and the exponent e are physically represented in the register (including their sign). A floating-point binary number is represented in a similar manner except that is uses base 2 for the exponent. A floating-point number is said to be normalized if the most significant digit of the mantissa is 1.

img

So, actual number is (-1)s (1+m) x2(e-Bias), where s is the sign bit, m is the mantissa, e is the exponent value, and Bias is the bias number.

Note that signed integers and exponent are represented by either sign representation, or one’s complement representation, or two’s complement representation.

The floating point representation is more flexible. Any non-zero number can be represented in the normalized form of ±(1.b1b2b3 ...)2 x2n This is normalized form of a number x.

Example

Suppose number is using 32-bit format: the 1 bit sign bit(符号位), 8 bits for signed exponent(符号数), and 23 bits for the fractional part(小数). The leading bit 1 is not stored (as it is always 1 for a normalized number) and is referred to as a “hidden bit”.

Then −53.5 is normalized as -53.5=(-110101.1)2=(-1.101011) x25 , which is represented as following below,

img

Where 00000101 is the 8-bit binary value of exponent value +5.

Note that 8-bit exponent field is used to store integer exponents -126 ≤ n ≤ 127.

The smallest normalized positive number that fits into 32 bits is (1.000,000,000,000,000,000,000,00)2x26-126=2-126≈1.18x10-38 , and largest normalized positive number that fits into 32 bits is (1.111,111,111,111,111,111,111,11)2x2127=(224-1)x2104 ≈ 3.40x1038. These numbers are represented as following below,

img

The precision of a floating-point format is the number of positions reserved for binary digits plus one (for the hidden bit). In the examples considered here the precision is 23+1=24.

The gap between 1 and the next normalized floating-point number is known as machine epsilon. the gap is (1+2-23)-1=2-23 for above example, but this is same as the smallest positive floating-point number because of non-uniform spacing unlike in the fixed-point scenario.

Note that non-terminating binary numbers can be represented in floating point representation, e.g., 1/3 = (0.010101 ...)2 cannot be a floating-point number as its binary representation is non-terminating.

IEEE Floating point Number Representation

IEEE (Institute of Electrical and Electronics Engineers) has standardized Floating-Point Representation as following diagram.

img

So, actual number is (-1)s(1+m)x2(e-Bias), where s is the sign bit, m is the mantissa, e is the exponent value, and Bias is the bias number. The sign bit is 0 for positive number and 1 for negative number. Exponents are represented by or two’s complement representation.

According to IEEE 754 standard, the floating-point number is represented in following ways:

  • Half Precision (16 bit): 1 sign bit, 5 bit exponent, and 10 bit mantissa
  • Single Precision (32 bit): 1 sign bit, 8 bit exponent, and 23 bit mantissa
  • Double Precision (64 bit): 1 sign bit, 11 bit exponent, and 52 bit mantissa
  • Quadruple Precision (128 bit): 1 sign bit, 15 bit exponent, and 112 bit mantissa

Special Value Representation

There are some special values depended upon different values of the exponent and mantissa in the IEEE 754 standard.

  • All the exponent bits 0 with all mantissa bits 0 represents 0. If sign bit is 0, then +0, else -0.
  • All the exponent bits 1 with all mantissa bits 0 represents infinity. If sign bit is 0, then +∞, else -∞.
  • All the exponent bits 0 and mantissa bits non-zero represents denormalized number.
  • All the exponent bits 1 and mantissa bits non-zero represents error.

[TOC]

TERMINOLOGY

Processors / Microcontrollers / DSP

以下是ADI官方对Processors、Microcontrollers、DSP 等词的解释:

image-20210501094933998

image-20210501094947031

image-20210501094923111

image-20210501095225573

Harvard Architecture,即哈佛结构,是一种将程序指令存储和数据存储分开的存储器结构。哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。

Super Harvard Architecture(超级哈佛架构,SHARC),由ADI开发,具体解释见下方 BLACKFIN / SHARC。

Why Floating-Point DSP?

A digital signal processor’s data format determines its ability to handle signals of differing precision, dynamic range, and signal-to-noise ratios. Because floating-point DSP math reduces the need for scaling and probability of overflow, using a floating-point DSP can ease algorithm and software development. The extent to which this is true depends on the floating-point processor’s architecture.

Consistency with IEEE workstation simulations and the elimination of scaling are two clear ease-of-use advantages. High-level language programmability, large address spaces, and wide dynamic range allow system development time to be spent on algorithms and signal processing concerns, rather than assembly language coding, code paging, and error handling.

--<ADSP-21160 SHARC® DSP Hardware Reference>

总结一下就是:

  • (The data format is) Suitable to handle various kind of task (like differing precision, dynamic range, and signal-to-noise ratios).
  • (F-P DSP math) Reduces the need of scaling and probability of overflow.
  • High-level language programmability, large address spaces, wide dynamic range.

BLACKFIN / SHARC

以下是ADI官网对BLACKFIN 和 SHARC的描述

BLACKFIN

Blackfin® 16/32位嵌入式处理器提供软件灵活性和扩展能力,适合融合应用:多格式音频、视频、语音和图像处理、多模式基带和分组处理、控制处理以及实时安全。

SHARC

SHARC音频处理器产品系列采用ADI公司的SHARC®和SHARC+®数字信号处理(DSP)内核技术,提供确定性和极低处理延迟以及出色的MIPS/mW性能。SHARC处理器系列在浮点DSP市场占据主导地位,拥有出色的内核和存储器性能以及优异的I/O吞吐能力。SHARC具有多个产品版本和价位,能够为动态范围至关重要的许多应用提供实时浮点处理性能。

许多处理器集成了FIR/IIR硬件加速器,可分流内核的通用数字信号处理算法任务,从而使内核能够并行执行后处理算法,因而非常适合实时音频应用。广泛的SHARC+ SoC产品组合提供高达1GHz的性能可扩展性以及各种片内存储器配置和混合外设。对于以太网和USB等复杂的外设,一些SoC集成了ARM内核以便处理运行堆栈软件和其他微控制器任务。

以下文字是《ADSP-21479 EZ-Board Evaluation System Manual》全篇唯一出现blackfin关键字(Page28)的地方,但是21479不属于Blackfin系列,应该是错误来的。

image-20210520135616863

image-20210520135407091

BASIC KNOWLEDGE

原理图模块 是指用于构建SigmaStudio设计的模块。每个处理器可用的块显示在“工具箱”和“树形工具箱”窗口中,可以将其拖放到原理图中。

USBi

  • USBi features a standard Aardvark-compatible programming header.

  • USBi can be used for real-time tuning of Sigma-DSP with SigmaStudio

下图为USBi的功能框架:

image-20210518114358905

USBi在I2C总线上有一个EEPROM,地址为0x50。它用来向PC显示其供应商ID和产品ID,以及启动其内部程序。应该避免在你的系统设计中在这个地址上有任何其他的EEPROMs。

这个EEPROM没有写保护;因此,如果你试图写到地址0x50,你将覆盖USBi的板载EEPROM,USBi将停止工作。如果不把板子还给Analog Devices,就不能对USBi进行重新编程。大多数EEPROM被设置为地址0x50的方法是将其引脚A0 = 1 和A1 = A2 = 0。

Algorithms: Add/Remove, Grow/Reduce

每个原理图块代表一种或多种信号处理算法。算法的范围从非常简单的信号添加(如Signal Add)到高级系统组件(如Dynamic Bass Boost)。您可以从块中添加或删除算法以满足您的特定要求。如下所述,算法也可以增长。


添加算法:

您必须添加一种算法-通常与一组I / O引脚关联-才能使块起作用。要将算法添加到块,请右键单击该块,然后选择添加算法> IC#,然后选择算法的DSP IC。请注意,如果您的项目中有多个处理器(IC / DSP),则可以选择哪个DSP将运行算法,有关更多信息,请参见下文。

img

此时,如果需要,右键单击块的边界或标签以添加其他算法。(重要的是右键单击边框或标签;如果右键单击中心,则可能会显示用于输入参数值的弹出窗口。)

img

不包含算法的块将没有控件或引脚,并且您只会看到该块的名称(如下图所示)。必须在空块中添加算法,然后才能在原理图设计中使用它们。

img

注意:使用“树形工具箱”窗口时,总是为每个插入的块创建一个算法。但是,如果使用传统的“工具箱”窗口插入块,则可能还必须添加算法。

添加算法时,不仅要为模块选择计算方法,还要为算法选择特定的DSP关联。如果要连接多个DSP处理器,这一点很重要:通过将算法添加到模块中,可以共享模块和控件,并同时与多个DSP进行通信。

例如单个音量控制块具有用于所有算法的单个滑块控件。如果使用2个DSP处理器(IC 1(AD1940)和IC 2(ADAU1701))创建一个项目,然后选择“添加算法”,则系统将提示您要将该算法添加到哪个芯片。

img

可以将第一种算法分配给IC 1,将第二种算法分配给IC 2,但是它们共享音量块和单个滑块控件。请注意,您不能在不同的处理器之间建立连线,有关更多信息,请参见连线主题。


删除算法:

也可以从块中删除算法。要删除算法,请右键单击该块,然后选择“删除算法”。这将删除最后添加的算法(底部引脚)。如果该块仅包含一种算法,则删除该算法将导致一个空块


增长算法:

不断增长的算法意味着在该块的现有算法的基础上,保持相同的算法(在其上进行扩展)和相同的DSP关联(添加算法均不执行)。要增长算法,请右键单击该块,然后选择“增长算法”>“(算法名称)”>“(增长量)”。请注意,并非所有算法都可以使用增长。

理解添加和增长之间区别的最简单方法是使用混合器块。将交叉混合器(2个输入)拖到工作区中。右键单击并选择“增长算法”,请参见下面的示例。

  • 增加混音器会创建更多的混音器输出引脚,实际上,您正在创建共享公共输入的额外混音器输出通道。块中仍然只有一个算法。
  • 添加算法将创建单独的算法,这些算法共享控制窗口,但不共享输入/输出引脚或资源。在混频器示例中,一个附加的输入引脚,输出引脚和一个交叉混频器控件被添加到了该模块中。

减少算法:

减少与增加相反,减少了由“增加算法”操作创建的多余控件和引脚。像删除算法一样,reduce将删除从底部或最近增长的项目开始的控件/大头针。

img

Wires and Aliases

SigmaStudio原理图设计由与“导线”连接在一起的模块构建。导线定义了系统的信号流。

要创建原理图导线: 将鼠标光标移到块的引脚上,以便显示导线图标img。接下来,左键单击一个块引脚,然后在按住鼠标按钮的同时,将光标拖到另一个块的相应引脚上。输入引脚只能连接到输出引脚,而输出引脚只能连接到输入引脚。

img

选择:

要选择一条导线,请用鼠标左键单击它。选定的电线用绿色正方形(点)表示,如下所示。位置:

img

要更改导线的位置,请将鼠标光标放在一个点上。接下来,在导线点上单击鼠标左键,并在按住鼠标键的同时拖动光标以重新放置导线。

img

菜单:

右键单击导线以调出导线菜单。该菜单包括以下命令:

img

电线颜色:

电线根据其关联的DSP处理器进行着色。导线的输入和输出引脚必须与同一DSP关联,否则您将无法在引脚之间建立导线。具有多个处理器IC的项目的每个IC将具有不同的颜色。

img


引脚(导线)备注:

为了直观地组织项目,通常有助于创建备注,以在原理图中的信号流中提供清晰的连接参考(“跳转”)。一个备注由一对输入的备注和备注输出块组成。使用备注块可以减少长导线连接所造成的原理图窗口中的视觉混乱。

要创建备注,请右键单击块的输出引脚(蓝色引脚),然后从菜单中选择“备注”。

img

当您单击Alias时,将出现两个块,分别是输入和输出。备注输入自动连接到源模块的输出引脚。接下来,创建一条从备注输出块(在下面的示例中为备注2)到信号目标的导线。

img

注意:使用备注在功能上等同于用电线连接两个引脚。以下示例中的信号流与上面的备注示例相同。

img

Hardware Configuration Tab

硬件配置工作区允许您为设计选择一个或多个处理器。它还允许您设置SigmaStudio与硬件之间的通信。

要了解可以在“硬件配置”选项卡中访问的高级操作(包括“输出捕获”,“ Flash / E2Prom下载”,“寄存器控制”窗口和“寄存器读/写”窗口),请参阅“硬件Windows”部分中的主题。

要将处理器(IC / DSP)插入设计中:

  1. 用鼠标左键从工具箱中选择一个“处理器”:

    1. img
  2. 将处理器模块拖放到右侧的“硬件配置”窗口中:

    img

注意:一旦在“硬件配置”窗口中插入DSP,就会出现“原理图(Schematic)”选项卡。

在DSP处理器和硬件之间建立连接:

  1. 单击“通信渠道(Communication Channel)”类别(在“工具箱”列的底部)。
  2. 从列表中选择评估板或USB设备,并将其拖放到工作区中。
  3. 通过在通信通道和处理器模块之间画线来连接两个模块,从蓝色菱形到绿色菱形。对于使用AD1940的USB连接,工作空间中的单元格应如下所示:

注意:“通信通道”菜单列出了带有前缀EvalBoard的名称和板号。这些通信通道将在不使用评估板设置的平台上适用于相同的IC类型。还有通用的通信通道,USBSerialConv和USBi。(有关更多信息,请参见USB串行转换器通信通道或USBi。)

img

通信模块上USB标签 的颜色表示是否已建立USB通信通道。如果您已正确配置USB硬件,则背景色将为浅橙色或白色。如果未初始化通信,则背景将为红色。请注意,这仅表示USB连接处于活动状态,不能保证与SigmaDSP IC的通信或SigmaDSP硬件已正确配置。

img

连接所有板卡IC时,“已连接”背景色为白色,而仅连接部分IC(但不是全部)时为“橙色”。例如,ADAU1701评估板包括ADAU1701 IC和E2Prom IC。仅连接ADAU1701时,背景将为浅橙色,但同时连接ADAU1701和E2Prom IC时,背景将为白色。

img

https://wiki.analog.com/_detail/resources/tools-software/sigmastudio/gettingstarted/usbinterfaces/usbpic4.png?id=resources%3Atools-software%3Asigmastudio%3Agettingstarted%3Ausbinterfaces%3Ausbserialconverter)


EVAL-ADUSB1板开关和跳线:

  • S1-将闪存中保存的程序加载到SigmaDSP。
  • S2-选择当按下S1时将加载八个SigmaDSP程序中的哪一个。
  • S3-重置USB适配器板。
  • TP1-+ 5Vdc连接,用于适配器未通过PC的USB端口供电的情况。
  • TP2-接地,用于适配器未通过PC的USB端口供电的情况。
  • J3-当该接头连接器上有跳线时,将启用对闪存的写操作(用于存储SigmaDSP程序)。
  • D4-此LED指示USB板已通电。

可以使用SigmaStudio中的Flash Downloader工具将SigmaDSP程序和参数文件保存到USB板上的闪存中。通过将S2设置为适当的设置,然后按下程序加载按钮S1,可以将每个程序加载到SigmaDSP。请参阅Flash Downloader页面。 有关更多信息,请参见EVAL-ADUSB1数据手册,analog.com / sigmadsp。

Digital Attenuator

即数字衰减器, 与可变衰减器不同,数字衰减器在离散和有限衰减状态下切换。该切换通常以二进制步骤实现。数字衰减器采用半导体器件来实现每个衰减步骤。为此目的而使用的一些半导体器件包括:PIN二极管,MOSFET和GaAs MESFET。数字衰减器能够实现与固态开关速度相当的开关速率。数字衰减器使用的最常见逻辑类型 是CMOS逻辑电平和晶体管晶体管逻辑(TTL)。

数字衰减器利用驱动器电路来确定要使用的逻辑类型。驱动器电路的复杂性取决于所使用的位数。复杂度随着位数的增加而增加。通常根据数字衰减器设计提供的衰减状态对其进行分类。使用的位数决定了这些衰减状态。最高有效位提供最大的衰减,而最低有效位提供组件提供的最小衰减。其余位提供中间衰减值。通常,这些产品采用1位,5位,8位和6位数字衰减器。

如果选择了所有位,则数字衰减器旨在提供最大的额定衰减。另一方面,其最小衰减步长仅通过选择最低有效位来实现。数字衰减器在3G和4G蜂窝网络,点对点节点,中继器以及广泛的测试和测量应用中具有广泛的用途。

Shop Arrow.com选择了数字RF步进衰减器,数字音频衰减器等。 >>> read more

ASRC

异步采样速率转换器(ASRC,Asynchronous Sample Rate Converter)是一款可同时用于消费电子和专业应用的音频采样速率转换通用软件模块。 ASRC支持多种不同的采样速率配置。

ASRC软件模块 可用于以小步长改变采样频率,步长随着时间改变,且在变化过程中不生成任何输出音频干扰。 在许多多媒体系统中,时变采样速率的改变是非常重要的功能,例如能实现多个数据流的精密同步以及服务器和客户端的同步等。

ADI公司的ASRC实施方案经过高度优化,适合在ADI公司的Blackfin系列处理器上运行。它是一个基于ADI专利设计的独立自足软件模块。该模块已经过各种根据音频信号质量分析定义的策略质量测试。

ASRC模块是应用于PCM(脉冲编码调制)上的后处理模块,通过模拟输入、数字输入通道或解码应用的PCM输出接收数据。 ASRC模块能够处理多个通道的输入信息,并能够输出至同样多的通道。 开发的模块支持全面的重入和多实例。 ASRC模块是一个独立的模块,不依赖其他任何模块。 ADRC模块配备一个示例轻型包装器API,将模块插入至整体系统。 这使得该应用的系统集成简单易行。

ASRC INPUT/OUTPUT

ASRC输入和输出模块在原理图设计和硬件ASRC(异步采样率转换器)之间路由信号。

使用输入块的复选框来启用或禁用特定输入。使用输出块的下拉列表控件从可用的ASRC中进行选择。

  • 每个ASRC输出必须连接其输入,否则编译时将出错。
  • 可以看到,随着将更多的ASRC输出块拖到原理图中,下拉列表中的可用输出数量会减少,因为一次只能由一个块表示。
  • 要更改ASRC 输入采样率,请右键单击块名称,然后选择“设置采样率”,这将打开“采样率”窗口(默认值为44.1 kHz)。
img

Limiter 限幅器

限幅器(Limiter)是指能按限定的范围削平信号电压波幅的电路,又称削波器。限幅电路的作用是把输出信号幅度限定在一定的范围内,亦即当输入电压超过或低于某一参考值后,输出电压将被限制在某一电平(称作限幅电平),且再不随输入电压变化。

LSB-aligned

LSB(Least Significant Bit)是“最低有效位”。MSB(Most Significant Bit)是“最高有效位”。

最高有效位是指二进制中最高值的比特,如:

  1. 在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响。

  2. 在十进制的15,389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大。比较与之相反的“最低有效位”(LSB)。

  3. 汇编中,比如8位2进制数10000001,其中第一个1是MSB,第二个1是LSB。1(MSB)100 0011(LSB)

  4. 在计算时,如果是整数,那么小数点(实际上是没有小数点的,但就把那一位和下一位之间看作有)在LSB后面;如果是小数,小数点在MSB后面;其中MSB在有符号数中又是符号位。

在网络通信方面,大家说的更多的是:“Big-Endian”和“Small-Endian”的问题。指的都是对于多字节的数据类型(比如4字节的32位整数),其多个字节的顺序问题,是最高字节在前(Big-Endian)还是最低字节在前(Small-Endian)。

比如对于123456789这个整数,其16进制为0x075BCD15,那么按照Big-Endian的方式,它在网络上传输(或者在内存里存储)的4个字节依次是:07 4B CD 15,而Small-Endian的顺序正相反,是:15 CD 4B 07

MSBLSB 虽然跟这个事情看起来有点相似,但不是一回事。

通常,一个芯片的管脚中,对于一个多比特的信号,比如32根的地址线,从低开始按0到31编个号。MSB就是31,LSB就是0。那么如果标记为:ADDR[31:0]就是MSB first的方式,如果标记为ADDR[0:31]就是LSB first的方式。

MSB LSB:起始地址为最高位, 最后地址为最低位。

LSB MSB:起始地址为最低位,最后地址为最高位。

比如AD中,8位,最低有效位指D0

Cofficient Write

参数写入,是指对参数中两组 寄存器参数集 的系数写入。当然也可以单独写入某个寄存器的数值。

可写入的参数如:filter coefficients、limiter settings、volume control settings等。

每组 寄存器参数集 可写入至多 160个参数(32个过滤器*5个系数)。

Filters

在ADAU1772的General(2nd Order) Filter Setting中有几项过滤器,分别是 Parametric 、 Shelving 、 General HP/LP/BP/BS 、 Butterworth/Bessel 、 Tone Control、IIR Coefficient 、First Order Filters 、All Pass 、Peaking 、Notch 、 Chebyshev 共11中过滤器。

image-20210428152357233

SigmaStudio

以下简称sigma

Capture

Capture 窗口会捕捉开发者对设置的相关改动记录。

image-20210422165857465

Register Control

image-20210422163633005

Output/Serial Port

下压式音量按键

使用前需要进行跳线,跳线方法如下:

image-20210422163804275

控制界面如下:

image-20210422163228410

?? Time

Initial PB Volume 初始化下压式按键的音量值

Gain Step 增益速度

Ramp Speed 增加速度

Converters Controlled by PushButton Volume 被控制的转换器

Download Program

image-20210422170248954

image-20210422170328013

Microphone

TRS 1/8-inch mini-plug stereo headphones

查看源图像

standard 0.100” headers

查看源图像

Bias Setting

image-20210423102647330

ADAU1772包括两个麦克风偏置输出:MICBIAS0和MICBIAS1。这些引脚为驻极体模拟麦克风提供电压参考。

  1. MICBIASx引脚也可用于为具有独立电源引脚的数字或模拟MEMS麦克风干净地提供电压。
  2. MICBIASx电压在麦克风偏置控制寄存器(地址0x002D)中设置。可以利用这个寄存器对MICBIAS0或MICBIAS1的输出进行启用或禁用。
  3. 增益选项提供了两种可能的电压:0.65 × AVDD或0.90 × AVDD。许多应用要求只启用两个偏置输出中的一个。当系统中使用许多传声器时,或者当传声器在PCB上的位置不允许一个引脚对所有传声器进行偏置时,两个偏置输出都应该被启用。

dataword byte : 在突发模式(burst mode)中使用。

data byte : 在单字模式(single-word mode)下写入。

由DSP启动1772

1772启动可以通过以下两种方式执行:

  1. 通过SPI或I2C协议,将执行代码写入到SRAM的方式来执行
  2. 通过将代码写入EEPROM,并设置自启动的方式来读取和执行代码。

由DSP启动1772,其实是通过上述第一种方式来进行,其中又可以再分为两种方法:

  1. 通过在SigmaStudio中导出项目系统文件,并加载至DSP项目工程的方式来执行,具体方法后述。
  2. 通过SPI协议,由DSP片选1772后逐各写入寄存器的方式来执行(注意:使用本方法时,单次写入量不可超过128个字节)。

通过导出系统文件的方式

在SigmaStudio中,执行过 Link Compile Downloa 后,可以点击 Export System Files 导出项目工程文件(C格式)

image-20210510084234044,并将 .h_PARAM.h_REG.h 三个类型文件插入到DSP的项目文件中。

注意:如图所示,所选的三个文件为主IC(1772)的工程文件,另外三个同后缀名的IC_2是另一个芯片(EEPROM)的文件,看情况决定是否使用。

image-20210510091831286

其中,_PARAM.h_REG.h 提供了对寄存器的定义,.h 文件中提供了唯一的执行方法 default_download_IC_1(),在DSP项目工程文件中执行即可。

image-20210510092602442

注意:本文件依赖于 SigmaStudioFW.h 头文件,image-20210510093228165,可以复制粘贴以下原代码,也可以在SigmaStudio的安装目录下查找。

需要注意的是,以下所有宏定义内容都为空,需要开发者自行编写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
* File: SigmaStudioFW.h
*
* Description: SigmaStudio System Framwork macro definitions. These
* macros should be implemented for your system's software.
*
* This software is distributed in the hope that it will be useful,
* but is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* This software may only be used to program products purchased from
* Analog Devices for incorporation by you into audio products that
* are intended for resale to audio product end users. This software
* may not be distributed whole or in any part to third parties.
*
* Copyright � 2008 Analog Devices, Inc. All rights reserved.
*/

#ifndef __SIGMASTUDIOFW_H__
#define __SIGMASTUDIOFW_H__

/*
* TODO: Update for your system's data type
*/
typedef unsigned short ADI_DATA_U16;
typedef unsigned char ADI_REG_TYPE;

/*
* Parameter data format
*/
#define SIGMASTUDIOTYPE_FIXPOINT 0
#define SIGMASTUDIOTYPE_INTEGER 1

/*
* Write to a single Device register
*/
#define SIGMA_WRITE_REGISTER( devAddress, address, dataLength, data ) {/*TODO: implement macro or define as function*/}

/*
* TODO: CUSTOM MACRO IMPLEMENTATION
* Write to multiple Device registers
*/
#define SIGMA_WRITE_REGISTER_BLOCK( devAddress, address, length, pData ) {/*TODO: implement macro or define as function*/}

/*
* TODO: CUSTOM MACRO IMPLEMENTATION
* Writes delay (in ms)
*/
#define SIGMA_WRITE_DELAY( devAddress, length, pData ) {/*TODO: implement macro or define as function*/}

/*
* Read device registers
*/
#define SIGMA_READ_REGISTER( devAddress, address, length, pData ) {/*TODO: implement macro or define as function*/}

/*
* Set a register field's value
*/
#define SIGMA_SET_REGSITER_FIELD( regVal, fieldVal, fieldMask, fieldShift ) \
{ (regVal) = (((regVal) & (~(fieldMask))) | (((fieldVal) << (fieldShift)) && (fieldMask))) }

/*
* Get the value of a register field
*/
#define SIGMA_GET_REGSITER_FIELD( regVal, fieldMask, fieldShift ) \
{ ((regVal) & (fieldMask)) >> (fieldShift) }

/*
* Convert a floating-point value to SigmaDSP (5.23) fixed point format
* This optional macro is intended for systems having special implementation
* requirements (for example: limited memory size or endianness)
*/
#define SIGMASTUDIOTYPE_FIXPOINT_CONVERT( _value ) {/*TODO: IMPLEMENT MACRO*/}

/*
* Convert integer data to system compatible format
* This optional macro is intended for systems having special implementation
* requirements (for example: limited memory size or endianness)
*/
#define SIGMASTUDIOTYPE_INTEGER_CONVERT( _value ) {/*TODO: IMPLEMENT MACRO*/}

#endif

通过写入寄存器的方式

在 Capture 面板中,对寄存器的所有操作都会以 参数名地址数据 的方式展现,几乎所有参数名都可以在《ADAU1772》中查询。

image-20210510091150821

  1. 全选面板中所有的值,可以点选第一个值,按 SHIFT + END 来全选,然后右键选择 Save as Raw Data 下的 Address+Data(Text)... ,会以文本格式 (.txt) 保存。

image-20210510085052186

保存结果:

image-20210510085331956

  1. 将地址和值整理到DSP项目文件中进行写入,这种方式不太好操作,需要开发人员自行编写对应的代码,较为不友好。

CHIP-ADAU1772

  • ADAU1772以下简称1772
  • 《Evaluation Board User Guide UG-477》以下简称UG

I2S及I2C接口

image-20210513171416187

image-20210513171524562

USBi 仿真器

  • USBi驱动安装:进入设备管理器,安装驱动在SigmaStudio安装目录 \Analog Devices\SigmaStudio 4.6\USB drivers\ 下。
  • 连接到USBi未成功时是红色,设备驱动安装且连接成功时,USBi 在sigma中会由红变绿。
  • USBi作为中间板对1772进行控制,在USBi右键可以控制1772设备开断,开断时板上D1区的VDD指示灯也会通断(见page10)。
  • 如果需要对设备进行实时控制,请务必记得打开设备,否则无法操作。

image-20210428150645112

  • USBi将例程down到了板子上ADAU1772的SRAM上,断电就没有了。USBi的这种调试是为了快速验证功能,最终需要把这个例程的代码导出,并通过单片机的 启动工程集成,烧写到单片机中,实现单片机启动。

image-20210427110916316

编译烧录

  • 烧录按键如下:
image-20210427162529600
  • 编译完毕后,SS会在右边的output窗体里显示编译结果,如有错误会提示错误信息,用户可据此信息去修改设计;
  • 如成功则会显示资源占用信息,用户可根据百分比来增减模块。

image-20210427111013493

芯片

板上共有4颗芯片,分别是 DSPEEPROM线性整流芯片升压芯片

image-20210427171901213

U2: EEPROM

ST官网对M24C32-F串行E2PROM的描述:

容量:32-Kbit

电压:1.7 ~ 5.5V

温差:-40 ~ +85℃

Snipaste_2021-04-27_17-18-01

Snipaste_2021-04-27_17-18-18

输入输出控制

供电电压

以下为实际测量数值

USB_5V SCL/SDA(H) VDD IOVDD AVDD
接USBi实测电压(V)-3.3V档 3.471 1.961 1.997 1.997 1.988
接21479实测电压(V)-3.3V档 4.463 3.518 3.518 3.518 3.518
接21479实测电压(V)-1.8V档 4.468 2.260 1.934 1.934 1.933
接21479实测电压(V)-3.3V档 3.3 3.3088

HP输出

HP即Headphone缩写,HP输出有两个输出端,分别是DAC0 和 DAC1,分别对应为 EVAL板 上的 OUT R(HP Right) 和 OUT L(HP Left)。

image-20210427152251539

image-20210427143628880

输出静音

image-20210427153425633

输出断电

关于HP输出的寄存器 HP_EN_RHP_EN_L 说明:

image-20210427152528194

0x310011 0001 ,最后两位 01HP_PDN_L 中的 01

输出音量控制

  • 对输出音量进行控制需要先对S5、S6进行跳针。

image-20210427110159648

TALKTHRU / DSP BYPASS

DSP BYPASS MODE When DSP bypass mode is enabled, a direct path from the ADC outputs to the DACs is set up to enable bypassing the core processing to listen to environmental sounds.

This is useful for listening to someone speaking without having to remove the noise cancelling headphones. The DSP bypass path is enabled by setting an MPx pin low.

Figure 92 shows the DSP bypass path disabled, and Figure 93 shows the DSP bypass path enabled by pressing the push-button switch.

image-20210427144110884

The DSP bypass feature works for both analog and digital microphone inputs.

  • Enabled when a switch connected to an MPx pin that is set to DSP bypass mode is closed and the MPx pin signal is pulled low.

Pressing and holding the switch closed enables the DSP bypass signal path as defined in the TALKTHRU register (Address 0x002A).

The DAC volume control setting is switched from the default gain setting to the new TALKTHRU_GAINx register setting (Address 0x002B and Address 0x002C).

  • DSP bypass is enabled only on ADC0 and ADC1.

The DSP bypass signal path is from the output of ADCx to the input of the DAC(s). When DSP bypass is enabled, the current DAC volume setting is ramped down to −95.625 dB and the DSP bypass volume setting is ramped up to avoid pops when switching paths.

CHIP-ADSP21479

芯片及评估板资料

关于芯片特性:《ADSP-21477 / ADSP-21478 / ADSP-21479》

关于评估板:《ADSP-21479 EZ-Board® Evaluation System Manual》

仿真器配置

与《HPUSB, USB, and HPPCI Emulators User’s Guide》所描述的并不完全一致。

image-20210519104127472

下图为实际安装后,查看官方对21479提供的相关仿真器的信息和从设备管理器中可查看到的设备信息。

image-20210519104034539

image-20210519104001549

本评估板提供的仿真器使用的是14针脚的HPPCI JTAG,PCI仿真器支持的操作模式取决于目标机上14针JTAG接头的连接方式。表1-2显示了目标机JTAG头在传统和自动检测模式下的连接方式。

image-20210519105525684

注意:其中3口是无针脚的防呆设计。

HPUSB JTAG模式

在实际开发中,使用的是HPUSB传统模式。

传统模式用于不提供目标VDDIO输入的旧目标,供仿真器自动检测电压。 在这种模式下,JTAG信号运行的电压是通过配置器工具手动设置的。在配置目标时,配置器工具提供了一个电压选择设置。

Legacy mode is used for older targets that do not provide a target VDDIO input for automatic voltage detection by the emulator.

In this mode, the voltage at which the JTAG signals run is set manually through the Configurator utility.

The configurator utility provides a voltage selection setting when configuring the target.

注意:HPUSB-ICE 和 USB-ICE 仿真器都不支持自动电压检测模式。

以下为JTAG的电路示意:

image-20210519111126670

I2C/TWI串行通信

根据文件《ADSP-21477_21478_21479_cn》的描述,可知21479支持TWI接口,进而支持I2C。

image-20210519112357298

21479没有针对TWI做专门的驱动,Blackfin系列大部分产品都提供了。

DAI接口

Digital Application Interface,即数字应用接口。所有数字应用接口都以SRU的方式连接至处理器。

SRU(Signal Routing Unit),即信号路由单元。SRU是处理器内部的一个提供超大系统信号流的复杂路由系统。通过SRU可以将DAI针脚利用不同组合路由至不同的内部设备。DAI所能连接的设备在每块评估板上都不同。下图展示了DAI接口的针脚、所连接的设备及其网络、所连接的开关和默认设置。

要在扩展II接口上使用DAI,请先用相关开关禁用驱动DAI引脚上的任何信号。

image-20210520110207578

image-20210520110221920

DPI接口

Digital Peripheral Interface,即数字外围(设备)接口 或 数字设备接口。DPI连接至第二块信号路由单元(SRU2)。

与SRU相似,SRU2也是一块能将大型系统信号流路由至处理器的复杂路由系统。

同样,每块评估板的DPI所连接的设备也不同。下图同:

image-20210520111001486

image-20210612111607855

image-20210612111848897

SRU.H

SRU()

以下是 <sru21479.h> 中对 SRU() 的宏定义,SRU2() 与其相同 :#define SRU2(out,in) SRU(out,in)

读取、修改和写回一个特定的SRU寄存器,以改变一个SRU的分配(即选择一个输入到一个输出)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
** Macro: SRU
** Reads, modifies and writes back a particular SRU register to change a single
** SRU assignment (i.e. selects an input to an output).
*/
# ifdef _LANGUAGE_C
# define SRU(out,in) \
do { \
*(volatile unsigned int *) in##_REG = \
((unsigned int)sru_field(out,in) | \
(* (volatile unsigned int *) in##_REG & (unsigned int)sru_mask(out,in))); \
} while (0)
# else
# define SRU(out,in) \
r0=dm(in##_REG); \
r1=sru_mask(out,in); \
r0=r0 and r1; \
r1=sru_field(out,in); \
r0=r0 or r1; \
dm(in##_REG)=r0;
# endif

sru_field()

为一个给定的输入和输出信号创建位域(bit field)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
** Macro: sru_field
** Creates the bit field for a given input and output signal.
*/
#define sru_field(out,in) \
(((in##_GROUP & GROUP_A) >> LOG_GROUP_A) * A_##out \
|((in##_GROUP & GROUP_B) >> LOG_GROUP_B) * B_##out \
|((in##_GROUP & GROUP_C) >> LOG_GROUP_C) * C_##out \
|((in##_GROUP & GROUP_D) >> LOG_GROUP_D) * D_##out \
|((in##_GROUP & GROUP_E) >> LOG_GROUP_E) * E_##out \
|((in##_GROUP & GROUP_F) >> LOG_GROUP_F) * F_##out \
|((in##_GROUP & GROUP_G) >> LOG_GROUP_G) * G_##out \
|((in##_GROUP & GROUP_H) >> LOG_GROUP_H) * H_##out \
|((in##_GROUP & GROUP_I) >> LOG_GROUP_I) * I_##out \
|((in##_GROUP & GROUP_A2)>> LOG_GROUP_A2)* A2_##out \
|((in##_GROUP & GROUP_B2)>> LOG_GROUP_B2)* B2_##out \
|((in##_GROUP & GROUP_C2)>> LOG_GROUP_C2)* C2_##out ) << in##_SHIFT

sru_mask()

创建一个掩码,可用于清除属于给定输入和输出信号的位域。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
** Macro: sru_mask
** Creates a mask which can be used for clearing the bitfield belonging
** to the given input and output signal.
*/
#define sru_mask(out,in) \
~((((in##_GROUP & GROUP_A) >> LOG_GROUP_A) * MASK_A \
|((in##_GROUP & GROUP_B) >> LOG_GROUP_B) * MASK_B \
|((in##_GROUP & GROUP_C) >> LOG_GROUP_C) * MASK_C \
|((in##_GROUP & GROUP_D) >> LOG_GROUP_D) * MASK_D \
|((in##_GROUP & GROUP_E) >> LOG_GROUP_E) * MASK_E \
|((in##_GROUP & GROUP_F) >> LOG_GROUP_F) * MASK_F \
|((in##_GROUP & GROUP_G) >> LOG_GROUP_G) * MASK_G \
|((in##_GROUP & GROUP_H) >> LOG_GROUP_H) * MASK_H \
|((in##_GROUP & GROUP_I) >> LOG_GROUP_I) * MASK_I \
|((in##_GROUP & GROUP_A2)>> LOG_GROUP_A2)* MASK_A2\
|((in##_GROUP & GROUP_B2)>> LOG_GROUP_B2)* MASK_B2\
|((in##_GROUP & GROUP_C2)>> LOG_GROUP_C2)* MASK_C2) << in##_SHIFT)

示例

如下图所示,1~8的LED灯珠都与一个处理器针脚相连。DPI和DAI在此处并没有严格划分界限,但是用法上仍有些差异,如前三个LED连接的是DPI针脚,其函数SRU()的第一个参数写的是 FLAG,而其他 DAI 的第一个参数是 LOW

image-20210520113025876

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void Init_LEDs(void)
{
/* 设置SRU和路由,使标志引脚连接到DPI引脚缓冲区 */

/* 只使用标志4至15,标志0至3在DPI上不可用。 */

SRU(FLAG4_O,DPI_PB06_I); /* 将 Flag4 输出 连接到 DPI_PB06 输入(用于LED1) */
SRU(FLAG5_O,DPI_PB13_I); /* 将 Flag5 输出 连接到 DPI_PB13 输入(用于LED2) */
SRU(FLAG6_O,DPI_PB14_I); /* 将 Flag6 输出 连接到 DPI_PB14 输入(用于LED3) */

SRU(LOW,DAI_PB03_I); /* connect Input LOW to LED4 */
SRU(LOW,DAI_PB04_I); /* connect Input LOW to LED5 */
SRU(LOW,DAI_PB15_I); /* connect Input LOW to LED6 */
SRU(LOW,DAI_PB16_I); /* connect Input LOW to LED7 */
SRU(LOW,DAI_PB17_I); /* connect Input LOW to LED8 */

/* 使用以下顺序启用缓冲器:高电平->输出,低电平->输入 */

SRU(HIGH,DPI_PBEN06_I); /* LED1 */
SRU(HIGH,DPI_PBEN13_I); /* LED2 */
SRU(HIGH,DPI_PBEN14_I); /* LED3 */
SRU(HIGH,PBEN03_I); /* LED4 */
SRU(HIGH,PBEN04_I); /* LED5 */
SRU(HIGH,PBEN15_I); /* LED6 */
SRU(HIGH,PBEN16_I); /* LED7 */
SRU(HIGH,PBEN17_I); /* LED8 */

/* 将标志引脚设置为输出 */
sysreg_bit_set( sysreg_FLAGS, (FLG4O|FLG5O|FLG6O) );

/* 清除标志引脚 */
sysreg_bit_clr( sysreg_FLAGS, (FLG4|FLG5|FLG6) );
}

定时器

《ADSP-21477_21478_21479_cn》

image-20210611170204474
image-20210611170253655
image-20210611170342735
image-20210611170355842

创建定时器

1
2
3
4
5
6
7
8
/*
* Install and enable a handler for the high priority core timer interrupt.
*/
adi_int_InstallHandler(ADI_CID_TMZHI, /*iid - high priority core timer */
timer_isr, /*handler*/
(void *)&timer_isr_count1, /*handler parameter*/
true /*do enable*/
);

定时器中断句柄

来自实例《core_timer》:

  • 在定时器中断句柄 timer_isr 里面,不能调用标准IO函数,或者更新非volatile全局变量
  • 可以使用处理程序参数来识别被处理的中断 iid,并通过中断特定的回调指针参数 handlerArg 来访问数据。
image-20210612151008408

EXAMPLES

EXP1

本案例使用麦克风采集信号并从前两个通道输入,经过信号增益放大器调整后经过立体声通道输出。

具体步骤如下:

  1. 从左侧 树状工具箱(TreeToolBox)中拖出1772和USBi,并进行连接。

image-20210428094527305

  1. 原理图(SCHEMATIC) image-20210506150111553中需要对输入输出路径进行定义,在此处定义的所有图形编程内容都是对 可编程增益放大器(PGA)的使用,即此处的输入到输出所有内容都不经过 信号通路(SIGNAL ROUTING) 选项卡中的 音频处理核心(AUDIO PROCESSING CORE),是由 核心输入选择器(CORE INPUT SELECTION)完成的,也可以理解为PGA就是在其中,且PGA的设置在原理图中进行。

image-20210506145903478

  1. 在原理图中,从左侧 image-20210506150230833 拖出组件并连线如下,其中需要用到四个通道中的第1及第2通道,每个通告分别连接到一个 线性增益器(LINEAR GAIN),增益50分贝,将原本的麦克风信号从-60分贝左右提升一下。然后经过 全通角过滤器(ALL POLE FILTER),对1500Hz以下的声音增益10分贝。再经过 分线器(T CONNECTION),将信号分别传输给 分贝显示器(DISPLAY DBREG)输出通道(OUTPUT)

image-20210428095433721

image-20210506144919655

  1. 另,PGA的设置还需要在 PGA/ADC 选项卡中进行设置:
  • 启用PGAxPGAx Boost
  • 启用 Micx Bias
  • 调整 各通道的增益大小等

image-20210506145534521

  1. 信号通路 选项卡进行设置,使信号不经过 音频处理核心 ,启用 输出ASRC源选择器(OUTPUT ASRC SOURCE SELECT) ,信号经流如图示:

image-20210506150516695

  1. ​ 如果设置芯片使用,可以在 芯片控制(CHIP CONTROL)选项卡中设置性能增强模式

image-20210506151533990

  1. 接入正常的TS接口麦克风即可输入正常波形。

EXP2

本案例为PLL及时钟案例,首先需要明确以下几点:

  1. 1772的工作频率为12.288兆赫,PLL的输出频率被要求一定是24.576兆赫。
  2. 且从MCLKIN输入的频率范围为8至27兆赫,可以通过整数或分数分频来获得1772所需的工作频率(最终必须是12.288兆赫)。
  3. 通过设置4个参数 xRNM 对PLL进行参数调整,其中整数倍分频时只有在 MCLKIN = 12.288MHzMCLKIN = 24.576MHz 时可用。

已知,MCLK的输入频率16.625MHz,符合输入范围要求,以及最终目标输出频率24.576MHz。

首先启用PLL,点击image-20210513100438475,然后通过对 PLL M and N Calculator 进行设置,并点击 Load Parameters 进行自动计算和加载即可。

在主时钟源选项(Main Clock Source)中选择经过PLL处理的时钟源,并设置主时钟和核心时钟的分频率为 1/2即可。

从旁边也可以看到自动计算出来的分频系数:image-20210513100800163

image-20210513100908671

除了可以直接应用 SigmaStudio 的 load parameters 直接进行参数计算外,可以参考《在linux上编写求解ADAU1772的PLL系数》文章,自行系数计算。

EXP3

本例中主要完成TWI代码的编写,具体可以参见《I2C通信》笔记。以下是一开始的开发思路:

利用ADI官方提供(导出)的C代码,通过I2C协议向ADAU1772 codec芯片写入寄存器值,在ADAU寄存器写入的C代码中,依赖头文件<SigmaStudioFW.h>,其所有宏定义类型的函数都需要用户自行定义。

image-20210520095648245

Arduino示例

在Github上的 ADAU1761-Self-Boot-With-Arduino 中,适用于 Arduino 和 ADAU1761 的寄存器块(WRITE_REGISTER_BLOCK)定义实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void SIGMA_WRITE_REGISTER_BLOCK(byte IC_address, word subAddress, int dataLength, byte pdata[]) {

// start I2C transfer
if (!i2c_start((IC_address)|I2C_WRITE)) {
Serial.println("I2C device busy for WRITE REGISTER BLOCK");
return;
}

// write subAddresses. (ADAU1761 needs the 16 bit subAddress written as two 8 bit bytes with an "ACK" inbetween
uint8_t addressLowByte = subAddress & 0xff;
uint8_t addressHighByte = (subAddress >> 8);

i2c_write(addressHighByte);
i2c_write(addressLowByte);

if (dataLength < 50 ) {
for (int i=0; i<dataLength; i++) {
i2c_write(pdata[i]); //write data bytes
}
}
else {
for (int i=0; i<dataLength; i++) {
i2c_write(pgm_read_byte_near(pdata + i)); //write data bytes from PROGMEM (for param and program data)
}
}
i2c_stop(); // stop the I2C communication

}

在MBED网站中,大量往右对ADAU1701的 <SigmaStudioFW.h> 提供了支持,原网页如:ADAU1701

将宏定义改为函数形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void SIGMA_WRITE_REGISTER_BLOCK(int devAddress, int address, int length, ADI_REG_TYPE *pData ) {
int ii = 0;
int zz = 0;
Tx_Idx = 0;

/*----- Transmission Phase -----*/
ThisBufferSize = Address_Length + length;

I2C1_Buffer_Tx[0] = (address & 0xFF00)>>8;
I2C1_Buffer_Tx[1] = address & 0x00FF;

for(zz=0;zz<length;zz++){
I2C1_Buffer_Tx [zz + Address_Length] = pData[zz];
}
Tx_Idx = 0;
for(ii =0;ii < ThisBufferSize;ii++){
NextBufferEnd = ThisBufferSize;//I2C1_numbytes[ii];
if(ii == 0){
I2C_GenerateSTART(I2C1, ENABLE);
}
/* Send data */
while(Tx_Idx < NextBufferEnd)
{

}
}
}

void SIGMA_WRITE_DELAY(int devAddress, int length, ADI_REG_TYPE *pData )
{
int nCount=0;
nCount=0xFFFFF;
for(; nCount != 0; nCount--);
}

具体的代码已经贴在《I2C通信》了,21478和21479支持TWI的寄存器控制,但是更为复杂,官方没有给示例,因此使用了引脚高低高低电平的控制来实现通信。

数字逻辑分析仪

在EXP3中会频繁采集I2C、I2S、SPI等通信协议发过来的数据,因此需要使用数字逻辑分析仪进行数据采集和分析,在本次开发过程中使用了两种数字逻辑分析仪,分别是 USBee SuiteSaleae Logic ,推荐使用后者,软件更夹稳定、成熟和易使用。如果采用前者,那么软件经常崩溃。后者在采集I2S等高速通信协议中的电平信号时,需要将采样速率提升一下,24MS/s 的速度仍然能会采样变形。

image-20210623134058687
image-20210623134114244
image-20210623133953887

image-20210623134006076

linuxize.com

The GNU Compiler Collection (GCC) is a collection of compilers and libraries for C, C++, Objective-C, Fortran, Ada, Go , and D programming languages. A lot of open-source projects, including the Linux kernel and GNU tools, are compiled using GCC.

This article explains how to install GCC on Ubuntu 20.04.

Installing GCC on Ubuntu 20.04

The default Ubuntu repositories contain a meta-package named “build-essential” that includes the GNU compiler collection, GNU debugger, and other development libraries and tools required for compiling software.

To install the Development Tools packages, run the following command as root or user with sudo privileges :

1
2
sudo apt update
sudo apt install build-essential

The command installs a lot of packages, including gcc, g++ and make.

You may also want to install the manual pages about using GNU/Linux for development:

1
sudo apt-get install manpages-dev

Verify that the GCC compiler is successfully installed by running the following command that prints the GCC version:

1
gcc --version

Ubuntu 20.04 repositories provide GCC version 9.3.0:

1
2
3
4
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

That’s it. GCC tools and libraries have been installed on your Ubuntu system.

Compiling a Hello World Example

Compiling a basic C or C++ program using GCC is pretty easy. Open your text editor and create the following file:

1
nano hello.c

hello.c

1
2
3
4
5
6
7
// hello.c
#include <stdio.h>

int main() {
printf("Hello, world!\n");
return 0;
}

Save the file and compile it into an executable:

1
gcc hello.c -o hello

This creates a binary file named hello in the same directory where you run the command.

Execute the hello program with:

1
./hello

The program should print:

1
Hello World!

Installing Multiple GCC Versions

This section provides instructions about how to install and use multiple versions of GCC on Ubuntu 20.04. The newer versions of the GCC compiler include new functions and optimization improvements.

At the time of writing this article, the default Ubuntu repositories include several GCC versions, from 7.x.x to 10.x.x.

In the following example, we will install the latest three versions of GCC and G++.

Install the desired GCC and G++ versions by typing:

1
sudo apt install gcc-8 g++-8 gcc-9 g++-9 gcc-10 g++-10

The commands below configures alternative for each version and associate a priority with it. The default version is the one with the highest priority, in our case that is gcc-10.

1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8

Later if you want to change the default version use the update-alternatives command:

1
2
3
4
5
6
7
8
9
10
11
sudo update-alternatives --config gcc
There are 3 choices for the alternative gcc (providing /usr/bin/gcc).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-10 100 auto mode
1 /usr/bin/gcc-10 100 manual mode
2 /usr/bin/gcc-8 80 manual mode
3 /usr/bin/gcc-9 90 manual mode

Press <enter> to keep the current choice[*], or type selection number:

You will be presented with a list of all installed GCC versions on your Ubuntu system. Enter the number of the version you want to be used as a default and press Enter.

The command will create symbolic links to the specific versions of GCC and G++.

Conclusion

We’ve shown you how to installed GCC on Ubuntu 20.04. You can now visit the official GCC Documentation page and learn how to use GCC and G++ to compile your C and C++ programs.

If you hit a problem or have feedback, leave a comment below.

Linux分区与挂载

分区表

分区表(partition table)是将大表的数据分成称为分区的许多小的子集,类型有FAT16, FAT32, NTFS, exFAT, Ext2/3/4, HFS+, VMFS。另外,分区表的种类划分主要有:range(范围)、list(列表)和hash(散列)分区。划分依据主要是根据其表内部属性。同时,分区表可以创建其独特的分区索引。倘若硬盘丢失了分区表,数据就无法按顺序读取和写入,导致无法操作。

Kali Linux支持的分区表类型:aix、amiga、bsd、dvh、gpt、mac、msdos、pc98、sun、atari 及 loop。

磁盘结构

磁盘结构

磁盘主要分为以下结构:

  • 磁头(head):对磁盘的数据进行读写
  • 磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。 磁盘上的磁道是一组记录密度不同的同心圆
  • 扇区(sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区。硬盘的第一个扇区,叫做引导扇区。 一个扇区的大小为512个字节。
  • 柱面(cylinder):在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面。

整个磁盘的存储大小为: 存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

磁盘的使用

一块新的硬盘或者U盘等外部设备在插入PC后,需要完成以下事情:

  • 在/dev/下创建一个新的目录,用来代表该磁盘。如/dev/hda,/dev/hdb等。
  • 磁盘最开始需要进行格式化,使用mkfs命令为磁盘进行格式化,确定文件系统类型。
  • 对硬盘进行分区后才可以使用。
  • 在Linux中挂载到一个已经存在的目录下才可以访问该磁盘,否则无法访问。使用mountunmount来进行挂载和卸载。

一般挂在点都在/mnt/xxx目录下,并且该目录必须是已经存在的,否则无法挂载

fdisk的使用

在Linux中,使用fdisk来查看当前的硬盘以及硬盘的分区、文件系统等信息。并且使用fdisk命令可以为磁盘进行分区。 fdisk的命令有以下这些: Fdisk命令详解:

命令 备注
m 获取帮助
n 新建分区
p 显示分区表
d 删除分区
b 设置卷标
w 写入分区表
t 改变分区文件系统类型
v 检验分区
l 显示fdisk所支持的文件系统代码
q 退出
fdisk示例
  1. 使用fdisk -l查看当前所有硬盘以及分区的状态。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1305 10377990 8e Linux LVM

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

可以看到目前有两个磁盘:

  • sda:10.7G,255个磁头,63个磁道,1305个扇区
    • 主分区1:/dev/sda1
    • 主分区2:/dev/sda2
  • sdb:5G,255个磁头,63个磁道,652个扇区
    • 无分区

分区的概念

Linux中,磁盘只有被分区完后,才可以被挂载到目录下。

分区有三种:主分区,扩展分区,逻辑分区,每个磁盘最多只能有四个主分区,而可以有多个扩展分区,在扩展分区中,还可以创建多个逻辑分区。

  • 主分区:创建完后即可挂载
  • 扩展分区:扩展分区创建完后,还需要创建逻辑分区才可以被挂载

示例

格式化一块硬盘(hdb),并且对其进行分区,分区后进行挂载

创建主分区
  1. 通过fdisk /dev/hdb进入磁盘的命令模式
s22aqd4o24

进入格式化命令模式

  1. 输入n代表创建分区,e代表扩展分区,p代表主分区
0u6woej2nq

新建主分区

  1. 输入First Cylinder的值代表分区初始的柱面值,以及分区的大小+3G代表为该分区分3G
vopy3iwz2v

输入初始柱面的值以及分区大小

  1. 输入p查看创建的分区/dev/hdb1
rflbc73wpf

新建分区

创建扩展分区
  1. 与创建主分区步骤相同,只是在选择command action的时候,选择e,表示创建扩展分区
ymjwni22fr

创建后的扩展分区

  1. 在创建完扩展分区后,来创建逻辑分区,输入l代表创建逻辑分区
ra4wa3017d

创建逻辑分区

  1. 与创建主分区、扩展分区一样,为逻辑分区选择起始的柱面,以及分配的大小
y0kb4p9z23

分配分区大小

  1. 查看扩展分区
c78q2lt7wi

查看分区信息

分区格式化

在磁盘分区创建完毕后,需要为分区通过mkfs进行格式化,赋予它文件系统: 如ext2,ext3,vfat

使用命令 mkfs -t ext3 /dev/hdb1分别对分区hdb1进行格式化处理,格式化为ext3文件类型

其中mkfs –t ext3命令等价于mkfs.ext3mkfs -t ext2命令等价于mkfs.ext2

513p7ponts

mkfs命令

分区挂载

当分区格式化完成文件系统后,就可以通过mountunmount进行挂载与卸载了,当分区挂载到具体目录后,即可进行创建文件、删除文件等文件操作了。

mount /dev/hdb1 /mnt/hdb1就会将/dev/hdb1分区挂载到/mnt/hdb1目录下,也就是该目录下的文件都会被写到/dev/hdb1的磁盘分区中保存。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

Linux 文件系统

文件系统类型

Kali Linux支持:btrfs、exfat、ext2\3\4、f2fs、fat16、fat32、hfs、hfs+、jfs、linux-swap、lvm2 pv、minix、nilfs2、ntfs、reiser4、reiserfs、udf、xfs;

LINUX-SWAP

Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。 本文将从分区开始讲解如何开启SWAP交换空间

分区

1
2
3
# 查看块设备
# 如图可以看出硬盘sda和vdb还有剩余
[root@rainss ~]# lsblk

分区类型

主分区、扩展分区、逻辑分区

对齐类型

对齐到MiB、对齐到柱面