两周前,我在信箱中收到了 剑齿2 X 25A 电机驱动器。我买了它,是因为我有短期和长期的重大计划。从一开始,我将用它来驱动室内自动机器人;然后我将继续为全地形活动构建一个高性能的机器人。我了解了它的性能,并且看到了很多YouTube短片,其中包含用于控制高功率机器人(例如RC割草机,电动轮椅,电动车,踏板车等)的直流电动机的电动机驱动器。适用于130Kg(300lbs)以下的几乎所有大型机器人。因此,我认为这对我的未来项目非常理想。
考虑到很多想法,我有一些理由详细研究Sabertooth电动机驱动器,并看到以该价格可以提供的功能。由于我提到了价格这个话题,因此马达驱动器的价格为$ 124.99 亚马孙。与提供相同规格范围的其他电动机驱动器相比,Sabertooth的2 X 25A电动机驱动器是该价格市场上最好的。
无论如何,在这篇文章中,我决定向您展示如何使用Arduino UNO设置电机驱动器并控制四个直流电机。互联网上找到的许多解决方案对于RC车辆都是好的,但对于自动驾驶机器人是不可接受的。在第一阶段中,我想到了一些限制:
- Arduino的草图应包含向前,向后,向左,向右和停止的功能;
- Arduino的草图在将来的自治机器人项目中将很有用。我不’想要一个遥控机器人;
- Arduino的 UNO板应由电机驱动器供电;
周围没有找到满足这些条件的教程/项目,因此我开始了一个全新的教程。
让’s start
硬件组件摘要一’在本教程中使用过:
- 1 X Arduino的 UNO(21.91美元) 亚马孙)
- 1 X Sabertooth 2 x 25A电机驱动器($ 124.99 on 亚马孙)
- 4 X 6V DC电动机连接到移动机器人机箱(移动机器人套件的价格在$ 42到$ 138之间, 亚马孙)
- 1 X 7.4V锂聚合物电池(价格在27美元至89美元之间) 亚马孙)
剑齿’s电机驱动器是为大型机器人设计的,没有比这更好的了。首先,我开始深入研究数据表,规格,原理图以及如何通过Arduino UNO对其进行控制。
第二步是使用板载DIP开关设置操作模式。控制直流电动机的更简单方法是使用‘简化串行模式’模式(DIP开关1、3、5和6设置为ON,其余设置为OFF)。
这就是它看起来像剑齿的样子’s DIP switches:

Sabertooth DIP开关设置为串行模式:DIP开关1、3、5和6设置为ON,其余设置为OFF
第三步是通过将电动机驱动器与直流电动机,Arduino UNO和电源连接来构建控制系统。

Sabertooth 0V至Arduino GND,Sabertooth 5V至Arduino Vin,Sabertooth S1至Arduino TX引脚
- Sabertooth 0V至Arduino GND
- Sabertooth 5V至Arduino Vin
- Sabertooth S1至Arduino TX引脚

2个X直流电动机连接至M1A和M1B,2个DC电动机连接至M2A和M2B,电池连接至B +和B-
- 2 X DC电动机至M1A和M1B
- 2 X DC电动机到M2A和M2B
- 电池到B +和B-
第四步是编写Arduino草图。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | / ** * @文件 Sabertooth 2 X 25A电动机Driver.ino * @作者 IntoRobotics.com * @版本 V1.0 * @日期 2016/06/03 * @说明 该文件是Sabertooth 2 X 25A电机驱动器和Arduino UNO的示例代码 * / / *发送1到127之间的字符将控制电动机1。 1是完全反向,64是停止,127是完全正向。 在128和255之间发送字符将控制电动机2。 128是完全反向,192是停止,255是完全正向。 字符0(十六进制0x00)是一种特殊情况。发送此字符将关闭两个电动机。 Source:http://www.robotmarketplace.com/products/images/Sabertooth2x25.pdf * / //每个电机的简化串行极限 #define SBT_MOTOR1_FULL_FORWARD 127 #定义SBT_MOTOR1_FULL_REVERSE 1 #定义SBT_MOTOR2_FULL_FORWARD 255 #定义SBT_MOTOR2_FULL_REVERSE 128 //关闭两个电机 #定义SBT_ALL_STOP 0 虚空 设定() { 序列号.开始(9600); killMotors(); } 虚空 循环() { 快进();//快进3秒钟 延迟(3000); killMotors(); fastReverse(); //快退3秒钟 延迟(3000); killMotors(); 转左(); //左转一秒钟 延迟(1000); 右转(); //向右转一秒钟 延迟(1000); killMotors(); } 虚空 快进(){ //马达快进 序列号.写(SBT_MOTOR1_FULL_FORWARD); 序列号.写(SBT_MOTOR2_FULL_FORWARD); 序列号.打印(“电机快进”); } 虚空 fastReverse(){ //电机快退 序列号.写(SBT_MOTOR1_FULL_REVERSE); 序列号.写(SBT_MOTOR2_FULL_REVERSE); 序列号.打印(“电机快速反转”); } 虚空 转左(){ //电动机1完全反向,电动机2完全向前转左 序列号.写(SBT_MOTOR1_FULL_REVERSE); 序列号.写(SBT_MOTOR2_FULL_FORWARD); 序列号.打印(“电动机1完全反向,电动机2完全向前向左转”); } 虚空 右转(){ //电动机1完全向前,电动机2完全反向以向右转 序列号.写(SBT_MOTOR1_FULL_FORWARD); 序列号.写(SBT_MOTOR2_FULL_REVERSE); 序列号.打印(“电动机1完全前进,电动机2完全后退以右转”); } 虚空 killMotors(){ 序列号.写(SBT_ALL_STOP); //杀死电机0.5秒 序列号.打印(“杀死马达半秒钟”); 延迟(500); } |
这部短片显示了完成的作品:
您好,我是哥斯达黎加的人,我需要arduino代码的帮助
您在哪里找到了使用DIP 1,3,5和6的信息,谢谢?
你好,
链接是: //www.dimensionengineering.com/datasheets/Sabertooth2x25.pdf
嗨,您的arduino uno由USB供电,对吗?为什么从Sabertooth向Arduino VIN发送5伏电压?
希望你能像我一样回复’我的设置有问题。谢谢!!
嗨,抱歉,Arduino似乎已连接到计算机,但事实并非如此’t。电缆未连接到计算机。 Arduino的由Sabertooth供电
嗨,有一些照片和视频可以’现在收看,您能提供一个显示所有内容的链接吗?
你好 ,
我们不能使用arduino数字引脚控制电机吗?
不错的项目。我喜欢您与小型机器人合作时如何证明自己,然后再升级为大型机器人。
您正在使用什么来检测障碍物?
反正不错