使用 AFMotor电机扩展板的麦克纳姆轮小车(视频) https://v.youku.com/v_show/id_XNTAzNDYyMzE1Mg==.html?spm=a2hzp.8253869.0.0 |
|
Arduino AFMotor电机扩展板(上) https://www.bilibili.com/video/BV1vb411q7xz?p=1 Arduino AFMotor电机扩展板(下) https://www.bilibili.com/video/BV1vb411q7xz?p=2 |
补充实验
|
附录:AFMotor.cpp库文件 目录—adafruit/Adafruit-Motor-Shield-library 链接—https://github.com/adafruit/Adaf ... /master/AFMotor.cpp
|
附录:AFMotor.h库文件 目录—adafruit/Adafruit-Motor-Shield-library 链接—https://github.com/adafruit/Adaf ... ob/master/AFMotor.h
|
使用Arduino AFMotor驱动四只直流电机
|
|
与步进电机有关的函数 确保导入AFMotor库文件并#include < AFMotor.h>后,有这么几个函数需要用到 1、AF_Stepper steppername(steps,portnumber) (1)steppername 给电机起个名字,然后这个名字就是此电机在程序中的代号了 (2)steps 设置电机每转的步数,比如设置36,则每步走1/36转 (3)portnumber 选择电机的通道,范围为1(通道1,2)和2(通道3和4) 2、Step(steps,direction,style) (1)step 转动的步数 (2)direction 转动的方向FORWARD 或者 BACKWARD (3)style 步进的模式,可以选择的参数: a\SINGLE - 一次只给一相线圈供电 b\DOUBLE - 一次给两项项圈都供电,得到更大的扭矩 c\INTERLEAVE - 电机会运转得更柔滑,因为步数增加了一倍,同时速度也减小一半 d\MICROSTEP - 电机会运转的更柔滑,精度更高,但扭矩也会减小 如果想更精细地控制步进电机,可以使用AccelStepper library,这个库带有电机加减速度功能。 |
|
3、Servo-writeMicroseconds()函数(精确控制) 以微秒(uS)为单位写入一个值,从而相应地控制轴。在标准伺服系统上,这将设置轴的角度。在标准伺服器上,参数值1000完全是逆时针方向,2000完全是顺时针方向,中间是1500。 请注意,某些制造商并未非常严格地遵循此标准,因此,伺服器通常会对700到2300之间的值做出响应。可以随意增加这些端点,直到伺服器不再继续增加其范围为止。但是请注意,尝试将伺服驱动器驱动通过其端点(通常由嘶嘶声表示)是高电流状态,应避免使用。连续旋转伺服器将以类似于写入功能的方式响应writeMicrosecond功能。 句法 servo.writeMicroseconds(uS) 参量 伺服:伺服类型的变量 us:参数值(以微秒为单位)(int) 例 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.writeMicroseconds(1500); // set servo to mid-point } void loop() {} 4、Servo-read()函数(读取) 读取伺服器的当前角度(该值传递给对write()的最后一次调用)。 句法 servo.read() 参量 伺服:类型变量Servo 反馈 伺服角度为0到180度。 5、Servo-Attached()函数(附加) 检查是否将Servo变量附加到引脚上。 句法 servo.attached() 参量 伺服:类型变量Servo 反馈 true如果伺服系统连接到引脚上;false除此以外。 6、Servo-detach()函数(分离) 从其引脚上拆下伺服变量。如果所有伺服变量均已分离,则可以使用AnalogWrite()将引脚9和10用于PWM输出。 句法 servo.detach() 参量 伺服:类型变量Servo |
使用Servo库 1、Servo-attach()函数(连接) 将伺服变量附加到引脚上。请注意,在Arduino 0016及更早版本中,Servo库仅在两个引脚上仅支持舵机:9和10。 句法 servo.attach(pin) servo.attach(pin, min, max) 参量 伺服:类型变量Servo pin:伺服器连接的引脚号 min(可选):脉冲宽度(以微秒为单位),对应于伺服器上的最小(0度)角度(默认为544) 最大(可选):脉冲宽度(以微秒为单位),对应于伺服器上的最大(180度)角度(默认为2400) 例 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() {} 2、Servo-write(x)函数(写入) 将值写入伺服器,从而相应地控制轴。在标准伺服器上,这将设置轴的角度(以度为单位),将轴移动到该方向。在连续旋转伺服系统(360度舵机)上,这将设置伺服系统的速度(0表示一个方向的全速,180表示另一方向的全速,而90左右的值表示无运动)。 句法 servo.write(angle) 参量 伺服:伺服类型的变量 angle:写入伺服的值,从0到180 例 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(90); // set servo to mid-point } void loop() {} |
实验之四:驱动二只伺服电机(1号与2号舵机)
|
本帖最后由 eagler8 于 2020-11-11 16:51 编辑 实验之三:驱动单只伺服电机(2号舵机)
|
AF_DCMotor 类函数 AFMotor类配合Adafruit Motor Shied可以最多同时控制4个直流电机的速度和方向。要使用这些功能,首先要在开头添加库文件: #include <AFMotor.h> AF_DCMotor motorname(portnum,freq) 这是一个建立一个直流电机的函数。在程序中需要声明每个电机各一次。像下面的例子中一样,每个电机必须使用不同的名字。 参数: port num - 选择你的电机连接到电机驱动板上的接口(1-4) freq - 选择PWM频率。如果你没有选择这个选项,默认设置为1KHZ。 适用于通道1和2的频率: MOTOR12_64KHZ MOTOR12_8KHZ MOTOR12_2KHZ MOTOR12_1KHZ 适用于通道3和4的频率: MOTOR34_64KHZ MOTOR34_8KHZ MOTOR34_1KHZ 例如: AF_DCMotor motor4(4);//通道4,默认1KHZ频率 AF_DCMotor left_motor(1,MOTOR12_64KHZ);//通道1,64KHZ频率 注意:更高的频率会减小电机在运动过程中的噪音,但同时也会降低扭矩。 setSpeed(speed) 设置电机的速度 参数: speed-范围为0到255,0代表停止,255代表全速。 注意:直流电机的回馈并不是典型线性的,所以真正的转速并不会与程序中设定的速度成正比。 run(cmd) 设置电机的运转模式 参数: cmd - 选择你想要的电机运转模式 可选择的模式: FORWARD - 正转(真正的转动方向取决于你电机的连线) BACKWARD - 反转 (转动方向与正转相反) RELEASE - 停止。使电机断电,与setSpeed(0)函数功能相同。调用了这个函数后,电机需要一定时间才能彻底停止。 |
本帖最后由 eagler8 于 2020-11-5 19:32 编辑
|
本帖最后由 eagler8 于 2020-11-4 16:17 编辑
|