PWM:Pulse Width Modulation,脈沖寬度調(diào)制。
單片機(jī)實(shí)現(xiàn)PWM輸出的方式有很多種,有通過IO延時翻轉(zhuǎn)實(shí)現(xiàn)的,比如:
左右滑動查看完整內(nèi)容
while(1)
{
IO口高電平
Delay延時
IO口低電平
Delay延時
}

也有通過定時器中斷控制IO高低電平輸出實(shí)現(xiàn)的。
定時器中斷配置——>啟動定時器——>響應(yīng)中斷,控制IO高低電平
當(dāng)然,本文通過,瑞薩RA8D1單片機(jī)通用PWM定時器(GPT,General PWM Timer)輸出PWM波形,這樣既避免了占用CPU資源,又避免了誤差(精度相對很高)。
下面手把手教大家基于e2studio環(huán)境下,實(shí)現(xiàn)RA8單片機(jī)輸出PWM的方法。
準(zhǔn)備工作
01下載并安裝e2studio工具
下載地址,推薦瑞薩官方的GitHub:
e2studio工具
https://github.com/renesas/fsp/releases
我們這里基于Windows環(huán)境,安裝exe文件,基本根據(jù)提示信息一路next即可。這里不再詳述。
02準(zhǔn)備RA8D1開發(fā)板
我們這里以瑞薩RA8D1單片機(jī)為例:
(當(dāng)然,其實(shí)RA系列單片機(jī)也類似)

RA8單片機(jī)PWM輸出方法
本文就瑞薩官方集成開發(fā)工具e2studio,它是瑞薩單片機(jī)一站式編程工具,只需要動動鼠標(biāo)點(diǎn)一點(diǎn)就能創(chuàng)建一個單片機(jī)工程。
01打開e2studio創(chuàng)建PWM項(xiàng)目


我們命名項(xiàng)目名稱為:RA8D1_PWM

選擇對應(yīng)芯片型號:R7FA8D1BEC





只需要動動鼠標(biāo)“點(diǎn)一點(diǎn)”,一個完整的工程就創(chuàng)建好了。
02配置工程
我們使用RA8D1單片機(jī)通用PWM定時器(General PWM Timer)GPT4,引腳P301輸出PWM。
這里配置時鐘、添加GPT模塊以相關(guān)配置。
配置時鐘:
GPT4使用PCLKD分頻作為時鐘源

配置引腳:
我們使用GPT4的P301作為PWM輸出引腳。

新建定時器模塊:
我們添加定時器模塊并配置相關(guān)屬性(配置常用參數(shù),其實(shí)默認(rèn)即可)。

03添加源代碼
我們這里簡單添加一個gpt4模塊(源代碼文件),如圖:

bsp_gpt_pwm_output.c源代碼:
左右滑動查看完整內(nèi)容
#include"bsp_gpt_pwm_output.h"
/* GPT初始化函數(shù) */
voidGPT_PWM_Init(void)
{
/* 初始化 GPT 模塊 */
R_GPT_Open(&g_timer_gpt4_ctrl, &g_timer_gpt4_cfg);
/* 啟動 GPT 定時器 */
R_GPT_Start(&g_timer_gpt4_ctrl);
}
/** 設(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_gpt4_ctrl, &info);
/* 獲得計時器一個周期需要的計數(shù)次數(shù) */
current_period_counts = info.period_counts;
/* 根據(jù)占空比和一個周期的計數(shù)次數(shù)計算GTCCR寄存器的值 */
duty_cycle_counts = (uint32_t)(((uint64_t) current_period_counts * duty) /100);
/* 最后調(diào)用FSP庫函數(shù)設(shè)置占空比 */
R_GPT_DutyCycleSet(&g_timer_gpt4_ctrl, duty_cycle_counts, GPT_IO_PIN_GTIOCB);
}
bsp_gpt_pwm_output.h頭代碼:
左右滑動查看完整內(nèi)容
#ifndef__BSP_GPT_PWM_OUTPUT_H #define__BSP_GPT_PWM_OUTPUT_H #include"hal_data.h" voidGPT_PWM_Init(void); voidGPT_PWM_SetDuty(uint8_tduty); #endif
我們這里只有兩個簡單函數(shù),在我們代碼中添加GPT_PWM_Init即可實(shí)現(xiàn)(配置中的)200KHz,占空比80%的PWM波形輸出。

04演示效果
下圖是我們配置200KHz,占空比80%的PWM波形:

根據(jù)源碼,你能發(fā)現(xiàn),我們只需要初始化(配置好)PWM輸出,后面就不會占用CPU資源。
我們提供了一個簡單的接口,修改占空比,如果需要根據(jù)需求修改占空比,我們調(diào)用一下接口即可。比如我們修改占空比為60%:


當(dāng)然,更多參數(shù),我們可以根據(jù)自己情況封裝函數(shù)接口。
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45492瀏覽量
670174 -
PWM
+關(guān)注
關(guān)注
116文章
5867瀏覽量
225567 -
瑞薩
+關(guān)注
關(guān)注
37文章
22481瀏覽量
90835 -
中斷
+關(guān)注
關(guān)注
5文章
917瀏覽量
43752 -
定時器
+關(guān)注
關(guān)注
23文章
3368瀏覽量
123551
發(fā)布評論請先 登錄
基于瑞薩RA8單片機(jī)的智能小車項(xiàng)目方案 附源代碼
基于瑞薩電子RA8D1 MCU的USB和I2S數(shù)字音頻應(yīng)用解決方案
使用瑞薩RA8D1開發(fā)板實(shí)現(xiàn)人臉識別的應(yīng)用演示
【瑞薩RA8D1 CPK開發(fā)板試用】開箱與點(diǎn)燈
【瑞薩RA8D1 CPK開發(fā)板】RA8D1移植ThreadX操作系統(tǒng)
基于瑞薩電子RA系列的野火耀陽RA8D1開發(fā)板產(chǎn)品簡介
瑞薩RA8系列教程 | RA8基于e2s實(shí)現(xiàn)RTC實(shí)時時鐘功能
【有獎評測 】最強(qiáng)Cortex-M85單片機(jī)!RA8D1套件(顯示屏+攝像頭)免費(fèi)評測
瑞薩RA8D1單片機(jī)輸出PWM實(shí)現(xiàn)方法
評論