instructables VHDL 电机速度控制决定方向和速度左右速度控制器
笔记: 此页面是更大构建的一部分。 请确保您从这里开始,以便您了解以下内容在更大项目中的位置
超过view
电机速度和方向控制是光电探测器机器人中的两个主要部门之一,另一个是光电探测器或光探测器部门。 光电探测器部门专注于机器人的视觉,而电机速度和方向控制部门则专注于机器人的运动。 电机速度和方向控制过程数据来自光电探测器部分,并以电机运动的形式给出物理输出。
这个划分的目的是控制寻光机器人左右两个电机的速度和方向。 要确定这些值,您将需要相机捕获并通过阈值处理的光的大小和位置。 您还需要测量每个电机的速度。 通过这些输入,您将能够输出每个电机的 PWM(脉冲宽度调制)值。
为此,您需要制作这些 VHDL 模块(也在下面链接):
- 控制
- 误差计算
- 二进制转换
- 没有光源
您可以在此处查看该部门的 VHDL 代码。
补给品
我们建议使用 ISE Design Suite 14.7 进行编码,因为它也可用于测试 VHDL 中的代码。 但是,要将代码上传到 BASYS 3,您需要安装 Vivado(版本 2015.4 或 2016.4)并编写扩展名为 .xdc 的约束。
VHDL 电机速度控制:决定方向和速度,左右速度控制器:第 1 页
指导步骤
第 1 步:控制
为了解如何控制寻光机器人的行为,我们将解释机器人看到光源时所需的行为。 此行为将根据光源的位置和大小进行控制。
使用的算法类似于 RC 机器人控制器,有一个可以向左或向右转动的杠杆,另一个可以向前或向后转动的杠杆。
为了寻找光线,如果光源的位置就在机器人的正前方,则您希望该机器人沿直线移动。 为此,您需要左右电机的速度相同。 如果灯位于机器人的左侧,您希望右侧电机比左侧电机移动得更快,以便机器人可以向左转向灯。 相反,如果灯位于机器人的右侧,则您希望左侧电机比右侧电机移动得更快,以便机器人可以向右转向灯。 这类似于 RC 控制器的左杆,您可以在其中控制是要向左、向右还是直线移动机器人。
然后,如果光源很远(小光源),您希望机器人向前移动,或者如果检测到的光源太近(大光源),则向后移动。 您还希望机器人离光源越远,机器人移动得越快。 这类似于 RC 控制器的右杆,您可以在其中控制是要向前还是向后移动,以及移动的速度。
然后你可以推导出每个电机速度的数学公式,我们选择-255到255之间的速度范围。负值表示电机将向后转动,而正值表示电机将向前转动。
这就是这个机器人运动的基本算法。 要了解有关此模块的更多信息,请单击此处。
第二步:误差计算
由于您已经有了电机的目标速度和方向,因此您还需要考虑电机的测量速度和方向。 如果它已达到速度目标,我们希望电机仅依靠其动量移动。 如果没有,我们想增加电机的速度。 在控制理论中,这被称为闭环反馈控制系统。
要了解有关此模块的更多信息,请单击此处。
第 3 步:二进制转换
从之前的计算中,您已经知道每个电机所需的动作。 但是,计算是使用带符号的二进制文件完成的。 该模块的目的是将这些带符号的值转换为PWM发生器可以读取的值,即方向(顺时针或逆时针)和速度(范围在0到255之间)。 此外,由于来自电机的反馈以无符号二进制形式测量,因此需要另一个模块将无符号值(方向和速度)转换为可由误差计算模块计算的有符号值。 要了解有关此模块的更多信息,请单击此处。
第 4 步:没有光源
您制作了一个机器人,当机器人检测到光线时,它会移动以寻找光线。 但是当机器人没有检测到光时会发生什么? 该模块的目的是指示出现这种情况时要做什么。
寻找光源的最简单方法是让机器人原地旋转。 旋转一定秒数后,如果机器人还没有找到光源,你想让机器人停止移动,以节省电量。 再过设定的秒数后,机器人应再次原地旋转以寻找光线。 要了解有关此模块的更多信息,请单击此处。
第 5 步:它是如何工作的
您可以参考上图进行解释。 如本教程开头所述,您将需要来自阈值部门的输入“大小”和“位置”。 为了确保这些输入有效(例如ample,当你收到 size = 0 时,size 确实为零,因为相机没有检测到光线,而不是因为相机仍在初始化)你还需要某种指示器,我们称之为“READY”。 这些数据将由控件(Ctrl.vhd)处理以确定每个电机的目标速度(9 位,有符号)。
为了获得更稳定的电机输出,您需要在闭环系统中使用反馈。 这需要从电机速度测量部门输入每个电机的“方向”和“速度”。 由于您希望将这些输入包含在您的计算中,因此您必须将这些无符号值转换为 9 位有符号二进制数。 这是由无符号到有符号二进制转换器 (US2S.vhd) 完成的。
误差计算 (error.vhd) 所做的是从目标速度中减去测量速度以确定每个电机的动作。 这意味着当两者具有相同的值时,减法变为零并且电机将仅依靠其动量移动。 您还可以添加一个倍增因子,以便机器人可以更快地达到目标速度。
由于电机控制器需要每个电机的速度和方向,因此您必须将动作的有符号值转换为两个单独的无符号值:速度(1 位)和方向(8 位)。 这是由有符号到无符号二进制转换器 (S2US.vhd) 完成的,并将成为电机控制部门的输入。
我们还添加了一个模块来确定在未检测到光时要做什么(no light counter. Bhd)。 由于这个模块基本上是一个计数器,它会计算机器人需要旋转或停留在原地的时间。 这将确保机器人“看到”它的环境,而不仅仅是它前面的东西,并在没有真正可用的光源时节省电池电量。
第 6 步:结合 Files
结合 files,您需要连接每个模块的信号。 为此,您必须制作一个新的顶级模块 file. 将先前模块的输入和输出作为组件插入,为连接添加信号并将每个端口分配给相应的对。 大家可以参考上图的连线,看这里的代码。
步骤 7:测试
完成整个代码后,在将代码上传到电路板之前,您需要知道代码是否有效,尤其是因为部分代码可能由不同的人编写。 这需要一个测试台,您将在其中输入虚拟值并查看代码是否按照我们希望的方式运行。 您可以从测试每个模块开始休息,如果它们都正常工作,您就可以测试顶级模块。
第 8 步:在硬件上试用
在您的计算机上测试完您的代码后,您可以在真实硬件上测试该代码。 你必须做出约束 file 在 Vivado (.xdc file 对于 BASYS 3) 来控制哪些输入和输出进入哪些端口。
重要提示: 我们通过艰难的方式了解到电子元件可能具有电流或体积的最大值tages。 请务必参考数据表中的值。 对于 PMOD HB5,一定要设置 voltage 来自 12 伏的电源(因为这是所需的电压tage 用于电机),以及电机移动所需的尽可能小的电流。
第 9 步:将其与其他部分组合
如果前面的步骤成功,则将代码与其他组合并,以便将最终代码上传到机器人中。 然后,瞧! 你已经成功地制作了一个寻光机器人。
第 10 步:贡献者
从左到右:
- 安东尼乌斯·格雷戈里乌斯·迪文·里瓦尔第
- 费利克斯维古纳
- 尼古拉斯桑贾亚
- 理查德·梅迪安托
很不错: VHDL 电机速度控制:决定方向和速度,左右速度控制器:第 6 页
谢谢你重新view! 这个项目实际上只是课程项目的一部分(带有 BASYS 3 板和 OV7670 相机的寻光机器人),所以我会尽快将链接添加到课程的指导中!
惊人的: 我期待看到一切都放在一起。
文件/资源
![]() |
instructables VHDL 电机速度控制决定方向和速度左右速度控制器 [pdf] 指示 VHDL Motor Speed Control Decision Direction and Speed Left and Right Speed Controller, VHDL Motor Speed, Control Decision Direction and Speed 左右速度控制器 |