Arduino三轮全向小车(一):编码马达

2023-11-22 05:40

本文主要是介绍Arduino三轮全向小车(一):编码马达,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Arduino三轮全向小车(一):编码马达

​  近期准备做一个三轮全向平台,用来搞各种事情。于是先用Solidworks建了一个模型,运动算例搞了一番,还是不知所以然,干脆直接开始动手,变搞边学习。然而查阅网上各种资料高深莫测,看得我云里雾里,初学很是艰辛。所以就写几篇博客记录一下自己的学习过程。作为菜鸡,第一次发博,还请各位大佬多指正。

马达的选用

​  如果是要做小车的,选用什么样的马达是很重要的,需要考虑的一个方面。之前用Arduino做小车一般直接用减速直流电机,就是那种小黄马达。说实在的效果不是很好,所谓便宜没好货,拿去比赛各种问题接踵而至,但若不考虑其控制的精确性,只是用来实现移动,还算可以接受。

​  其实这算是一个开环控制系统,信号单向流通,由驱动板传向马达,马达没有反馈,因此其控制精度不会很高。就算它转速的控制很精准,但如果电池供电忽大忽小,或是地面阻力时强时弱,这些外界输入依旧会给小车的运动带来极大的不确定性。这种方案在要求稍微高一点的情况下,就是应当舍弃的。

​  为了解决开环控制的问题,人们自然而然地就想到了在马达上加一个传感器,让它可以返回它的各种运动参数。而我们一般用编码器来做这样的传感器。

编码器把角位移或直线位移转换成电信号

  这是百度对编码器的解释,简单来说,编码器可以把马达的转速转变为电压值传回,达到了闭环控制的目的。而装了编码器的电机,也就升级成为了编码电机。

  一般还有另一种选择,就是步进电机,步进电机也是开环控制电机,但它和我们平常见到的减速电机不同之处在于,它通过电磁学原理,能够精准地转过一个角度,实际上,它内部也有控制电路,会把当前的转角与目标转角进行比较,最终实现精确的控制,从原理上看,更像是舵机。

编码马达原理介绍

  讲了以上三种电机,到底该用哪一种呢?综合控制精度和实现难度来考虑,不论是独轮车,还是二轮车,还是三轮车,或是四轮车,一般我们都会选用编码马达。要会用编码马达,一定要学习一下编码器原理。下面就来做详细介绍:

角位移测量

如图所示

这张图分别展示了码盘的结构

  把码盘上面那个器件想象成一个光电传感器,能够侦测到每一道狭缝经过,这样返回的波形就是一个周期性方波,如下图。这样的话,数一数共有多少周期,就能计算出转动过的角度。而电机轴转过一圈有多少周期就称为编码器的分辨率。显然,分辨率越高,编码器测出的转角就越精准。当然不能一味地通过刻槽来提高分辨率,为了达到目的,一般将码盘安装在减速电机未经减速的一端,甚至理论上可以通过齿轮组使其转速更快。这样一来,轮子转过一圈,码盘就转了好几圈。比如一个减速比30的减速电机,其分辨率就增加到30倍。
  另外还有一种办法,能够注意到下面图中有两个方波,也就是相当于有两个光电传感器,或者是有两圈槽,测出的波形分别称为A B相,其相位差90度。若A相上行下行各计一次,B相同样,这样分辨率就又提高到四倍,效果立竿见影。

速度测量

  速度测量原理其实就很明了了,只要在测角位移的同时记录时间,位移除以时间即为速度。这里的难点在于用Arduino实现涉及到中断函数和计时函数,这会在下一篇详细进行介绍。

转动方向测量

  对于双相编码器,其目的主要并不是为了提高分辨率,而是为了测出电机转动方向。
在这里插入图片描述
原理是这样的:比如图中所示的情况,我们关注A相,当A相上行时可以看到B相是高电平,我们定义这时电机为正转,反转时,它们的相位差是原来的相反数,也就是负九十度。这是,A相上行时B相为低电平,这样即可简单地判断出电机转动方向。

总结

  关于马达就这么多了吧,编码马达一直在用,但直到最近才搞得比较清楚,本人也不是机械专业的,肯定有很多认识是存在偏颇的。若有不足,欢迎指正。
  下一篇会有Arduino控制编码马达的代码实现。

这篇关于Arduino三轮全向小车(一):编码马达的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407918

相关文章

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {

基于微信小程序与嵌入式系统的智能小车开发(详细流程)

一、项目概述 本项目旨在开发一款智能小车,结合微信小程序与嵌入式系统,提供实时图像处理与控制功能。用户可以通过微信小程序远程操控小车,并实时接收摄像头采集的图像。该项目解决了传统遥控小车在图像反馈和控制延迟方面的问题,提升了小车的智能化水平,适用于教育、科研和娱乐等多个领域。 二、系统架构 1. 系统架构设计 本项目的系统架构主要分为以下几个部分: 微信小程序:负责用户界面、控制指令的

Python字符编码及应用

字符集概念 字符集就是一套文字符号及其编码的描述。从第一个计算机字符集ASCII开始,为了处理不同的文字,发明过几百种字符集,例如ASCII、USC、GBK、BIG5等,这些不同的字符集从收录到编码都各不相同。在编程中出现比较严重的问题是字符乱码。 几个概念 位:计算机的最小单位二进制中的一位,用二进制的0,1表示。 字节:八位组成一个字节。(位与字节有对应关系) 字符:我们肉眼可见的文字与符号。

在Eclipse环境下修改Tomcat编码的问题

问题: 由于BMS需要设置UTF-8编码,要不就会出现中文乱码问题; 一、项目保持UTF-8格式; 二、由于可能会多次移除项目、加载项目,不想每次都要修改tmp0\conf 原因: 如果在eclipse中配置了tomcat后,其实,tomcat所用的所有tomcat配置文件,都不是catalina_home/config下面的xml文件,而是在eclipse所创建的Serve

在Unity环境中使用UTF-8编码

为什么要讨论这个问题         为了避免乱码和更好的跨平台         我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快