1 PWM簡介
脈沖寬度調(diào)制(PWM) ,是英文“Pulse Width Modulation” 的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù)。簡單一點,就是對脈沖寬度的控制。
在瑞薩RA6E2系列 MCU 中有兩種定時器,一種是通用 PWM 定時器 GPT,另外一種是異步通用定時器 AGT,在這里我們使用通用定時器GPT進行PWM輸出。

[]()[]()Figure ? GPT 外設(shè)模塊的結(jié)構(gòu)框圖
RA6E2系列共有共 6 個GPT定時器(即6個通道)。GPT 的計數(shù)器支持遞增計數(shù),遞減計數(shù)和遞增/遞減計數(shù)。詳細的通道名稱如下表所示。

[]()[]()Figure ? GPT各個通道詳情
PWM 輸出就是對外輸出脈寬(即占空比)可調(diào)的方波信號, 信號頻率由周期設(shè)定寄存器 GTPR 的值決定,占空比由比較寄存器 GTCCR 的值決定。
2 RT-Thread 的PWM簡介
PWM(Pulse Width Modulation , 脈沖寬度調(diào)制) 是一種對模擬信號電平進行數(shù)字編碼的方法,通過不同頻率的脈沖使用方波的占空比用來對一個具體模擬信號的電平進行編碼,使輸出端得到一系列幅值相等的脈沖,用這些脈沖來代替所需要波形的設(shè)備。
在開啟 PWM 設(shè)備框架以及 PWM驅(qū)動之后,應用程序通過 RT-Thread 提供的 PWM設(shè)備管理接口來訪問 PWM設(shè)備,相關(guān)接口如下所示:
| 函數(shù) | 描述 | 
|---|---|
| rt_device_find() | 根據(jù)PWM設(shè)備名稱查找設(shè)備獲取設(shè)備句柄 | 
| rt_pwm_set() | 設(shè)置PWM周期和脈沖寬度 | 
| rt_pwm_enable() | 使能PWM設(shè)備 | 
| rt_pwm_disable() | 關(guān)閉PWM設(shè)備 | 
關(guān)于PWM的更多資料請參看RT-Thread官方手冊:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/pwm/pwm
3 PWM實例
3.1 RA6E2 PWM配置
接下來配置PWM,只需要簡單配置就可使用。
- FSP配置PWM
 
打開RA Smart Configurator,在配置界面里面依次打開“Pins->Peripherals->Timers:GPT”配置GPT模塊,將GPT3 的 GTIOC3A 信號輸出連接到 P111引腳。

[]()[]()Figure ? 打開GPT輸出引腳
接下來就是添加PWM stack。

[]()[]()Figure ? 添加PWM stack
接下來需要配置PWM的參數(shù)。

[]()[]()Figure ? 配置PWM的參數(shù)
核心參數(shù)如下:
- Pin Output Support :使能PWM輸出
 - Name :設(shè)置 GPT 模塊名字,這里使用是GPT3,名字就為g_timer3
 - Channel :配置GPT通道,這里使用的第3個通道
 - Mode :配置 GPT 的工作模式為 PWM 輸出模式。
 - Period :配置GPT的周期為10 KHz,需要和Period Unit配合使用
 - Period Unit :周期的單位,這里設(shè)置為KHz
 - Duty Cycle Percent :設(shè)置PWM的占空比,當然也可通過代碼修改,這里就設(shè)置為50
 - GTIOCA Output Enabled :使能 GTIOCA 輸出
 - GTIOCA Stop Level :設(shè)置定時器停止時 GTIOCA 輸出的電平為低電平
 - GTIOC3A :選擇連接到 P111引腳,打開GPT的Pin之后,會默認關(guān)聯(lián)
 
最后生成過程即可。
- 配置組件
 
然后打開對應的通道。

3.2 PWM輸出代碼實現(xiàn)
核心代碼如下:
#define PWM_DEV_NAME     "pwm3"
#define PWM_DEV_CHANNEL  0
void open_pwm_output(void)
{
    struct rt_device_pwm *pwm_dev;
    /* turn on the LCD backlight */
    pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
    /* pwm frequency:100K = 10000ns */
    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, 10000, 5000);
    rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
}
3.3 測試驗證
編譯下載,調(diào)試信息如下:

接下來就看看PWM的輸出,PWM 信號可以通過示波器看到,下面筆者就是用邏輯分析儀查看波形。
首先筆者使用的邏輯分析儀是Kingst LA5016,當然啦,其他的也可以,關(guān)于邏輯分析儀的相關(guān)使用筆者這里就不介紹了,可以查看官方資料。
首先將P111引腳接到邏輯分析儀的CH0,然后下載程序到板子中,打開Kingst VIS,然后進行采樣。

[]()[]()Figure ? PWM輸出實現(xiàn)現(xiàn)象
從上圖可以看到,實際測量的頻率和占空比與理論是相符的。
- 
                                mcu
                                +關(guān)注
關(guān)注
147文章
18457瀏覽量
381847 - 
                                瑞薩
                                +關(guān)注
關(guān)注
36文章
22419瀏覽量
89478 - 
                                計數(shù)器
                                +關(guān)注
關(guān)注
32文章
2304瀏覽量
97393 - 
                                定時器
                                +關(guān)注
關(guān)注
23文章
3350瀏覽量
121388 
發(fā)布評論請先 登錄
【EK-RA6E2開發(fā)指南】開發(fā)環(huán)境搭建
    
          
        
        
【EK-RA6E2開發(fā)指南】PWM輸出
                
 
    
           
            
            
                
            
評論