MG90S 舵机180°角度驱动

这篇具有很好参考价值的文章主要介绍了MG90S 舵机180°角度驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MG90S简介

  1. 舵机
    是一种角度伺服电机,一般是由齿轮组、电位器、舵机控制电路、直流电机构成。由发送控制信号来控制输出轴的位置。
  2. 数字舵机与模拟舵机的区别:
    MG90S是一款常用的数字舵机,还有一款常用的模拟电机是MG90。
    ①数字舵机只需发送1次PWM信号就能转动到某个角度。
    模拟舵机是需要多次发送PWM信号才能够保持在规定的位置上。
    ②模拟舵机存在“无反应区”,对于细微的动作,反应非常迟钝,或者没有动作。
    数字舵机的“无反应区”更小,反应速度更快,加速和减速时也更快、更柔和。
    (原因是数字舵机的控制电路比模拟舵机的多了微处理器和晶振)
  3. 使用参数:
    舵机控制一般需要20ms左右的时基脉冲,高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分。总间隔为2ms。(此数据是0-180°的舵机)
0.5ms
1ms 45°
1.5ms 90°
2ms 135 °
2.5ms 180°

需求分析

  1. 需求:
    舵机通过PWM波型来控制,我们想要的是给舵机一个角度,让它自己转换成占空比。
  2. 实现:
    如下图所示:脉冲周期是20ms,高电平部分是2.5ms,表示180°。
    上文已提到(0°到180°)对应着(0.5ms-2.5ms)。
    假设角度为A,则A角度所占时间的比例为:(A/180)×(2.5-0.5),再加上0°初始时间,A角度所占的时间为0.5+(A/180) ×(2.5-0.5)时间基数是20ms,那么占空比为[0.5+(A/180) ×(2.5-0.5)]/20。
    上面计算的占空比,乘以20ms内总的定时器的计数次数,得到捕获比较寄存器(TIM_Pulse)的脉冲值,也就是A角度所占的定时器计数次数:[0.5+(A/180) ×(2.5-0.5)]/20×10000。10000是本设计设定的计数器的计数次数(详情见下文)。
  3. 分频系数和计数器设置:
    此设计使用的是72M的单片机,分频系数设为(144-1),72000000Hz/144=500000Hz,频率为500K,周期为1/500000=2us。计数次数为(10000-1),也就是10000次,2us×10000=20ms。也就是定时器的周期是20ms。
  4. 误差计算:
    当然定时器周期20ms,还有很多种设法。设计时,计数周期应该尽可能的大,这样计错一次数对舵机角度的影响越小(注意计数周期最大存在上限)。
    0-180°是0.5-2.5ms,量程是2ms,1度约为11.11us。计数器计数一次是2us, 2/11.11约为0.18度。也就是说计数器计数一次,约为0.18°。如果计数器计错一次,误差0.18°。所以本设计的误差0.18°,这对于一般的设计来说完全足够。
    mg90s,单片机,stm32,嵌入式硬件

代码实现

#include "SG90.h"

/*定时器1初始化*/
void TIM1_PWM_Init(u16 arr,u16 psc)
{  
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;						//TimeBase初始化结构体
	TIM_OCInitTypeDef  TIM_OCInitStructure;									//Time输出比较初始化结构体
	
	//使能TIM1时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);			//使能Time1时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  		//使能GPIO外设时钟
	
	//设置引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 								
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  					//复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure); 
	TIM_DeInit(TIM1);	
	
	//设置TIM1的ARR和PSC
	TIM_TimeBaseStructure.TIM_Period = arr; 								//自动重装载寄存器周期的值
	TIM_TimeBaseStructure.TIM_Prescaler =psc; 								//预分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 		//设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;		//向上计数模式
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); 					//初始化TIMx的时间基数单位
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 				//选择定时器比较输出模式:TIM脉冲宽度调制模式2
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 	//输出极性:TIM输出比较极性高
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//比较输出使能
	TIM_OCInitStructure.TIM_Pulse = 750;										//初始计数值设为750,以防1度以内抖动

	TIM_OC2Init(TIM1, &TIM_OCInitStructure);  						//根据TIM_OCInitStruct中指定的参数初始化外设TIMx
	
	TIM_Cmd(TIM1, ENABLE);  										//使能TIM1
	TIM_CtrlPWMOutputs(TIM1,ENABLE);								//TIM外设的主输出开关 参数2:TIM外设主输出的新状态
	TIM_OC2PreloadConfig(TIM1,ENABLE);  							//在CCR1上启用或禁用TIMx外设预加载寄存器	 
	TIM_ARRPreloadConfig(TIM1, ENABLE); 							//在ARR上启用或禁用TIMx外设预加载寄存器
}

