STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

参考:stm32 定时器输出PWM原理及工作原理+控制舵机
作者:点灯小哥
发布时间: 2021-03-09 23:17:52
网址:https://blog.csdn.net/weixin_46016743/article/details/114606662

参考:stm32之pwm输出
作者:打酱油的;
发布时间: 2021-04-11 14:59:05
网址:https://blog.csdn.net/weixin_46098612/article/details/115597823

目录

  • 前言
  • PWM的工作原理
  • PWM的内部运作机制
    • PWM模式一:边沿对齐模式
    • PWM模式二:中央对齐模式
  • 自动加载的预加载寄存器
  • 通用定时器输出PWM结构体
  • 通用定时器输出PWM库函数
  • 通用定时器输出PWM控制舵机
    • 硬件接线
    • 配置步骤:需要配置3个结构体
    • 编程实现

前言

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

在这里插入图片描述

PWM的工作原理

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

TIM3通道2,即PB5,作为本实验连接舵机的引脚。
为何不是通道3PWM输出?不太理解。
在这里插入图片描述
上图最后一句话,点明PWM的原理。

PWM的内部运作机制

在这里插入图片描述
上图PWM模式选择介绍如下:

PWM模式一:边沿对齐模式

在这里插入图片描述
有效电平由上面的P位决定

在这里插入图片描述

PWM模式二:中央对齐模式

在这里插入图片描述

自动加载的预加载寄存器

在这里插入图片描述

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

通用定时器输出PWM结构体

在这里插入图片描述
注意:结构体只要配置上面4个红色字体即可

通用定时器输出PWM库函数

在这里插入图片描述

通用定时器输出PWM控制舵机

硬件接线

SG90电机

红线 : 3.3v/ 5v 接到VCC
黑线 : GND
黄线 : 信号线(PWM输出端口) 接到PB5

在这里插入图片描述

配置步骤:需要配置3个结构体

在这里插入图片描述

编程实现

motor.h

#include "stm32f10x.h"  //固件库void motor_config(void);

motor.c

#include "stm32f10x.h" //固件库
#include "motor.h"void motor_config(void)
{GPIO_InitTypeDef GPIO_MotorInit;       //1.GPIO结构体TIM_TimeBaseInitTypeDef TIM_MotorInit; //2.通用定时器结构体TIM_OCInitTypeDef TIMPWN_MotorInit;    //3.配置定时去输出PWM结构体RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); //4.1 打开GPIO时钟 RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3,  ENABLE);	//4.2 打开定时器3时钟RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO,  ENABLE);	//复用使能时钟(我们用到部分重映射)GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3 , ENABLE );	//4.3 部分重映射时钟 TIM3 上面图有讲GPIO_MotorInit.GPIO_Mode  =  GPIO_Mode_AF_PP;//复用推挽输出(PB5部分重映射 参照上面图) GPIO_MotorInit.GPIO_Pin   =	 GPIO_Pin_5;//PB5引脚 连接到舵机的信号线GPIO_MotorInit.GPIO_Speed =  GPIO_Speed_50MHz;GPIO_Init( GPIOB, &GPIO_MotorInit );TIM_MotorInit.TIM_ClockDivision =  TIM_CKD_DIV1;//设置时钟分频为1 不分频TIM_MotorInit.TIM_CounterMode 	=  TIM_CounterMode_Up;//计数模式 TIM向上计数模式TIM_MotorInit.TIM_Period 		=  200 - 1 ;    //重装载值 设置在下一个更新事件装入活动的自动重装载值 200/10000sTIM_MotorInit.TIM_Prescaler 	=  7200 - 1 ;	//预分频 TIMx时钟频率预分频值 TIM_TimeBaseInit( TIM3, &TIM_MotorInit);//定时器3TIMPWN_MotorInit.TIM_OCIdleState = TIM_OCMode_PWM1;			//选择PWM模式1 即当前CNT值比CCR比较值小为有效电平TIMPWN_MotorInit.TIM_OutputState = TIM_OutputState_Enable;	//配置输出使能TIMPWN_MotorInit.TIM_OCPolarity  = TIM_OCPolarity_Low;		//比较输出极性 选低电平 即低电平为有效电平 好像是前面讲的P位//还有一个结构体成员 配置比较值CCRX	后面用固件库函数实现TIM_OC2Init( TIM3,	&TIMPWN_MotorInit ); //定时器3的通道2 所以用OC2TIM_OC2PreloadConfig( TIM3,  TIM_OCPreload_Enable); //自动加载的预加载寄存器 使能 前面讲到TIM_Cmd( TIM3,  ENABLE);   
}

