27.7
實(shí)驗(yàn)2:PWM輸出
27.7.1
硬件設(shè)計(jì)
本次實(shí)驗(yàn)需要使用到LED燈來展示定時的效果,LED燈具體的電路講解請讀者參考本教程:8.4.實(shí)驗(yàn):使用寄存器點(diǎn)亮LED燈。
注
本實(shí)驗(yàn)僅用到LED1~3當(dāng)中的其中一盞。
野火啟明6M5開發(fā)板例程使用的PWM輸出引腳為額外引出的IO引腳:P600,如下圖所示。

注
野火啟明6M5開發(fā)板例程使用的PWM輸出引腳為額外引出的IO引腳:P600(GTIOC6B)。
野火啟明4M2開發(fā)板例程使用的PWM輸出引腳為額外引出的IO引腳:P405(GTIOC1A)。
野火啟明2L1開發(fā)板例程使用的PWM輸出引腳為額外引出的IO引腳:P115(GTIOC4A)。
27.7.2
軟件設(shè)計(jì)
27.7.2.1
新建工程
由于本實(shí)驗(yàn)需要用到LED,也會用到串口打印提示信息,因此我們在前面串口通信章節(jié)的“實(shí)驗(yàn)1:UART收發(fā)回顯”例程的基礎(chǔ)上修改程序。
對于e2studio開發(fā)環(huán)境:拷貝一份我們之前的e2s工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“27_GPT_PWM_Output”,最后再將它導(dǎo)入到我們的e2studio工作空間中。
對于Keil開發(fā)環(huán)境:拷貝一份我們之前的Keil工程“19_UART_Receive_Send”,然后將工程文件夾重命名為“27_GPT_PWM_Output”,并進(jìn)入該文件夾里面雙擊Keil工程文件,打開該工程。
工程新建好之后,在工程根目錄的“src”文件夾下面新建“gpt”文件夾,再進(jìn)入“gpt”文件夾里面新建源文件和頭文件:“bsp_gpt_pwm_output.c”和“bsp_gpt_pwm_output.h”。工程文件結(jié)構(gòu)如下。
列表5:文件結(jié)構(gòu)
左右滑動查看完整內(nèi)容
27_GPT_PWM_Output ├─ ...... └─src ├─ led │ ├─ bsp_led.c │ └─ bsp_led.h ├─ debug_uart │ ├─ bsp_debug_uart.c │ └─ bsp_debug_uart.h ├─ gpt │ ├─ bsp_gpt_pwm_output.c │ └─ bsp_gpt_pwm_output.h └─ hal_entry.c
27.7.2.2
FSP配置
下面以野火啟明6M5開發(fā)板為例來講解相關(guān)的FSP配置。
因?yàn)镻WM輸出需要使用IO引腳進(jìn)行輸出,因此需要先在“Pins”配置頁中為GPT配置引腳,我們將GPT6的GTIOC6B信號輸出連接到P600引腳,如下圖所示。

然后在“Stacks”配置頁中加入GPT模塊,并對其作如下圖所示的配置。

上圖中框起來的部分是需要我們?nèi)バ薷牡膮^(qū)域,其他的配置屬性按照默認(rèn)即可。圖中需要更改的配置如下:
Pin Output Support:這一項(xiàng)配置允許輸出PWM信號到引腳,我們改為使能引腳輸出。
Name和Channel:這兩項(xiàng)分別設(shè)置GPT模塊名字為“g_timer_gpt6”和選擇第6個GPT定時器(第6個通道)。
Mode:配置GPT的工作模式為PWM輸出模式。
Period和Period Unit:我們將PWM頻率設(shè)為20KHz,因此“Period”設(shè)置為20,單位“Period Unit”設(shè)置為Kilohertz,即千赫茲(KHz)。
GTIOCB Output Enabled:使能GTIOCB輸出。
GTIOCB Stop Level:設(shè)置定時器停止時GTIOCB輸出的電平為低電平。
GTIOC6B:選擇連接到P600引腳,這個軟件會自動設(shè)置的,我們只要確認(rèn)了就好。
GPT的“Output”部分的屬性描述如下表所示。
表6:GPT屬性描述:“Output“部分

