AN-951: 使用SigmaDSP内置 GPIO引脚进行硬件控制

简介

SigmaDSP® 系列多款器件均内置通用输入/输出(GPIO)引脚。这些引脚可与外部硬件元件(如:LED、按钮或旋转编码器)连接。

某些GPIO引脚可多路复用至辅助ADC,这就使得电位器或模拟控制电压可直接连接到IC。每个引脚的操作模式都不尽相同,这些模式包括:开集输出/输入(去抖动)、由控制端口直接驱动的输出。

在 SigmaStudio 图形编程软件内,可对GPIO引脚进行分配,以使其控制音频信号处理程序或受该程序的控制。器件运行期间,可更改引脚的功能。如果用户接口使用 GPIO引脚,则可减少或无需使用微控制器,这样就能大大减少简单音频系统的成本。

本应用笔记从有效使用GPIO所必需的硬件接口技术开始进行说明。此外,还探讨了几种可以极大降低SigmaDSP音频系统复杂度的情形。

硬件接口

GPIO引脚可与不同类型的硬件控制系统接口。本节详细介绍了这些控制系统以及相关电路的示例。除非另有说明,IOVDD= 3.3 V。


瞬时按钮输入


控制SigmaDSP输入的最简单的方式之一便是按钮。在图1中,所示瞬时开关为低电平有效配置(上拉电阻为10kΩ)。有关引脚电流限值的更多信息,请参见相关器件数据手册。

Figure 1. Active-Low Push-Button Input Circuit Example.

图1 低电平有效按钮输入电路示例

SigmaDSP GPIO引脚具有去抖电路,该电路应当在SigmaStudio中激活,以避免开关触点振动所形成的误差。对于本示例电路中的低电平有效操作,应当按照反相输入 来设置所对应的GPIO寄存器。对于高电平有效操作,可按同相输入来设置该寄存器,并应切换电路开关和电阻的位置。对于无硬件反转位的器件,SigmaStudio中提供了软件逻辑反相器。


单极开关输入


开关的使用方法与瞬时按钮类似。在图2的示例中,所示开关为低电平配置(内置上拉电阻)。相比较图1中所示的开关,此开关非瞬时开关。

Figure 2. Active-Low Switch Input Circuit Example.

图2. 低电平有效开关输入电路示例

旋转编码器输入


SigmaStudio中提供了为增量式旋转编码器(也可称之为相对旋转编码器)提供了GPIO调节单元。增量式旋转编码器是一个旋钮,它能根据调谐的方向来产生输出脉冲。切勿 将该编码器与绝对式旋转编码器相混淆,绝对式旋转编码器有一组二进制编码,这些编码与所有可能的角度位置相对应。如果要使用增量式旋转编码器,则应当将输出引脚 与两个GPIO引脚相连接。SigmaStudio中相应的程序模块可计算两个引脚上脉冲之间的相位差,以确定顺时针和逆时针方向的圈数。

Figure 3. Rotary Encoder Input Circuit Example.

图3. 旋转编码器输入电路示例

电位器输入


电位器也可用于模拟控制,通常更多地是用来调节音量。由于辅助ADC具有线性阶跃,因此应当使用线性电位器,以取得最佳效果。如果需要进行对数控制,则可在软件中 使用对数查找表。对于某些SigmaDSP,ADC的满量程输入电压要比IOVDD小。正因为如此,就应当按照图4中的示例电路,使用分压器来适当分配信号。

Figure 4. Potentiometer Input Circuit Example.

图4. 电位器输入电路示例

LED输出


LED是最简单的GPIO输出方式。必须使用晶体管来避免SigmaDSP的过载。MMBT2222A为典型的晶体管。只要电流不超过器件数据手册中所规定的限值,SigmaDSP就可提 供源电流或吸电流。详情请参见相关的数据手册。如果要高电平有效并提供源电流,则晶体管应为共发射极NPN(或共源极N沟道)配置。如果要低电平有效并提供吸电流,则晶体管应为共集电极PNP(或共漏极P沟道)配置。

Figure 5. Current Sourcing LED Output Circuit Example.

图5. 电流源LED输出电路示例

在SigmaStudio项目中使用GPIO

通过工具箱(ToolBox)中IO部分内的通用输入和输出单元,可在SigmaStudio中访问GPIO引脚。

Figure 6. GPIO ToolBox Cells.

图6 GPIO工具箱单元。

Figure 7. GPIO Schematic Cells.

