註: 本文為中文翻譯,原文請見底下網址:
http://www.mikroe.com/eng/chapters/view/6/chapter-5-ccp-modules/
TOC Introduction Ch. 1 Ch. 2 Ch. 3 Ch 4. Ch. 5 Ch. 6 Ch. 7 Ch. 8 Ch. 9 App. A App. B App. C
Chapter 5: CCP Modules
CCP 是 Capture/Compare/PWM 的縮寫。
CCP 模組是一個允許使用者測量事件的時間和控制事件的周邊。
Capture Mode, 允許測量某個事件的週期。這個電路可以深入的了解某個會不斷變化其值的暫存器的當前狀態。在這種情況下,是指 TMR1 這個暫存器。
Compare Mode 比較兩個暫存器的內容。其中一個是 TMR1 暫存器。這個電路也允許使用者觸發外部事件,當預先決定好的時間已經消逝的時候。[1]
[1] 難懂嗎?這只是簡化的解釋,實際上會更複雜難懂,因為這些模組可以在很多種不同的模式下運作。試著從 datasheet 分析它們的運作。如果你使用任何 CCP 模組,首先選擇你需要的模式,分析 datasheet 上恰當的插圖,然後才開始改變暫存器的內容,否則的話 ...
PWM – 脈衝寬度調變 (Pulse Width Modulation) 可以產生不同頻率與工作週期 (duty cycle) 的訊號。
PIC16F887 微控制器有兩個這樣的模組 – CCP1 和 CCP2。
在正常模式下它們倆是一致的,只有一個例外,加強型的 PWM (Enhanced PWM) 只有 CCP1 才有。這就是為什麼這一章講 CCP1 講的很詳細。關於 CCP2,只有跟 CCP1 不同的地方才會討論。
CCP1 模組
這個電路的核心是一個 16 位元的暫存器 CCPR1,包括 CCPR1L 和 CCPR1H 暫存器。CCPR1 用於捕捉或比較儲存在 TMR1 暫存器裏的數值(TMR1H 和 TMR1L)。
在比較模式下 (Compare mode),如果軟體有啟用的話,當匹配成立時 TMR1 會重置 (Reset)。此外,CCP1 模組可以產生不同頻率與 duty cycle 的 PWM 訊號。
CCP1CON 暫存器控制 CCP1 模組。
CCP1 補捉模式 (Capture mode)
在這種模式下,在下列情況下 TMR1 暫存器 (由 TMR1H 和 TMR1L 組成) 的內容會被複製到 CCP1 暫存器(由 CCPR1H 和 CCPR1L 組成):
● 在 RC2/CCP1 腳位上的每一個上升緣 (1 » 0);
● 在 RC2/CCP1 腳位上的每一個下降緣(0 » 1);
● 在 RC2/CCP1 腳位上的每個第 4 個上升緣(0 » 1); 及
● 在 RC2/CCP1 腳位上的每個第 16 個上升緣(0 » 1)。
CCP1CON 暫存器的 4 個位元(CCP1M3 - CCP1M0)決定在這些事件中哪一個會觸發 16 位元的資料傳輸。此外,必須滿足以下條件:
● RC2/CCP1 腳位必須設置為 input; 及
● TMR1 模組必須當作計時器或同步計數器使用。
在完成一個訊號的捕捉時,CCP1IF 旗號會被豎起。如果 CCP1IF 旗號豎起來,而且如果 PIE 暫存器的 CCP1IE 有啟用,那麼就會引發中斷。
當捕捉模式改變時,可能會產生不希望得到的補捉中斷。為了避免這種情況,在對控制暫存器做任何改變之前,必須把 CCP1IE 位元和 CCP1IF 旗號都清除掉。
切換補捉 prescaler 也可能產生非預期的中斷,為了避免這種情況,在改變 prescaler 前應該暫時關閉 CCP1 模組。
底下是建議的程式次序:
CCP1 比較模式 (Compare mode)
在這種模式下,CCP1 暫存器的值會不斷地跟 TMR1 暫存器比較。當發生匹配時,RC2/CCP1 輸出腳位的邏輯狀態將會改變,取決於控制暫存器(CCP1M3 - CCP1M0)的狀態。CCP1IF 旗號也會同時豎起來。
要把 CCP1 模組設置成這個模式,必須滿足兩個條件:
● RC2/CCP1 腳位必須設置為 output; 及
● TMR1 必須與內部時脈同步。
CCP1 PWM 模式
不同頻率與 duty cycle的訊號在自動化有很廣泛的應用。一個典型的例子是電源控制電路 (power control circuit),其簡單的操作方式顯示在下圖。如果一個邏輯零(0)代表關閉,而邏輯1(1)代表打開,那麼負載消耗的電力將與脈衝期間成正比。這個比例 (ratio) 通常稱為工作週期 (Duty Cycle)。
另一個常見的例子,是利用電路上的 PWM 訊號產生任意的波形,例如正弦波。見下圖:
Fig. 5-5 CCP1 in PWM mode with filtration
以這種方式運作的設備,通常用於控制馬達運轉 (速度、加速、減速等) 的交換式穩壓器 (switching regulators)。
上圖顯示了設定為 PWM 模式的 CCP1 模組的方塊圖。為了在其輸出腳位產生任意形式的脈衝,有必要決定的只有兩個值 -脈衝頻率 (pulse frequency) 和持續時間 (duration)。
PWM 週期 (period)
輸出脈衝週期(T)(pulse period) 的指定方式是透過 TMR2 計時器的 PR2 暫存器。PWM 脈衝週期 (PWM period) 可以使用以下的公式計算:
PWM Period(T) = (PR2 +1) * 4Tosc * TMR2 Prescale Value
如果 PWM 週期(T)是已知的,那麼很容易確定訊號的頻率(F),因為這兩個值的關係式是 F = 1 /T。
PWM 工作週期 (Duty Cycle)
PWM duty cycle 是透過 10 個位元指定: 8 個最高有效位元 (MSBs) 放在 CCPR1L 暫存器,剩下的 2 個最低有效位元 (LSbs) 放在 CCP1CON 暫存器 (DC1B1 和 DC1B0)。結果是一個 10 位元的數值,組成下列公式:
Pulse Width = (CCPR1L,DC1B1,DC1B0) * Tosc * TMR2 Prescale Value
下表顯示如何產生不同頻率的 PWM 訊號,假設微控制器使用的是 20MHz 的石英晶體 (Tosc=50nS)。
最後,兩點注意事項:
● 若粗心大意將脈衝寬度 (pulse width) 設定得比 PWM 週期 (PWM period) 還大,在這個情況下,輸出腳位將不斷的被設定 (set); 及
● 在這個應用中,計時器 TMR2 的 postscaler 不能用來產生較長的 PWM 週期。
PWM 解析度
PWM 訊號只不過是不同 duty cycle 的脈衝序列 (pulse sequence)。對於某個特定的頻率(每秒的脈衝數),duty cycle 的組合(duty combinations) 數量是有限的。這個數字就是所謂的解析度 (resolution),它是以位元來估量。例如,一個 10 位元的解析度將得到 1024 種離散 duty cycles (discrete duty cycles),而 8 位元的解析度將得到 256 種離散 duty cycles 等。關於 PIC16F887 這顆微控制器,解析度是透過 PR2 暫存器指定,最大值的獲得方法是藉由寫入 FFh 到 PR2 暫存器。
PWM 頻率與解析度的對照表 (Fosc = 20MHz):
PWM 頻率與解析度的對照表 (Fosc = 8MHz):
CCP1CON 暫存器
CCP2 模組
除了暫存器與位元名稱不同外,這個模組是 CCP1 正常模式的一個很好的副本 (前面討論過)。它們只有一點不同,當 CCP2 在比較模式下運作的時候。
這個不同點指的是 TMR1 計時器的重置訊號 (reset signal)。也就是說,如果 A/D 轉換器有啟用,當 TMR1 與 CCP2 暫存器的值匹配時,計時器 TMR1 的重置訊號會自動啟動 A/D 轉換。
類似於 CCP1 模組,這個電路受控制暫存器的控制。這次是 CCP2CON 暫存器。
CCP2CON 暫存器
為了將 CCP 模組設定為 PWM 模式,應採取下列步驟:
● 停用 CCP1 輸出腳位。它應該設置為輸入;
● 透過載入 PR2 暫存器設定 PWM 週期 (PWM period);
● 組合 CCP1CON 暫存器的位元以將 CCP 模組設定為 PWM 模式;
● 透過 CCPR1L 暫存器與 CCP1CON 暫存器的 DC1B1 和 DC1B0 位元設定 PWM 訊號的 duty cycle;
● 設定並啟動 TMR2:
1. 清除 PIR1 暫存器的 TMR2IF 中斷旗號;
2. 載入 T2CON 暫存器的 T2CKPS1 與 T2CKPS0 位元以設定 TMR2 計時器的 prescaler;
3. 設定 T2CON 暫存器的 TMR2ON 位元以啟動 TMR2 計時器;
● 在一個 PWM 循環完成後啟用 PWM 輸出腳位:
1. 等待 TMR2 的溢位 (PIR1 暫存器的 TMR2IF 位元豎起來時); 及
2. 清除 TRIS 暫存器的位元以將恰當的腳位設定為輸出。
CCP1 增強模式 (Enhanced Mode)
增強模式只有 CCP1 才有。基本上,這個模組跟前面討論的沒有什麼不同,增強指的傳輸 PWM 訊號到輸出腳位。為什麼這很重要?這是因為微控制器很經常地用於控制電動馬達的系統。這些設備這裡沒有描述,但如果你有機會發展類似的設備,你將認識這些元素,這些元素最近已經被當作外部周邊使用。很正常地,這些元素現在已經整合到微控制器裏,而且可以在很多不同的模式下運作。
單一輸出 PWM 模式 (Single Output PWM Mode)
這種模式只在 CCP1CON 暫存器的 P1M1 和 P1M0 位元被清除時才會啟用。在這種情況下,只有一個 PWM 訊號可同時在最多 4 個不同的輸出腳位上出現。此外,PWM 訊號可以基本或反向 (inverted) 的波形呈現。訊號的分佈由 PSTRCON 暫存器決定,而它的極性取決於 CCP1CON 暫存器的 CCP1M1 和 CCP1M0 位元。
使用反向輸出 (inverted output) 的時候,腳位是低電位有效 (low-active),而具有相同波形的脈衝會永遠成對地的產生:分別在 P1A 和 P1C 腳位,以及 P1B 和 P1D 腳位。
Fig. 5-11 Single Output PWM Mode
Half-Bridge 模式
在這種模式下,PWM 訊號會輸出在 P1A 腳位上,而同時互補的 PWM 訊號則會輸出在 P1B 腳位上。這類脈衝會啟動金屬氧化物半導體場效電晶體 (MOSFET) 驅動程式 (MOSFET drivers) 進入 Half-Bridge 模式,Half-Bridge 模式可以啟用/停用流經設備的電流。
關於這個電路,同時打開兩個 MOSFET drivers 是非常危險的一件事。在那一刻電路短路將是致命的。為了避免這種情況,在開關 MOSFET driver 時有必要提供一個短暫的延遲。這個延遲在下圖被標記為 "td"。透過PWM1CON 暫存器的 PDC0-PDC6 位元解決了這個問題。
如下圖所示,同樣的模式也可以用來啟動 MOSFET 進入 Full-Bridge 模式:
Fig. 5-14 Activate MOSFET drivers
Full-Bridge 模式
在 Full-Bridge 模式下,4 支腳位全都當作輸出用。實際上,這種模式通常用來轉動馬達,提供簡單而且完全的速度與旋轉方向的控制。有這兩種設定: Full Bridge-Forward 和 Full Bridge-Reverse。
Full Bridge - Forward 設定
在 Forward 模式會發生下列事情:
● 邏輯 1 (1) 出現於 P1A 腳位 (腳位是高電位有效, high-active);
● 脈衝序列出現於 P1D 腳位;及
● 邏輯 0 (0) 出現於 P1B 和 P1C 腳位 (腳位是低電位有效, low-active)。
下圖顯示在一個完全的 PWM 循環中 (full PWM cycle) 中 P1A-P1D 腳位的狀態。
Full Bridge - Reverse 設定
同樣的事情在 Reverse 模式也會發生,除了腳位功能不同:
● 邏輯 1 (1) 出現於 P1C 腳位 (腳位是高電位有效, high-active);
● 脈衝序列出現於 P1B 腳位; 及
● 邏輯 0 (0) 出現於 P1A 和 P1D 腳位 (腳位是低電位有效, low-active)。
PWM1CON 暫存器
PSTRCON 暫存器
ECCPAS 暫存器
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。