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 時鐘??梢允褂靡韵鹿絹泶_定階躍大?。?/p>
階躍大小 =(正弦表中的點數)/(正弦表中的階躍數)
利用 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。