STM32控制SG90舵机教程(180度和360度)

您所在的位置:网站首页 旋转的灯笼怎样才能出现反转 STM32控制SG90舵机教程(180度和360度)

STM32控制SG90舵机教程(180度和360度)

2024-07-16 04:22| 来源: 网络整理| 查看: 265

数字舵机主要由马达、减速齿轮、控制电路等组成,只需要发送一次PWM信号就能保持在规定的某个位置。

而模拟舵机是相同于传统的舵机,是需要多次发送PWM信号才能够保持在规定的位置上,实现对舵机的控制,按照规定的要求进行的速度进行转动。

数字舵机在反应速度方面与模拟舵机相比是由优势的。因为数字舵机是拥有微处理器。

下面我们介绍的SG90舵机就是模拟舵机。在这里插入图片描述 从下往上依次接 GND,+5V,PWM输出IO口(我选的是PC6) 在这里插入图片描述 我们选用定时器3的通道1的完全重映像输出。

控制原理及PWM配置 1)180度

模拟舵机的PWM频率为50HZ,对应的时基周期/PWM周期为20ms。我们的高电平脉宽是在0.5ms—2.5ms进行控制的。 在这里插入图片描述 PWM周期为20ms = (7200*200)/72000000=0.02 所以TIM_Period = 199 //自动重装载值 TIM_Prescaler = 7199 //预分频系数

占空比 = t / T 相关参数如下: t = 0.5ms——————-舵机会转动 0 ° t = 1.0ms——————-舵机会转动 45° t = 1.5ms——————-舵机会转动 90° t = 2.0ms——————-舵机会转动 135° t = 2.5ms——————-舵机会转动180°

比如说舵机旋转90度,对应高电平时间为1.5ms: 在这里插入图片描述 再附上我的参考代码:

#include timer.h void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);//使能 PC端口 时钟和 AFIO复用功能 时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PC6

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIOC.6

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE); //开启定时器3的部分重映射 改变定时器3的 输出通道 引脚 。比如:通道1的输出引脚为PC6 //初始化定时器3 TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载

TIM_TimeBaseStructure.TIM_Prescaler=psc; //预分频系数 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //没多大关系 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

//初始化 输出比较 参数 输出比较:通过比较来进行输出 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //pwm模式1:小于有效 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //通道输出极性 TIM3_CCER寄存器的CC2E位 0:低电平有效 1:高电平有效 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //通道1输出使能 TIM_OC1Init(TIM3,&TIM_OCInitStructure);//定时器3通道2输出的初始化 CNT小于比较值CCR 通道1输出低电平 //使能通道1 输出比较 预装载值 TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能定时器3 TIM_Cmd(TIM3,ENABLE);

}

#ifndef __TIMER_H #define __timer_h #include “sys.h”

void TIM3_PWM_Init(u16 arr,u16 psc);

#endif

#include “sys.h” #include “delay.h” #include “timer.h”

int main(void) { delay_init(); TIM3_PWM_Init(199,7199); while(1) { delay_ms(100); TIM_SetCompare1(TIM3, 195);//0度 delay_ms(100); TIM_SetCompare1(TIM3, 190);//45度 delay_ms(100); TIM_SetCompare1(TIM3, 185);//90度 delay_ms(100); TIM_SetCompare1(TIM3, 180);//135度 delay_ms(100); TIM_SetCompare1(TIM3, 175);//180度 delay_ms(100); } }

360度

360度舵机可以360度旋转,因此与180度舵机有相当大的区别,首先360度舵机不能够控制旋转角度,一般的舵机是给一个特定的PWM,舵机会转到相应的角度,而360度舵机是只能够控制方向和旋转转速,所以360度舵机给定一个PWM,会以特定的速度和方向转动。 所以有: 0.5ms----------------正向最大转速; 1.5ms----------------速度为0; 2.5ms----------------反向最大转速;

int main(void) { delay_init(); TIM3_PWM_Init(199,7199); while(1) { TIM_SetCompare1(TIM3,195);//正向最大转速 delay_ms(500); TIM_SetCompare1(TIM3,185);//速度为0 delay_ms(500); TIM_SetCompare1(TIM3,175);//反向最大转速 delay_ms(500); } }

到此结束


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3