定时器PWM控制RGB彩灯案例

news2024/12/26 21:05:48

1.脉冲宽度调制PWM

  PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面。
  PWM的一个优点是从处理器到​​ ​被控系统​​​信号都是数字形式的,再进行数模转换。可将噪声影响降到最低(可以跟电脑一样)。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。

2.STM32定时器

  通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。
  使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。
在这里插入图片描述
  定时器脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1 寄存器的ARPE位, (在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。
  本次RGB彩灯即可通过定时器PWM控制,实现全彩颜色显示。

3.RGB彩灯

在这里插入图片描述
在这里插入图片描述
  本次使用的RGB彩灯设备是国巨的RS-3535,亮度可达8000nit。使用RGB三个引脚,通过三原色的设置从而实现全彩颜色显示。
  硬件接口如下:

接口引脚
LED_RPB4(TIM3_CH1)
LED_GPB5(TIM3_CH2)
LED_BPB8(TIM4_CH3)

4.软件配置

4.1 定时器PWM通道配置

  根据硬件接口,接下来需要完成对定时器3的CH1和CH2配置,定时器4的CH3的配置。将通道配置为PWM输出模式。根据实际亮度测试,仅需将亮度周期时间设置为255即可,软件代码配置如下:
在这里插入图片描述
  定时器4的CH3配置:
在这里插入图片描述

4.2 定时器2配置

  为了实现呼吸灯效果,这里通过定时器2实现,设置周期时间为50ms,CNT+1时间为0.1ms。
在这里插入图片描述
在这里插入图片描述

5.代码生成

5.1 PW配置生成代码

  定时器3的CH1和CH2代码生成:
在这里插入图片描述
  定时器4的CH3代码生成:
在这里插入图片描述

5.2 增加PWM启动代码

  在软件生成代码过程中,PWM通道需要手动启动,添加代码如下:
在这里插入图片描述

5.3 RGB彩灯控制函数

  编写函数,实现RGB彩灯控制,后续仅需调用该函数即可实现全彩颜色显示。

/************rgb***************
函数功能:检测按键值
形  参:r,g,b --红绿蓝灯,取值范围为0~255
公  司:北京万邦易嵌
作  者:IT_阿水
*******************************/
void RGB_Ctl(uint8_t r,uint8_t g,uint8_t b)
{
  htim3.Instance->CCR1=(r/25);
  htim3.Instance->CCR2=(g/20);
  htim4.Instance->CCR3=(b/10);
}

6. RGB彩色呼吸灯实现

  通过定时器2,设置计数周期为50ms,计数器+1的时间为0.1ms。即没50ms改变一次RGB彩灯颜色。功能实现如下:
在这里插入图片描述
  在定时器2中断服务函数中,没进一次中断,即改变一次RGB颜色值,RGB颜色变化效果为:红—绿—蓝三种颜色逐渐转换。

uint8_t rgb[53*3][3] = {{0,0,0},{10,0,0},{20,0,0},{30,0,0},{40,0,0},{50,0,0},{60,0,0},{70,0,0},{80,0,0},{90,0,0},
											 {100,0,0},{110,0,0},{120,0,0},{130,0,0},{140,0,0},{150,0,0},{160,0,0},{170,0,0},{180,0,0},{190,0,0},
											 {200,0,0},{210,0,0},{220,0,0},{230,0,0},{240,0,0},{250,0,0},{255,0,0},{250,0,0},{240,0,0},{230,0,0},
											 {220,0,0},{210,0,0},{200,0,0},{190,0,0},{180,0,0},{170,0,0},{160,0,0},{150,0,0},{140,0,0},{130,0,0},
											 {120,0,0},{110,0,0},{100,0,0},{90,0,0},{80,0,0},{70,0,0},{60,0,0},{50,0,0},{40,0,0},{30,0,0},
											 {20,0,0},{10,0,0},{0,0,0},
                       {0,0,0},{0,10,0},{0,20,0},{0,30,0},{0,40,0},{0,50,0},{0,60,0},{0,70,0},{0,80,0},{0,90,0},
											 {0,100,0},{0,110,0},{0,120,0},{0,130,0},{0,140,0},{0,150,0},{0,160,0},{0,170,0},{0,180,0},{0,190,0},
											 {0,200,0},{0,210,0},{0,220,0},{0,230,0},{0,240,0},{0,250,0},{0,255,0},{0,250,0},{0,240,0},{0,230,0},
											 {0,220,0},{0,210,0},{0,200,0},{0,190,0},{0,180,0},{0,170,0},{0,160,0},{0,150,0},{0,140,0},{0,130,0},
											 {0,120,0},{0,110,0},{0,100,0},{0,90,0},{0,80,0},{0,70,0},{0,60,0},{0,50,0},{0,40,0},{0,30,0},
											 {0,20,0},{0,10,0},{0,0,0},
                       {0,0,0},{0,0,10},{0,0,20},{0,0,30},{0,0,40},{0,0,50},{0,0,60},{0,0,70},{0,0,80},{0,0,90},
											 {0,0,100},{0,0,110},{0,0,120},{0,0,130},{0,0,140},{0,0,150},{0,0,160},{0,0,170},{0,0,180},{0,0,190},
											 {0,0,200},{0,0,210},{0,0,220},{0,0,230},{0,0,240},{0,0,250},{0,0,255},{0,0,250},{0,0,240},{0,0,230},
											 {0,0,220},{0,0,210},{0,0,200},{0,0,190},{0,0,180},{0,0,170},{0,0,160},{0,0,150},{0,0,140},{0,0,130},
											 {0,0,120},{0,0,110},{0,0,100},{0,0,90},{0,0,80},{0,0,70},{0,0,60},{0,0,50},{0,0,40},{0,0,30},
											 {0,0,20},{0,0,10},{0,0,0}};
void TIM2_IRQHandler(void)
{
  /* USER CODE BEGIN TIM2_IRQn 0 */
   static uint16_t i=0;
  /* USER CODE END TIM2_IRQn 0 */
  HAL_TIM_IRQHandler(&htim2);
  /* USER CODE BEGIN TIM2_IRQn 1 */
  i++;
  if(i>=159)i=0;
  RGB_Ctl(rgb[i][0],rgb[i][1],rgb[i][2]);
  /* USER CODE END TIM2_IRQn 1 */
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1353049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【React】class组件生命周期函数的梳理和总结(第一篇)

1. 前言 本篇梳理和总结一下React的生命周期函数,方便使用class组件的同学查阅,先上生命周期图谱。 2. 生命周期函数 生命周期函数说明constructor(props) 功能:如果不需要初始化state或不进行方法绑定,class组件可以不用实现构造…

Cesium加载大规模三维数据渲染性能优化方案

根据实际项目经验和近期的论文,总结一下Cesium加载大规模三维数据性能优化方法。个人认为在实际的GIS数字孪生项目中,其可行的优化手段主要有三种: (1)通过专业的转换工具CesiumLab等对原始的三维模型进行轻量化处理,包…

【Linux Shell】2. Shell 变量

文章目录 【 1. 变量命名规则 】【 2. 变量的使用 】【 3. 只读变量 】【 4. 删除变量 】【 5. 变量类型 】【 6. Shell 字符串 】6.1 字符串的分类6.2 字符串操作 【 7. Shell 数组 】7.1 定义数组7.2 读取数组7.3 获取数组的长度 【 8. Shell 注释 】8.1 单行注释8.2 多行注释…

华为交换机入门(六):VLAN的配置

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。 VLAN 主要用来解决如何…

[Vulnhub靶机] DriftingBlues: 2

[Vulnhub靶机] DriftingBlues: 2靶机渗透思路及方法(个人分享) 靶机下载地址: https://download.vulnhub.com/driftingblues/driftingblues2.ova 靶机地址:192.168.67.21 攻击机地址:192.168.67.3 一、信息收集 1.…

std::setlocale详解

头文件 #include <clocale>作用 std::setlocale是C标准库中的一个函数&#xff0c;用于设置当前程序的本地化&#xff08;locale&#xff09;环境。 setlocale 函数安装指定的系统本地环境或其一部分&#xff0c;作为新的 C 本地环境。 修改保持效果&#xff0c;并影…

3dmax全景图用什么渲染 全景图云渲染使用教程

在给客户展示设计概念时&#xff0c;应用3ds Max创建的全景图是一个高效直观的方法。这种方式不仅可以全方位地呈现整个空间&#xff0c;让客户沉浸式地感受设计师的创意&#xff0c;而且在展现大型空间设计&#xff0c;如展览馆或者会议室等&#xff0c;效果尤其显著&#xff…

使用Python进行用户参与度分析

用户参与度分析是一种数据驱动的方法&#xff0c;用于评估和了解用户对产品&#xff0c;服务或平台的参与&#xff0c;互动和满意度。它涉及分析各种指标和行为模式&#xff0c;以深入了解用户行为和偏好。它帮助企业做出明智的决策&#xff0c;以增强用户体验&#xff0c;优化…

广州怎么找工作哪里工作机会多

广州找工作上 吉鹿力招聘网 打开 吉鹿力招聘网 “注册账号”&#xff0c;然后输入个人基本信息&#xff0c;进行注册&#xff08;可使用手机号注册&#xff0c;也可以使用邮箱注册&#xff09;。 填写求职意向&#xff0c;基本信息点击“下一步”。 填写工作经历点击“下一步”…

算法巡练day04Leetcode24交换节点19删除倒数节点142环形链表

今天学习的文章和视频链接 https://www.bilibili.com/video/BV1YT411g7br/?vd_source8272bd48fee17396a4a1746c256ab0ae https://www.bilibili.com/video/BV1if4y1d7ob/?vd_source8272bd48fee17396a4a1746c256ab0ae 24两两交换链表中的节点 给你一个链表&#xff0c;两两…

yolov5 损失函数

yolov5有三个损失函数分别是回归损失、置信度损失、分类损失 回归损失用的是CIOU loss 置信度和分类损失用的是BCE loss &#xff08;1&#xff09;对比L2损失&#xff0c;Iou和GIou具有尺度不变性&#xff0c;不会说输入的框子大loss就越大。 &#xff08;2&#xff09;对比…

Vue2 - 数据响应式原理

目录 1&#xff0c;总览2&#xff0c;Observer3&#xff0c;Dep4&#xff0c;Watcher5&#xff0c;Schedule 1&#xff0c;总览 vue2官网参考 简单介绍下上图流程&#xff1a;以 Data 为中心来说&#xff0c; Vue 会将传递给 Vue 实例的 data 选项&#xff08;普通 js 对象&a…

SSM养老院综合服务系统----计算机毕业设计

项目介绍 该项目为后台管理项目&#xff0c;分为管理员与护工两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,个人资料密码管理,用户管理,床位类型管理,床位管理,护工管理,老人管理,咨询登记管理,预约登记管理,老人健康信息管理,费用管理等功能。 护…

【LeetCode每日一题】2487. 从链表中移除节点(调用栈+递归+翻转链表)

2024-1-3 文章目录 [2487. 从链表中移除节点](https://leetcode.cn/problems/remove-nodes-from-linked-list/)方法一&#xff1a;调用栈方法二&#xff1a;递归方法三&#xff1a;翻转链表 2487. 从链表中移除节点 方法一&#xff1a;调用栈 1.将所有节点按顺序压入栈中 2.从…

浅谈接口自动化测试

昨晚在某个测试交流群&#xff0c;听了一个测试老司机分享接口自动化测试的内容&#xff0c;对接口自动化有了更深的一些认识&#xff0c;也为接下来公司的接口自动化实施&#xff0c;提供了更多的思路。 这篇博客&#xff0c;就说说功能测试到接口自动化的进阶&#xff0c;以及…

商品推荐系统+可视化+2种协同过滤推荐算法 Django框架 大数据毕业设计(附源码+论文)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

【论文笔记】An Extractive-and-Abstractive Framework for Source Code Summarization

An Extractive-and-Abstractive Framework for Source Code Summarization 1. Introduction2. Model2.1 Overview2.2 Training of EACS2.2.1 Part i : Training of Extractor2.2.2 Part ii : Training of Abstracter 3. Evaluation 1. Introduction 代码摘要可以细分为抽取式代…

眼镜店系统管理软件,眼镜店配镜视力检查顾客资料管理系统

一、软件程序问答 1、这个软件在配镜的时候可以开配镜处方吗&#xff0c;可以打印出来吗&#xff1f; 如上图&#xff0c;以 佳易王眼镜店配镜顾客信息管理系统为例说明&#xff1a; 点击软件中的 配镜处方按钮&#xff0c;填写配镜相关信息&#xff0c;即可打印&#xff0c;…

Spring系列学习六、深入Spring AOP——揭开代理的神秘面纱

深入Spring AOP——揭开代理的神秘面纱 一、动态代理的实现原理二、CGLIB字节码增强的实现原理三、结语 上一章节&#xff0c;我们体验了Spring AOP强大的能力的同时&#xff0c;是不是也想弄明白&#xff0c;它是怎么原理是什么呢&#xff1f;如果自己要做一个类似的框架&…