main.c

#include "stm32f10x.h"                  // Device header
#include "usart.h"
#include "led.h"
#include "tim.h"
#include "motor.h"//记得添加路径void delay(uint16_t time)
{uint16_t i = 0;while(time--){i=12000;while(i--);}
}int main(void)
{uint16_t pwmval = 155; //比较值155 自动重装载值为200 大约3/4motor_config();while(1){	//舵机在155和195之间 一直循环	for(pwmval = 195;pwmval >= 175;pwmval-=5){				//5. 设置PWM比较值函数 即占空比TIM_SetCompare2( TIM3,  pwmval); //定时器3 通道2delay(500);//延时0.5s 				 }			}
}

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

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

相关文章

nzhtl1477-ただいま帰りました ( bfs )

nzhtl1477-ただいま帰りました 题目描述 珂学题意: 你是威廉!你要做黄油蛋糕给珂朵莉吃~! 68号岛有n个商店,有的商店直接有小路连接,小路的长度都为1 格里克告诉了你哪些地方可能有做黄油蛋糕的原料 但是那个人是个坑货…

STM32系统定时器SysTick(只能向下递减)延时闪烁灯

参考:stm32 系统定时器 SysTick 作者:点灯小哥 发布时间: 2021-03-10 13:46:00 网址:https://blog.csdn.net/weixin_46016743/article/details/114633245 参考:stm32之系统定时器 作者:打酱油的&#xff1b…

WMS学习笔记:1.尝试加载WMS

1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?serviceWMS&requestGetCapabilities 2.在ArcGIS中添加GIS空间服务 2.在ArcC…

python后缀名切割_python批量将.xls转化为.xlsx,包括文件名和后缀分割

import osimport pandas as pd#此方法用将xls转化为xlsxdef transformat():global path #定义为全局变量path os.getcwd()#获取当前工作路径file os.listdir(path)#获取当前路径下的所有文件for f in file:file_name_be,suff os.path.splitext(f)#对路径进行分割&#xff0c…

005.LVM删除

一 删除LVM步骤 卸载挂载点移除LV移除VG移除PV删除配置文件二 卸载挂载点 1 [rootkauai ~]# umount /dev/vg01/lv01 #先卸载挂载点 三 移除LV 1 [rootkauai ~]# lvremove /dev/vg01/lv01 #移除lv2 Do you really want to remove active logical volume lv01? [y/n]: y3 …

判断CPU是大端还是小端

#include "stdafx.h" #include <iostream> using namespace std;/* #大端模式&#xff08;Big_endian&#xff09;&#xff1a;字数据的高字节存储在低地址中&#xff0c;而字数据的低字节则存放在高地址中。 #小端模式&#xff08;Little_endian&#xff09;&…

mysqli 扩展_MySQLi的优势

1. 功能增加了2&#xff0c;效率大大增加(以后的PHP项目改成mysqli)3&#xff0c;更稳定mysqli使用面向对象技术&#xff0c;但也支持过程化的使用方式mysqli扩展中给我提供了三个类&#xff1a;1. mysqli和连接有关的类2. mysqli_result表达了对数据库的查询所返回的结果集。 …

STM32F4开发板硬件简介

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

【莫比乌斯反演】10.30破译密码

初涉的话先留坑吧 题目大意 $\sum_{i_1}^{a_1}\sum_{i_2}^{a_2}\cdots\sum_{i_m}^{a_m}(i_1,i_2,\cdots,i_m)$ $a_i<1e6,2<m<10$ 题目分析 首先寄存两篇比较好的博客&#xff1a; 1.铃悬的数学小讲堂——狄利克雷卷积与莫比乌斯反演 2.[学习笔记]莫比乌斯反演常见模型…

