单片机/MCU论坛
直播中

ouxiaolong

12年用户 660经验值
擅长:嵌入式技术 光电显示
私信 关注
[讨论]

【RA-Eco-RA6M4开发板评测】PWM输出

开发环境:

IDE:MKD 5.38a

Renesas RA Smart Configurator:v5.9.0

开发板:RA-Eco-RA6M4开发板

MCU:R7FA6M4AF3CFP

1 PWM简介

脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。

在瑞萨RA6M4系列 MCU 中有两种定时器,一种是通用 PWM 定时器 GPT,另外一种是异步通用定时器 AGT,在这里我们使用通用定时器GPT进行PWM输出。

1.png

Figure 1‑1 GPT 外设模块的结构框图

RA6M4系列共有共10个GPT定时器(即10个通道)。GPT 的计数器支持递增计数,递减计数和递增/递减计数。详细的通道名称如下表所示。

2.png

Figure 1‑2 GPT各个通道详情

PWM 输出就是对外输出脉宽(即占空比)可调的方波信号, 信号频率由周期设定寄存器 GTPR 的值决定,占空比由比较寄存器 GTCCR 的值决定。

2 RT-Thread 的PWM简介

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

在开启 PWM 设备框架以及 PWM驱动之后,应用程序通过 RT-Thread 提供的 PWM设备管理接口来访问 PWM设备,相关接口如下所示:

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

关于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 RA6M4 PWM配置

接下来配置PWM,只需要简单配置就可使用。

  • FSP配置PWM

打开RA Smart Configurator,在配置界面里面依次打开“Pins->Peripherals->Timers:GPT”配置GPT模块,将GPT3 的 GTIOC3A 信号输出连接到 P111引脚。

3.png

Figure 3‑1 打开GPT输出引脚

接下来就是添加PWM stack。

4.png

Figure 3‑2 添加PWM stack

接下来需要配置PWM的参数。

5.png

Figure 3‑3 配置PWM的参数

核心参数如下:

  • Pin Output Support:使能PWM输出
  • Name:设置 GPT 模块名字,这里使用是GPT3,名字就为g_timer3
  • Channel:配置GPT通道,这里使用的第3个通道
  • Mode:配置 GPT 的工作模式为 PWM 输出模式。
  • Period:配置GPT的周期为10 KHz,需要和Period Unit配合使用
  • Period Unit:周期的单位,这里设置为KHz
  • Duty Cycle Percent:设置PWM的占空比,当然也可通过代码修改,这里就设置为50
  • GTIOCA Output Enabled:使能 GTIOCA 输出
  • GTIOCA Stop Level:设置定时器停止时 GTIOCA 输出的电平为低电平
  • GTIOC3A:选择连接到 P111引脚,打开GPT的Pin之后,会默认关联

最后生成过程即可。

  • 配置组件

然后打开对应的通道。

6.png

3.2 PWM输出代码实现

核心代码如下:

#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 测试验证

接下来就看看PWM的输出,PWM 信号可以通过示波器看到,下面笔者就是用逻辑分析仪查看波形。

首先笔者使用的逻辑分析仪是Kingst LA5016,当然啦,其他的也可以,关于逻辑分析仪的相关使用笔者这里就不介绍了,可以查看官方资料。

首先将P111引脚接到逻辑分析仪的CH0,然后下载程序到板子中,打开Kingst VIS,然后进行采样。

7.png

Figure 3‑4 PWM输出实现现象

从上图可以看到,实际测量的频率和占空比与理论是相符的。

更多回帖

发帖
×
20
完善资料,
赚取积分