0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【Renesas RA6M4开发板之两路PWM驱动】

RT-Thread单片机学习 来源:RT-Thread单片机学习 作者: RT-Thread单片机学习 2023-01-14 11:48 次阅读

1.0 PWM 简介

PWM(Pulse Width Modulation , 脉冲宽度调制) 是一种对模拟信号电平进行数字编码的方法,通过不同频率的脉冲使用方波的占空比用来对一个具体模拟信号的电平进行编码,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替所需要波形的设备。

在这里插入图片描述

上图是一个简单的 PWM 原理示意图,假定定时器工作模式为向上计数,当计数值小于阈值时,则输出一种电平状态,比如高电平,当计数值大于阈值时则输出相反的电平状态,比如低电平。当计数值达到最大值是,计数器从0开始重新计数,又回到最初的电平状态。高电平持续时间(脉冲宽度)和周期时间的比值就是占空比,范围为0~100%。上图高电平的持续时间刚好是周期时间的一半,所以占空比为50%。

1.1 原理

一个比较常用的pwm控制情景就是用来调节灯或者屏幕的亮度,根据占空比的不同,就可以完成亮度的调节。PWM调节亮度并不是持续发光的,而是在不停地点亮、熄灭屏幕。当亮、灭交替够快时,肉眼就会认为一直在亮。在亮、灭的过程中,灭的状态持续时间越长,屏幕给肉眼的观感就是亮度越低。亮的时间越长,灭的时间就相应减少,屏幕就会变亮。

在这里插入图片描述

1.2 访问 PWM 设备

应用程序通过 RT-Thread 提供的 PWM 设备管理接口来访问 PWM 设备硬件,相关接口如下所示:

函数 描述
rt_device_find() 根据 PWM 设备名称查找设备获取设备句柄
rt_pwm_set() 设置 PWM 周期和脉冲宽度
rt_pwm_enable() 使能 PWM 设备
rt_pwm_disable() 关闭 PWM 设备

2. RT-theard配置

2.1 硬件需求

实现功能:

板载LED3(P106)和P107的LED两路PWM驱动。

1、RA6M4开发板

在这里插入图片描述

2、USB下载线,ch340串口和附带4根母母线,rx---p613;tx---p614

3、准备LED灯一个,正极接3.3V,负极接P107,板载LED3(P106)不变

在这里插入图片描述

在这里插入图片描述

硬件到此配置完成

2.2 软件配置

Renesas RA6M4开发板环境配置参照:【基于 RT-Thread Studio的CPK-RA6M4 开发板环境搭建】

1、新建项目RA6M4-pwm工程

在这里插入图片描述

2、查阅RA6M4硬件资源,相关资料,在RT-theard Setting 硬件下开启PWM,使能pwm8

在这里插入图片描述

pdf文档第21章pwm

在这里插入图片描述

需要使能pwm8

在这里插入图片描述

3、打开RA Smart Congigurator,在Stacks中New Stack添加r_gpt

在这里插入图片描述

4、在Property的Module的General中选Channel8,Pins选择P107和P106

在这里插入图片描述

5、然后Generate Project Content 同步更新刚刚配置的文件

图形化配置已经完成,接下来配置相关代码

3. 代码分析

1、修改hal_entry.c函数,屏蔽LED3普通GPIO输出

/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author        Notes
 * 2021-10-10     Sherman       first version
 * 2021-11-03     Sherman       Add icu_sample
 */

#include 
#include "hal_data.h"
#include 

//#define LED3_PIN    BSP_IO_PORT_01_PIN_06
#define USER_INPUT  "P105"

