基础实验例程-3.7 PWM呼吸灯实验

基础实验例程-3.7 PWM呼吸灯实验

一、实验目的

本节课主要学习K210的PWM功能。

二、实验准备

1.实验元件

   独立按键BOOT、RGB灯

image.png

2.元件特性

K210芯片定时器总共有3个,每个定时器有4路通道。每个定时器可以设置触发间隔,和定时器中断处理函数。定时器还可以设置为PWM输出的功能,但是如果设置PWM输出,则不可以使用定时的功能。

3.硬件连接

K210开发板出厂默认已经焊接好RGB灯。RGB灯R连接的是IO6,G连接的是IO7, B连接的是IO8。

image.png

image.png

4.SDK中对应API功能

对应的头文件 pwm.h

脉冲宽度调制器PWM用于控制脉冲输出的占空比,其本质是一个定时器,所以注意设置PWM号与通道时,不要与TIMER定时器冲突。

为用户提供以下接口:

• pwm_init

• pwm_set_frequency

• pwm_set_enable

三、实验原理

PWM控制的是脉冲输出的占空比,占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。比如说,一个RGB灯在它一个工作周期中有一半时间被接通了,那么它的占空比就是50%,同时亮度也只有50%。如果加在该工作元件上的信号电压为3V,则实际的工作电压平均值或电压有效值就是1.5V。

四、实验过程

1.首先根据上面的硬件连接引脚图,K210的硬件引脚和软件功能使用的是FPIOA映射关系。这里映射的是定时器1的通道0(开关1)。

image.png

image.png

2.第二步需要初始化外部中断服务,并且使能全局中断。如果没有这一步操作,系统的中断就不会运行,所以也不会调用中断回调函数。

image.png

3.初始化定时器,这里使用的是定时器0通道0,超时时间为10毫秒,定时器中断回调函数为timer_timeout_cb,参数为空NULL。

image.png

4.初始化PWM,设置PWM为定时器1通道0,频率为200KHz,占空比为0.5的方波。

image.png

5.在定时器中断中设置PWM的占空比,根据duty_cycle的不同值,来修改PWM的占空比,从而改变RGB灯的亮度。

image.png

6.最后是一个while(1)循环,这个是必须的,否则系统就会退出,不再运行。

image.png

7.编译调试,烧录运行

把本课程资料中的pwm复制到SDK中的src目录下,然后进入build目录,运行以下命令编译。

cmake .. -DPROJ=pwm -G “MinGW Makefiles”

make

image.png

编译完成后,在build文件夹下会生成pwm.bin文件。

使用type-C数据线连接电脑与K210开发板,打开kflash,选择对应的设备,再将程序固件烧录到K210开发板上。

五、实验现象

RGB灯亮红色,而且显示呼吸灯效果,颜色从最亮逐渐变暗,再从熄灭状态中逐渐变亮,一直循环。

image.png

image.png

六、实验总结

1.PWM的内部实现是基于定时器的定时功能。

2.控制PWM的两个重要因素是频率和占空比。

3.PWM输出修改的是占空比,也就是通电时间占总时间的百分比,改变了输出的有效值,从而改变了RGB灯的亮度。

附:API

对应的头文件 pwm.h

pwm_init

描述

初始化PWM。

函数原型

void pwm_init(pwm_device_number_t pwm_number)

参数
参数名称描述输入输出
pwm_numberpwm号输入
返回值

无。

pwm_set_frequency

描述

设置频率及占空比。

函数原型

double pwm_set_frequency(pwm_device_number_t pwm_number, pwm_channel_number_t channel, double frequency, double duty)

参数
参数名称描述输入输出
pwm_numberPWM号输入
channelPWM通道号输入
frequencyPWM输出频率输入
duty占空比输入
返回值

实际输出频率。

pwm_set_enable

描述

使能禁用PWM。

函数原型

void pwm_set_enable(pwm_device_number_t pwm_number, uint32_t channel, int enable)

参数
参数名称描述输入输出
pwm_numberPWM号输入
channelPWM通道号输入
enable使能禁用PWM
  0:禁用 1:使能
输入
返回值

无。

举例

/* pwm0 channel 1 输出 200KHZ占空比为0.5的方波 *//* 设置IO13作为PWM的输出管脚 */fpioa_set_function(13, FUNC_TIMER0_TOGGLE2);pwm_init(PWM_DEVICE_0);pwm_set_frequency(PWM_DEVICE_0, PWM_CHANNEL_1, 200000, 0.5);pwm_set_enable(PWM_DEVICE_0, PWM_CHANNEL_1, 1);

数据类型

·         pwm_device_number_t:pwm号。

·         pwm_channel_number_t:pwm通道号。

pwm_device_number_t

描述

pwm号。

定义

typedef enum _pwm_device_number{    PWM_DEVICE_0,    PWM_DEVICE_1,    PWM_DEVICE_2,    PWM_DEVICE_MAX,} pwm_device_number_t;

成员
成员名称描述
PWM_DEVICE_0PWM0
PWM_DEVICE_1PWM1
PWM_DEVICE_2PWM2

pwm_channel_number_t

描述

pwm通道号。

定义

typedef enum _pwm_channel_number{    PWM_CHANNEL_0,    PWM_CHANNEL_1,    PWM_CHANNEL_2,    PWM_CHANNEL_3,    PWM_CHANNEL_MAX,} pwm_channel_number_t;

成员
成员名称描述
PWM_CHANNEL_0PWM通道0
PWM_CHANNEL_1PWM通道1
PWM_CHANNEL_2PWM通道2
PWM_CHANNEL_3PWM通道3
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值