基本微型Arduino库
 
用于控制Basicmicro电机控制器的Arduino库,全面支持所有控制器功能,包括占空比控制、速度控制、位置控制、编码器反馈、PID参数配置等。
概述
该库提供了一个完整的接口,用于使用串行通信与Basicmicro电机控制器通信。它支持用于控制电机、读取传感器和配置控制器参数的完整命令集。
支持的硬件
此库与以下内容兼容:
- 所有带串行接口的Basicmicro电机控制器
- 具有硬件或软件串行功能的Arduino板
- ESP8266、ESP32和其他Arduino兼容板
安装
使用Arduino库管理器(推荐)
- 在Arduino IDE中,转到 草图>包含库>管理库
- 搜索“Basicmicro”
- 点击“安装”
手动安装
- 从下载最新版本
- 在Arduino IDE中,转到 草图>包含库>添加。ZIP库
- 选择下载的zip文件
硬件连接
使用以下连接将Arduino连接到Basicmicro控制器:
- Arduino TX引脚→ 控制器RX引脚
- Arduino RX引脚→ 控制器TX引脚
- Arduino和控制器之间的公共接地
对于硬件串行:
#include
Basicmicro roboclaw(&Serial1, 10000); // Using Serial1, 10ms timeout对于软件串行(仅基于AVR的板):
#include
#include
SoftwareSerial serial(10, 11); // RX, TX
Basicmicro roboclaw(&serial, 10000); // Using SoftwareSerial, 10ms timeout基本用法
初始化控制器
#include
#define ADDRESS 0x80 // Default address of the controller
Basicmicro roboclaw(&Serial1, 10000);
void setup() {
Serial.begin(115200);
roboclaw.begin(38400); // Set the baud rate for communication with the controller
}电机控制方法
// Basic duty cycle control (-32768 to +32767)
roboclaw.DutyM1(ADDRESS, 16384); // 50% duty cycle forward
roboclaw.DutyM2(ADDRESS, -16384); // 50% duty cycle backward
roboclaw.DutyM1M2(ADDRESS, 8192, 8192); // Both motors at 25% forward
// Speed control using encoders
roboclaw.SpeedM1(ADDRESS, 1000); // Run at 1000 encoder counts per second
roboclaw.SpeedAccelM1(ADDRESS, 500, 1000); // Accelerate to 1000 counts/sec at 500 counts/sec²
// Position control
roboclaw.SpeedAccelDeccelPositionM1(ADDRESS, 500, 1000, 500, 10000, 0); // Move to position 10000
// Stop motors
roboclaw.DutyM1(ADDRESS, 0);
roboclaw.DutyM2(ADDRESS, 0);读取编码器和状态信息
// Read encoder values
uint32_t enc1 = roboclaw.ReadEncM1(ADDRESS);
uint32_t enc2 = roboclaw.ReadEncM2(ADDRESS);
// Read speed values
uint8_t status;
bool valid;
uint32_t speed1 = roboclaw.ReadSpeedM1(ADDRESS, &status, &valid);
if (valid) {
Serial.print("Motor 1 Speed: ");
Serial.println(speed1);
}
// Read current values
int16_t current1, current2;
if (roboclaw.ReadCurrents(ADDRESS, current1, current2)) {
Serial.print("Motor 1 Current: ");
Serial.print(current1);
Serial.print("mA, Motor 2 Current: ");
Serial.print(current2);
Serial.println("mA");
}
// Read battery voltage
uint16_t voltage = roboclaw.ReadMainBatteryVoltage(ADDRESS, &valid);
if (valid) {
float volts = voltage / 10.0; // Convert to volts
Serial.print("Battery Voltage: ");
Serial.print(volts);
Serial.println("V");
}配置设置
// Set PID parameters for velocity control
roboclaw.SetM1VelocityPID(ADDRESS, 1.0, 0.5, 0.25, 12000);
// Set current limits
roboclaw.SetM1MaxCurrent(ADDRESS, 5000, 2500); // 5A max, 2.5A min
// Save settings to non-volatile memory
roboclaw.WriteNVM(ADDRESS);高级示例
以下是一个更完整的示例,显示了编码器反馈的运动:
#include
#define ADDRESS 0x80
Basicmicro roboclaw(&Serial1, 10000);
void setup() {
Serial.begin(115200);
Serial1.begin(38400);
// Set PID parameters for velocity control
roboclaw.SetM1VelocityPID(ADDRESS, 1.0, 0.5, 0.25, 12000);
// Reset encoder counters
roboclaw.ResetEncoders(ADDRESS);
}
void loop() {
// Move forward for 5 seconds
roboclaw.SpeedAccelM1(ADDRESS, 500, 2000);
delay(5000);
// Read encoder position
uint8_t status;
bool valid;
uint32_t position = roboclaw.ReadEncM1(ADDRESS, &status, &valid);
if (valid) {
Serial.print("Encoder position: ");
Serial.println(position);
}
// Stop motor
roboclaw.SpeedAccelM1(ADDRESS, 500, 0);
delay(1000);
// Return to start position
roboclaw.SpeedAccelDeccelPositionM1(ADDRESS, 500, 2000, 500, 0, 0);
delay(5000);
}完整的文件
该库为高级控制和配置提供了更多功能。有关特定功能的更多详细信息,请参阅头文件或参考示例文件夹。
有关所有命令和协议的完整文档,请参阅 官方Basicmicro文档.
故障排除
- 与控制器无通信:验证接线,检查波特率设置,并确保电源已连接
- 电机不动:检查错误代码
ReadError(),用以下方式验证电压ReadMainBatteryVoltage() - 运动不稳定:调整PID参数以实现更平稳的控制
贡献
欢迎为改善图书馆做出贡献。请在GitHub存储库上提交问题和拉取请求。
许可证
此库根据MIT许可证发布。看 许可证 文件以获取详细信息。
______________________________________________________________________
支持的硬件
此库适用于所有当前的Basicmicro电机控制器:
- RoboClaw电机控制器 --双通道刷直流,2×7A至2×300A,最高60VDC
- MCP工业电机控制器 --30A至60A,60VDC,CAN总线,RS-232,MCL脚本
资源
- 运动工作室 --免费配置和PID整定软件(Windows)
- 数据表、用户手册和CAD --数据表、用户手册、CAD模型和图纸
- 教程和指南 --文章、指南和新闻
- 联系支持 --技术支持和销售咨询
