51单片机电机控制模拟(6)PWM简介

脉冲宽度调制(Pulse width Modulation或 PWM) 是当今控制系统中使用的强大技术之一。它广泛应用于速度控制、功率控制、测量和通信。本文将带您了解脉冲宽度调制的基础知识及其在微控制器上的实现。PWM 的基本原理

脉冲宽度调制基本上是一个具有变化的高低时间的方波。下图显示了一个基本的 PWM 信号。

继续阅读

运动控制(十)步进电机控制

让我们来看看如何编写代码来控制一个步进电机。

介绍一个很好的单片机模拟网站:https://wokwi.com/

首先来看看如何使用Arduino直接驱动步进电机,注意这种方法只能用来驱动很小的步进电机,因为Arduino板子输出的电流大小有限。

现在Wokwi中新建一个Arduino项目,添加一个步进电机,然后建立如下连线:

继续阅读

运动控制(九)步进电机理论

之前我们学到了一点关于直流电机的知识。我们了解到直流电机接收电压作为输入,并产生速度作为输出。它通过一个被称为电机方程的公式来实现这种转换。电机方程告诉我们,电机的速度与电压输入成正比。因此,如果我们试图控制关节的速度,直流电机非常有用。但是,如果我们试图控制位置,直流电机就不太有用。

继续阅读

运动控制(八)PID:时间步长响应

是时候用一个叫做PID的算法来完成我们对运动控制的研究了。实际上,我们已经开始了对这个控制算法的研究,因为PID中的P代表比例,我们已经实现了比例控制。那是我们设置电机速度为某个常数乘以定位误差的算法,我们称这个常数为增益(gain),我们也看到了改变增益的效果。

在我们今天看PID控制的I和D部分之前,让我们花点时间研究量化改变Kp增益的效果。代码如下:

继续阅读

运动控制(七)开关vs线性:比例控制

在上一篇文章中,我们看到了如何通过牺牲一些速度和/或准确性来提高开/关控制的稳定性。如果我们不想放弃这么多目标,另一种改进控制的方法是尝试不同的算法。我们的开/关控制算法可能不是我们正在做的事情的最佳选择,比如定位一个物体相对于另一个物体的位置。例如,想象一下,你会使用开/关控制算法来定位你的汽车相对于红绿灯的任务。你会怎么做:让你的汽车以恒定速度驶向红绿灯,然后当你到达红绿灯时突然猛踩刹车。你实际上不能立即停下来,所以当你最终在十字路口停下来时,你会把车挂上倒挡,猛踩油门,你倒车全速直到你的车再次到达红绿灯,这时你再次猛踩刹车。你再次超过红绿灯,所以你再次换到前进挡,再次猛踩油门。你继续这样做,直到灯光最终变绿,然后你前往下一个红绿灯重复这个过程。如果你真的这样做了,你可能会伤害到某人,你肯定会毁了你的车。好的司机实际上做的与此非常不同,他们看到前方的红绿灯,估计他们的车和交通灯之间的距离,并在到达之前开始减速。离交通灯越近,开得越慢。通过这种方式,他们可以在不倒车的情况下平稳地停在交通灯处。这种控制算法通常被称为线性控制。与使用单一速度(要么开启要么关闭)不同,速度会根据两个物体之间的相对位置进行调整。

继续阅读

运动控制(六)开关vs线性:稳定开关控制

上一次我们学习了开环控制与反馈控制之间的区别,并建立了最简单的反馈控制类型,称为开/关控制。当我们运行这种控制算法时,我们发现我们的控制是不稳定的。今天我们将学习两种方法来提高我们控制的稳定性。第一种方法是继续使用开/关控制,但调整速度(Speed)、稳定性(Stability)和准确性(Accuracy)之间的权衡。

当我们实现控制算法时,这三者是我们控制好坏的主要衡量标准。以一个滑块控制为例,速度指的是滑块从起始位置移动到结束位置的速度。稳定性与运动的平滑性有关,我们希望滑块在最终位置附近不要有太多的抖动。当关节超过其目标点然后又返回时,这被称为超调(overshoot),通常这是不受欢迎的。如果关节在其目标位置附近无限期地振荡,那被称为不稳定( instability),这真的很糟糕,最终会对运动机构造成破坏。

继续阅读

运动控制(五)— 开环与反馈控制

我们学习了如何用电压来控制直流电机的转速,但要在我们的机器人中成功使用直流电机,我们需要控制的不仅仅是电机的速度,还有电机的位置。基本上有两种方法可以做到这一点:开环(Open loop)控制或反馈(Feedback)控制。在这篇文章中,我们将学习这些选项之间的区别。

开环控制和反馈控制之间的基本区别在于是否使用传感器。在开环控制中,不使用传感器,反馈控制中则使用传感器。我们可以使用一种叫做方块图的东西来可视化这两种控制类型之间的差异。在方块图中,我们使用一个方块来显示系统的每个部分,它接收输入并产生输出,我们使用箭头来显示系统中的每个信号。在我们的系统中,信号是任何随时间变化的量。这里有几个例子:在我们的控制系统中,我们有一个电机,它将由一个方块表示。电机接收输入电压并产生输出速度。电压和速度都是信号,因为它们的大小是可以随时间变化的。我们控制电压信号,电机转动,将电压转换为速度。

继续阅读

运动控制(四)直流电机扭力计算与选型

在这篇文章中,我们将探讨基于扭矩和速度需求为串联机械手的关节选择电机。今天我们将只考虑两个因素来计算扭矩需求:第一,连杆的角加速度;第二,机器人负载和连杆本身的重力。让我们从最简单的情况开始,一个电机连接到一个连杆上,使得连杆的运动方向垂直于重力,就像我在这里展示的这样。

图片
继续阅读

运动控制(三)直流电机转速与扭力

当我们通过测试不同电压下的电机速度来确定电机速度常数时,我们发现当比较值小于某个值时,电机完全不会运转。这可能一直都是这样,但这里还有一个需要考虑的因素。我们说电机在电压变小时不动的原因是因为没有足够的功率克服电机内部的静摩擦。然而,在早些时候,我们学到电机的转矩与我们提供的电流有关。转矩是克服摩擦所需要的,因为摩擦是一种力,而转矩也是一种力。如果我们给电机提供更多的电流,电机可能在较低的速度下会有更好的表现。

我们的微控制器以及大多数微控制器一般不会提供很大的电流,因为微控制器内部的所有小导线都非常小且脆弱,流过大量电流很容易损坏微控制器。因此,尽管我们能够进行电压变化测试,但我们并没有给电机提供太多电流。我希望能够使用微控制器改变电机的电压,同时让电机根据需要吸取尽可能多的电流。

继续阅读

运动控制(二)直流电机PWM控制

让我们进行一次测试,以在不同电压下获取电机的速度常数。

在这里我们将遇到一个问题:Adruino 是一个数字控制器,所有的微控制器现在都是数字的。这意味着这个装置内部基本上是由开关组成的。Adruino上的每个引脚要么处于开启状态,要么处于关闭状态,但不能处于中间状态。所以我们如何改变电压来测试电机在例如 4 伏特或 3 伏特下的速度呢?

为了解释我们如何做到这一点,让我们深入思考一下当我们突然打开电机的开关时会发生什么。当我们突然从 0 伏特变为 5 伏特时,电机不会立刻从 0 RPM 增加到 350 RPM,因为电机具有一定的惯性。电机开始转动并需要一些时间才能达到速度。当我们关闭开关时,反向的过程发生,电机开始减速,它不会立即停止。实际上,当我们关闭开关时,电机减速的速度比加速的速度更慢。

继续阅读