AN-951: 使用SigmaDSP内置 GPIO引脚进行硬件控制
简介
SigmaDSP® 系列多款器件均内置通用输入/输出(GPIO)引脚。这些引脚可与外部硬件元件(如:LED、按钮或旋转编码器)连接。
某些GPIO引脚可多路复用至辅助ADC,这就使得电位器或模拟控制电压可直接连接到IC。每个引脚的操作模式都不尽相同,这些模式包括:开集输出/输入(去抖动)、由控制端口直接驱动的输出。
在 SigmaStudio™ 图形编程软件内,可对GPIO引脚进行分配,以使其控制音频信号处理程序或受该程序的控制。器件运行期间,可更改引脚的功能。如果用户接口使用 GPIO引脚,则可减少或无需使用微控制器,这样就能大大减少简单音频系统的成本。
本应用笔记从有效使用GPIO所必需的硬件接口技术开始进行说明。此外,还探讨了几种可以极大降低SigmaDSP音频系统复杂度的情形。
硬件接口
GPIO引脚可与不同类型的硬件控制系统接口。本节详细介绍了这些控制系统以及相关电路的示例。除非另有说明,IOVDD= 3.3 V。
瞬时按钮输入
控制SigmaDSP输入的最简单的方式之一便是按钮。在图1中,所示瞬时开关为低电平有效配置(上拉电阻为10kΩ)。有关引脚电流限值的更多信息,请参见相关器件数据手册。
图1 低电平有效按钮输入电路示例
SigmaDSP GPIO引脚具有去抖电路,该电路应当在SigmaStudio中激活,以避免开关触点振动所形成的误差。对于本示例电路中的低电平有效操作,应当按照反相输入 来设置所对应的GPIO寄存器。对于高电平有效操作,可按同相输入来设置该寄存器,并应切换电路开关和电阻的位置。对于无硬件反转位的器件,SigmaStudio中提供了软件逻辑反相器。
单极开关输入
开关的使用方法与瞬时按钮类似。在图2的示例中,所示开关为低电平配置(内置上拉电阻)。相比较图1中所示的开关,此开关非瞬时开关。
图2. 低电平有效开关输入电路示例
旋转编码器输入
SigmaStudio中提供了为增量式旋转编码器(也可称之为相对旋转编码器)提供了GPIO调节单元。增量式旋转编码器是一个旋钮,它能根据调谐的方向来产生输出脉冲。切勿 将该编码器与绝对式旋转编码器相混淆,绝对式旋转编码器有一组二进制编码,这些编码与所有可能的角度位置相对应。如果要使用增量式旋转编码器,则应当将输出引脚 与两个GPIO引脚相连接。SigmaStudio中相应的程序模块可计算两个引脚上脉冲之间的相位差,以确定顺时针和逆时针方向的圈数。
图3. 旋转编码器输入电路示例
电位器输入
电位器也可用于模拟控制,通常更多地是用来调节音量。由于辅助ADC具有线性阶跃,因此应当使用线性电位器,以取得最佳效果。如果需要进行对数控制,则可在软件中 使用对数查找表。对于某些SigmaDSP,ADC的满量程输入电压要比IOVDD小。正因为如此,就应当按照图4中的示例电路,使用分压器来适当分配信号。
图4. 电位器输入电路示例
LED输出
LED是最简单的GPIO输出方式。必须使用晶体管来避免SigmaDSP的过载。MMBT2222A为典型的晶体管。只要电流不超过器件数据手册中所规定的限值,SigmaDSP就可提 供源电流或吸电流。详情请参见相关的数据手册。如果要高电平有效并提供源电流,则晶体管应为共发射极NPN(或共源极N沟道)配置。如果要低电平有效并提供吸电流,则晶体管应为共集电极PNP(或共漏极P沟道)配置。
图5. 电流源LED输出电路示例
在SigmaStudio项目中使用GPIO
通过工具箱(ToolBox)中IO部分内的通用输入和输出单元,可在SigmaStudio中访问GPIO引脚。
图6 GPIO工具箱单元。
图7 GPIO原理图单元
点击下拉式菜单,以便访问所有可用的GPIO引脚。这些单元与Sigma-Studio中的其它单元一样用线路连接,控制信号输入和输出的显示颜色为红色。
辅助ADC输入单元的工作方式都相同。
图8 辅助ADC的输入单元
在SigmaStudio寄存器窗口中设置GPIO引脚
必须使用SigmaStudio中的寄存器控制窗口单独配置GPIO引脚。GPIO寄存器控制的示例如图9、图10和图11所示。
图9 ADAU170x寄存器控制窗口的GPIO部分
图10 ADAU144x寄存器控制窗口的GPIO部分
图11 ADAU176x寄存器控制窗口的GPIO部分
在此处,根据接口电路可适当设置GPIO引脚。可进行的设置包括:"输入GPIO去抖动"、"输入GPIO无去抖动"、"输出GPIO"、"输出GPIO集电极开路"以及ADC。此外,某些器件可通过这些引脚,来输入或输出数字音频数据或时钟。在某些器件上,GPIO引脚标有MP(多用途)字样,但它们的使用方法是相同的。
请查阅ADI公司相关器件和评估板数据手册,以了解GPIO寄存器设置的更多详情。
输入GPIO去抖动
将开关或按钮与GPIO引脚连接时,触点抖动(也称为振动)是最常见的问题。由于许多机械和电气方面的因素,在切换过程中,可能会随机出现一系列振荡现象。为降低这些 影响,则应当将时基去抖电路集成到特定SigmaDSP的GPIO电路中。通常,在寄存器控制窗口的GPIO部分可设置去抖时间。内核会从每个音频帧相关的寄存器处读取输入值。
图12 具有去抖数据流的输入GPIO
输入GPIO无去抖动
对于不受触点抖动影响的输入(比如:外部逻辑IC处的输出),可通过该设置旁路去抖电路。内核会从每个音频帧相关的寄存器处读取输入值。
图13具有无去抖数据流的输入GPIO
输出GPIO
该设置可使引脚用于数字输出。通常,每个引脚最大可驱动的电流为几毫安。如需了解更多信息,请参见相关的SigmaDSP数据手册。GPIO引脚会从每个音频帧相关的寄存器处读取输入值。
图14 输出GPIO数据流
输出GPIO集电极开路
该设置将引脚置于集电极开路或开漏输出模式(取决于器件内部电路),并且需要一个外部上拉电阻。该上拉电阻可与不同的IOVDD电源连接,但不能与DSP的电源连接,因 此,如果连接不同逻辑电平下的IC,该模式非常有用。GPIO引脚会从每个音频帧相关的寄存器处读取输入值。
图15 输出GPIO集电极开路数据流
由控制端口驱动输入
在该模式中,GPIO引脚被旁路,内核会从相关寄存器读取相应的值。可通过控制端口来读写该寄存器的值。如果使用外部主控制器来控制信号流的各元素,则该模式将十分有用。内核会从每个音频帧相关的寄存器处读取输入值。
图16 由控制端口驱动输入数据流
由控制端口驱动输出
在该模式中,内核中的信号流不影响相关GPIO引脚的输出,并且引脚会从相关寄存器读取相应的输出值。可通过控制端口来读写该寄存器的值。
对于直接控制电路的元素(比如:通过外部主控制器与GPIO引脚相连接的LED),该模式非常有用。GPIO引脚会从每个音频帧相关的寄存器处读取输入值。
图17 由控制端口驱动输出数据流
ADC
在ADC模式下设置引脚时,引脚就相当于辅助ADC的一个多路复用输入端。在ADAU170x,上,应当激活反相位,以便正确使用ADC功能。尽管ADC的采样速率取决于所使用 的特定SigmaDSP,但内核仍会从每个音频帧的ADC读取输入值。
图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中不可见。
图19 按钮音量控制-音量增大/音量减小/静音的指数表
除了控制输入和输出(图20中显示为红色)之外,查找表单元中也有黄色接口寄存器输入和输出,它们与接口读取(Interface Read)单元和接口写入(Interface Write)单元相连 接。掉电时,这些单元可启动将参数值从ADAU1701写回到外部 EEPROM的功能。有关更多信息,请参见ADAU1701数据手册。某些SigmaDSP在软件中使用的是接口读取和接口写入单元。
图20 按钮音量控制-音量增大/音量减小/静音的信号流
查找表的输出值以控制输入的形式发送给SW音量单元。该单元同样也有两个音频输入(绿色)和两个音频输出(蓝色)。控制输入从表格中取值,并相应地调整音频。按下按 钮时,表格会输出一个新值,然后音量单元会转换到一个新值,该值的大小取决于单元中所输入的SW转换速率。
表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。下降曲线则可通过反转指数来导出。
其中 n = 0 to x.
如果是下降的X点指数曲线(增益步进为s dB),可使用方程2来计算指数n的增益值(g)。上升曲线则可通过反转指数来导出。
其中 n = 0 to x.
各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"GPIO输入"(2)、"接口读取"(1)、"按下与保持"(1)、"接口写入"(1)、"输入"(1)、"使用查找表进行音量增 大/音量下降的控制"(1)、"单向转换外部音量"(1)以及"输出"(2)。
在SigmaStudio3.1版本及后续版本中,可使用按钮音量单元。该单元集成了"按下与保持"、"音量增大/音量减小控制"、"指数查找表"以及"单向转换外部音量"单元等功能。 如需简化应用,则可使用图21中所示的程序模块。
图21 按钮音量简化信号流
旋转编码器音量控制
该示例使用旋转编码器单元来进行音量控制。RotEnc单元替代了PushHold单元,原理图中余下部分与之前的示例相同。
RotEnc单元的顶部控制输入(红色)为上升脉冲输入(参见图23)。底部控制输入为下降脉冲输入。单元中心的文本输入模块设定了示例中的时间常数,本示例中该常数为20。
需要注意的是,该信号流的后端(旋转编码器模块后的任何部分)与"按钮音量控制-音量增大/音量减小/静音"部分的按钮音量控制示例相同。
本示例中所使用的单元如下所示:"GPIO输入"(2)、"接口读取"(1)、"旋转编码器"(1)、"接口写入"(1)、"输入"(1)、"单向转换外部音量"(1)以及"输出"(2)。
在SigmaStudio3.1版本及后续版本中,可使用集"旋转编码器"、"音量增大/音量减小控制"、"指数查找表"以及"单向转换外部音量"等功能与一体的单元。它被称为"旋转音量" 单元。如需简化应用,则可使用图22中所示的程序模块。
图22 旋转音量简化信号流
图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整数格式。
图24显示的是前八个被转换为5.23数字格式的指数。
图24 按钮控制的多路输出选择器指数表
各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"GPIO输入"(2)、"接口读取"(1)、"使用查找表进行音量增大/音量减小的控制"(1)、"接口写入"(1)、"音频 (查找/正弦)"(1)、"指数可选的多路输出选择器"(1)以及"输出"(8)。
图25 按钮控制的多路输出选择器信号流
按钮控制的滤波器
尽管现在使用指数值从四条均衡特性曲线中选择一条曲线,但本示例使用的仍是之前各示例中所描述的按钮。
各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"GPIO输入"(2)、"接口读取"(1)、"使用查找表进行音量增大/音量减小的控制"(1)、"接口写入"(1)、"输入" (1)、"常规(二阶/查找)" (1)以及"输出"(2)。
图26 按钮控制的滤波器指数表
图27 按钮控制的滤波器信号流
图28 按钮控制的滤波器音频控制窗口
辅助ADC音量控制
有时,需要对系统中的一个或多个参数进行模拟控制。最常见的例子就是模拟主音量控制。
图29 辅助ADC音量控制信号流
在该示例中,在音频信号流的输入和输出之间插入了SW转换音量控制(SW Slew Volume Control)。辅助ADC输入直接与音量控制上的控制引脚相连接。
各单元在软件中所出现的名称以及在本例中使用的次数如下所示:"辅助ADC输入"(1)、"输入"(1)、"单向转换外部音量"(1)以及"输出"(1)。
辅助ADC电压控制振荡器
在本示例中,模拟输入电压的作用是控制振荡器的频率。
图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)。
图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)。
图32 方波LED驱动器信号流
GPIO扩展板原理图
图33 GPIO扩展板、接头和电源
图34 GPIO扩展板、GPIO电路
图35 GPIO扩展板、LED驱动器(不使用)