雷竞技注册
项目

设计一种Romi机器人底盘的控制板

2017年8月25日,通过罗伯特Keim

在这篇文章中,我们将讨论一个机器人PCB的硬件设计,我们将编写控制两个直流电机的固件。

在这篇文章中,我们将讨论一个机器人PCB的硬件设计,我们将编写控制两个直流电机的固件。

支持信息

机器人

我们要用到的机械硬件是露美底盘,由Pololu销售。这是一款成本较低的塑料车架加马达加轮子的套件,组装起来相对容易。

上面的链接将带您到提供装配过程的视频。网站上有书面说明,但我没有看。以下是一些基于我的经验的建议:

  • 我觉得这种塑料不是特别结实,所以要小心。
  • 车轮分为两部分,一个塑料框架和一个黑色橡胶(或人造橡胶)轮胎。把轮胎拉伸到车架上并不容易,我无法描述我的技术。我只是想向你保证这不是恶作剧可以最终,把轮胎放在那里。
  • 车轮和车轴之间的连接是简单的压配合。你只要把轮子推到车轴上,等等!视频没有说明轴和相应的槽不是圆形的。其实是" D "形,你需要把槽的平边和车轴的平边对齐。

  • 插入电机到电机持有人的东西是一个有点粗略。塑料边的部分必须弯曲得很厉害。不知怎么的,我把一个塑料标签塞进了发动机的外壳;结果,这场斗争以一个破的塑料标签而告终。我不认为机器人的性能会受到影响只要我不在崎岖的地形上高速行驶,但显然你应该努力组装你的Romi而不破坏任何东西。所以当你插入马达的时候要小心。

的DXF

当你设计PCB时,很容易忘记的一件事是安装孔。它们并不总是必要的,但通常最好包含它们。Romi配备了许多预钻孔;你只需在框架的底部使用一个螺母,以确保通过PCB安装孔的螺栓,这是在框架的顶部(这在装配视频中演示)。问题是,如何确保安装孔与框架上的孔对齐?

如果你手上有底盘,你可以做仔细的测量,但对我来说,这是一个繁琐和复杂的方法。在这种情况下,我宁愿让我的电脑做的工作-你需要的是DXF文件,这是由Pololu提供的(点击在这里寻找“罗姆底盘的正面、顶部和侧面视图”)。如果您的CAD软件支持DXF导入(我认为这是常见的功能),您可以将框架轮廓合并到您的PCB布局,如下所示:

中间有颜色的部分是电路板。所有你要做的是定位框架图纸根据PCB在装配机器人的实际位置,然后你创造安装孔,与孔在Romi:

印刷电路板的

这是一张组装的控制PCB的照片。

你可能想知道一些事情……

这到底是什么?这应该是"关于电路"的标志。雷竞技注册当我把设计上传到MacroFab的用户界面,我使用odb++文件格式,而不是gerbers。用我的CAD软件(DipTrace),生成odb++文件更简单。总的来说,我很满意这个过程,但显然有一个问题,这部分的丝网印刷。我想澄清的是,我不是在责怪MacroFab,因为PCB预览清楚地显示了这个确切的问题,但我决定希望用于创建预览图像的软件渲染的丝网印刷是错误的,并且实际制造会很好。我错了。

以下是PCB布局:

点击扩大。

它是一个四层的板;所有的分量都在上面。总体设计由以下组件和子系统组成:

  • EFM8激光蜜蜂单片机
  • 3.3 V线性稳压器
  • 手动开关选择外部电源和USB电源
  • 加速度计
  • MEMS麦克风与电位器可调增益
  • 驱动电路为两个直流电机
  • 用于监测电池电压和分析电机电流的放大器电路
  • USB电源和数据传输连接器

权力

Romi包括一个隔间,最多可容纳6节AA电池;我们将使用4个AAs作为完成的机器人的电源。不过,在测试阶段,我宁愿使用墙壁供电,因为电池很贵。我设计了Romi PCB为6v输入电源,但5v将工作良好。我碰巧有一个5v, 1a的墙变压器的插头切断。

露美汽车每次最大(即失速)电流为1.25 a,但正常运行电流仅为130 mA。我不确定如果1 A墙变压器将足以启动电机,但它似乎工作良好。

