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
引用的示例程序: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。