/*
	舵机角度控制
	传入参数:角度
*/
void SERVO_Angle_Control(uint8_t Angle)
{
	uint16_t temp=0;
	
	temp = Angle*50/9 + 250;		//(0.5+(A/180)*(2.5-0.5))/20*10000
	TIM_SetCompare2(TIM1, temp);	//TIM1的通道2,Compare2给了捕获/比较寄存器一个捕获值
}

#include "stm32f10x.h"   	// Device header
#include "SG90.h"
#include "Delay.h"

uint8_t Anglecount=0;		//定义角度初始值

int main(void)
{
	TIM1_PWM_Init(10000-1,144-1);	
	SERVO_Angle_Control(0);			//校正舵机

	while(1)
	{
		int i=0;
		SERVO_Angle_Control(0);
		delay_ms(1000);
		for(i=0;i<90;i++)
		{
			SERVO_Angle_Control(i);
		}
		SERVO_Angle_Control(90);
		delay_ms(1000);
	}
}

文章来源地址https://www.toymoban.com/news/detail-650313.html

到了这里,关于MG90S 舵机180°角度驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MG996R舵机介绍

    舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。 舵机主要是由外壳、电路板、驱动马达、减速器与位置检测元件所构成。其工作原理是由接收机发出讯号

    2023年04月08日
    浏览(25)
  • MG996R 360°舵机的使用

    MG996R的介绍 360°的舵机不能控制角度,只能控制转动方向和速度,一般正反转都有五个速度。其与直流电机类似,区别在于转速不能连续可调但更加稳定。 接线方法 : 棕色 :GND,与单片机共地 红色 :VCC(4.8V—7.2V),除测试不建议直接取单片机5V 黄色 :PWM(脉冲方波)输入

    2024年02月13日
    浏览(29)
  • MSP432自主开发笔记4:DS3115舵机的0~180全角度驱动

    芯片使用:MSP432P401R. 今日学习一款全角度15KG大扭力舵机的驱动,最近电赛学习任务紧,更新一篇比较水的文章: 文章提供原理解释,全部代码,整体工程: 目录 舵机驱动原理: 这是舵机DS3115MG: 全角度反馈编程设计: 初始化定时器TA3: 设计转角函数: 整体测试工程下载:

    2024年02月15日
    浏览(25)
  • 【雕爷学编程】Arduino动手做(167)---MG996R金属齿轮舵机2

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下

    2024年02月16日
    浏览(33)
  • 单片机——SG90舵机工作原理

    前言: 舵机控制的另一个专业名字叫伺服控制。 经过百度,伺服”—词源于希腊语“奴隶”的意思。人们想把“伺服机构”当个得心应手的驯服工具,服从控制信号的要求而动作。在讯号来到之前,转子静止不动;讯号来到之后,转子立即转动;当讯号消失,转子能即时自

    2023年04月08日
    浏览(28)
  • STM32F103RCT6驱动SG90舵机-完成正反转角度控制

    SG90是一种微型舵机,也被称为伺服电机。它是一种小型、低成本的直流电机,通常用于模型和机器人控制等应用中。SG90舵机可以通过电子信号来控制其精确的位置和速度。它具有体积小、重量轻、响应快等特点,因此在各种小型机械设备上得到了广泛应用。 SG90舵机通常用于

    2024年02月03日
    浏览(43)
  • 【Proteus仿真】【Arduino单片机】SG90舵机控制

    本项目使用Proteus8仿真Arduino单片机控制器,使用SG90舵机等。 主要功能: 系统运行后,舵机开始运行。 B站演示视频:https://space.bilibili.com/444388619 视频地址:https://space.bilibili.com/444388619/video 专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,

    2024年02月07日
    浏览(33)
  • C51单片机定时器2实现SG90舵机控制

    谈起舵机最初的了解应用于航模,偶然的机会在网上看到有牛人使用多个舵机做人形机器人的关节,感觉这小东西很有趣,蒙发了买来学习学习的想法,这已经是多年前的事了,后来由于某些原因,这个想法直到今年才落地。小东西到手后,把玩了解后,本人把学习过程记录

    2023年04月24日
    浏览(41)
  • 【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答

    我们要知道,SG90舵机接收的PWM信号的参数:f=50Hz,T=1/f,所以周期为20ms。 当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。 换句话说,我们要用单片机产生一个 周期(20ms) 的PWM波,然后获得对应这些时长(分别是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高电

    2024年02月13日
    浏览(40)
  • TB6612驱动和MG513P3012V电机

    用的是stm32f103c9t6 驱动的意义:实现将3.3v的pwm转换成更高电压比如12v的pwm,同时还可以控制pwm的极性是+12还是-12  vcc:原先的pwm电平 vm:转换后的pwm电平 pwma:输入pwm ain2,ain1:  stby:1正常工作,0待机 ao1-a02: 输出一路pwm连到电机线上,这个pwm的电压就是vm端所接的电压,比如这里就

    2024年02月02日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包