电机控制

在本文中,我们不打算涵盖所有的子电路。现在,我们将简单地看一下电机驱动电路,因为第一个主要的测试任务是确保我们可以控制电机。如果您渴望看到所有的设计细节,您可以使用以下链接下载整个原理图(它是一个包含BOM的zip文件):

RomiRobotControlBoard_schematic_and_BOM.zip

实际上,我甚至不打算说太多关于马达驱动电路的内容,因为它几乎和在这篇文章。主要的区别是,我改变的价值感电阻(R3在下面的原理图)根据失速电流的罗米电机。我也觉得使用较小的体积电容器(C21)很舒服,因为它的马达不像用于C-BISCUIT演示机器人

点击扩大。

固件

从EFM8到每个电机驱动IC有三个控制信号:使能(有源低电平),PWM和方向。要使电机全速转动,enable必须是低的,PWM必须是高的。旋转的方向由方向引脚上的逻辑电平决定。正如您可能已经猜到的,可以通过对PWM引脚应用PWM信号来控制转速。对于这个初始测试,当我们想要电机动作时,PWM保持在逻辑高位,即,电机要么停止,要么完全通电。

机器人的前进、后退、左右方向定义如下:

我们想让机器人在方向针逻辑高的时候向前移动。为此,按如下方法将螺丝端子连接到电机上:

基本运动有四种功能:

void FullSpeed_Forward(void) {MOT_R_nEN = 1;MOT_L_nEN = 1;MOT_R_PWM = 1;MOT_L_PWM = 1;MOT_R_DIR = 1;MOT_L_DIR = 1;MOT_R_nEN = 0;MOT_L_nEN = 0;} void FullSpeed_Reverse(void) {MOT_R_nEN = 1;MOT_L_nEN = 1; MOT_R_PWM = 1; MOT_L_PWM = 1; MOT_R_DIR = 0; MOT_L_DIR = 0; MOT_R_nEN = 0; MOT_L_nEN = 0; } void FullSpeed_TurnRight(void) { MOT_R_nEN = 1; MOT_L_nEN = 1; MOT_R_PWM = 1; MOT_L_PWM = 1; MOT_R_DIR = 0; MOT_L_DIR = 1; MOT_R_nEN = 0; MOT_L_nEN = 0; } void FullSpeed_TurnLeft(void) { MOT_R_nEN = 1; MOT_L_nEN = 1; MOT_R_PWM = 1; MOT_L_PWM = 1; MOT_R_DIR = 1; MOT_L_DIR = 0; MOT_R_nEN = 0; MOT_L_nEN = 0; }

对于每个功能,一般的操作顺序是相同的:关闭电机,将PWM信号设置到逻辑高,根据运动操作设定方向,然后启动电机。为了停止电机,我们简单地把使能引脚的逻辑高度:

void StopMotors(void) {MOT_R_nEN = 1;MOT_L_nEN = 1;}

测试代码通过四个运动操作循环,然后在再次开始序列之前停止电机:

while (1) {FullSpeed_Forward();C2ADAPTER_LEDGRN = ! C2ADAPTER_LEDGRN;Delay_seconds (7);FullSpeed_Reverse ();C2ADAPTER_LEDGRN = ! C2ADAPTER_LEDGRN;Delay_seconds (7);FullSpeed_TurnLeft ();C2ADAPTER_LEDGRN = ! C2ADAPTER_LEDGRN;Delay_seconds (7);FullSpeed_TurnRight (); C2ADAPTER_LEDGRN = !C2ADAPTER_LEDGRN; Delay_seconds(7); StopMotors(); Delay_seconds(7); }
           

您可以通过以下链接下载源文件和项目文件。

RomiRobotControlBoard_source_and_project_files.zip

总结

在这篇文章中,我介绍了来自Pololu的Romi机器人底盘,并介绍了定制的PCB将控制机器人。我们给电路板通电,并连接电机,然后我们验证了电机控制功能与一些简单的测试代码。注意,EFM8微控制器使用C2适配器板进行编程这篇文章。我们将在未来的项目中探索控制PCB的其他部分。

自己试试这个项目吧!BOM。