3_stm32_pwm呼吸灯

news2024/9/20 15:50:24

        到目前已经可以进行基础的Led亮灭控制、使用定时器中断控制Led的亮灭。但是发现Led只有“亮”和 “灭”两种状态,那是否可以有更多状态?如何有更多状态呢?更进一步的想法,Led亮是有了电压差,其中一端是地,那么输入端的电压改变,Led的亮度不就可以改变了?通过之前的控制我们知道,引脚PC9只有高低两种状态,那如何可以有除了这两种以外的状态呢?甚至如何将这个引脚输出“正弦波”的波形呢?这就引出了PWM的概念。

1、啥是PWM?

PWM(Pulse Width Modulation),脉冲宽度调制,简称脉宽调制。

      我是这样理解的:将之前的高电平理解为100%状态,低电平理解为0%,PWM则是可以调制0~100之间的任意百分比,即定时器一个计数周期内高电平的百分比。如时钟频率为 1 MHz,计数周期为1000:1Mhz是1秒数1000000个数,计数周期将高电平分为1000份,定时器每数到1000会重新开始数数,这样重新数数的操作1秒会执行1000次。这样一个周期内电压会从0~100%变化,Led的亮度也会变化,由于Led材质和人眼的分辨,预分频系数和周期数需要调试。

2、调试流程

①确定引脚的复用

       根据PCB原理图,已知PC9引脚连接Led,则需知道该引脚是哪个定时器的复用通道。查询手册结果如下:TIM3,CH4。

0758b3c09fdd39c1714ac7316232a709.png

②GPIO的复用配置

与之前普通GPIO配置相比:

//复用模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM3);

之前没加这句,Led一直处于一种20%亮度的状态。

GPT查询结果如图:

e687b4148435b232621ebf61245b9ea8.png    

③定时器产生PWM的配置

这块先插入APB1的时钟频率,【系统时钟是168Mhz,APB1分频系数为4(system_stm32f4xx.c配置),则APB1速度为42Mhz,但是挂靠在在该总线上的定时器3,由于分频系数4而不是1,因此定时器输入频率为42Mhz x 2 =84 Mhz】,上次定时器中断计算有问题。与定时器中断相比,没有了中断相关的配置,新增:

TIM_OCInitTypeDef TIM_OCInitType;
TIM_OCInitType.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitType.TIM_OutputState=TIM_OutputState_Enable;
//默认占空比
TIM_OCInitType.TIM_Pulse=0;
//极性设置
TIM_OCInitType.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC4Init(TIM3,&TIM_OCInitType);

GPT查找结果:

470c2d14f7c073efa465ae4bff4067bc.png

④占空比的改变

TIM_SetCompare4(TIM3, brightness);


        if (direction){
            brightness++;
            if (brightness == 1200){
                direction = 0;
            }


        }else{
            brightness--;
            if (brightness == 0){    
                direction = 1;
            }
        }

效果如下:

64168f2cb0c1358723b68a56c4f263e2.gif

           欢迎关注,解锁最终电机转动!

33da4cbcc8cfe27dd02a927eb391a47b.png

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

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

相关文章

C#:具体类=>抽象类=>接口的变化过程详解