點(diǎn)擊可查看大圖
27.7.2.3
GPT初始化函數(shù)
列表6:GPT初始化函數(shù)
左右滑動查看完整內(nèi)容
voidGPT_PWM_Init(void)
{
/* 初始化GPT 模塊*/
R_GPT_Open(&g_timer_gpt6_ctrl, &g_timer_gpt6_cfg);
/* 啟動GPT 定時器*/
R_GPT_Start(&g_timer_gpt6_ctrl);
/* 重新設(shè)置占空比為80% */
GPT_PWM_SetDuty(80);
}
27.7.2.4
設(shè)置PWM占空比函數(shù)
列表7:設(shè)置PWM占空比函數(shù)
左右滑動查看完整內(nèi)容
/** 自定義函數(shù):設(shè)置PWM 占空比 @param duty 占空比范圍:0~100 % */ voidGPT_PWM_SetDuty(uint8_tduty) { timer_info_tinfo; uint32_tcurrent_period_counts; uint32_tduty_cycle_counts; if(duty >100) duty =100;//限制占空比范圍:0~100 /* 獲得GPT 的信息*/ R_GPT_InfoGet(&g_timer_gpt6_ctrl, &info); /* 獲得計(jì)時器一個周期需要的計(jì)數(shù)次數(shù)*/ current_period_counts = info.period_counts; /* 根據(jù)占空比和一個周期的計(jì)數(shù)次數(shù)計(jì)算GTCCR 寄存器的值*/ duty_cycle_counts = (uint32_t)(((uint64_t) current_period_counts *? ,→duty) /100); /* 最后調(diào)用FSP 庫函數(shù)設(shè)置占空比*/ R_GPT_DutyCycleSet(&g_timer_gpt6_ctrl, duty_cycle_counts, GPT_IO_PIN_ ,→GTIOCB); }
27.7.2.5
hal_entry入口函數(shù)
列表8:hal_entry入口函數(shù)
左右滑動查看完整內(nèi)容
/* 用戶頭文件包含*/
#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"gpt/bsp_gpt_pwm_output.h"
voidhal_entry(void)
{
/*TODO:add your own code here *//* TODO: 在這里添加你自己的代碼 */
LED_Init();// LED 初始化
Debug_UART4_Init();// SCI4 UART 調(diào)試串口初始化
GPT_PWM_Init();// GPT 初始化
printf("這是一個GPT 的PWM 輸出功能實(shí)驗(yàn)
");
printf("使用示波器測量P600 輸出的PWM 波形
");
// LED1 閃爍指示程序正在運(yùn)行...
while(1)
{
LED1_ON;
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
LED1_OFF;
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
27.7.3
下載驗(yàn)證
以野火啟明6M5開發(fā)板為例,編譯并下載程序后,復(fù)位開發(fā)板使程序重新運(yùn)行,然后使用示波器測量P600引腳輸出的PWM波形。實(shí)現(xiàn)現(xiàn)象如下。
頻率20KHz,占空比為50%的PWM波形:

頻率20KHz,占空比為80%的PWM波形:

小技巧
人眼對于每11毫秒閃爍一次(約83赫茲)基本感覺不到閃爍,每13毫秒閃爍一次(約66赫茲)感覺到輕微頻閃。那么我們平時見到的LED燈,當(dāng)它的頻率大于50Hz的時候,人眼就會產(chǎn)生視覺暫留效果,基本就看不到閃爍了,而是一個常亮的LED燈。因此,我們可以通過PWM讓LED高頻閃爍,并控制PWM占空比實(shí)現(xiàn)LED的亮度變化,通過這個原理可以實(shí)現(xiàn)呼吸燈的效果,感興趣的讀者可自行嘗試去實(shí)現(xiàn)它。
-
led
+關(guān)注
關(guān)注
244文章
24718瀏覽量
692439 -
PWM
+關(guān)注
關(guān)注
116文章
5894瀏覽量
226549 -
引腳
+關(guān)注
關(guān)注
16文章
2120瀏覽量
56009 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6418瀏覽量
120759
原文標(biāo)題:實(shí)驗(yàn)2:PWM輸出——瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南(100)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南之GPT比較匹配功能及輸入捕獲功能詳解
瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南之使用GPT基本定時功能實(shí)驗(yàn)
瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南之使用GPT輸入捕獲進(jìn)行脈寬和周期測量實(shí)驗(yàn)
瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南之使用GPT進(jìn)行PWM輸出實(shí)驗(yàn)
評論