电机应用-舵机

目录

舵机

分类

结构

工作原理

控制原理

参数

舵机基本控制实验(MG996R舵机)

MG996R舵机规格

硬件电路

TIM4配置

测试环节


舵机

分类

按照舵机的控制电路分类:模拟舵机数字舵机

模拟舵机和数字舵机的机械结构是完全相同的。

模拟舵机的控制电路为纯模拟电路,需要一直发送目标信号,才能转到指定的位置,响应速度较慢,无反应区较大

数字舵机内部控制电路则加上了微控制器,只需要发送一次目标信号,即可到达指定位置,响应速度比模拟舵机更快,无反应区更小

按照使用对象不同分类:航模舵机车模舵机船模舵机机器人舵机

航模舵机一般要求速度快、精度高

车模舵机、船模舵机一般要求具有大扭矩和防水性好

按照内部机械材质分类:塑料齿舵机金属齿舵机

塑料齿舵机内部的传动齿轮是塑料的,重量轻价格便宜,但是扭矩一般较小无法做大;

金属齿舵机的扭矩更大且舵机更耐用,但成本较高

按照外部接口和舵机的控制方式分类:PWM舵机串行总线舵机

结构

舵机主要组成:外壳、舵盘、直流电机、减速齿轮组、角度传感器、控制驱动电路和接口线缆等。

角度传感器负责舵机的位置反馈,直接装在舵机的主输出轴上,将轴旋转后产生的角度变化变成电压信号发回控制电路。

控制驱动电路用来接收外部接口传来的信号、接收角度传感器反馈的电压值、驱动直流电机旋转。

减速齿轮组用来降低直流电机的转速和放大扭矩。

常见的廉价舵机通常采用小型的直流有刷电机和塑料材质减速齿轮组,传感器一般使用电位器返回模拟电压。而稍贵的会使用金属齿轮组,高端的舵机内部甚至会采用无刷电机和磁电编码器。

工作原理

模拟舵机和数字舵机内部电路不同,所以原理上稍有不同。

模拟舵机内部的控制驱动电路板从外界接收控制信号,经过处理后变为一个直流偏置电压(在控制板内部有一个基准电压,这个基准电压由电位器产生并反馈到控制板),将外界获得的直流偏置电压与电位器的基准电压进行比较获得电压差,并输出到电机驱动芯片驱动电机。(电压差的正负决定了电机的正反转,电压差的大小决定了旋转的角度,当电压差为0时,电机停止转动)

舵机内部是闭环控制的,所以这一类电机实际上是一种位置(角度)伺服的简化版伺服电机,将工业伺服电机的三闭环控制简化成了只有一个位置闭环。舵机本质上属于伺服电机,英文叫Servo或RC Servo。

控制原理

舵机三根线:正极线、负极线、信号线。

舵机的控制通常采用PWM信号,例如需要一个周期为20ms的脉冲宽度调制(PWM),脉冲宽度部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分,总间隔为2ms。当脉冲宽度为1.5ms时,舵机旋转至中间角度;大于1.5ms时舵机旋转角度增大;小于1.5ms时舵机旋转角度减小。舵机分90°、180°、270°、360°。以180°舵机为例看下图。

图中脉冲宽度和舵机旋转角度为线性关系,其它舵机控制脉冲也类似。

参数

舵机旋转速度单位:sec/60°,即舵机旋转60°需要的时间。如果控制脉冲变化宽度大,变化速度快,舵机就有可能在一次脉冲的变化过程中还没有转到目标角度时,脉冲就再次发生了变化。舵机的旋转速度一般为0.16sec/60°、0.12sec/60°等。舵机的选择速度还与工作电压有关,在允许的电压范围内,电压越大速度越快,电压越小速度越慢。

舵机扭矩单位:KG*CM。可以理解为在舵盘上距离舵机轴中心水平距离1cm处,舵机能够带动的物体重量。

通常说的55g舵机、9g舵机等,55g和9g指的是舵机本身的重量。

舵机基本控制实验(MG996R舵机)

MG996R舵机规格

尺寸:40.5*20*41mm

重量:55g

速度:4.8V@0.12±0.01sec/60°--6.0V@0.11±0.01sec/60°

扭力:4.8V@11kg*cm--6.0V@13kg*cm

电压:4.8V~6V

空载工作电流:220±20mA

堵转工作电流:2000±30mA

响应脉宽时间≤5usec

