RISC-V MCU应用教程之PWM输出
简介
CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源管理、通用DMA控制器。此系列具有1路USB2.0主机/设备接口、多通道12位ADC转换模块、多通道TouchKey、多组定时器、多路IIC/USART/SPI接口等丰富的外设资源。
本章教程使用定时器1通道1(PA8),通过PA8引脚产生PWM控制LED。灯LED1的亮度。
1、PWM简介及相关函数介绍
脉冲宽度调制(PWM)是一种模拟控制方式,其是利用微处理器的数字输出对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。CH32V103的高级定时器TIM1和通用定时器TIM2/3/4均可产生PWM输出。
PWM输出模式是定时器的基本功能之一。PWM输出模式最常见的是使用重装值确定PWM频率,使用捕获比较寄存器确定占空比的方法。将OCxM域(比较捕获通道x模式设置域)中置110b或者111b使用PWM模式1或者模式2,置OCxPE位(比较捕获寄存器x预装载使能位)使能预装载寄存器,最后置ARPE 位(自动重装预装使能位)使能预装载寄存器的自动重装载。在发生一个更新事件时,预装载寄存器的值才能被送到影子寄存器,所以在核心计数器开始计数之前,需要置UG位(更新事件产生位)来初始化所有寄存器。在PWM模式下,核心计数器和比较捕获寄存器一直在进行比较,根据CMS(中央对齐模式选择)位,定时器能够输出边沿对齐或者中央对齐的PWM信号
边沿对齐:使用边沿对齐时,核心计数器增计数或者减计数,在PWM模式1的情景下,在核心计数器的值大于比较捕获寄存器时,OCxREF上升为高;当核心计数器的值小于比较捕获寄存器时,OCxREF下降为低。
中央对齐:使用中央对齐模式时,核心计数器运行在增计数和减计数交替进行的模式下,OCxREF在核心计数器和比较捕获寄存器的值一致时进行上升和下降的跳变。但比较标志在三种中央对齐模式下,置位的时机有所不同。在使用中央对齐模式时,最好在启动核心计数器之前产生一个软件更新标志 (置UG位)。
关于PWM输出具体信息,可参考CH32V103应用手册。本章教程通过定时器1通道1产生PWM控制LED,其程序所用库函数在定时器中断教程中均已介绍,在此不再赘述。
2、硬件设计
本章教程通过定时器1通道1(PA8)产生PWM控制LED灯,其中,定时器为CH32V103内部资源,无需进行硬件设计,只需进行LED连接即可,LED与GPIO引脚连接方式如下:
LED1与PA8连接。
3、软件设计
本章教程主要通过定时器产生PWM输出控制LED灯,其中,led.c文件与led.h文件前面GPIO教程中已讲解,在此不再介绍,本章主要介绍pwm.h文件、pwm.c文件以及main.c文件,具体程序如下:
pwm.h文件
pwm.c文件
main.c文件
main.c文件主要包含相关函数的初始化以及while循环函数,在while循环中,将pwmval这个值设置为PWM比较值,也就是通过pwmval来控制PWM的占空比,然后控制 pwmval的值从0变到300,然后又从300变到0,如此循环,因此 LED0 的亮度也会跟着从暗变到亮,然后又从亮变到暗。TIM_SetCompare1用于修改占空比。
4、下载验证
将编译好的程序下载到开发板并复位,可以看到开发板LED1开始不停由暗变亮,再由亮变暗。