MG90S 舵机180°角度驱动
MG90S简介
- 舵机:
是一种角度伺服电机,一般是由齿轮组、电位器、舵机控制电路、直流电机构成。由发送控制信号来控制输出轴的位置。 - 数字舵机与模拟舵机的区别:
MG90S是一款常用的数字舵机,还有一款常用的模拟电机是MG90。
①数字舵机只需发送1次PWM信号就能转动到某个角度。
模拟舵机是需要多次发送PWM信号才能够保持在规定的位置上。
②模拟舵机存在“无反应区”,对于细微的动作,反应非常迟钝,或者没有动作。
数字舵机的“无反应区”更小,反应速度更快,加速和减速时也更快、更柔和。
(原因是数字舵机的控制电路比模拟舵机的多了微处理器和晶振) - 使用参数:
舵机控制一般需要20ms左右的时基脉冲,高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分。总间隔为2ms。(此数据是0-180°的舵机)
0.5ms | 0° |
---|---|
1ms | 45° |
1.5ms | 90° |
2ms | 135 ° |
2.5ms | 180° |
需求分析
- 需求:
舵机通过PWM波型来控制,我们想要的是给舵机一个角度,让它自己转换成占空比。 - 实现:
如下图所示:脉冲周期是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是本设计设定的计数器的计数次数(详情见下文)。 - 分频系数和计数器设置:
此设计使用的是72M的单片机,分频系数设为(144-1),72000000Hz/144=500000Hz,频率为500K,周期为1/500000=2us。计数次数为(10000-1),也就是10000次,2us×10000=20ms。也就是定时器的周期是20ms。 - 误差计算:
当然定时器周期20ms,还有很多种设法。设计时,计数周期应该尽可能的大,这样计错一次数对舵机角度的影响越小(注意计数周期最大存在上限)。
0-180°是0.5-2.5ms,量程是2ms,1度约为11.11us。计数器计数一次是2us, 2/11.11约为0.18度。也就是说计数器计数一次,约为0.18°。如果计数器计错一次,误差0.18°。所以本设计的误差0.18°,这对于一般的设计来说完全足够。
代码实现
#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和PSCTIM_TimeBaseStructure.TIM_Period = arr; //自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始化TIMx的时间基数单位TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器比较输出模式:TIM脉冲宽度调制模式2TIM_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中指定的参数初始化外设TIMxTIM_Cmd(TIM1, ENABLE); //使能TIM1TIM_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*10000TIM_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);}
}
MG90S 舵机180°角度驱动相关推荐
- STM32CubeMX(09)MG90S舵机驱动实验
文章目录 前言 一.舵机是什么? 二.STM32CubeMX配置 2.1时钟树配置 2.2定时器配置 2.3生成代码 三.代码编写 四.测试结果 注意: 总结 前言 今天我们来学习使用一下舵机,并用S ...
- MG996R舵机180度与360度驱动,ULN2003A步进电机驱动,触控开关控制
产品类型:MG996R舵机 产品扭矩:9kg/cm(4.8V),11kg/cm(6V) 产品速度:0.19秒/60°(4.8V),0.18秒/60°(6V) #0.19/60=0.0032s/度 ...
- MG90S舵机-基础角度控制
MG90S舵机 1. 简介 舵机即可以通过输入指定占空比的PWM实现输出固定角度偏转的电机,通过调节输入的PWM波的占空比可以实现舵机不同角度的偏转 不同型号的舵机可实现偏转的角度不同,比如此次使用到 ...
- stc8a控制MG90S舵机
1.实验目的: 利用硬件PWM进行控制舵机: 硬件PWM使用P6端口: 2.实验设备: 单片机开发板stc8a8k最小核心板: 7pin的OLED MG90S舵机: 3.原理: 舵机的控制原理, 舵机 ...
- 51单片机控制SG90舵机、MG90S舵机
舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化.也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应 ...
- STM32F407学习笔记——MG90S舵机模块(基本控制)
STM32F407学习笔记--MG90S舵机模块(基本控制) 一.基本原理: 通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms). 旋转 ...
- pwm控制舵机转动角度程序_01 舵机旋转控制基础
从今天开始,我们将学习Python代码控制舵机专题.第一节课我们将学习舵机的旋转控制基础,探究180度舵机的图形化编程控制. 一.舵机 1.舵机简介 舵机也叫伺服电机,最早用于船舶上实现其转向功能,由 ...
- pwm控制舵机转动角度程序_舵机的内部结构及工作原理
一.舵机实物图 舵机是机器人旋转关节中的常用部件,尤其是小型机器人.其实物就像下面这张图,相信大家都不会陌生.大家一定见过春晚上哪个跳舞的小机器人,其全身各关节都是有舵机组成.我们常见到的舵机就是这个 ...
- 舵机任意角度程序_【舵机初动】基于Mind+ Ardunio入门教程10
点击上方"蘑菇云创造"可以关注我们哦 本项目要接触到舵机.舵机是一种电机,它使用一个反馈系统来控制电机的位置.可以很好掌握电机角度.大多数舵机是可以最大旋转180°的.也有一些能转 ...
最新文章
- 腾讯林衍凯:图神经网络,考虑「拓扑信息」会怎样?
- Uva 11396 爪分解
- Vue之通过连接数据库的接口获取列表实现添加删除功能
- JAVA类的继承、覆写和final关键字
- lombok有参构造注解_Java高效开发工具: Lombok
- 程序员面试 IT 公司,这些细节一定要注意!
- SDL附着window窗口的方法
- p12解析流程_iOS证书及描述文件制作流程详解
- mysql动态函数库_mysql自定义函数与动态查询
- .xls和.xlsx 有什么区别?
- Qt-添加软件图标(logo)
- matlab遗传算法配送路径,基于遗传算法的生鲜配送的路径优化问题
- 也许你会用到的58个硬件面试题!
- 大学物理(英文版)笔记 chapter1 Measurement
- 人生理财规划必备的“四笔钱”,你知道吗?
- CUTEFTP 权限的修改 之CuteFTP问题 修复CUTEFTP unable to transfer
- 8.1 子模块分析之IDMAC
- 基于Android平台的ffmpeg编译
- jmeter 阶梯式加压
- tcmalloc浅析