角度偏差:回中差≤1°,左右各45°,误差≤3°

齿轮:5级金属齿轮组

连接线长度:300mm

接口规格:JR/FP通用

硬件电路

电机开发板预留了两个舵机接口,实验只使用其中一个,舵机由TIM4_CH1控制。

TIM4配置

TIM_HandleTypeDef htim4;/* TIM4 init function */
void MX_TIM4_Init(void)
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};TIM_OC_InitTypeDef sConfigOC = {0};htim4.Instance 					= TIM4;htim4.Init.Prescaler 			= 1679;htim4.Init.CounterMode 			= TIM_COUNTERMODE_UP;htim4.Init.Period 				= 999;htim4.Init.ClockDivision 		= TIM_CLOCKDIVISION_DIV1;htim4.Init.AutoReloadPreload 	= TIM_AUTORELOAD_PRELOAD_ENABLE;if (HAL_TIM_Base_Init(&htim4) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK){Error_Handler();}if (HAL_TIM_PWM_Init(&htim4) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger 	= TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode 		= TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK){Error_Handler();}sConfigOC.OCMode 		= TIM_OCMODE_PWM2;sConfigOC.Pulse 		= 25;sConfigOC.OCPolarity 	= TIM_OCPOLARITY_HIGH;sConfigOC.OCFastMode 	= TIM_OCFAST_DISABLE;if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK){Error_Handler();}HAL_TIM_MspPostInit(&htim4);
}void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *tim_baseHandle)
{if (tim_baseHandle->Instance == TIM4){__HAL_RCC_TIM4_CLK_ENABLE();}
}void HAL_TIM_MspPostInit(TIM_HandleTypeDef *timHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if (timHandle->Instance == TIM4){__HAL_RCC_GPIOD_CLK_ENABLE();/**TIM4 GPIO ConfigurationPD12     ------> TIM4_CH1*/GPIO_InitStruct.Pin 		= GPIO_PIN_12;GPIO_InitStruct.Mode 		= GPIO_MODE_AF_PP;GPIO_InitStruct.Pull 		= GPIO_NOPULL;GPIO_InitStruct.Speed 		= GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate 	= GPIO_AF2_TIM4;HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);}
}void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *tim_baseHandle)
{if (tim_baseHandle->Instance == TIM4){__HAL_RCC_TIM4_CLK_DISABLE();}
}

测试环节

