STM32使用PWM(脉冲宽度调制)

news2024/12/26 9:26:50

STM32使用PWM(脉冲宽度调制)

  • 一、PWM概述
  • 二、STM32的PWM分析
  • 三、PWM产生的流程
  • 示例代码

一、PWM概述

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出(1或0)来对模拟电路进行控制的一种非常有效的技术。

PWM应用场景如下:

使用PWM信号控制温度。
使用PWM信号控制比例阀的开度。
使用PWM信号控制电机的转速(直流电机 步进电机 伺服电机)
使用PWM信号控制舵机的转向。

占空比:占空比是指在一个脉冲循环内,通电时间(可能是高电平,可能是低电平)相对于总时间所占的比例。

二、STM32的PWM分析

PWM产生框架图如下:

在这里插入图片描述

定时器部分是提供PWM周期,如在定时器1MHZ,计1000个数,那么PWM周期:1ms(周期不能过长)

在这里插入图片描述

输出极性:程序设置默认输出的电平。当通道有效,则输出默认的设置电平;通道无效,输出与设置的极性相反的电平(设置999为速度最快为高极性,反之为低极性)

PWM 模式 1–– 在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1 便为有效状态,否则为无效状态。

在递减计数模式下,只要 TIMx_CNT>TIMx_CCR1,通道 1 便为无效状态( OC1REF=“0”),否则为有效状态( OC1REF=“1”)。

PWM 模式 2–– 在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1 便为无效状态,否则为有效状态。

在递减计数模式下,只要 TIMx_CNT>TIMx_CCR1,通道 1 便为有效状态,否则为无效状态。

三、PWM产生的流程

1)使能定时器4和相关IO口时钟。
	PB6----TIM4_CH1
(2)使能定时器4和相关IO口时钟。
	使能定时器4时钟:RCC_APB2PeriphClockCmd();
	使能GPIOB时钟:RCC_AHB2PeriphClockCmd ();3)初始化IO口为复用功能输出。
	函数:GPIO_Init();
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;       //复用功能 4)初始化定时器:ARR,PSC等:
	TIM_TimeBaseInit();5)初始化输出比较参数:
	TIM_OC1Init();6)使能预装载寄存器: 
	TIM_OC1PreloadConfig(TIM4, 	TIM_OCPreload_Enable);7)使能自动重装载的预装载寄存器允许位	
	TIM_Cmd(TIM4, ENABLE);8)不断改变比较值CCRx,达到不同的占空比效果:
	TIM_SetCompare1();

示例代码

将这段代码放到你的工程文件中,将GPIO引脚号改为你的LED灯的引脚号,你将看到led灯以呼吸灯的形式闪烁。

void Pwm_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	 TIM_OCInitTypeDef TIM_OCInitStruct;
	//使能定时器4和相关IO口时钟。
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
	//初始化IO口为复用功能输出。
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;//引脚1
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//速率
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	//初始化定时器:ARR,PSC等:
	TIM_TimeBaseInitStruct.TIM_Period=2000-1;//周期数 计2000个数  在1000000HZ下 20ms 
	TIM_TimeBaseInitStruct.TIM_Prescaler=720-1;//预分频 72HZ/720= 100000HZ
	TIM_TimeBaseInitStruct.TIM_ClockDivision=0;//分频因子 一个脉冲记一个数
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
	//初始化输出比较参数:
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式1
	TIM_OCInitStruct.TIM_Pulse = 0;//脉冲值
	TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//高极性
	TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//使能
	TIM_OC4Init(TIM3,&TIM_OCInitStruct);
	//使能预装载寄存器: 
	TIM_OC4PreloadConfig(TIM3, 	TIM_OCPreload_Enable); 
	//使能自动重装载的预装载寄存器允许位	
	TIM_Cmd(TIM3, ENABLE);
}
#include "stm32f10x.h"
#include "delay.h" 

