MCU應用專欄

利用PWM計時器 雙音多頻訊號實現有譜

作者: 童信義
2008 年 08 月 11 日

隨著單晶片微控器技術日益進步,可完成的工作愈來愈複雜,其主因不只是因內部中央處理器(CPU)核心的處理能力不斷提升,從早期的4位元、8位元、到現在漸成主流的16位元,甚或32位元外,內嵌記憶體包括唯讀存儲記憶體(ROM)和隨機存取記憶體(RAM)容量也加大很多。另外,也整合比以往更豐富的周邊硬體模組,如A/D、D/A,各式各樣的串列、並列通訊介面,並整合各種波形產生和量測需求的各式計時器(Timer)。
 



由於CPU核心運算速度的提升,再加上硬體整合度提高,在系統設計時,本來須外接的硬體線路,便可用軟體的處理方式省略。如此,不僅可以降低硬體成本,也可因零件的減少而提高產品的可靠度。本文將以瑞薩(Renesas)R8C/Tiny系列中的R8C/1B為設計案例,利用PWM Timer產生DTMF複頻撥號音,取代傳統的DTMF產生器,並討論如何善用新一代MCU的高整合能力,以實現降低硬體成本的設計需求。
 



搭配RC濾波電路產生所需電壓
 



PWM廣泛地應用於MCU以實現大功率數位/類比(D/A)的類比訊號輸出,利用Pulse寬度可調變的特性,再搭配簡單的RC濾波電路,便可產生需要的電壓準位。如圖1和圖2中,tw表1完整的脈波週期,ton表邏輯Hi的時間,toff表邏輯Low的時間。如圖1所示,若把一固定工作週期比例(ton/tw)之方波,在其截止頻率遠小於脈波頻率的條件下,輸入一簡單的RC積分電路,輸出則為一接近穩定的DC電壓,此輸出電壓(Vo)之大小為:Vo=Vhi×(ton/tw)+Voffset),上式中Vhi為邏輯Hi的電位,Voffset為邏輯Low的電位,因Vhi和Voffset兩者皆為常數,若要改變輸出電壓Vo,只要改變ton/tw的比率即可(圖2)。















表1 相對振幅對應之PWM設定值
N 相對振幅Y=sin(n×2π/256) Sin_table[n]=int(Y×511+512)
0 0 512
1 0.024541286 523
2 0.049067789 536
3 0.073564735 548
4 0.098017369 561
252 -0.098002747 460
253 -0.073550082 473
254 -0.049053114 485
255 -0.024526598 498
256 1.46928E-05 512


圖1 把一固定工作週期比例方波,輸入一簡單RC積分電路所得之常數。



圖2 改變ton/tw的比率即可改變輸出電壓Vo



如圖3所示,將一個完整正弦波週期依角度分成二百五十六等分,依據Y=sin(θ)求出每一等分相對應之相對振幅值,如sin90度時為1、sin45度時為0.707,求出每一點的相對振幅後,並將每一點等比率乘511放大後,再加上Offset值(512),便成為每一點的PWM設定值,請參閱表1,本例PWM解析度為1,024,放大倍率即Offset值為PWM解析度/2-1=511,加Offset目的在於使每一點的相對振幅為正整數(1~1,023)。


圖3 正弦波週期



利用PWM調變正弦波
 



根據表1,要完整呈現DTMF十六個撥號音,須產生八組頻率的弦波,即697Hz、770Hz、852Hz、941Hz、1,209Hz、1,335Hz、1,477Hz、1,633Hz。這八組頻率的弦波採用一固定的還原時間取樣還原點(Sampling Period),本例使用50微秒,根據每一個取樣還原時間點,計算出每組頻率對照二百五十六等分弦波表的偏移量,計算方式為單位取樣間隔表格偏移量(Wave Table Moving Step Per Sampling Period) Wave_step=256/(Tsine/Tsample),其中256為Sine-table樣本數,Tsine為弦波周期,Tsampling為Sample Period取樣還原間隔=50微秒。若要產生852Hz之弦波,其wave_step=256/((1/852)/50μS)=10.9μS, 其餘七組頻率依上述方法計算出如表2。