void hal_entry(void)
{
    rt_kprintf("
Hello RT-Thread!
");

    while (1)
    {
//        rt_pin_write(LED3_PIN, PIN_HIGH);
//        rt_thread_mdelay(500);
//        rt_pin_write(LED3_PIN, PIN_LOW);
        rt_thread_mdelay(500);
    }
}

void irq_callback_test(void *args)
{
    rt_kprintf("
 IRQ00 triggered 
");
}

void icu_sample(void)
{
    /* init */
    rt_uint32_t pin = rt_pin_get(USER_INPUT);
    rt_kprintf("
 pin number : 0x%04X 
", pin);
    rt_err_t err = rt_pin_attach_irq(pin, PIN_IRQ_MODE_RISING, irq_callback_test, RT_NULL);
    if(RT_EOK != err)
    {
        rt_kprintf("
 attach irq failed. 
");
    }
    err = rt_pin_irq_enable(pin, PIN_IRQ_ENABLE);
    if(RT_EOK != err)
    {
        rt_kprintf("
 enable irq failed. 
");
    }
}
MSH_CMD_EXPORT(icu_sample, icu sample);

在src文件下新建pwmled.c和pwmled.h文件,其他不变。

在这里插入图片描述

pwmled.c

/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2022-07-11     Asus       the first version
 */
/*
 * 程序清单:这是一个 PWM 设备使用例程
 * 例程导出了 pwm_led_sample 命令到控制终端
 * 命令调用格式:pwm_led_sample
 * 程序功能:通过 PWM 设备控制 LED 灯的亮度,可以看到LED不停的由暗变到亮,然后又从亮变到暗。
*/

#include 
#include 
#define PWM_DEV_NAME        "pwm8"  /* PWM设备名称 */
#define PWM_DEV_CHANNEL      0   /* PWM通道 */
struct rt_device_pwm *pwm_dev;      /* PWM设备句柄 */
//static int pwm_led_sample(int argc, char *argv[])
int pwm_led_sample(void)
{
    rt_uint32_t period, pulse, dir;
    period = 500000;    /* 周期为0.5ms,单位为纳秒us */
    dir = 1;            /* PWM脉冲宽度值的增减方向 */
    pulse = 0;          /* PWM脉冲宽度值,单位为纳秒ns */
    /* 查找设备 */
    pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
    if (pwm_dev == RT_NULL)
    {
        rt_kprintf("pwm sample run failed! can't find %s device!
", PWM_DEV_NAME);
        return RT_ERROR;
    }
    /* 设置PWM周期和脉冲宽度默认值 */
    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
    rt_pwm_set(pwm_dev, 1, period, pulse);
    /* 使能设备 */
    rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
    rt_pwm_enable(pwm_dev, 1);
    while (1)
    {
        rt_thread_mdelay(50);
        if (dir)
        {
            pulse += 5000;      /* 从0值开始每次增加5000ns */
        }
        else
        {
            pulse -= 5000;      /* 从最大值开始每次减少5000ns */
        }
        if (pulse >= period)
        {
            dir = 0;
        }
        if (0 == pulse)
        {
            dir = 1;
        }
        /* 设置PWM周期和脉冲宽度 */
        rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
        rt_pwm_set(pwm_dev, 1, period, abs(period-pulse));
    }
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(pwm_led_sample, pwm sample);

pwmled.h

/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2022-07-11     Asus       the first version
 */
#ifndef PWMLED_H_
#define PWMLED_H_

int pwm_led_sample(void);

#endif /* PWMLED_H_ */

保存完是灰色,没有保存是蓝色。

pwm_led_sample导 出 到 msh 命 令 列 表 中,实现pwm8的两路输出

4. 下载验证

1、编译重构

在这里插入图片描述

编译成功

2、下载程序

在这里插入图片描述

下载成功

3、CMD串口调试

在这里插入图片描述

然后板载复位,输入:pwm_led_sample

在这里插入图片描述

效果如下

请添加图片描述

这样我们就可以天马行空啦!

参考文献;

【基于 RT-Thread Studio的CPK-RA6M4 开发板环境搭建】

【开发板评测】Renesas RA6M4开发板之PWM呼吸灯

pwm端口是成对存在的,一共有10对

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5189

    浏览量

    214007
  • Renesas
    +关注

    关注

    0

    文章

    1757

    浏览量

    22773
  • 开发板
    +关注

    关注

    25

    文章

    5057

    浏览量

    97519
  • PWM驱动
    +关注

    关注

    0

    文章

    28

    浏览量

    1206
  • RA6M4
    +关注

    关注

    0

    文章

    51

    浏览量

    457
收藏 人收藏

    评论

    相关推荐

    开发板评测】Renesas RA6M4开发板ESP8266_AT

    串口也是比较常用的外设,应用也比较简单,具体的外设功能描述也不多讲什么了。下面只讲如何使用CPK-RA6M4开发板通过串口连接esp8266(esp-01s)使用AT命令联网。 评测所需要的环境
    的头像 发表于 12-30 12:35 2390次阅读
    【<b class='flag-5'>开发板</b>评测】<b class='flag-5'>Renesas</b> <b class='flag-5'>RA6M4</b><b class='flag-5'>开发板</b><b class='flag-5'>之</b>ESP8266_AT

    Renesas RA6M4开发板I2C(模拟)驱动ssd1306 OLED屏幕】

    Renesas RA6M4开发板I2C(模拟)驱动ssd1306 OLED屏幕】
    的头像 发表于 01-11 09:34 4554次阅读
    【<b class='flag-5'>Renesas</b> <b class='flag-5'>RA6M4</b><b class='flag-5'>开发板</b><b class='flag-5'>之</b>I2C(模拟)<b class='flag-5'>驱动</b>ssd1306 OLED屏幕】

    Renesas RA6M4开发板I2C读取BMP180气压温度】

    本篇通过Renesas RA6M4开发板采用I2C读取BMP180传感器的气压温度示例程序演示。
    的头像 发表于 01-16 09:29 4017次阅读
    【<b class='flag-5'>Renesas</b> <b class='flag-5'>RA6M4</b><b class='flag-5'>开发板</b><b class='flag-5'>之</b>I2C读取BMP180气压温度】

    如何对Renesas RA6M4开发板的FLASH模块进行测评呢

    硬件部分本次测评的板子为基于瑞萨 RA6M4 MCU 开发的 CPK-RA6M4 MCU 评估。支持 TrustZone®的 200 MHz Arm® Cortex®-
    发表于 04-01 16:54

    Renesas RA6M4开发板Arduino六ADC采样分析

    —-p614实验中J13六处模拟信号需要焊接插针,方便调试2.2 软件配置Renesas RA6M4开发板环境配置参照:【基于 RT-Thread Studio的CPK-RA6M4
    发表于 07-20 11:25

    Renesas CPK-RA6M4开发板SDIO模块评测

    首先感谢RT-Thread和Renesas给我这次评测的机会,很荣幸成为本次评测的一员。本次评测的开发板Renesas的CPK-RA6M4开发板
    发表于 07-21 11:14

    Renesas RA6M4开发板Serial studio串口交互

    RA6M4开发板2、USB下载线,个ch340串口和附带4根母母线,第一串口是UART0端口rx—-p101;tx—-p100,实现S
    发表于 07-28 14:14

    Renesas RA6M4开发板USB-H评测活动

    1、Renesas RA6M4开发板USB-H评测  这次是第二次接触这块开发板了,但是还是第一次仔细观察这块
    发表于 11-22 16:08

    RA6M4驱动5寸屏显示PC运行状态并进行监控源码

    RA6M4驱动5寸屏显示PC运行状态并进行监控源码。基于瑞萨 CPK-RA6M4 开发板
    发表于 09-26 14:53 0次下载

    开发板评测】Renesas RA6M4开发板FLASH

    硬件部分 本次测评的板子为基于瑞萨RA6M4 MCU开发的 CPK-RA6M4 MCU 评估。 ● 支持 TrustZone   的200 MHz Arm Cortex -
    的头像 发表于 12-16 18:25 1526次阅读

    开发板评测】Renesas RA6M4开发板CAN

    一、开箱 心心念念的开发板终于到了,外包装很简洁。打开后,除开发板外,还有《评估快速入门》和《基础知识》本书,通过书中的内容可以快速上手CPK-
    的头像 发表于 12-20 12:10 1488次阅读

    开发板评测】Renesas RA6M4开发板SDIO(SDHI)

    本次评测的开发板Renesas的CPK-RA6M4开发板,它是一款Renesas官方基于RA6M4
    的头像 发表于 12-27 13:15 2515次阅读

    基于RT-Thread Studio的CPK-RA6M4开发板环境搭建

    基于瑞萨RA6M4 MCU开发的CPK-RA6M4 MCU评估 ,通过 灵活配置软件包和IDE,可帮助用户对RA6M4 MCU 群组的特性
    的头像 发表于 01-10 14:56 1341次阅读
    基于RT-Thread Studio的CPK-<b class='flag-5'>RA6M4</b><b class='flag-5'>开发板</b>环境搭建

    Renesas RA6M4开发板I2C读取mpu6050】

    本篇通过Renesas RA6M4开发板采用I2C读取mpu6050传感器的角加速度,角速度和温度示例程序演示。
    的头像 发表于 01-17 09:07 7749次阅读
    【<b class='flag-5'>Renesas</b> <b class='flag-5'>RA6M4</b><b class='flag-5'>开发板</b><b class='flag-5'>之</b>I2C读取mpu6050】

    Renesas RA6M4开发板DHT11温湿度读取】

    本篇通过Renesas RA6M4开发板DHT11温湿度读取示例程序演示。
    的头像 发表于 01-18 17:18 1692次阅读
    【<b class='flag-5'>Renesas</b> <b class='flag-5'>RA6M4</b><b class='flag-5'>开发板</b><b class='flag-5'>之</b>DHT11温湿度读取】