演示:EIGRP非等价负载均衡(故障分析与解决篇)

演示&#xff1a;EIGRP非等价负载均衡的故障分析与排除故障背景&#xff1a;在如下图14.20所示的网络环境&#xff0c;工程师完成了环境中所有路由器的接口地址配置有EIGRP动态路由协议的启动&#xff0c;目前每台EIGRP路由器邻居关系正常&#xff0c;路由学习正常&#xff0c;…

STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

参考&#xff1a;stm32 超声波模块 原理 实现测距 舵机使用 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-10 19:37:16 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114643703 目录效果展示超声波传感器原理超声波测距编程步骤代码编写…

js json转xml(可自定义属性,区分大小写)

直接上代码~ 在网上找了很多例子&#xff0c;大多数不适用&#xff0c;而且麻烦&#xff0c;自己进行了一些调整&#xff0c;完成了一个可以区分大小写的json转xml的小功能~ 功能实现js&#xff1a; function CreatXmlDoc(obj){this.tagNameobj.tagName;this.properties obj.p…

mysql安装主从配置_MySQL安装与主从配置

我是ssh远程 配置的&#xff1b;略微有些不同&#xff0c;大家自己斟酌。1.安装MySQLsudo yum install mysql mysql-server sudo chgrp -R mysql /var/我是ssh远程 配置的&#xff1b;略微有些不同&#xff0c;大家自己斟酌。1.安装MySQLsudo yum install mysql mysql-serversu…

STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置

摘自&#xff1a;STM32F103五分钟入门系列&#xff08;二&#xff09;GPIO的七大寄存器GPIOx_LCKR作用和配置 作者&#xff1a;自信且爱笑‘ 发布时间&#xff1a; 2021-05-01 12:08:32 网址&#xff1a;https://blog.csdn.net/Curnane0_0/article/details/116276876?spm1001.…

CTR点击率简介

点击率 简介 在搜索引擎(百度、谷歌)中输入关键词后进行搜索&#xff0c;然后按竞价等因素把相关的网页按顺序进行排列出来&#xff0c;然后用户会选择自己感兴趣的网站点击进去&#xff1b;把一个网站所有搜索出来的次数作为总次数&#xff0c;把用户点击并进入网站的次数占总…

算法第三章作业

算法第三章作业 1.对动态规划算法的理解 求解的方式有两种&#xff1a;①自顶向下的备忘录法 ②自底向上。 动态规划是运筹学中用于求解决策过程中的最优化数学方法。 动态规划最重要的是子问题的求解&#xff0c;在求解任一子问题时&#xff0c;列出各种可能的局部解&#xf…

python中的命名空间指什么_13.Python中的命名空间是什么

Python中的命名空间是什么&#xff1f;In Python&#xff0c;every name introduced has a place where it lives and can be hooked for.This is known as namespace. It is like a box where a variable name is mapped to the object placed.Whenever the variable is searc…

STM32使用IIC总线通讯协议在OLED屏幕上显示字符串、汉字、图像(硬件IIC)

参考&#xff1a;基于STM32-Oled&#xff08;IIC&#xff09;的使用 作者&#xff1a;奋斗的小殷 发布时间&#xff1a; 2021-05-07 13:09:26 网址&#xff1a;https://blog.csdn.net/boybs/article/details/116465668 目录IIC总线简介IIC协议简介IIC总线系统结构IIC总线物理层…

mysql语句笔记

1、mysql多重查询select * from a_table ORDER BY b,c asc limit 1, 10;(对表a_table中的字段b降序排列&#xff0c;得到的结果再按字段c降序排列&#xff0c;最后取前10条数据)转载于:https://blog.51cto.com/jemary/1303093

推送公司今日菜单内容到手机

此文已由作者张耕源授权网易云社区发布。欢迎访问网易云社区&#xff0c;了解更多网易技术产品运营经验。自从公司的易信公众服务号有了查询今日菜单的功能&#xff0c;自己慢慢养成了每次去吃饭前查一 下各个窗口的菜谱&#xff0c;再决定去哪吃饭的习惯。不过这个功能使用的越…