图7 GPIO原理图单元

点击下拉式菜单,以便访问所有可用的GPIO引脚。这些单元与Sigma-Studio中的其它单元一样用线路连接,控制信号输入和输出的显示颜色为红色。

辅助ADC输入单元的工作方式都相同。

Figure 8. Auxiliary ADC Input Cell.

图8 辅助ADC的输入单元

在SigmaStudio寄存器窗口中设置GPIO引脚


必须使用SigmaStudio中的寄存器控制窗口单独配置GPIO引脚。GPIO寄存器控制的示例如图9、图10和图11所示。

Figure 9. GPIO Section of the ADAU170x Register Control Window.

图9 ADAU170x寄存器控制窗口的GPIO部分

Figure 10. GPIO Section of the ADAU144x Register Control Window.

图10 ADAU144x寄存器控制窗口的GPIO部分

Figure 11. GPIO Section of the ADAU176x Register Control Window.

图11 ADAU176x寄存器控制窗口的GPIO部分

在此处,根据接口电路可适当设置GPIO引脚。可进行的设置包括:"输入GPIO去抖动"、"输入GPIO无去抖动"、"输出GPIO"、"输出GPIO集电极开路"以及ADC。此外,某些器件可通过这些引脚,来输入或输出数字音频数据或时钟。在某些器件上,GPIO引脚标有MP(多用途)字样,但它们的使用方法是相同的。

请查阅ADI公司相关器件和评估板数据手册,以了解GPIO寄存器设置的更多详情。

输入GPIO去抖动

将开关或按钮与GPIO引脚连接时,触点抖动(也称为振动)是最常见的问题。由于许多机械和电气方面的因素,在切换过程中,可能会随机出现一系列振荡现象。为降低这些 影响,则应当将时基去抖电路集成到特定SigmaDSP的GPIO电路中。通常,在寄存器控制窗口的GPIO部分可设置去抖时间。内核会从每个音频帧相关的寄存器处读取输入值。

Figure 12. Input GPIO with Debounce Data Flow.

图12 具有去抖数据流的输入GPIO

输入GPIO无去抖动

对于不受触点抖动影响的输入(比如:外部逻辑IC处的输出),可通过该设置旁路去抖电路。内核会从每个音频帧相关的寄存器处读取输入值。

Figure 13. Input GPIO with No Debounce Data Flow.

图13具有无去抖数据流的输入GPIO

输出GPIO

该设置可使引脚用于数字输出。通常,每个引脚最大可驱动的电流为几毫安。如需了解更多信息,请参见相关的SigmaDSP数据手册。GPIO引脚会从每个音频帧相关的寄存器处读取输入值。

Figure 14. Output GPIO Data Flow.

图14 输出GPIO数据流

输出GPIO集电极开路

该设置将引脚置于集电极开路或开漏输出模式(取决于器件内部电路),并且需要一个外部上拉电阻。该上拉电阻可与不同的IOVDD电源连接,但不能与DSP的电源连接,因 此,如果连接不同逻辑电平下的IC,该模式非常有用。GPIO引脚会从每个音频帧相关的寄存器处读取输入值。

Figure 15. Output GPIO Open Collector Data Flow.

图15 输出GPIO集电极开路数据流

由控制端口驱动输入

在该模式中,GPIO引脚被旁路,内核会从相关寄存器读取相应的值。可通过控制端口来读写该寄存器的值。如果使用外部主控制器来控制信号流的各元素,则该模式将十分有用。内核会从每个音频帧相关的寄存器处读取输入值。

Figure 16. Input Driven by Control Port Data Flow.

图16 由控制端口驱动输入数据流

由控制端口驱动输出

在该模式中,内核中的信号流不影响相关GPIO引脚的输出,并且引脚会从相关寄存器读取相应的输出值。可通过控制端口来读写该寄存器的值。

对于直接控制电路的元素(比如:通过外部主控制器与GPIO引脚相连接的LED),该模式非常有用。GPIO引脚会从每个音频帧相关的寄存器处读取输入值。

Figure 17. Output Driven by Control Port Data Flow.

图17 由控制端口驱动输出数据流

ADC

在ADC模式下设置引脚时,引脚就相当于辅助ADC的一个多路复用输入端。在ADAU170x,上,应当激活反相位,以便正确使用ADC功能。尽管ADC的采样速率取决于所使用 的特定SigmaDSP,但内核仍会从每个音频帧的ADC读取输入值。