表2 七組頻率弦波計算結果

頻率(Hz) wave_step(?)=256/((1/Freq)/50uS)
697 8.9216
770 9.856
852 10.9056
941 12.0448
1,209 15.4752
1,335 17.088
1,477 18.9056
1,633 20.9024


至此,可知道在每個Sample Period時間產生的頻率表格指標,累加上wave_offset查表sine_table[256],取得新的PWM值輸出,經過RC積分變成電壓準位,如此週而復始,就會產生需要的弦波波型。而且也可發現,不同頻率之弦波的wave_step不一樣,頻率愈高,wave_setp愈高,取樣還原點就愈少,波形解析度就愈低。反之,頻率愈低,wave_step就愈少,取樣點還原點愈多,波形解析度就愈高。
 



調變兩組正弦波合成DTMF訊號
 



任一DTMF撥號音是由高頻音(High Tone)群中任一組頻率,和低頻音(Low Tones)群中任一組頻率組合而成,組合的方式為波形的相加或相減。因此,在程式的流程中,需要兩組指標和兩組wave_stept,在每個Sample Period中,這兩組指標分別累加其wave_offset,進而取得各自更新的PWM值,再將其值相加後除2,得到合成的PWM值,輸出經過積分濾波,即可得到兩弦波合成的訊號(圖4)。 當然,並不是每一顆MCU都可以利用軟體實現模擬DTMF訊號的功能,此MCU須內建一些基本的硬體模組以及速度夠快的執行效能,本例MCU基本的功能需求包括10位元PWM Timer一組,用來控制PWM實現D/A;Time Base Timer一組,用來產生50微秒單位取樣間隔的中斷;CPU指令週期愈短,則產生波形的抖動愈低,本例指令週期為50奈秒。


圖4 兩弦波合成的訊號示意圖



本例所使用的MCU,其電路圖(圖5)中S1 ~S12及R10~R21組合成串列分壓的按鍵偵測電路,不同按鍵按壓時,AD_KEY端會有對應的分壓電壓,此電壓輸入MCU的AN11端,經過軟體解析,即可正確判斷是哪一個按鍵被按。當軟體偵測到有按鍵被壓時,其相對PWM波形透過P10腳位輸出,經過R1及C1積分後,在WAVE_OUTPUT端點即可量測到DTMF的波形,另外,PWM訊號經過T11直接驅動喇叭SP1,發出DTMF撥號音。而主程式流程與50微秒中斷服務程式流程如圖6、圖7所示。


點圖放大
圖5 本文範例採用之MCU電路圖



點圖放大
圖6 主程式流程圖



圖7 50微秒中斷服務程式流程圖



圖8(a)及(b)為本例利用R8C/1B模擬DTMF訊號,實際量測到的波形,可參考PWM訊號Duty Cycle的變化和經過RC積分濾波後訊號的相互關係(CH1為PWM訊號,CH2為DTMF訊號),看到輸出的完整與高訊號品質,證明本文的方法可行,並可為使用者降低成本。


點圖放大
圖8 利用R8C/1B模擬DTMF訊號實際量測之波形。



(本文作者任職於晶偉電子)

》想看更多內容?快來【免費加入會員】【登入會員】,享受更多閱讀文章的權限喔!
標籤
相關文章

低功耗/新應用驅動 FPGA邁入28奈米世代

2010 年 05 月 10 日

善用電路設計/驗證工具 系統模塊開發效率倍增

2011 年 08 月 01 日

GPU影像渲染技術升級 光線追蹤應用開發更輕鬆

2015 年 02 月 27 日

無線網路發展瞬息萬變 PXI平台滿足未來測試需求

2016 年 09 月 24 日

改善使用者體驗 主動能量監測延長供電時間

2021 年 10 月 21 日

智慧監測守護工廠環境安全 聯網系統降低木材加工污染(2)

2024 年 05 月 08 日
前一篇
擺脫光/熱技術窒礙 LED路燈系統設計大躍進
下一篇
邁吉倫引進即時通訊整合軟體獲德國MEDION AG合約