C语言-STM32:介绍PWM,并使用PWM实现呼吸灯

        1、什么是PWM

        PWM,全称为Pulse Width Modulation,中文名为脉冲宽度调制。这是一种模拟控制技术,通过改变脉冲信号的宽度来表征一个连续变量的平均值,通常用于对模拟信号的数字化控制,特别是在功率转换和信号处理中非常常见。以下是PWM的一些关键特性:

  1. 基本原理

    • PWM信号是由一系列宽度可变的脉冲组成,每个脉冲的周期是固定的,但高电平(导通)时间(脉冲宽度)是可以变化的。
    • 占空比(Duty Cycle)是脉冲宽度与周期的比例,通常以百分比表示。高占空比意味着更多的时间处于高电平状态,低占空比则相反。
  2. 应用

    • 电源管理:在电源转换器中,PWM用于控制输出电压的平均值,例如在开关电源中,通过改变开关元件的导通时间来调整输出电压。
    • 电机控制:在电机驱动系统中,通过改变PWM信号的占空比来调整电机的速度和扭矩。
    • LED亮度控制:在照明应用中,改变PWM信号的占空比可以调整LED的亮度,而不改变其工作电流的峰值。
    • 音频信号处理:在数字音频系统中,PWM可用于编码和解码音频信号。
    • 通信系统:在一些通信协议中,PWM可以作为数据传输的方式。
  3. 优点

    • 效率高:PWM技术允许高效地转换和控制电源,因为它通常在开关模式下操作,减少了能量损失。
    • 控制精度:通过精确调整占空比,可以实现精细的控制。
    • 简化电路:使用PWM可以简化模拟电路设计,因为许多功能可以通过数字逻辑来实现。
  4. 生成PWM

    • PWM信号通常由微控制器(如STM32系列)或其他数字逻辑设备生成,这些设备通常内置了PWM发生器模块,可以通过编程设置周期、占空比和其他参数。
  5. 实现

    • 在STM32等微控制器中,初始化一个定时器(如TIM2),设置预分频器、计数器周期和比较值,就可以生成PWM信号。通过比较单元,当计数值与比较值匹配时,输出状态会发生变化,从而形成不同宽度的脉冲。

        综上所述,PWM是一种广泛应用的数字调制技术,通过简单的数字信号实现对模拟信号的控制,广泛应用于各种电子设备和系统中。

        2、使用PWM实现呼吸灯

#include "stm32f1xx_hal.h"
#include "stm32f1xx_hal_tim.h"
#include "stm32f1xx_hal_gpio.h"TIM_HandleTypeDef htim3;
volatile uint32_t timerCounter = 0;int main(void) {// 初始化HAL库HAL_Init();// 系统时钟配置SystemClock_Config();// GPIO初始化,配置LED为推挽输出GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = LED_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);// 初始化TIM3为PWM__HAL_RCC_TIM3_CLK_ENABLE();htim3.Instance = TIM3;htim3.Init.Prescaler = 84 - 1; // 假设系统时钟72MHz,预分频因子为72-1htim3.Init.CounterMode = TIM_COUNTERMODE_UP;htim3.Init.Period = 10000 - 1; // 10ms周期,可以根据需要调整htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;HAL_TIM_PWM_Init(&htim3);TIM_PWMOutputStateTypeDef pwmState = TIM_OUTPUTSTATE_ENABLE;HAL_TIM_PWM_ConfigChannel(&htim3, &htim3.ChannelConfig[0], pwmState);HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);// 呼吸灯循环while (1) {for (timerCounter = 0; timerCounter <= 10000; timerCounter++) {// 设置PWM占空比,从0到100%HAL_TIM_PWM_SetPulse(&htim3, TIM_CHANNEL_1, timerCounter);HAL_Delay(1); // 延时1ms,使得变化更平滑}for (timerCounter = 10000; timerCounter > 0; timerCounter--) {HAL_TIM_PWM_SetPulse(&htim3, TIM_CHANNEL_1, timerCounter);HAL_Delay(1);}}
}

        当然,在实际使用时,还是需要进行驱动文件的封装和调用。

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

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

相关文章

基于微信小程序的图书馆预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

HTML5为网页开发者提供了许多新的和增强的表单控件

H5&#xff0c;即HTML5&#xff0c;为网页开发者提供了许多新的和增强的表单控件&#xff0c;这些控件不仅提高了用户体验&#xff0c;还增强了表单的交互性和功能性。以下是HTML5中新增的一些主要表单控件及其详细介绍&#xff1a; <input type"date">&#x…

奥特曼倡导将AI计算能力作为货币免费发给老百姓

奥特曼表示&#xff0c;应该有通用基本计算&#xff0c;而不是通用基本收入UBI&#xff0c;每个人都能获得 GPT-7 计算的一部分。 OpenAI 首席执行官山姆-奥特曼&#xff08;Sam Altman&#xff09;提出了一种替代传统全民基本收入&#xff08;UBI&#xff09;的方案&#xff…

linux系统(ubuntu)调用科大讯飞SDK实现语音识别

1. 科大讯飞官网 登录注册实名制 2. 点击控制台&#xff0c;创建应用 点击左侧的语音听写&#xff0c;右边下滑选择Linux&#xff0c;点击下载 选择Linux平台&#xff0c;普通版本&#xff0c;语音听写&#xff0c;SDK下载 此时将得到一个压缩包&#xff0c;选择的功能不…

iOS 生成SSH Key

一. 参考文章 参考文章 二. SSH Key作用 SSH Key提供了一种和github通信的方式&#xff0c;通过这种方式&#xff0c;能够在不输入密码的情况下&#xff0c;将github作为自己的remote远程服务器&#xff0c;进行版本控制。 三. 使用SSH Key的步骤 ** 先设置git的用户名和密码 …

