STM32F103 舵机控制控制程序PWM配置

2023-05-16

上一篇博文我讲了如何按自己想的配置PWM定时器。下来发现会不会有同学根本不想用重映像,原本的引脚就可以,:) ,所以在开始这篇之前,先把TIM2定时器的设置程序发一下:

下面展示一些 内联代码片

//TIM3 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM2_PWM_Init(u16 arr,u16 psc)
{  
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);	//使能定时器2时钟
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOA  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
//	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);    //关闭JTAG 开启SW
//  GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5    
	
	
	//设置该引脚为输出功能,输出TIM2 CH2的PWM脉冲波形	GPIOB.3
//	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//TIMx_CHx
//   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //
//   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//   GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	
	
   //设置该引脚为输出功能,输出TIM2 CH3、CH4的PWM脉冲波形	GPIOA.2 GPIOA.3
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //TIM2_CH3
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
 
   //初始化TIM2
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
	
	//初始化TIM2 Channel2 PWM模式	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	

	TIM_OC2Init(TIM2, &TIM_OCInitStructure);        //根据T指定的参数初始化外设TIM2 OC2
  TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);// 使能预装载寄存器

	TIM_OC3Init(TIM2, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM2 OC3
  TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);// 使能预装载寄存器
	
  TIM_OC4Init(TIM2, &TIM_OCInitStructure);        //根据T指定的参数初始化外设TIM2 O4   
	TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);// 使能预装载寄存器
	
	TIM_Cmd(TIM2, ENABLE);  //使能TIM3
	TIM_ITConfig(TIM3,TIM_IT_CC3,ENABLE);

}

文中打了//注释 的那部分,就是为了部分重映射写的
在这里插入图片描述

现在不用了,改成了以上程序,:在这里插入图片描述

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
好,现在开始说舵机的控制这部分,
其实一开始,我是有点迷的,我用的是LD-1501MG的舵机,就不放链接了啊,反正市面上的都差不多,就是这个驱动电机的电流需求不同罢了,这个电机单片机是带不动的,得外加个大电压供个电。

然后参考了这篇博文:
链接: http://www.openedv.com/forum.php?mod=viewthread&tid=305707&highlight=%B6%E6%BB%FA.

在这里插入图片描述

记住这个,很关键,理解了之后,其实就在于怎么才能相对应的PWM波周期或频率。

然后我们回过头来看PWM的初始化参数,

//通用定时器3中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc)
//TIM2 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM2_PWM_Init(u16 arr,u16 psc)

这里展示了TIM2定时器的中断初始化和PWM初始化,发现参数都是为 arr 和 psc 这两个,
PSC : 时钟预分频数, 及stm32f103 频率 72Mhz, PSC 参数就是对系统总线频率做分频

定时器2中断初始化,

void TIM3_Int_Init(u16 arr,u16 psc)
TIM2_Int_Init(4999,7199); // 计数频率=72Mhz/(7199+1)=10Khz ,  计数一次耗时100us,
						     及计数(4999+1)次,总共耗时500ms

这样配置,就能产生一个500ms的定时器中断。

定时器2 PWM初始化

void TIM2_PWM_Init(u16 arr,u16 psc)
TIM2_PWM_Init(49,7199);    //我们的目的是为了驱动舵机,所以要配置合适的pwm周期,
					      //F频率=72Mhz/(7199+1)/ (49+1)=200hz
					      // 对照arr, 和 psc 可知其区别,psc同样是预分频,但arr起到了不同的作用,在定时器中断里arr作为了计数来使用,在PWM里,arr做了分频,确定单个pwm周期的作用

PWM 周期这个,是我早上起来特意用示波器验证过得,贴图比较麻烦,就不放了。

所以,按照上面的初始化,我们就可以得到一个频率为200hz 的pwm,可能有同学会问了,要这个有啥用
好吧,其实并不是非得200hz,只不过200hz比较好得到罢了,其他频率还得计算,还要保证是整数,就当偷个懒了,就按200hz来讲。

200hz 及 周期T= 5ms, 舵机所要求的是高电平 0.5ms->0°,, 2.5ms ->180°
到这里应该大家就都清楚了吧, 在0.5—2.5 这个区间,对应0–180°

TIM_SetCompare2(TIM2,t);  
用这个来设置pwm的输出,初始化已设置了最大频率是(arr+1)=50,及t不能大于50,从0——50的区间,按比例对应0——5ms,再对应0°——180°,