/*** @brief  设置舵机占空比* @param  angle: 占空比,(0.5/20.0*PWM_PERIOD_COUNT 到 2.5/20.0*PWM_PERIOD_COUNT)* @retval 无*/
void set_steering_gear_dutyfactor(uint16_t dutyfactor)
{
#if 1{/* 对超过范围的占空比进行边界处理 */dutyfactor = 0.5 / 20.0 * 1000 > dutyfactor ? 0.5 / 20.0 * 1000 : dutyfactor;dutyfactor = 2.5 / 20.0 * 1000 < dutyfactor ? 2.5 / 20.0 * 1000 : dutyfactor;}
#endif__HAL_TIM_SET_COMPARE(&TIM_TimeBaseStructure, TIM_CHANNEL_1, dutyfactor);
}/*** @brief  设置舵机角度* @param  angle: 角度,(0 到 180(舵机为0°-180°))* @retval 无*/
void set_steering_gear_angle(uint16_t angle_temp)
{angle_temp = (0.5 + angle_temp / 180.0 * (2.5 - 0.5)) / 20.0 * 1000;    // 计算角度对应的占空比set_steering_gear_dutyfactor(angle_temp);    							// 设置占空比
}__IO uint16_t ChannelPulse = 0.5 / 20.0 * 1000;void test(void)
{初始化/*开始输出PWM*/HAL_TIM_PWM_Start(&htim4, PWM_CHANNEL_1);while(1){/* 处理数据 */if (Key_Scan(KEY1_GPIO_PORT, KEY1_PIN) == KEY_ON){ChannelPulse -= 10;    							// 减少占空比// 检查占空比的合法性ChannelPulse = 0.5 / 20.0 * 1000 > ChannelPulse ? 0.5 / 20.0 * 1000 : ChannelPulse; 	set_steering_gear_dutyfactor(ChannelPulse);    	// 设置占空比}/* 处理数据 */if (Key_Scan(KEY2_GPIO_PORT, KEY2_PIN) == KEY_ON){ChannelPulse += 10;    							// 增加占空比// 检查占空比的合法性ChannelPulse = 2.5 / 20.0 * 1000 < ChannelPulse ? 2.5 / 20.0 * 1000 : ChannelPulse; 	set_steering_gear_dutyfactor(ChannelPulse);    	// 设置占空比}	}
}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{// 串口可接收角度,存到变量angle_tempif (angle_temp >= 0 && angle_temp <= 180){printf("角度: %d\r\n", angle_temp);ChannelPulse = (0.5 + angle_temp / 180.0 * (2.5 - 0.5)) / 20.0 * 1000;    // 更新按钮控制的占空比set_steering_gear_angle(angle_temp);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/184504.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm的校园快递物流管理系统(java+jsp+ssm+javabean+mysql+tomcat)

博主24h在线&#xff0c;想要源码文档部署视频直接私聊&#xff0c;9.9拿走&#xff01; 基于javawebmysql的ssm校园快递物流管理系统(javajspssmjavabeanmysqltomcat) 运行环境&#xff1a; Java≥8、MySQL≥5.7、Tomcat≥8 开发工具&#xff1a; eclipse/idea/myeclipse/s…

【C++】STL 标准模板库 ① ( STL 简介 | STL 基本概念 | STL 主要内容 )

文章目录 一、STL 简介1、STL 概念2、STL 主要内容 二、STL 代码示例 一、STL 简介 1、STL 概念 C 语言 的 STL " 标准模板库 " 英文全称 " Standard Template Library " , STL 是一套强大的 C 库 , 其中包含了各种通用的 数据结构和算法 , 如 : 向量、列…

谷歌提出 AGI 完整路线图:目前 ChatGPT 只处于 AGI 的第一阶段

本心、输入输出、结果 文章目录 谷歌提出 AGI 完整路线图:目前 ChatGPT 只处于 AGI 的第一阶段前言谷歌 DeepMind 发布 AGI 分级框架发展 AGI 必须遵循6个基本原则什么是AGI图灵测试详解六大原则AGI 的五大发展过程阶段原文参考弘扬爱国精神谷歌提出 AGI 完整路线图:目前 Cha…

Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】

目录 Redis系列-四种部署方式-单机部署主从模式【7】redis-四种部署模式单机模式主从模式数据同步的方式全量数据同步增量数据同步 Redis哨兵模式总结缺点&#xff1a;哨兵模式应用sentinel.conf配置项 REF 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持…

VScode连接Xshell 并解决【过程试图写入的管道不存在】报错

一.下载vscode 国内镜像&#xff1a; https://vscode.cdn.azure.cn/stable/6c3e3dba23e8fadc360aed75ce363ba185c49794/VSCodeUserSetup-x64-1.81.1.exe二.打开vscode在扩展搜索SSH并安装 三.添加主机 按F1选择添加新的ssh主机 按格式输入后在左边会出现电视的图标 之后输入…

优先级队列(堆)的概念+模拟堆的实现

文章目录 优先级队列&#xff08;堆&#xff09;的概念模拟堆的实现一、概念1.优先级队列2.堆1.堆的性质2.堆的存储3.堆的创建3.1 向下调整3.2建堆的时间复杂度 O(N) 4.堆的插入4.1向上调整4.2向上调整建堆的时间复杂度&#xff1a;O(N * log N) 5.堆的删除 优先级队列&#xf…

前端使用firebase配置第三方登录介绍(谷歌登录,facebook登录等)

参考文档 点此处去 firebase 官网点此处去 web端的谷歌登录文档点此处去 facebook开发者官网链接 实现&#xff08;谷歌登录&#xff09; 首先注册一个账号登录firebase&#xff08;可以使用谷歌账号登录&#xff09;然后创建项目&#xff08;走默认配置就行了&#xff09; …

什么是超级托斯卡纳葡萄酒?

超级托斯卡纳葡萄酒通常被认为是在托斯卡纳用国际葡萄品种制成的葡萄酒&#xff0c;如赤霞珠、品丽珠或梅洛&#xff0c;而不是传统的托斯卡纳葡萄桑娇维塞。来自云仓酒庄品牌雷盛红酒分享这些葡萄酒可能包含一些桑娇维塞&#xff0c;但这通常不是混合中的主要葡萄。这些大胆的…

FMCW雷达论文速览 | TRS 2023, 基于FMCW雷达的多天线高精度测距算法及性能分析

注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 TRS 2023 | High Accuracy Multi-antenna Ranging Algorithm and Performance Analysis for FMCW Radar 论文原文:https://ieeexplore.ieee.org/document/10309162 Z. Xu, S. Qi and P. Zh…

制药企业如何提高员工的GMP合规意识

在上期的文章中&#xff0c;我们介绍了>>制药企业计算机化系统验证(CSV)的重要性&#xff0c;本期我们深入探讨制药企业如何培养员工形成GMP良好的合规意识。 良好的药品质量是保障患者安全和有效治疗的基石。为了确保药品的质量、安全性和一致性&#xff0c;制药企业必…

GaN HEMT 电容的分析建模,包括寄生元件

标题&#xff1a;Analytical Modeling of Capacitances for GaN HEMTs, Including Parasitic Components 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;14年&#xff09; 摘要&#xff1a;本文提出了一种基于表面势的终端电荷和电容模型&#xff0c;包…

Hbuiderx链接到夜神模拟器(DCloud数字天堂)

赞助 DCloud 即数字天堂&#xff08;北京&#xff09;网络技术有限公司是 W3C成员及 HTML5中国产业联盟 发起单位 Hbuiderx切换使用夜神模拟器自带的ADB.exe链接到夜神模拟器 同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意…

【React】04.MVC模式和MVVM模式

React是Web前端框架 1、目前市面上比较主流的前端框架 ReactAngular&#xff08;NG框架&#xff09;Vue 主流的思想&#xff1a; 不在直接去操作DOM&#xff0c;而是改为“数据驱动思想” 操作DOM思想&#xff1a; 操作DOM比较消耗性能[主要原因就是&#xff0c;可能会导…

Vue2+elementui项目导出el-table的数据为xlsx表格

1、安装3个插件 &#xff08;file-saver、 xlsx、script-loader&#xff09; npm install -S file-saver xlsxnpm install -D script-loader 2、在utils目录下新建一个 Export2Excel.js 脚本 &#xff08;我的路径在/utils/Export2Excel.js&#xff09; /* eslint-disable *…

在Docker中设置Redis的密码

目录 1&#xff0c;介绍2&#xff0c;实现“Docker Redis设置密码”的整体流程3&#xff0c;具体实现步骤4&#xff0c;结论 1&#xff0c;介绍 Docker是一个开源的应用容器引擎&#xff0c;可以自动化部署、扩展应用程序。它可以帮助开发人员将应用程序及其依赖项打包到一个可…

three.js点滴yan(整理后)

场景、相机和渲染器 Three.js整个系统主要包含场景Scene、相机Camera和WebGL渲染器WebGLRenderer三大块&#xff0c;其中场景又包含模型和光源。WebGL渲染器的主要作用就是把相机对应场景渲染出来&#xff0c;显示在网页Cnavas画布上。 Three.js源码 Three.js各个构造函数对应…

Redis 扩展 RedisBloom 插件,解决缓存击穿、穿透

文章目录 一、概述二、编译准备2.1 升级 make2.2 安装 Python3 三、编译 RedisBloom四、测试 RedisBloom五、应用场景5.1 缓存击穿5.2 缓存穿透5.3 原理总结 六、存在的问题 如果您对Redis的了解不够深入请关注本栏目&#xff0c;本栏目包括Redis安装&#xff0c;Redis配置文件…

于道 - 前端项目启动步骤参考

1. 安装 启动过程有9个步骤&#xff1a; 1.1 安装 Node JS , V18版本的 &#xff08;安装步骤省略&#xff09; 1.2 安装 npm install -g yarn &#xff0c;node JS里边好像自带npm &#xff0c;通过npm的命令安装 yarn 1.3 切换到项目中去安装&#xff0c;npm install &a…

Wsl2 Ubuntu在不安装Docker Desktop情况下使用Docker

目录 1. 前提条件 2.安装Distrod 3. 常见问题 3.1.docker compose 问题无法使用问题 3.1. docker-compose up报错 参考文档 1. 前提条件 win10 WSL2 Ubuntu(截止202308最新版本是20.04.xx) 有不少的博客都是建议直接安装docker desktop&#xff0c;这样无论在windows…

计算机基础知识45

JS的RegExp对象(正则) text: 正则校验数据 # T/F match: 匹配 # (3) [s, s, s] //定义 var reg1 new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; //正则校验数据 var res reg1.test(jason666); console.log(res…