Figure 18. ADC Data Flow.

图18 ADC数据流

使用内置GPIO板的评估板

某些SigmaDSP评估套件包括了带有参考GPIO接口电路的子板。这样使用该板就有助于评估GPIO应用程序或算法。

该评估套件包括

  • 四个电位器
  • 四个带晶体管驱动器的LED
  • 八个瞬时按钮
  • 六个滑动开关
  • 一个增量式旋转编码器
  • 串行数据I/O的接头连接
  • 用户创建的接口电路的原型设计区

相关评估板套件中含有子板的文档。

软件中GPIO的示例

本部分提供了SigmaStudio项目中某些常用的GPIO调节信号流的示例。

SigmaStudio软件会根据新的算法持续进行更新,因而某些功能模块的外观和功能会随着时间而变化。但是,本应用笔记中所给出的概念应当适用于该软件之后的所有版本。

本应用笔记中的信息与已经发布的SigmaStudio 3.1版本相对应。


按钮音量控制—音量增大/音量减小/静音


本示例使用两个按钮来控制pushhold GPIO单元,反过来,该单元也能按照查找表来控制音量。同时按下这两个按钮可使音频输出静音。该示例如图20所示。

一次按下一个按钮可增大或减小音量指数。如果按下按钮,保持hold (ms)所定义的一段时间,则音量指数会以repeat (ms)定义的间隔重复增加。

两个GPIO引脚(GPIO_0和GPIO_1)作为pushhold U1单元的输入端,通过两按钮静音算法来运行按下/保持(push/hold)操作。该单元的三个输出引脚(Up Pulse、Down Pulse和 Mute Pulse)作为查找表UpDownLUT1的输入。点击该表来显示表中的各项数值。