【socket】 linux C++ socket 优化参数

linux C socket 优化参数 在C的Linux Socket编程中&#xff0c;可以通过调整一些参数来优化Socket的性能和可靠性。以下是一些常用的参数和优化方法&#xff1a; TCP_NODELAY&#xff1a;这个选项可以禁用Nagle算法&#xff0c;从而减小延迟。Nagle算法是一种优化TCP网络传输…

集成平台建设方案(大数据中台技术方案)—Word原件

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; 基于平台的基础架构&…

TCP协议、HTTP协议、HTTP请求、HTTP长连接

什么是TCP协议 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议。它能够提供可靠的、有序的、面向连接的数据传输服务&#xff0c;通过三次握手建立连接&#xff0c;四次挥手终止连接。 …

并发请求接口调试

背景 项目开发过程中&#xff0c;有一项需求是5000个项目&#xff0c;需要以HTTP接口请求方式去调用对应的算法接口来进行处理。单个项目需要调用3-4个算法接口&#xff0c;串行方式调用预估需要5000 x 4 20000次接口请求。 单个接口预计耗时500ms&#xff0c;则预计总耗时&a…

2024自动化测试市场分析

大家都说2024年软件测试讲会卷的更厉害,从原来的功能测试到现在自动化测试,那么2024年是否可以学习自动化冲一把,我们先看一下2023年自动化测试在测试行业中的分析: 1.市场需求增长&#xff1a; 随着技术的进步和企业对软件质量的要求日益提高&#xff0c;自动化测试在测试行…

esp32s3中启动flash加密的问题

为了防止通过esptool.py read_flash命令将固件以明文的方式提取出来&#xff0c;所以启动flash加密非常有必要。 1。在项目根目录打开配置菜单idf.py menuconfig&#xff0c;选择Security features菜单&#xff0c;然后再选择 Enable flash encryption on boot即可。 2。编…

手把手微调大模型【附:一镜到底视频教程】

前言 近期有很多小伙伴来问是否有大模型微调教程&#xff0c;其实目前网上有很多教程&#xff0c;但是据了解&#xff0c;由于网上教程质量参差不齐&#xff0c;导致很多小伙伴尤其是初学者&#xff0c;一坑未出又入一坑&#xff0c;有种从入门到放弃的感觉。于是乎&#xff0…

小米消金引领创新,打造重庆消费金融新生态

新生产力催生消费新机遇。近年来&#xff0c;数智化赋能已深入消费金融及实体经济的各个环节&#xff0c;成为提振消费、释放内需的重要动能。据悉&#xff0c;3月20日&#xff0c;首届“消费金融高峰论坛&#xff08;重庆&#xff09;”在重庆盛大开幕。重庆小米消费金融有限公…

Linux提权--内核漏洞--web用户提权(脏牛)本地提权(脏管道)

免责声明:本文仅做技术交流与学习... 目录 Linux-内核漏洞Web用户提权-探针&利用-脏牛dcow nmap扫描目标IP及端口 导入脚本,进行探针 通过MSF发现目标机器存在脏牛漏洞 ---上传信息搜集的文件,查找漏洞,利用漏洞,继续上传EXP. --密码改了,再用xshell连一下就行了. …

VMware VCP考试快速通过的方法

VMware VCP-DVC 2024年5月10号刚有同事考过的&#xff0c;可以一条龙 &#xff0c;非常省心&#xff0c;最重要的是稳 总结 通过VCP(VMware Certified Professional)认证&#xff0c;需要参加培训机构的的培训&#xff08;没有时间&#xff1f;当然也可以不&#xff09;&…

2839. 判断通过操作能否让字符串相等 I

题目描述&#xff1a; 给你两个字符串 s1 和 s2 &#xff0c;两个字符串的长度都为 4 &#xff0c;且只包含 小写 英文字母。 你可以对两个字符串中的 任意一个 执行以下操作 任意 次&#xff1a; 选择两个下标 i 和 j 且满足 j - i 2 &#xff0c;然后 交换 这个字符串中两…

[嵌入式系统-75]:RT-Thread-快速上手:正点原子探索者 STM32F407示例

目录 正点原子探索者 STM32F407 上手指南 1. 简介 2. 准备工作 3. 运行第一个示例程序 3.1 编译下载 3.2 运行 继续学习 正点原子探索者 STM32F407 上手指南 1. 简介 探索者 STM32F407 是正点原子推出的一款基于 ARM Cortex-M4 内核的开发板&#xff0c;最高主频为 16…

施工技术杂志社投稿信箱邮箱

施工技术杂志投稿信箱邮箱 产品说明 《施工技术》杂志 《施工技术》 投稿信箱&#xff1a;sgjszzs126.com 《施工技术》 投稿信箱&#xff1a;sgjszzs126.com 《施工技术》 投稿信箱&#xff1a;sgjszzs126.com 咨询电话&#xff1a;13356222771 咨询电话&#xff1a;1…

即将研究生入学,记录一些遇到的疑问

以下是目前情况。 19年入学东北林业大学&#xff0c;23年毕业&#xff0c;24考研二战本校调剂至福州大学矿业工程。 所幸&#xff0c;有课题组做与计算机交叉的智慧矿山方向&#xff0c;并联系了第一位导师。等待一月有余&#xff0c;该导师通知我说他的第二个研究生名额未拿到…

双等号运算符的运算和转换规则

1. 运算规则 两端存在 NaN&#xff0c;返回 false NaN NaN; // false NaN 1; //false undefined 和 null 只有与自身比较&#xff0c;或者相互比较时&#xff0c;才返回 true&#xff0c;和其他原始类型比较都返回 false。 undefined null; // true undefined undefine…