//主函数
int main(void)
{
	int i;
	//中断优先级分组
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	LED_Init();//初始化LED
	Pwm_Init();//设置定时器3输出PWM
	
	while(1)//呼吸灯
	{
		//从暗到亮
		for(i=1; i<499; i++)//定时器4重装载值为499
		{
			
			TIM_SetCompare1(TIM3,i);//根据i的值设置比较值,调整占空比
			delay_ms(20);//根据实际情况进行调整,方便观察效果
		}
		
		//从亮到暗
		for(i=499; i>0; i--)
		{
			
			TIM_SetCompare1(TIM3,i);
			delay_ms(20);
		}
	}
	return 0;
}

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

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

相关文章

记录关于GPT的应用

一.AutoGPT chatgpt是一问一答的形式&#xff0c;autogpt则是输入需要做的东西以及几个目标&#xff0c;例如&#xff1a; Enter y to authorise command, y -N to run N continuous commands, n to exit program, or enter feedback for .. 注意&#xff1a;openai账户里应该…

Flink高手之路6-Flink四大基石

文章目录 Flink四大基石一、Flink的四大基石1. Checkpoint2. State3. Time4. Window 二、案例1.需求2.代码实现3.运行&#xff0c;查看结果4.增加需求2的实现5.重启程序&#xff0c;查看结果 Flink四大基石 一、Flink的四大基石 Flink之所以能这么流行&#xff0c;离不开它最…

python和PyTorch知识

解包操作 可变参数和关键字参数是 Python 函数的两种参数类型。 b, *_ t.shape python中这个用法是什么意思 我们使用 _” 来“忽略”一个或多个值&#xff08;表示我们不需要这些值&#xff09;&#xff0c;然后将“t.shape”元组的第一个元素赋值给变量“b”。 pytorc…

使用ChatGPT的方法和替代方案

作为互联网应用&#xff0c;ChatGPT也有国内化的替代方案。在国内&#xff0c;一些公司已经开始利用深度学习技术开发本地化的语言模型&#xff0c;例如阿里巴巴的通义千问、华为的盘古大语言模型&#xff0c;以及百度的文心一言等等&#xff0c;这些模型可以完成自然语言处理任…

javassist 字节码处理库

目录 一、快速入门 1.1 创建class文件1.2 ClassPool的相关方法1.3 CtClass的相关方法1.4 CtMethod的相关方法1.5 调用生成的类对象 1.5.1 通过反射调用1.5.2 通过接口调用1.6 修改现有的类对象二、将类冻结三、类搜索路径四、$开头的特殊字符五、ProxyFactory的使用 我们知道J…

论文排版怎么排?教您3分钟搞定!

案例&#xff1a;如何对论文进行排版&#xff1f; 【我把写好的毕业论文交给老师检查&#xff0c;老师说我的格式不正确&#xff0c;叫我按照正确的格式进行排版修改。如何对论文进行排版&#xff1f;有没有小伙伴知道论文的正确格式&#xff1f;】 临近毕业&#xff0c;很多…

3.java程序员必知必会类库之junit

前言 单元测试技术的使用&#xff0c;是区分一个一般的开发者和好的开发者的重要指标。程序员经常有各种借口不写单元测试&#xff0c;但最常见的借口就是缺乏经验和知识。常见的单测框架有 JUnit , Mockito 和PowerMock 。本文就Junit展开介绍。 1.介绍 JUnit 是一个 Java …

webservice使用帮助手册

什么是Webservice 简单讲就是一种RPC的实现方式 参考&#xff1a;WebService是什么 SOAP1.1和SOAP1.2的区别 参考&#xff1a;https://www.cnblogs.com/yefengmeander/p/4176771.html 发布Webservice服务 1.用WebService编写一个webservice服务 2. 发布服务 3. 查看发布…

实现匹配搜索词高亮(Vue3)

1.使用插件实现&#xff08;ohlight&#xff09; (1).下载插件 // pnpm pnpm i ohlight // npm npm i ohlight // yarn yarn add ohlight如果让选择版本就按照提示的版本选择 (2).基本使用 >1.(Vue3)的使用 首先在vite.config.js中加入以下代码&#xff1a; export de…

