加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

瑞萨RA8系列教程 | RA8输出PWM实现方法

10/09 12:55
1058
阅读需 7 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

微信公众号 | strongerHuang

PWMPulse Width Modulation,脉冲宽度调制

单片机实现PWM输出的方式有很多种,有通过IO延时翻转实现的,比如:

while(1){  IO口高电平  Delay延时  IO口低电平  Delay延时}

这种方法和前面给大家分享的文章【通过RA8单片机 SysTick 实现延时】有点类似,但这种方法缺陷也明显,占用CPU资源,也存在误差,特别是us级别误差更明显。

也有通过定时器中断控制IO高低电平输出实现的。

定时器中断配置 ——> 启动定时器 ——> 响应中断,控制IO高低电平···

当然,本文通过,瑞萨RA8D1单片机通用 PWM 定时器(GPT,General PWM Timer)输出PWM波形,这样既避免了占用CPU资源,又避免了误差(精度相对很高)。
下面手把手教大家基于e2 studio环境下,实现RA8单片机输出PWM的方法。

准备工作

1、下载并安装e2 studio工具

下载地址,推荐瑞萨官方的GitHub:https://github.com/renesas/fsp/releases

我们这里基于Windows环境,安装exe文件,基本根据提示信息一路next即可。

2、准备RA8D1开发板

我们这里以瑞萨RA8D1单片机为例(当然,其实RA系列单片机也类似):

RA8单片机PWM输出方法

本文就瑞萨官方集成开发工具e2 studio,它是瑞萨单片机一站式编程工具,只需要动动鼠标点一点就能创建一个单片机工程。

1、打开e2 studio创建PWM项目

我们命名项目名称为:RA8D1_PWM

选择对应芯片型号:R7FA8D1BEC

 

只需要动动鼠标“点一点”,一个完整的工程就创建好了。

2、配置工程

我们使用RA8D1单片机通用PWM定时器(General PWM Timer)GPT4,引脚P301输出PWM。

这里配置时钟、添加GPT模块以相关配置。

配置时钟:GPT4使用 PCLKD 分频作为时钟源

配置引脚:我们使用GPT4的P301作为PWM输出引脚。

新建定时器模块:我们添加定时器模块并配置相关属性(配置常用参数,其实默认即可)。

3、添加源代码

我们这里简单添加一个gpt4模块(源代码文件),如图:

bsp_gpt_pwm_output.c源代码:

#include "bsp_gpt_pwm_output.h"
/* GPT初始化函数 */void GPT_PWM_Init(void){    /* 初始化 GPT 模块 */    R_GPT_Open(&g_timer_gpt4_ctrl, &g_timer_gpt4_cfg);        /* 启动 GPT 定时器 */    R_GPT_Start(&g_timer_gpt4_ctrl);}
/** 设置PWM占空比    @param duty 占空比范围:0~100 %*/void GPT_PWM_SetDuty(uint8_t duty){    timer_info_t info;    uint32_t current_period_counts;    uint32_t duty_cycle_counts;
    if (duty > 100)        duty = 100; //限制占空比范围:0~100
    /* 获得GPT的信息 */    R_GPT_InfoGet(&g_timer_gpt4_ctrl, &info);        /* 获得计时器一个周期需要的计数次数 */    current_period_counts = info.period_counts;        /* 根据占空比和一个周期的计数次数计算GTCCR寄存器的值 */    duty_cycle_counts = (uint32_t)(((uint64_t) current_period_counts * duty) / 100);
    /* 最后调用FSP库函数设置占空比 */    R_GPT_DutyCycleSet(&g_timer_gpt4_ctrl, duty_cycle_counts, GPT_IO_PIN_GTIOCB);}

bsp_gpt_pwm_output.h头代码:

#ifndef __BSP_GPT_PWM_OUTPUT_H#define __BSP_GPT_PWM_OUTPUT_H#include "hal_data.h"
void GPT_PWM_Init(void);
void GPT_PWM_SetDuty(uint8_t duty);
#endif

我们这里只有两个简单函数,在我们代码中添加 GPT_PWM_Init 即可实现(配置中的)200KHz,占空比80%的PWM波形输出。

4、演示效果

下图是我们配置200KHz,占空比80%的PWM波形:

根据源码,你能发现,我们只需要初始化(配置好)PWM输出,后面就不会占用CPU资源。

我们提供了一个简单的接口,修改占空比,如果需要根据需求修改占空比,我们调用一下接口即可。比如我们修改占空比为60%:

当然,更多参数,我们可以根据自己情况封装函数接口。

好了,本文就分享到这里,希望你=对你们有所帮助。

瑞萨电子

瑞萨电子

(RENESAS)于2003年4月1日—由日立制作所半导体部门和三菱电机半导体部门合并成立。RENESAS结合了日立与三菱在半导体领域方面的先进技术和丰富经验,是无线网络、汽车、消费与工业市场设计制造嵌入式半导体的全球领先供应商。创立日期2003年4月1日公司法人董事长&CEO伊藤达业务范围单片机逻辑模拟等的系统LSI、分立半导体元件、SRAM等的存储器开发、设计、制造、销售、服务的提供。集团成员44家公司(日本20家,日本以外24家)年度销售额2006财年(截止至2007年3月):9526亿日元(约83亿美元)从业人员:26000人(全世界20个国家、43家公司)瑞萨科技是世界十大半导体芯片供应商之一,在很多诸如移动通信、汽车电子和PC/AV 等领域获得了全球最高市场份额。瑞萨集成电路设计(北京)有限公司苏州分公司(RDB-SU)是瑞萨科技全资子公司,2004年1月成立以来,现已拥有150多名优秀工程师,承担着家电和汽车电子领域MCU的一系列设计工作,并在2006年4月开始开发面向中国市场的MCU。

(RENESAS)于2003年4月1日—由日立制作所半导体部门和三菱电机半导体部门合并成立。RENESAS结合了日立与三菱在半导体领域方面的先进技术和丰富经验,是无线网络、汽车、消费与工业市场设计制造嵌入式半导体的全球领先供应商。创立日期2003年4月1日公司法人董事长&CEO伊藤达业务范围单片机逻辑模拟等的系统LSI、分立半导体元件、SRAM等的存储器开发、设计、制造、销售、服务的提供。集团成员44家公司(日本20家,日本以外24家)年度销售额2006财年(截止至2007年3月):9526亿日元(约83亿美元)从业人员:26000人(全世界20个国家、43家公司)瑞萨科技是世界十大半导体芯片供应商之一,在很多诸如移动通信、汽车电子和PC/AV 等领域获得了全球最高市场份额。瑞萨集成电路设计(北京)有限公司苏州分公司(RDB-SU)是瑞萨科技全资子公司,2004年1月成立以来,现已拥有150多名优秀工程师,承担着家电和汽车电子领域MCU的一系列设计工作,并在2006年4月开始开发面向中国市场的MCU。收起

查看更多

相关推荐

电子产业图谱

作者黄工,从事嵌入式软件开发工作8年有余,高级嵌入式软件工程师,业余维护公众号『strongerHuang』,分享嵌入式软硬件、单片机、物联网等内容。