ZHCAB74D September 2018 – March 2022 AFE030 , AFE031 , TMS320F28075 , TMS320F28075-Q1 , TMS320F28076 , TMS320F28374D , TMS320F28374S , TMS320F28375D , TMS320F28375S , TMS320F28375S-Q1 , TMS320F28376D , TMS320F28376S , TMS320F28377D , TMS320F28377D-EP , TMS320F28377D-Q1 , TMS320F28377S , TMS320F28377S-Q1 , TMS320F28379D , TMS320F28379D-Q1 , TMS320F28379S
C2000 and Code Composer Studioare TMs ofTI corporate name.
Other TMs
移频键控 (FSK) 是一种利用频率的离散变化来发送和接收数字数据的调制方案。调制方案中有一个被称为二进制移频键控 (BFSK)的最简单的调制方式,也在本演示中使用。
在该方案中,系统在两个离散频率之间进行切换:标记频率(“1”)和空间频率(“0”)。这两种频率与传输数据的位值直接相关。
图 1-1 在时域中显示了对应的数据。
图 1-2 显示了一个简化的 FSK 发送器示例,其中该模块包含两个振荡器(具有一个内部时钟)和一个用于控制开关位置的输入二进制序列。
两个振荡器产生一个较高(空间)频率信号和一个较低(标记)频率信号,与一个内部时钟一同连接到一个开关。两个振荡器在内部共用一个时钟,以避免在消息传输期间输出波形的相位不连续。然后根据二进制输入,通过二进制输入序列来选择频率。在本例中,二进制“0”对应于空间频率的输出,二进制“1”对应于标记频率的输出。
图 1-3 显示了一个简化的 FSK 接收器示例,该接收器用于将接收到的信号转换回所需的数字信息。
FSK 波形经过初始滤波,然后与所需的标记频率 (fmark) 和空间频率 (fspace) 信号进行混合。使用检测器算法对输出进行处理,然后对结果进行比较,以辨别接收到的信号是与标记频率相关(二进制“1”)还是与空间频率相关(二进制“0”)。其他功能还包括,根据接收到的标记信号或空间信号的持续时间来辨别接收到的位,并处理连续位之间的边界。
以上是关于 FSK 工作原理的简单概述,以下各节讨论了如何在 C2000 器件上实现 FSK。
为 FSK 发送器创建的系统包含以下电路板:
C2000Ware 中提供了 BoosterPack 测试板设计文件。Topic Link Label9也包含相关的原理图。
图 2-3 显示了系统的方框图。在该示例中,并未使用所有连接,但 BoosterPack 具有所有连接,以为将来的开发做准备。
AFE 具有多个内部寄存器,用于配置 AFE 芯片的内部元件,包括滤波器选择、增益选择和模式选择。可以使用 SPI 外设来访问这些寄存器。
AFE 还具有各种 GPIO,允许 MCU 将 AFE 设置为特定的模式并接收中断,从而在 AFE 上实现关键事件。ADC 连接允许 MCU 接收输入信号或对其进行采样。PWM 信号提供了一种为 AFE 创建输出的方法。目前 AFE031 支持两种数据发送模式,即 PWM 模式和 DAC 模式。Topic Link Label3提供了这两种模式的说明和实现方式。
需要执行一些操作才能正确调试硬件。通过 15V 跳线为 BOOSTXL-AFE031 测试板供电。BoosterPack 带有一个稳压器,用于为连接的 LaunchPad 供电。图 2-4 突出显示了 15V 接头。
连接到图 2-5 所示接线盒右侧输入的导线将是发送的输出 FSK 信号或接收的输入 FSK 信号所在的线路,具体取决于系统被设置为发送器还是接收器。连接到接线盒左侧输入的导线是接地线。然后可以将这些线路连接到一些耦合电路或直接连接到另一个 BOOSTXL-AFE031 接线盒,以进行对照测试(TX/RX 连接到 TX/RX,GND 连接到 GND)。
BoosterPack 将为 LaunchPad 供电,因此需要隔离 PC USB 接口。需要移除 LaunchPad 上的接头跳线 JP1、JP2 和 JP3 以实现电气隔离。图 2-6 突出显示了接头位置。
在将系统用作 FSK 接收器时,LaunchPad 需要使用 5V 的电压为 C2000 ADC 供电。在 LaunchPad 与 PC USB 接口相隔离的情况下,需要通过对提供的 3.3V 进行升压来生成 5V 电源轨。需要在 LaunchPad 上添加接头 JP6 以启用升压稳压器。图 2-7 突出显示了接头位置。
在将系统用作接收器时,确保 F28379D LaunchPad 为版本 2.0 或更高版本。对于早期版本(版本 1.1 和 1.2),连接到 BOOSTXL-AFE031 的 ADCIN 引脚存在问题。更多信息,请参阅 LAUNCHXL-F28379D 概述 的修订部分。
在将发送器解决方案与接收器解决方案结合使用时,完整的系统连接应该与图 2-8 所示的连接类似。
将 AFE03x 作为发送器进行连接时,首先确定 AFE03x 采用哪种工作模式(DAC 模式或 PWM 模式)。
在 DAC 模式下,C2000 发送 SPI 数据以更新 AFE031 中的内部 DAC;对输出的 DAC 值进行滤波和放大。在该模式下,会循环遍历一个正弦表,通过 SPI 将每个点发送到 AFE031。
在 PWM 模式下,SPI 连接仅用于配置 AFE 的寄存器。会生成两个 PWM 信号,并以 FSK 传输所需的频率提供给 AFE031。AFE 会将这些信号加在一起,产生比单个 PWM 信号的谐波更少的波形。
请注意,这两种模式需要不同的硬件配置,因此请务必选择其中一种。如果使用 BOOSTXL-AFE031 测试板作为参考,则该硬件仅通过添加或移除一些元件即可使用两种模式。
在将 AFE03x 作为接收器进行连接时,SPI 连接仅用于设置 AFE 的寄存器,这与 PWM 发送模式非常类似。AFE 的接收路径已启用,从而允许输入信号到达 C2000 的 ADC 输入端。在该路径上放置了一些滤波器和两个可编程增益放大器 (PGA),用于在输入信号进入 C2000 ADC 之前对其进行升压或降压。
配置 AFE 器件需要执行两个主要步骤。首先,确保正确配置 GPIO。在 AFE 器件上,设置了两个主要 GPIO:DAC Mode Select(DAC 模式选择)和 System Shutdown(系统关闭)。这两个引脚都被拉至低电平。也可将连接的所有其他 GPIO 拉至低电平。
下一步是通过 SPI 配置器件。在软件示例中,HAL_afe031Init() 函数配置 AFE031,该函数在 AFE03x_Config.c 中进行定义。
以下步骤显示了为正确配置器件,须遵循的函数顺序:
完成以上步骤之后,根据该器件是用作发送器还是接收器,开始执行所需的最后几项配置。
现在,AFE 已正确初始化,可使系统根据所选传输方法进行传输:PWM 模式和 DAC 模式。
表 4-1 介绍了在软件示例中生成的 FSK 信号的相关参数。
最终目标是发送完整的数据包,等待规定的等待周期,然后重复。
符号 | TX 规格 | 最小值 | 标称值 | 最大值 | 单位 | 注释 |
---|---|---|---|---|---|---|
W1 | 逻辑 1 代码字 | {{-1,-1,-1,+1,+1,+1,-1,+1,+1,-1,+1}} | +1 = 标记, -1 = 空间 |
|||
W0 | 逻辑 0 代码字 | {{+1,+1,+1,-1,-1,-1,+1,-1,-1,+1,-1}} | +1 = 标记, -1 = 空间 |
|||
packet_1 | 完整的数据包 | ABC = [W1,W1,W1] | ||||
packet_0 | 完整的数据包 | ABC = [W0,W0,W0] | ||||
Fm | 标记频率 | 131.236875 | 131.25 | 131.263125 | kHz | |
Fs | 空间频率 | 143.735625 | 143.75 | 143.764375 | kHz | |
Ts | 位周期 | 5.119488 | 5.12 | 5.120512 | ms | |
Tt | Tx 周期 | 168.943104 | 168.96 | 168.976896 | ms | 3 个字 |
Tq | 静默周期 | 901.029888 | 901.12 | 901.210112 | ms | 16 个字 |
Tc | 循环周期 | 1069.972992 | 1070.08 | 1070.187008 | ms | 19 个字 |
在 PWM 模式下,C2000 F28379D 生成两个直接进入 AFE 器件的对称 PWM 信号。这两个对称的 PWM 信号分别具有 66% 和 33% 的占空比。这些信号在 AFE 器件内累加,形成噪声极小的波形。图 4-1 显示了这种累加如何发挥作用。
图 4-2 显示了 PWM 信号的路径。PWM 信号进入 AFE030/1 器件内部的低通滤波器,并累加在一起,形成上述的 PWM1+PWM2 波形。
图 4-3 显示了内部 TX 低通滤波器输出端在特定频率下的增益。
接下来,信号依次通过一个低通滤波器、PGA 和另一个低通滤波器,最后离开 PA。可调整外部低通滤波器,以过滤表 4-2 中所示的所需频率。
频段 | R (Ω) | C (nF) |
---|---|---|
SFSK:63kHz、74kHz | 510 | 2.7 |
CENELEC A | 510 | 1.5 |
CENELEC B、C、D | 510 | 1 |
引用的示例程序:boostxl_afe031_f28379d_pwmmode
若要在软件中启用 PWM 模式,需要完成以下流程:
使用两个 PWM 源来创建两个 PWM 信号:一个 PWM 源用于设置两个输出信号的频率,另一个用于控制发送数据的比特率。在软件示例中,PWM2 用于控制比特率并产生中断以确定需要输出的频率。
在软件示例中,PWM2 中断处理所有 FSK 协议要求。实现的协议是可重复的模式,它允许软件基于周期数。一个周期数是一位的时长。在该实现中,发送了 33 位(每个字 11 位,三个字)。在每个周期中,它会检查下一位的值,并且 PWM 频率会更改为标记频率或空间频率。33 个周期之后,系统停止发送 PWM 信号并进入静默模式。209 个周期之后,会重置周期数,软件开始再次发送数据包。在由 PWM2 中断来处理 FSK 传输的情况下,CPU 的主要功能被释放,可用于其他应用。默认情况下,软件示例将发送表 4-1 中引用的 packet_1,但可以通过将 packet_to_send 变量设置为零来将其更改为 packet_0。
C2000 器件的独特之处在于能够使用高分辨率 PWM (HRPWM)。HRPWM 可以提高 PWM 信号的占空比和周期的分辨率。在本例中,HRPWM 用于生成标记频率和空间频率。
HRPWM 基于微边沿定位 (MEP) 技术。MEP 逻辑能够通过细分传统 PWM 发生器的一个粗略系统时钟来非常精细地定位边沿。时间阶跃精度约为 150ps。
表 4-3 显示了使用和不使用 HRPWM 时可能实现的分辨率。
PWM 频率 | 常规分辨率 (PWM) | 高分辨率 (HRPWM) | ||
---|---|---|---|---|
100MHz EPWMCLK | ||||
(kHz) | 位 | % | 位 | % |
20 | 12.3 | 0.02 | 18.1 | 0.000 |
50 | 11 | 0.05 | 16.8 | 0.001 |
100 | 10 | 0.1 | 15.8 | 0.002 |
150 | 9.4 | 0.15 | 15.2 | 0.003 |
200 | 9 | 0.2 | 14.8 | 0.004 |
250 | 8.6 | 0.25 | 14.4 | 0.005 |
500 | 7.6 | 0.5 | 13.4 | 0.009 |
1000 | 6.6 | 1 | 12.4 | 0.018 |
1500 | 6.1 | 1.5 | 11.9 | 0.027 |
2000 | 5.6 | 2 | 11.4 | 0.036 |
例如,标记频率是在 131.25kHz 信号处生成的。在使用 PWM 时,只能生成 131.2kHz 或 131.3kHz 信号。该限制是 PWM 模块可用的分辨率导致的。如果添加 HRPWM,则可以有效生成 131.250kHz 信号。
如果不需要该精度或使用正常的 PWM 即可达到所需的频率,则不需要 HRPWM。HRPWM 是对 PWM 的扩展。若要在软件示例中禁用该功能,请在 main.c 文件中删除与其相关联的代码。
本节介绍了一种创建 DAC 模式 FSK 发送器的方法。DAC 模式与 PWM 模式非常相似,两者都使用 PWM 中断来完成 FSK 传输。
图 4-7 显示了采用 DAC 模式时使用的发送路径。
在 DAC 模式下,软件通过 SPI 将数据发送到内部 DAC 以设置输出值。若要完成单频或正弦波发送,应发送给定频率下的 DAC 梯度值。使用每个周期发生的一个 PWM 中断,以由 PWM 周期确定的频率发送更新的 DAC 值。正弦表中的点数和所需的频率将决定 PWM 信号的频率。例如,如果给定一个包含十个点的 100kHz 正弦波,则需要以 100kHz 的频率发送全部十个点。这意味着 PWM 必须生成遵循以下公式的中断:
PWM 频率 = 正弦表的点数 * 所需的频率
图 4-8 在时域中显示了对应的数据。
引用的示例程序:boostxl_afe031_f28379d_dacmode
若要在软件中启用 DAC 模式,需要完成以下流程:
在 DAC 模式下发送信息的方式与 PWM 模式的工作方式非常相似。一个 PWM 源用于将 DAC 模式值设置为发出的正弦斜坡的正确值。第二个 PWM 用于比特率以产生中断并确定需要输出的频率。
如果尝试使用该实现来达到非常精确的频率,则必定会出现问题。可以通过Equation1 来查看该问题。
如果尝试生成 131.25kHz,那么只能更改两个变量。一种方法是在正弦表中设置阶跃数。例如,如果正弦表中有 10 个阶跃,则中断频率为:
中断频率 =(正弦表中的阶跃数)*(所需信号的频率)
中断频率 = 1.3125MHz
在使用 200MHz 时钟时,即使在 152 或 153 个 CPU 周期中发生中断,中断频率也将分别为 1.31579MHz 和 1.30719MHz。这些频率不处于表 4-1 中频率容差的规格范围之内。这意味着设置阶跃大小无法正确实现精确的频率生成。
另一种思路是设置中断频率。让我们将中断设置为 1MHz,这是可以生成的频率。正弦波中的阶跃数将是:
正弦表中的阶跃数 = (1MHz)/(131.25kHz)
正弦表中的阶跃数 = 7.61905
利用 F28379D 的浮点功能,处理器可以跟踪该余数,现在精度取决于正弦表,而不是 1MHz 时钟。可以使用以下公式来确定阶跃大小:
阶跃大小 =(正弦表中的点数)/(正弦表中的阶跃数)
利用 4096 正弦表并继续执行前一个示例,这样可以将阶跃大小确定为 537.6。这意味着在每次中断中,正弦表都会再产生 537.6 的阶跃。程序将对数组进行排序,因此该数字将去尾取整为 537,但添加该数字后、程序在正弦表中移动时,下一个阶跃将忽略阶跃大小的小数部分。下面显示了一个中断例程示例:
需要注意的一点是,在该实现中创建了一个 1MHz 中断,它仅将数据从一个存储器地址移动到另一个存储器地址。一种降低 CPU 密集操作的方法是利用 C2000 的 DMA(直接存储器访问)。DMA 外设根据触发事件将数据从一个存储器地址移动到另一个存储器地址。使用被选为通过 SPI 发送的正确数据来预填充两个缓冲区,并使用 DMA 在两者之间进行切换。当从一个缓冲区切换到另一个缓冲区时,旧缓冲区中将重新填充这些值。
在 DAC 模式软件中,使用一个 1MHz PWM 信号来生成一个 DMA 事件,将数据从这些缓冲区之一移动到 SPI TX 缓冲区中。每次使用后都需要重新填充旧缓冲区,因此 DMA 将在每次完成整个缓冲区读取后触发一个事件。在该中断期间,会对缓冲区进行切换,旧缓冲区被重新填充。通过该实现,可以调整 CPU 利用率与存储器之间的权衡点,并且可以相应地调整缓冲区的大小。如果有额外的存储器,则可以通过使用更大的缓冲区来减少 CPU 开销。如果没有大量的可用存储器,则较小的缓冲区大小会增加 CPU 开销。
PWM2 中断以与 PWM 模式软件实现完全一样的方式处理 FSK 协议的所有需求。要实现的协议是可重复的模式,它允许软件基于周期数。一个周期数是一位的时长。在该实现中,将发送 33 位(每个字 11 位,三个字)。在每个周期中,通过检查下一位的值和阶跃大小变化,能够以标记频率或空间频率发送正弦表。33 个周期之后,系统停止发送 DAC 值并进入静默模式。209 个周期之后,周期数将被重置,软件开始再次发送数据包。在由 PWM2 中断来处理 FSK 传输的情况下,CPU 的主要功能被释放,可用于其他应用。默认情况下,软件示例将发送表 4-1 中引用的 packet_1,但可以通过将 packet_to_send 变量设置为零来将其更改为 packet_0。