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,一经查实,立即删除!

相关文章

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…

mysqli 扩展_MySQLi的优势

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

STM32F4开发板硬件简介

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

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

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

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

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

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

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

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

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

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

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

Android开发中如何创建自定义对话框

背景: 无论是Android,还是其他什么平台,对话框的主要形式都是弹出,或者我们可以说是一个在当前活动中打开的提示,来执行一些操作或实现一些功能。 你可以用一个对话框来问用户以确认一个行动,向用户通告一个…

树莓派接入公网(花生壳)

参考:树莓派接入公网 作者:图触靓 发布时间: 2020-12-22 17:28:19 网址:https://blog.csdn.net/bhbhhyg/article/details/107994829 目录为什么要接入公网接入公网的方法(花生壳)1、下载工具huashenke2、安…

cant find module express

安装express成功,测试一个应用如下:但是,运行却报错,如下图:说是express找不到,不应该啊!命令都能用啊!表面的原因是因为我install express用的是-g。参考链接如下:http:…

Linux虚拟机sqlite数据库安装教程、命令实现sqlite

参考:Linux虚拟机sqlite数据库安装教程 作者:图触靓 发布时间: 2021-04-08 19:07:56 网址:https://blog.csdn.net/bhbhhyg/article/details/115528254 一、在官网下载压缩包到window里面 SQLite官网下载地址 如图我们下载sqlite-a…

SecureCRT 使用 rz命令提示waiting to receive.**B0100000023be50

SecureCRT 远程连接Linux服务器,使用 rz命令提示waiting to receive.**B0100000023be50,或者使用sz命令提示: **B0100000023be50 解决方法设置如下: 转载于:https://www.cnblogs.com/pandaly/p/9898173.html

Python时间复杂度计算题答案

评论 题目链接 https://blog.csdn.net/qq_33254766/article/details/132255078 答案 时间复杂度:O(n)。 分析:这段代码遍历了n次,所以时间复杂度是线性的,即O(n)。 时间复杂度:O(n^2)。 分析:两个嵌套的…

wxpython使用方法_python图形界面开发之wxPython树控件使用方法详解

wxPython树控件介绍树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl。wx.TreeCtrl常用的方法有AddRoot(text, image-1, selImage-1, dataNone)。添加根节点&#xff0…

DSP_SCI

F2833x Serial Communication Interface 簡介 串行通信接口(SCI)模塊是一個串行I / O端口,允許F2833x與其他外圍設備之間的異步通信。 它通常被稱為UART(通用異步接收器發送器),通常根據RS232標準使用。 SC…

如何让自己的写的程序在阿里云一直运行

参考:如何让自己的写的程序在阿里云一直运行 作者:图触靓 发布时间: 2020-08-02 11:53:28 网址:https://blog.csdn.net/bhbhhyg/article/details/107742311 目录1、下载screen:2、运行screen,创建一个scree…

C程序设计语言--第五章:指针与数组

为什么80%的码农都做不了架构师?>>> 指针是一种保存变量地址的变量. 5.1 指针与地址 通常的机器都有一系列连续编号或编址的存储单元,这些存储单元可以单个进行操纵,也可以连续成组的方式操纵.指针是能够存放一个地址的一组存储单元(通常是两个或四个…