stm32之pwm输出

2023-11-11

1.定义

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。在这里插入图片描述

2.输出来源

以TIM3为例,STM32的通用定时器氛围TIM2,TIM3,TIM4,TIM5,每个定时器都有独立的四个通道可以用来作为: 输入捕获,输出比较,PWM输出,单脉冲模式输出等。
在这里插入图片描述

STM32的定时器除了TIM6和TIM7(基本定时器)之外,其他的定时器都可以产生PWM波输出,高级定时器TIM1,TIM8可以同时产生7路PWM输出,而通用定时器可以同时产生4路PWM输出,这样STM32可以最多同时输出30路PWM输出!

3.pwm工作原理

以向上计数为例,讲述PWM原理:

①在PWM输出模式下除了CNT(计数器当前值),ARR(自动重装载值),CCRx(捕获/比较寄存器值)。

②当CNT小于CCRx时,TIMx_CHx通道输出低电平

③当CNT等于或大于CCRx时,TIMx_CHx通道输出高电平
注:所谓脉宽调制信号(PWM波),就是一个TIMx_ARR自动重装载寄存器确定频率(由它决定PWM周期),TIM_CCRx寄存器确定占空比信号。
在这里插入图片描述

4.内部运作机制

在这里插入图片描述

5.pwm输出模式

模式一 边沿对齐模式
在这里插入图片描述

向上计数时: 当TIMx_CNT<TIMx_CCRx时通道1为有效电平,否则为无效电平;
向下计数时: 一旦TIMx_CNT>TIMx_CCRx,CCR1通道1为无效电平,否则为有效电平。

模式二 中央对齐模式
在这里插入图片描述

向上计数时: 当TIMx_CNT<TIMx_CCRx时通道1为无效电平,否则为无效电平;
向下计数时: 一旦TIMx_CNT>TIMx_CCRx,CCR1通道1为有效电平,否则为无效电平。
(与前面那个计数模式相反)

6.定时器输出PWM 结构体成员

在这里插入图片描述
说明:只用配置红色四个
typedef struct
{
uint16_t TIM_OCMode; //配置PWM模式1还是模式2
uint16_t TIM_OutputState; //配置输出使能/ OR失能
uint16_t TIM_OutputNState;
uint16_t TIM_Pulse; //配置比较值,CCRx
uint16_t TIM_OCPolarity; //比较输出极性,大于是高电平还是低电平
uint16_t TIM_OCNPolarity;
uint16_t TIM_OCIdleState;
uint16_t TIM_OCNIdleState;
} TIM_OCInitTypeDef;

7.自动加载预加载寄存器配置

在这里插入图片描述

8.相关库函数说明