AD9208调试经验分享

背景概述 FMC137 是一款基于 VITA57.4 标准规范的 JESD204B 接口FMC 子 卡 模 块 &#xff0c; 该 模 块 可 以 实 现 4 路 14-bit 、 2GSPS/2.6GSPS/3GSPSADC 采集功能。该板卡 ADC 器件采用 ADI 公司的 AD9208 芯片&#xff0c;&#xff0c;与 ADI 公司的 AD9689 可以实现 …

记一次adb查找安卓App崩溃报错记录

记一次adb查找安卓App崩溃报错记录 首先先说结论&#xff0c;是因为内存不足的时候会出现这种问题 在小米手机上有这么一个设置 可以很方面的模拟出这个异常 然后我们再设置一下logcat日志的大小 如果你的操作真的很多&#xff0c;最好设置一下&#xff0c;如果你的操作很短就…

「区间DP-步入」石子合并(环形)

石子合并&#xff08;环形&#xff09; 题目描述 在一个圆形操场的四周摆放 N 堆石子&#xff0c;现要将石子有次序地合并成一堆&#xff0c;规定每次只能选相邻的2堆合并成新的一堆&#xff0c;并将新的一堆的石子数&#xff0c;记为该次合并的得分。 试设计出一个算法,计算…

Java调用 webService 接口报错

问题描述 本文采用的是 jdk1.8.0_202&#xff0c;装在 D 盘中&#xff0c;配置了系统环境变量 path。 D:\Java\jdk8\bin;D:\Java\jdk8\jre\bin;本文调用 webservice 的依赖如下&#xff1a; <!-- webservice调用依赖cxf--><dependency><groupId>org.apache…

Vue3 + TS4.8其他踩坑记录

坑1&#xff1a;导入SFC组件的时候&#xff0c;直接提示错误&#xff0c;导入 Module "/Users/xinxiang/ProjectSpace/Practice/Vue/vue3-typescript4.8-issue-6305/src/components/HelloWorld.vue" has no default export.Vetur(1192) 解决方案1&#xff1a;Vue3项…

《剑指offer》——刷题日记

本期&#xff0c;给大家带来的是《剑指offer》几道题目的讲解。希望对大家有所帮助&#xff01;&#xff01;&#xff01; 本文目录 &#xff08;一&#xff09;JZ36 二叉搜索树与双向链表 1、题意分析 2、思路讲解 3、代码演示 4、最终结果 &#xff08;二&#xff09;B…

Nginx安装使用记录

参考文章&#xff1a;https://www.runoob.com/linux/nginx-install-setup.html 系统平台&#xff1a;Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-146-generic x86_64) 下载编译工具 sudo apt-get install zlib zlib-devel gcc-c libtool openssl openssl-develPCRE 官网&#xf…

Python每日一练(20230421)

目录 1. 组合总和 II &#x1f31f;&#x1f31f; 2. 加一 &#x1f31f; 3. 从中序与后序遍历序列构造二叉树 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 …

如何通过开源项目搭建私有云平台--第四步中:安装rancher longhorn

第四步中&#xff1a;安装rancher longhorn&#xff0c;实现容器文件挂载 之前在国企&#xff0c;曾经专门针对容器挂载立专项来调研&#xff0c;当时选择主流的ceph&#xff0c;最终结果是成功搭建了用于k8s集群的共享存储&#xff0c;但要独立找服务器来部署&#xff0c;增加…

Cloud computing(后续慢慢补充)

Cloud computing 可以看到右侧的容器虚拟化架构中&#xff0c;不需要运行额外的OS&#xff0c;这样启动的服务性能会相比于通过虚拟化软件实现的架构更优秀。但是虚拟机同样也有它的优点&#xff0c;比如它的安全、隔离性&#xff0c;可以运行不同的操作系统等等。 Virtualiz…