就好比
TIM_SetCompare2(TIM2,25);
就是输出了占比 (25/50)% 的pwm波,占空比50%, 及高电平持续时间为 50%*5ms=2.5ms.
这样我们就可以设置任意的舵机角度啦

好了,到这里这篇文章就结束了,应该讲的还是蛮清楚的吧,很多寄存器的东西大家还是多看看手册,多百度搜搜吧,(虽然很多我看完会了,结果扭头就忘了(: );

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
对了,大号的舵机一定要注意供电电压,电流不够是驱动不了的,只会在那咯吱咯吱的响 。

如果对你有用的话,麻烦点点赞啦,
下一篇打算做一下PWM的同一定时器不同通道输出不同频率的PWM波

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

STM32F103 舵机控制控制程序PWM配置 的相关文章

  • PX4代码中LIDAR-Lite v3激光测距仪PWM驱动

    调试了LIDAR Lite v3激光测距仪PWM驱动 xff0c 在这里做一下记录 飞控硬件是pixhawk1 xff0c PX4软件版本为1 7 3 按照官方教程进行接线和配置 xff0c 链接为 https docs px4 io en
  • STM32F103 移植FreeRTOS (附FreeRTOS源码和移植工程)

    文章目录 前言1 移植FreeRTOS2 测试FreeRTOS3 移植工程 前言 该篇环境为 xff1a STM32F103ZET6 Keil 库函数版本 F4 F7 H7移植同理 FreeRTOS源码 xff1a 链接 xff1a htt
  • STM32CUBEMX使用PWM+DMA驱动WS2812

    STM32CUBEMX使用PWM 43 DMA驱动WS2812 首先在stm32cubemx中设置pwm和dma 我设置了TIM1的CH1为PWM引脚编写DMA响应函数 xff0c 即PWM DMA完成数据发送后的回调函数 PWM DMA
  • jetson nx fan auto pwm

    参考 xff1a Jetson Nano PWM自动调速 Ay yzx的博客 CSDN博客 代码 xff1a usr bin env python import os import commands from the path of thi
  • MPU9250的MPL移植_HAL库(以STM32F103为主控)

    准备材料 xff1a 驱动库 xff1a motion driver 6 12 硬件 xff1a 正点原子MINI STM32f103RCT6硬件IIC PB8 PB9 GY 91模块 看图可知AD0接地 xff0c 地址是0X68 硬件连
  • 基于STM32F103的智能门禁系统

    0 前言 本人大二软工菜鸟一枚 xff0c 大神不喜勿喷 1 功能演示 点这里功能演示 2 硬件选型 序号名称备注1STM32F103C8T6开发板用于主控2AS608指纹模块指纹解锁3RFID RC522射频模块刷卡解锁40 96寸四针O
  • STM32F103C8T6 PWM驱动舵机(SG90)

    小知识 xff1a 同一个定时器 xff0c 不同通道输出不同输出PWM的特点 对于同一个定时器的不同通道输出PWM xff0c 因为它们是共用一个计数器的 xff0c 所以频率必须一样 xff0c 而占空比由各自的CCR决定 xff0c
  • 怎么把PWM信号转为模拟量

    有一个测量位置变化的位置传感器 xff0c 用万用表电压档测量传感器的输出信号 xff0c 结果显示的是模拟量信号 xff0c 即位置和信号输出大小呈线性关系 但是 xff0c 用示波器 xff08 Picoscope 4227 xff09
  • STM32F103 PB3,PB4,PA15,IO不可控问题

    STM32默认启动时PB4 PB3 PA15三个引脚不是普通IO xff0c 而是JTAG的复用功能 xff0c 分别为JNTRST JTDI JTDO 由上可以知要使PB3可以用 须关闭JTAG DP SW DP 可以不管 添加以下配置即
  • si4438使用stm32f103配置调试成功!

    刚拿到si4438时候在网上找了一大波资源 xff0c 发现能使用的并没有多少 xff0c 于是自己配置一发 经过不懈努力配置成功 xff0c 现在将一些配置过程分享给大家 xff01 源码已上传 尽情下载 xff01 1 首先打开工程文件
  • STM32F103 GPIO内部电路图

    GPIO结构图 GPIO工作模式 输入模式 输入浮空 输入上拉 输入下拉 模拟输入 输出模式 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能
  • 电机控制基础——定时器基础知识与PWM输出原理

    单片机开发中 电机的控制与定时器有着密不可分的关系 无论是直流电机 步进电机还是舵机 都会用到定时器 比如最常用的有刷直流电机 会使用定时器产生PWM波来调节转速 通过定时器的正交编码器接口来测量转速等 本篇先介绍定时器的基础知识 然后对照
  • STM32进入Standby模式并唤醒

    项目背景 设备具备电池 电源适配器两种供电方式 实现出厂 和电池一并密封装盒 时最低功耗 即进入待机模式 到用户开始使用时需要手动磁棒唤醒 开始复位运行 在检测到设备是交流供电时 设备全速运行 检测到是电池供电时 定时采集数据 采集完毕进入
  • mega328p-ADC,PWM,UART驱动

    ADC驱动 函 数 名 Ai Init 函数功能 Ai端口初始化 输入参数 void 输出参数 void 返 回 值 void 参考文档 void 创 件 人 程强刚 创建日期 2016 02 09 修改历史 void Ai Init vo
  • PMIC驱动之—PMIC硬件相关知识

    PMIC 电源管理集成电路 Power Management IC 在之前项目中 驱动最小系统 对于PMIC这块儿很懵懂 故抽时间查看一些优秀博文及资料 加强对电源管理的理解 本文介绍 PMIC 硬件电路相关的一些知识 在此作一些阶段性的学
  • 使用HAL库开发STM32:使用Timer输出PWM信号

    文章目录 目的 基础说明 输出PWM信号 总结 目的 单片机输出PWM信号是很常用的一种功能需求 STM32中通常使用Timer来输出PWM信号 这篇文章将对相关内容做个说明 基础说明 在使用Timer输出PWM信号需要了解一些Timer的
  • STM32进入STOP模式并唤醒实验总结

    项目需求 需要实现设备低功耗功能 实现过程中遇到几个问题 以此记录总结 stm32f103ret6 问题一 执行PWR EnterSTOPMode PWR Regulator LowPower PWR STOPEntry WFI 后 程序继
  • stm32f103 TIM2定时器4路PWM输出实验

    这里以TIM2为例 pwm c include pwm h uint16 t TIM2 CCR1 Val uint16 t TIM2 CCR2 Val uint16 t TIM2 CCR3 Val uint16 t TIM2 CCR4 Va
  • STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • 解决keil中 点击setting 程序中断问题

    自己写了一个LED常亮的程序 入门嘛 但是程序在下载后 点击 debug setting 在软件识别J link后 程序是成功的 但是LED不亮了 下面是解决方法 记住把2标记处的对勾去掉就可以了 这个功能是 在你连接完成时自动在Reset

随机推荐

  • 使用jQuery开发一个带有密码强度检验的超酷注册页面

    在今天的jQuery教程中 xff0c 我们将介绍如何使用jQuery和其它相关的插件来生成一个漂亮的带有密码强度检验的注册页面 xff0c 希望大家喜欢 xff01 在线演示 相关的插件和类库 complexify 一个密码强度检验jQu
  • 分享一个使一行文字变形产生弯曲弧度特效的jQuery插件 - Arctext.js 编辑

    日期 xff1a 2012 01 26 来源 xff1a GBin1 com 在线演示 本地下载 CSS3可以帮助我们旋转字体 xff0c 但是如果想让一行字体产生弧度曲线的效果 xff0c 稍微有点儿费劲 今天分享一个jQuery插件 x
  • 分享15个带给你设计灵感的超酷苹果Apple图标设计

    日期 xff1a 2012 4 5 来源 xff1a GBin1 com 苹果公司可能是当今最富科技感的公司 xff0c 这里我们收集了15个超棒的苹果相关图标 xff0c 希望大家喜欢 xff01 iPhone 4 Icon 超棒的iph
  • 强大的独立日期选择器(date picker)插件 - Kalendae

    日期 xff1a 2012 4 16 来源 xff1a GBin1 com 在线演示 本地下载 今天分享一个独立的日期选择插件Kalendae xff0c Kalendae是一个强大健壮的独立日期选择器 如果你不想使用重量的jQuery U
  • 分享42个超棒的智能手机摄影画廊

    日期 xff1a 2012 4 22 来源 xff1a GBin1 com 怎样制作出一张非常棒的照片 xff1f 也许它取决于你设计的主题或者你想要一种风格 xff0c 像许多艺术摄影 xff0c 它们很可能是比较客观的 xff0c 也许
  • 新款ipad你了解多少?

    日期 xff1a 2012 4 27 来源 xff1a GBin1 com 对于还没有入手newipad的苹果迷来说 xff0c 仍然还是很值得期待的 xff0c 而对于市场需求来讲 xff0c 目前为止 xff0c 还没有任何产品可以完全
  • 基于HTML5的超酷图片画廊 -Juicebox Lite

    日期 xff1a 2012 5 22 来源 xff1a GBin1 com 在线演示 本地下载 图片画廊是web或者网站开发中经常会用到的组件 xff0c 非常适合作为图片展示 xff0c 个人作品展示和相册使用 今天我们将介绍一个非常棒的
  • Google的自动驾驶汽车无事故成功完成30万英里的驾驶路程

    日期 xff1a 2012 8 8 来源 xff1a GBin1 com Google的自动驾驶汽车可能是这家公司最具有创新精神的项目之一 今天 Google 宣称自动驾驶汽车已经完成了另外一个里程碑 xff0c 无事故完成了30万英里的驾
  • 谷歌(Google)是怎样对待离世的Google员工的?

    日期 xff1a 2012 8 10 来源 xff1a GBin1 com 如果提起谷歌的福利来说 xff0c 大家肯定首先想到免费的食品和理发 xff0c 及其独立的医疗服务 xff0c 或者超棒的食堂和大厨等等 但是你是否知道谷歌是怎么
  • 升级 CMake版本 从 2.8.11 到 3.6.2 CentOS Linux

    原文地址https jotmynotes blogspot com 2016 10 updating cmake from 2811 to 362 or html On CentOS 7 using yum install gives yo
  • 利用HTML5画布绘制精美动态效果-极客标签-专题视频课程

    利用HTML5画布绘制精美动态效果 11225人已学习 课程介绍 本课程是极客标签精心策划并制作的 xff0c HTML5画布即canvas标签的实例教程 本课程将利用5个不同的实例 xff0c 逐步讲解canvas标签在实际开发中的应用场
  • jvm调优

    Jvm调优 java代码是怎么运行起来的 类加载到使用的过程 加载 xff1a 用这个类的时候开始加载 类在使用的时候触发类加载器 xff0c 把类加载到jvm中 2 1验证阶段 类加载之前先进行验证是否符合JVM规范后交给JVM 比如fi
  • python pip安装啥都失败,带国内源也失败

    在学校机房 xff0c 网络是有限制的 xff0c 也有一些环境的限制 xff0c 今天碰到一个问题 xff0c pip安装啥都不成功 xff0c 网络是一问题 xff0c 是不是有其他问题我不知道 xff0c 随手找了一些解决方案 xff
  • openstack 安装常见配置和错误处理

    转载自 xff1a http blog csdn net xinxing 8185 article details 51753031 问题一 xff1a 重启机器出现组件没法互通 OpenStack Failed to connect to
  • GCC 常见错误解析

    转自 xff1a http wenku baidu com view 01f99435f111f18583d05a47 html 1 GCC 常见错误解析 一 错误类型 第一类 C 语法错误 错误信息 文件source c 中第n 行有语法
  • Sublime3 安装激活教程

    Sublime3 安装激活教程 1 下载安装 官网 xff1a http www sublimetext com 2 在hosts文件末尾添加内容 xff1a 127 0 0 1 license sublimehq com 127 0 0
  • maven打包的jar包无法在linux中运行

    问题描述 xff1a 使用mvn 打包的jar包无法在linux中运行 解决方法 xff1a 在idea中使用右侧的Maven菜单栏选择对应的模块然后打开Lifecycle先点击compile 再点击package进行打包 此种方法打包的j
  • [数学]三角函数与双曲函数及其导数和不定积分

    三角函数与双曲函数及其导数和不定积分 定义 sin x
  • [C++] std::ranges中的特征和自定义std::ranges::view变换

    文章目录 1 std ranges中的特征1 1 std ranges range例子细化 1 2 std ranges sized range1 3 std ranges borrowed range1 4 std ranges view
  • STM32F103 舵机控制控制程序PWM配置

    上一篇博文我讲了如何按自己想的配置PWM定时器 下来发现会不会有同学根本不想用重映像 xff0c 原本的引脚就可以 xff0c xff1a xff09 xff0c 所以在开始这篇之前 xff0c 先把TIM2定时器的设置程序发一下 xff1