void TIM_OCxInit                      //结构体初始化
(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_SetCompare1            //设置比较值函数
(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_OC1PreloadConfig     //使能输入比较预装载
(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_Cmd                            //开启定时器
 (TIM_TypeDef* TIMx, FunctionalState NewState)
void TIM_ARRPreloadConfig     //使能自动重装载的预装载寄存器允许位
(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_OC1PolarityConfig      //配置修改极性
(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

9.配置步骤

1.GPIO结构体
2.配置通用定时器结构体,初始化
3.配置定时去输出PWM结构体,初始化
4.打开时钟 —> GPIO时钟,TIM定时器时钟,部分重映射时钟
5.配置PWM比较值

10.应用模块

在这里插入图片描述

硬件接线:
红线 : 3.3v/ 5v
黑线 : GND
黄线 : 信号线
附上代码
.c文件

#include "stm32f10x.h"
#include "motor.h"


void motor_config(void)
{
	GPIO_InitTypeDef GPIO_Motorinit;//gpio结构体变量名
	TIM_TimeBaseInitTypeDef TIMMotor;//定时器结构体变量名
	TIM_OCInitTypeDef TIMPWM_Motorinit;//pwm结构体变量名
	
	//1.打开gpio时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	//打开定时器时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	//打开引脚复用AFIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  
	//2.选择重映射模式
	GPIO_PinRemapConfig( GPIO_PartialRemap_TIM3, ENABLE);//部分重映射

	//3.配置gpio结构体与初始化

	GPIO_Motorinit.GPIO_Speed	=GPIO_Speed_50MHz;//输出速率
	GPIO_Motorinit.GPIO_Mode	=GPIO_Mode_AF_PP;//采用复用推挽输出
	GPIO_Motorinit.GPIO_Pin		=GPIO_Pin_5;//5号引脚



 GPIO_Init( GPIOB,&GPIO_Motorinit );//gpio初始化


	//4.配置通用定时器结构体与初始化
	TIMMotor.TIM_Prescaler			=7200-1;//配置分配器计数值,预分频值,基本固定
	TIMMotor.TIM_CounterMode		=TIM_CounterMode_Up;//选择计数模式,选择向上计数模式
	TIMMotor.TIM_Period					=200-1;//配置下一个更新事件自动重装载值,200/10000s
	TIMMotor.TIM_ClockDivision	=TIM_CKD_DIV1;//选择分频模式,设置时钟分割,选择不分频模式
	
	TIM_TimeBaseInit(TIM3, &TIMMotor);//用通用定时器3,通道2


	//5.配置输出pwm波结构体与初始化

	TIMPWM_Motorinit.TIM_OCMode				=TIM_OCMode_PWM1;//配置pwm模式1/2,用模式1
	TIMPWM_Motorinit.TIM_OutputState	=TIM_OutputState_Enable;//配置输出使能
	TIMPWM_Motorinit.TIM_OCPolarity		=TIM_BreakPolarity_Low;//配置输出极性,比比较值小的为低电平,高为高电平
//只有配置这3个其他用默认值就好了
	TIM_OC2Init( TIM3,&TIMPWM_Motorinit);
//因为是定时器3通道2,选择oc2初始化

	//6.自动加载预加载寄存器配置
   TIM_OC2PreloadConfig( TIM3,  TIM_OCPreload_Enable);

	//7.开启定时器
	TIM_Cmd(TIM3, ENABLE);

	


}


main函数

#include "stm32f10x.h"
#include "motor.h"
void delay(uint16_t time)
{
	uint16_t i = 0;
	while(time--)
	{
	i=12000;
	while(i--);
	
	}
}


int  main()
{
	uint16_t pwmval= 155;//最大200,处于3/4
	
	motor_config();//舵机主函数调用
	
//通道几就用compare几
   while(1)
	 {
	
		 for(pwmval= 195;pwmval>=175;pwmval-=5)
	{
		TIM_SetCompare2(TIM3, pwmval);
		delay(500);
	}

	
		
	 }
		
}

		

	


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32之pwm输出 的相关文章

随机推荐

  • NOI-OJ 1.13 ID:11 回文素数

    NOI OJ 1 13 ID 11 回文素数 总时间限制 5000ms 内存限制 65536kB 描述 一个数如果从左往右读和从右往左读数字是相同的 则称这个数是回文数 如121 1221 15651都是回文数 给定位数n 找出所有既是回文
  • pr不支持mov怎么办_Premiere不支持MOV怎么办?怎么快速解决?

    原标题 Premiere不支持MOV怎么办 怎么快速解决 现在网上视频素材的质量参差不齐 而且下载的渠道很多 所以不少视频下载到本地后 都因为编码不规范而不能导入premiere中 一些MOV格式的视频也是这样 premiere是不支持的而
  • 【数据结构常见七大排序(一)】—插入排序篇【直接插入排序】And【希尔排序】

    目录 1 排序的概念及其运用 1 1排序的概念 1 2排序运用 1 3常见的七大排序 2 直接插入排序 2 1基本思想 2 2直接插入排序 2 3动图助解 2 4直接插入排序源码 2 5直接插入排序的特性总结 3 希尔排序 缩小增量排序 3
  • 【Java练习题】输出n行杨辉三角

    1 题目描述 杨辉三角的两个边都是1 内部其它都是肩上两个数的和 2 做题思路 杨辉三角开头和结尾都是1 杨辉三角第i行第j列元素是上一行i 1的元素和它前一个元素的和 公式表示 list i j list i 1 j list i 1 j
  • 最小二乘法——拟合平面方程(深度相机外参标定、地面标定)

    1 最小二乘法 最小二乘法 又称最小平方法 是一种数学优化技术 它通过最小化误差的平方和寻找数据的最佳函数匹配 利用最小二乘法可以简便地求得未知的数据 并使得这些求得的数据与实际数据之间误差的平方和为最小 最小二乘法还可用于曲线拟合 其他一
  • IDDPM官方gituhb项目--训练

    在完成IDDPM论文学习后 对github上的官方仓库进行学习 通过具体的代码理解算法实现过程中的一些细节 官方仓库代码基于pytorch实现 链接为https github com openai improved diffusion 本笔
  • 【论文阅读】POI2Vec: Geographical Latent Representation for Predicting Future Visitors

    POI2Vec Geographical Latent Representation for Predicting Future Visitors Shanshan Feng Gao Cong Bo An Yeow Meng Chee 20
  • 少儿编程和机器人编程哪个更好一点

    少儿编程和机器人编程哪个更好 孩子的学习一直都是家长们非常关心和重视一件事 很多的家长在培养孩子学习的时候 会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于少儿编程和机器人编程哪个
  • 2021-4-4 sql注入

    user 函数 user 这个函数 是取得 当前登陆的用户 root localhost exists 函数 exist 检查是否存在 对语句结果检查 select exists select 1 返回布尔值 0或1 0是假 1是真 1 判
  • 百度基础架构部-分布式存储组面试经历

    2016年2月25日 今天去的比较早 HR说下去两点面试 我提前两个小时就去了 防止迟到 因为一直用java 所以主要准备了java的知识 但是面试并没有问 全部问的基础知识 第一面的大哥非常好 开始问了我以下几个问题 linux系统基本命
  • @Slf4j

    早上好 朋友们 今天讲一下 Slf4j的使用 这里面仅仅描述一下如何使用 Slf4j表示打印日志的注解 类似于springboot自带的日志打印功能 但是springboot自带的日志打印功能还需要写以下代码 Logger log Logg
  • 禅道配置smtp却无法发送邮件问题

    大无语事件 在配置禅道smtp参数后 点击测试提示报错 如上图 SMTP 错误 无法连接到 SMTP 主机 请确认禅道机器 1 能ping通smtp服务器 如果不能ping通 请查看网络状态 或查看域名解析是否正确 或联系网管 2 使用te
  • maven更新jar包更新不下来的问题

    maven拉取jar 如果第一次没拉取成功 在本地仓库的目录中生成了临时文件 在第二次拉取的时候 maven检测到目录中有相关的临时文件 就认为这个jar包拉取有问题 不再请求网路拉取 所以 将目录下的临时文件删除再重新刷新maven 一个
  • Brief. Bioinformatics2023

    文章标题 Designing antimicrobial peptides using deep learning and molecular dynamic simulations 代码 https github com gc js An
  • Python中Pip的安装操作

    工具 原料 电脑 互联网 Python 方法 步骤 1 新建一个文本文档 起名为get pip 后缀名该为 py 2 打开网址https bootstrap pypa io get pip py 复制所有文字到我们新建的文件get pip
  • 梯度下降法中学习率的影响(附代码实现)

    Rosenbrock s 函数是优化问题的基准问题 f x i 1 n 1 100 x x 1 x i 2 2 x i 1 2 f x sum i 1 n 1 100 x x 1 x i 2 2 x i 1 2 f x i 1 n 1 10
  • 目标检测之focal loss

    Focal Loss for Dense Object DetectionTsung Yi Lin Priya Goyal Ross Girshick Kaiming He Piotr Dollar Facebook AI Research
  • PHPstorm等系列IDE永久破解

    1 安装phpstorm 安装包请自行官网下载 http www jetbrains com phpstorm download 2 下载JetbrainsCrack jar文件 破解补丁无需使用注册码 下载地址 http idea lan
  • window 和 linux 安装 Tesseract-OCR

    一 Window 安装 Tesseract OCR 1 安装 tesseract ocr w64 setup 5 3 1 20230401 exe 下载地址 https digi bib uni mannheim de tesseract
  • stm32之pwm输出

    1 定义 脉冲宽度调制 PWM 是英文 Pulse Width Modulation 的缩写 简称脉宽调制 是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术 广泛应用在从测量 通信到功率控制与变换的许多领域中 2 输出来源