STM32f1之舵机驱动+转动角度调整(含主代码和计算)

您所在的位置:网站首页 旋转的导弹如何控制方向 STM32f1之舵机驱动+转动角度调整(含主代码和计算)

STM32f1之舵机驱动+转动角度调整(含主代码和计算)

2024-07-08 05:23:13| 来源: 网络整理| 查看: 265

目录

前言

一、舵机的“自白”

二、代码部分

三、如何计算得到该要控制的角度

前言

哈哈趁热打铁,上讲介绍到L298N电机驱动还有PWM调速,这里我就趁这个点再介绍一下舵机驱动以及它转向的角度控制,如何计算得到,这里将一一讲解,希望能帮到你,同时希望与大家一起交流探讨,求点赞哈哈!!!这里我还是用STM32f1控制,好了,直奔主题。

这里主讲180°舵机控制角度,360°舵机只能控制速度,这里不细讲!

一、舵机的“自白”

我(舵机)是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。

那么问题来了?我们用舵机来干嘛呢,当然是控制方向了,如今,基本上飞机或者智能车又或是机器人等等都会用到舵机这个东西,所以说,认识舵机,并且运用舵机就成为我们必不可少的知识学习了,下面附图:

这里我用的是S3003舵机,其他类型的舵机应该也是大同小异。 

其中,有三条线,一条接电源(5V即可),一条接地,最后一条接控制(即单片机输出的PWM控制),下面会给上具体实现代码,总的来说跟上一讲区别不大,主要就是PWM周期输出控制,利用 TIM_SetComparex()  函数来设置占空比实现,但是多出的是计算问题,因为舵机有对应角度的时间计算,下面具体讲解:

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度为例,的其控制关系是这样的:

   0.5ms--------------0度;

   1.0ms------------45度;

   1.5ms------------90度;

   2.0ms-----------135度;

   2.5ms-----------180度;

基本上,我们学生党所需要的舵机的控制角度对应就是上述关系了,至于360度舵机这里简单提一下,主要是我这个舵机做不到(哈哈哈,这舵机180°的)

这里讲一下360°舵机的 

   0.5ms--------------0度;正向持续转(最大速度)

   1.5ms------------90度;停止转动,速度无

   2.5ms-----------180度;逆向持续转(最大速度)

调整PWM周期即可改变转动速度和方向。 

言归正传,到了这里基本上对控制舵机角度其实有了一定概念了,下面就直接附上代码部分了

二、代码部分 #include "sys.h" #include "duoji.h" void duoji_Pwm_Init() { GPIO_InitTypeDef GPIO_InitTypeStruce; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStruce; TIM_OCInitTypeDef TIM_OCInitTypeStruce; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); GPIO_InitTypeStruce.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitTypeStruce.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//这里是我之前的代码,主要是控制到4个舵机,这里大家只用一个输出口即可 GPIO_InitTypeStruce.GPIO_Speed=GPIO_Speed_50MHz; TIM_TimeBaseInitTypeStruce.TIM_Period=1999;//这里是自动重装值设置 TIM_TimeBaseInitTypeStruce.TIM_Prescaler=719;//这里是预分频系数 TIM_TimeBaseInitTypeStruce.TIM_ClockDivision=0; TIM_TimeBaseInitTypeStruce.TIM_CounterMode=TIM_CounterMode_Up; TIM_OCInitTypeStruce.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitTypeStruce.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitTypeStruce.TIM_OCPolarity=TIM_OCPolarity_High; GPIO_Init(GPIOB,&GPIO_InitTypeStruce); TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitTypeStruce); TIM_OC1Init(TIM4,&TIM_OCInitTypeStruce); //TIM_OC2Init(TIM4,&TIM_OCInitTypeStruce);//这些是TIM4其他通道初始化 //TIM_OC3Init(TIM4,&TIM_OCInitTypeStruce); //TIM_OC4Init(TIM4,&TIM_OCInitTypeStruce); TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); //TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable); //TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); //TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_Cmd(TIM4,ENABLE); }

主函数部分

#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include "duoji.h" int main() { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); // LED_Init(); // KEY_Init(); // duoji_Pwm_Init(); while(1) { LED0 = !LED0; TIM_SetCompare1(TIM4,50);//这里设置占空比改变角度,用TIM4定时器,可以自己更换 TIM_SetCompare2(TIM4,50); delay_ms(5000); delay_ms(5000); TIM_SetCompare1(TIM4,250); TIM_SetCompare2(TIM4,250); delay_ms(5000); delay_ms(5000); } }

这里的代码是其他地方用的,拿来简单修改一下而已,基本上就是这样了。

三、如何计算得到该要控制的角度

这里直接上纸描述,字丑谅解哈哈哈

 其中的arr和psc可以自己设置,再计算出相应角度的占空比值即可。大家可以自己调试一番,定会有所收获。

有什么问题欢迎随时评论指正,有其他问题也欢迎一起探讨交流!哈哈哈。

如果觉得写得还入眼,给个赞可还行,感谢感谢!

赠人点赞,手有余香哈哈哈

题外话:

挺喜欢彭于晏说的一句话:“我就是没有才华,所以才用命去拼!”

学习32之路固然辛苦,但要是坚持下来了,那不是很酷?哈哈哈



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