图19中的表格显示的是音量曲线(范围:0到1)的示例。按下该单元的音量增大(按钮,可输出表格中的下一数字。按下该单元的音量减小(Down)按钮,则可输出表格中之的前 一数字。需要注意的是,音量增大(音量减小(Down)按钮在图19中不可见。

Figure 19. Push-Button Volume Control–Up/Down/Mute Index Table.

图19 按钮音量控制-音量增大/音量减小/静音的指数表

除了控制输入和输出(图20中显示为红色)之外,查找表单元中也有黄色接口寄存器输入和输出,它们与接口读取(Interface Read)单元和接口写入(Interface Write)单元相连 接。掉电时,这些单元可启动将参数值从ADAU1701写回到外部 EEPROM的功能。有关更多信息,请参见ADAU1701数据手册。某些SigmaDSP在软件中使用的是接口读取和接口写入单元。

Figure 20. Push-Button Volume Control –Up/Down/Mute Signal Flow.

图20 按钮音量控制-音量增大/音量减小/静音的信号流

查找表的输出值以控制输入的形式发送给SW音量单元。该单元同样也有两个音频输入(绿色)和两个音频输出(蓝色)。控制输入从表格中取值,并相应地调整音频。按下按 钮时,表格会输出一个新值,然后音量单元会转换到一个新值,该值的大小取决于单元中所输入的SW转换速率。

表1为线性和对数音量控制中的上升值和下降值的33点音量指数列表。推荐查询对数指数表,以便控制音量。

表1. 常用的33点指数表数值
对数(指数)曲线 线性曲线
上升,-96 dB 至0 dB (步进为3 dB) 下降,0 dB 至-96 dB(步进为3 dB) 上升,0到1 下降,1到0
1.5849E-05 1.0000 0.0000 1.0000
2.2387E-05 0.7079 0.0313 0.9688
3.1623E-05 0.5012 0.0625 0.9375
4.4668E-05 0.3548 0.0938 0.9063
6.3096E-05 0.2512 0.1250 0.8750
8.9125E-05 0.1778 0.1563 0.8438
1.2589E-04 0.1259 0.1875 0.8125
1.7783E-04 0.0891 0.2188 0.7813
2.5119E-04 0.0631 0.2500 0.7500
3.5481E-04 0.0447 0.2813 0.7188
5.0119E-04 0.0316 0.3125 0.6875
7.0795E-04 0.0224 0.3438 0.6563
0.0010 0.0158 0.3750 0.6250
0.0014 0.0112 0.4063 0.5938
0.0020 0.0079 0.4375 0.5625
0.0028 0.0056 0.4688 0.5313
0.0040 0.0040 0.5000 0.5000
0.0056 0.0028 0.5313 0.4688
0.0079 0.0020 0.5625 0.4375
0.0112 0.0014 0.5938 0.4063
0.0158 0.0010 0.6250 0.3750
0.0224 7.0795E-04 0.6563 0.3438
0.0316 5.0119E-04 0.6875 0.3125
0.0447 3.5481E-04 0.7188 0.2813
0.0631 2.5119E-04 0.7500 0.2500
0.0891 1.7783E-04 0.7813 0.2188
0.1259 1.2589E-04 0.8125 0.1875
0.1778 8.9125E-05 0.8438 0.1563
0.2512 6.3096E-05 0.8750 0.1250
0.3548 4.4668E-05 0.9063 0.0938
0.5012 3.1623E-05 0.9375 0.0625
0.7079 2.2387E-05 0.9688 0.0313
1.0000 1.5849E-05 1.0000 0.0000

音量曲线中各点的数量并非固定为33,可在实际应用中根据需要进行变化。

尽管各数值可以浮点的形式输入表格,但它们在SigmaDSP中以5.23的小数格式存储。

在方程1和方程2中,显示了对数曲线和线性曲线增益值的计算。

如果是上升的X点线性曲线,可使用方程1来计算指数n的增益值g。下降曲线则可通过反转指数来导出。

equation1

其中 n = 0 to x.

如果是下降的X点指数曲线(增益步进为s dB),可使用方程2来计算指数n的增益值(g)。上升曲线则可通过反转指数来导出。

equation2

其中 n = 0 to x.

各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"GPIO输入"(2)、"接口读取"(1)、"按下与保持"(1)、"接口写入"(1)、"输入"(1)、"使用查找表进行音量增 大/音量下降的控制"(1)、"单向转换外部音量"(1)以及"输出"(2)。

在SigmaStudio3.1版本及后续版本中,可使用按钮音量单元。该单元集成了"按下与保持"、"音量增大/音量减小控制"、"指数查找表"以及"单向转换外部音量"单元等功能。 如需简化应用,则可使用图21中所示的程序模块。

Figure 21. Push-Button Volume Simplified Signal Flow.

图21 按钮音量简化信号流

旋转编码器音量控制


该示例使用旋转编码器单元来进行音量控制。RotEnc单元替代了PushHold单元,原理图中余下部分与之前的示例相同。

RotEnc单元的顶部控制输入(红色)为上升脉冲输入(参见图23)。底部控制输入为下降脉冲输入。单元中心的文本输入模块设定了示例中的时间常数,本示例中该常数为20。

需要注意的是,该信号流的后端(旋转编码器模块后的任何部分)与"按钮音量控制-音量增大/音量减小/静音"部分的按钮音量控制示例相同。

本示例中所使用的单元如下所示:"GPIO输入"(2)、"接口读取"(1)、"旋转编码器"(1)、"接口写入"(1)、"输入"(1)、"单向转换外部音量"(1)以及"输出"(2)。

在SigmaStudio3.1版本及后续版本中,可使用集"旋转编码器"、"音量增大/音量减小控制"、"指数查找表"以及"单向转换外部音量"等功能与一体的单元。它被称为"旋转音量" 单元。如需简化应用,则可使用图22中所示的程序模块。

Figure 22. Rotary Volume Simplified Signal Flow.

图22 旋转音量简化信号流

Figure 23. Rotary Encoder Volume Control Signal Flow.

图23 旋转编码器音量控制信号流

按钮控制的多路输出选择器


本示例使用两个按钮来控制多路输出选择器,这样就使频率为1 kHz的正弦波可从八个可用的输出端任意输出。

因为DSP中所使用的数字格式不同,本表格中的条目略微有所不同。SigmaDSP主要采用两种格式。整数格式(28.0)和小数格式(5.23)。在DSP中,所有音频数据和大多数参数 都以5.23小数格式表示。多数与GPIO有关的信号都以28.0整数格式来表示,这是因为可允许数值的范围有所增大。

在SigmaStudio指数表中,尽管输出值以5.23小数格式来表示,但指数值仍以28.0整数格式来表示。但是,由于该5.23输出信号的作用是控制多路输出选择器(该多路输出选择器 接受28.0输入格式),则在指数表中需要数字格式。

如需在28.0整数格式和5.23小数格式间进行转换,则可使用方程3和方程4。方程3可将28.0整数格式转换为5.23小数格式,方程4则可将5.23小数格式转换为28.0整数格式。

equation3

equation4

图24显示的是前八个被转换为5.23数字格式的指数。

Figure 24. Push-Button-Controlled Demultiplexer Index Table.

图24 按钮控制的多路输出选择器指数表

各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"GPIO输入"(2)、"接口读取"(1)、"使用查找表进行音量增大/音量减小的控制"(1)、"接口写入"(1)、"音频 (查找/正弦)"(1)、"指数可选的多路输出选择器"(1)以及"输出"(8)。

Figure 25. Push-Button-Controlled Demultiplexer Signal Flow.

图25 按钮控制的多路输出选择器信号流

按钮控制的滤波器


尽管现在使用指数值从四条均衡特性曲线中选择一条曲线,但本示例使用的仍是之前各示例中所描述的按钮。

各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"GPIO输入"(2)、"接口读取"(1)、"使用查找表进行音量增大/音量减小的控制"(1)、"接口写入"(1)、"输入" (1)、"常规(二阶/查找)" (1)以及"输出"(2)。

Figure 26. Push-Button-Controlled Filter Index Table.

图26 按钮控制的滤波器指数表

Figure 27. Push-Button-Controlled Filter Signal Flow.

图27 按钮控制的滤波器信号流

Figure 28. Push-Button-Controlled Filter Tone Control Window.

图28 按钮控制的滤波器音频控制窗口

辅助ADC音量控制


有时,需要对系统中的一个或多个参数进行模拟控制。最常见的例子就是模拟主音量控制。

Figure 29. Auxiliary ADC Volume Control Signal Flow

图29 辅助ADC音量控制信号流

在该示例中,在音频信号流的输入和输出之间插入了SW转换音量控制(SW Slew Volume Control)。辅助ADC输入直接与音量控制上的控制引脚相连接。

各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"辅助ADC输入"(1)、"输入"(1)、"单向转换外部音量"(1)以及"输出"(1)。


辅助ADC电压控制振荡器


在本示例中,模拟输入电压的作用是控制振荡器的频率。

Figure 30. Auxiliary ADC Voltage-Controlled Oscillator Signal Flow.

图30 辅助ADC压控振荡器信号流。

随着输入电压增加,振荡器的频率也会相应增加。

各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"辅助ADC输入"(1)、"电压控制振荡器"(1)、"T型连接"(1)以及"输出"(2)。


辅助ADC转换多路复用器


模拟输入电压也可用于选择电源(参见图31)。在本示例中,输入电压被分为5个大小相同的电压区域,每个电压区域都与不同的音频发生器相关。

以28.0的整数格式,将辅助ADC的输入信号乘以5(这里作为DC输入项单元),则所有范围内的输入值都会被映射为5个指数值: 以28.0整数格式表示的0, 1, 2, 3, 4,它们是多路 复用器的正确输入值。多路复用器单元使用该指数来输出正确的正弦音频。

各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"ADC输入"(1)、"DC输入项"(1)、"乘法"(1)、"音频(查找/正弦)"(5)、"指数可选转换多路复用器"(1)、"T型连接"(1)以及"输出"(2)。

Figure 31. Auxiliary ADC Slew Multiplexer Signal Flow.

图31 辅助ADC转换多路复用器信号流

闪烁LED


在图32所显示的示例中,方波发生器用于驱动一个输出LED。输出GPIO引脚相关的寄存器上的数值等于零时,会关闭GPIO引脚,而当数值不为零时,则会打开GPIO引脚。取最小值为 −15.23以及最大值为 15.23的方波,然后再加上15.23,则所得的波形其最小值为 05.23,最大值为 25.23。这样会使得LED以一定的频率闪烁,频率大小相当于方波发生器所产生的频率大小(本示例中为3 Hz)。

各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"DC输入项"(1)、"信号增加"(1)、"方波"(1)以及"GPIO输出"(1)。

Figure 32. Square Wave LED Driver Signal Flow

图32 方波LED驱动器信号流

 

GPIO扩展板原理图

Figure 33. GPIO Extension Board, Connectors, and Power.

图33 GPIO扩展板、接头和电源

Figure 34. GPIO Extension Board, GPIO Circuitry.

图34 GPIO扩展板、GPIO电路

Figure 35. GPIO Extension Board, LED Driver (Not Populated).

图35 GPIO扩展板、LED驱动器(不使用)

作者

Generic_Author_image

Brett Gildersleeve