文章目录 简单复习继承与多态具体类抽象类及成员使用语法 接口抽象类到接口的进化 简单复习继承与多态 下面,我用一个交通工具的例子来快速复习一下. 1.首先我定义一个基类Vehicle,代表交通工具的总称.里面定义了一个可被重写的成员方法Run. class Vehicle{public virtual voi…

Python Flask+Echarts实现葡萄酒质量的影响因素分析可视化

提示:本文章参考了哔哩哔哩的python课程李巍老师的 视频教程 文章目录 前言一、相关技术1.Flask2.Echarts3.词云 二、代码部分1.5个前端页面:2.代码 效果图 前言 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总…

代码随想录算法训练营第六天(一)|242.有效的字母异位词

LeetCode 242 有效的字母异位词 题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…

韦东山嵌入式linux系列-mmap

应用程序和驱动程序之间传递数据时,可以通过read、 write函数进行。这涉及在用户态 buffer 和内核态 buffer 之间传数据,如下图所示 应用程序不能直接读写驱动程序中的buffer,需要在用户态 buffer 和内核态 buffer 之间进行一次数据拷贝。这种…

6.1.面向对象技术-面向对象相关概念

基本概念 对象:基本的运行实体,为类的实例,封装了数据和行为的整体(数据和行为就是属性和方法),如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。 学生有张三、李四等。张三就是具体的个体&#xf…

Java哈希算法

哈希算法 哈希算法1.概述2.哈希碰撞3.常用的哈希算法4.哈希算法的用途4.1校验下载文件4.2存储用户密码MD5加密5.SHA-1加密小结: 哈希算法 1.概述 哈希算法(Hash)又称摘要算法(Digest),它的作用是&#xf…

OrangePi AIpro学习3 —— vscode开发昇腾DVPP程序

目录 一、VScode配置 1.1 下载和安装 1.2 安装和配置需要的插件 二、构建项目 2.1 项目架构 2.2 解决代码高亮显示 2.3 测试编译 2.4 总结出最简单的代码 2.5 vscode报错找不到头文件解决方法 三、代码简单讲解 3.1 初始化部分 3.2 拷贝数据到NPU显存中 3.3 准备裁…

Leetcode每日一题之仅仅反转字母(C++)

在学习之余对于知识的巩固也尤为重要,不论难度高低,都会对代码的理解有所加深,下面我们开始练习 思路解析 关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的,这里用到的知识就是关于 s…

【数据结构与算法 | 二叉树篇】AVL树

1. 前言 AVL树是一种自平衡的二叉搜索树。为什么会出现AVL树。众所周知,虽然普通的二叉搜索树的平均时间复杂度为O(logn),但最差的情况的时间复杂度为O(n)。为了避免最差的这种情况,出现了AVL树。 我们规定:如果树有个节点它的左…

大模型LLM——微调的七种方法

大模型的七种微调方法 文章目录 大模型的七种微调方法1. LoRA2. QLoRA3. 适配器调整4. 前缀调整5. 提示调整6. P-Tuning7. P-Tuning v2 1. LoRA LoRA的主要步骤包括: 选择微调目标权重矩阵:首先在大型模型(如GPT)中识别需要微调…

学习vue3 五,传送,缓存组件以及过渡和过渡列表

目录 Teleport传送组件 keep-alive缓存组件 transition动画组件 1. 过渡的类名 2. 自定义过渡class名 3. transition的生命周期 4.appear transition-group 1. 过渡列表 2. 列表的移动过渡 3. 状态过渡 Teleport传送组件 Teleport Vue 3.0新特性之一。 Teleport 是一…

AI技术如何重塑企业EHS安全健康环保体系,附实践案例

随着人工智能技术的快速发展,其在环境、健康和安全(EHS)管理领域的应用日益广泛。AI技术通过大数据分析、模式识别和预测建模等手段,为EHS管理提供了新的视角和工具。这一变革不仅提升了风险评估和事故预防的效率,同时…

Can‘t use Subversion command line client:svn不能使用Subversion命令行客户端:svn

1、导入idea中会报Can’t use Subversion command line client… 2、在提交svn代码的时候,出现这样的错误:Can’t use Subversion command line client: svn Probably the path to Subversion executable is wrong. Fix it. 问题原因:在安…

实验8-1-4 拆分实数的整数与小数部分

本题要求实现一个拆分实数的整数与小数部分的简单函数。 函数接口定义&#xff1a; void splitfloat( float x, int *intpart, float *fracpart );其中x是被拆分的实数&#xff08;0≤x<10000&#xff09;&#xff0c;intpart和fracpart分别是将实数x拆分出来的整数部分与…

sqli-labs1-24通关教程

目录 前置知识 第一关 1、第一关是单引号字符型注入,输入id1‘会报错 2、输入注释符正常显示 3、爆出列数为联合做准备 4、使用联合查询爆出数据库名 5、使用information_schema爆出表名 6、猜测用户名再users表中&#xff0c;爆出列名 ​编辑 7、利用查出来的表名数据…

【第2期】2024 搜索客 Meetup | Elasticsearch 的代码结构和写入查询流程的解读

本次活动由 搜索客社区、极限科技&#xff08;INFINI Labs&#xff09;联合举办&#xff0c;活动主题将深入探讨 Elasticsearch 的两个核心方面&#xff1a;代码结构以及写入和查询的关键流程。本次活动将为 Elasticsearch 初学者和有经验的用户提供宝贵的见解&#xff0c;欢迎…

叉车(工业车辆)安全监控管理系统,叉车安全方案

叉车作为特种设备的一种&#xff0c;存在一定的危险性&#xff0c;操作过程出现意外的情况可谓是不胜枚举&#xff0c;轻则伤财、受些皮外伤&#xff0c;重则直接致人死亡。为加强叉车操作的安全管理&#xff0c;从2023年12月1日起实施的TSG 81-2022《场&#xff08;厂&#xf…

【网络安全学习】SQL注入02:使用sqlmap进行注入

1.sqlmap的基本功能 sqlmap的基本功能是对Web应用中的数据库进行自动化的检测、利用和攻击。 使用pikachu靶场进行sqlmap的基础功能使用。 1️⃣ 第一步&#xff1a;先检查是否有注入点&#xff1a; # -u : 指定目标url&#xff0c;也就是指定注入点 sqlmap -u "http:…

终端命令行|CLI工具|CMD|PowerShell

基本概念 终端是一个文本界面&#xff0c;用于执行基于文本的程序。 果你正在运行任何用于 web 开发的工具&#xff0c;你一定需要打开命令行并运行一些命令来使用你所选择的工具 (这样的工具被称为CLI 工具也就是命令行接口工具)。 命令行接口工具 (CLI 工具) 是什么&#xf…

延伸--人工鱼群算法

目录 基本原理 改进策略 代码示例 应用实例 总结 人工鱼群算法在解决多峰函数问题中的具体应用案例和效果如何&#xff1f; 双群人工鱼群算法与传统人工鱼群算法相比&#xff0c;有哪些具体的改进和优势&#xff1f; 步长自适应调整在人工鱼群算法中的实现机制是什么&a…