近期课题上出现一个需求,需要通过cybergear电机带动喷管进行往复运动,在csdn上搜索了一些资料,因为arduino nano体积比较小,有现成的库,决定以其为平台进行开发。
参考博客:Arduino控制小米微电机(基于MCP2515)运动_ardunio 小米电机-优快云博客
硬件组成:
arduino nano
mcp2515转can模块
LM2596电源模块
直流电源箱
cybergear电机
usb转can接口(官方推荐的YourCee USB-CAN模块)
烧录数据线
cybergear电源线及can线(可以在tb买专用的,can线需要双绞)
连接示意图 ,接线参考上面的博客。
1。按照博客,在对cybergear电机进行调试时,需要对usb转can模块进行设置,我采用的是小米官方推荐的设置内容包括滤波器。界面如下:选择设置模块,打开后出现了第二个界面。在这里,串口波特率设置为921600,can波特率设置为1000000。将滤波器使能设置为禁止(不使用滤波器,通过所有的消息)。
Serial.begin(921600);
void xm_can_start() {
mcp2515.reset();
mcp2515.setBitrate(CAN_1000KBPS, MCP_8MHZ);
mcp2515.setNormalMode();
delay(4);
}
2.随后将电机连接usb转can工具进行测试
手动定位后,通过调试器可以设置电机的机械零点。调试器还可以进行位置,速度,电流等控制。
3.代码逻辑
代码方面是参考的文首的博客,但在位置控制部分进行了修改,并编写了一个停止函数。
.ino文件
#include <mcp2515.h>
#include <Arduino.h>
#include <SPI.h>
#define pi 3.14159265359f
#define Communication_Type_MotorEnable 0x03
#define Master_CAN_ID 0x00
#define CanID 0x01
#define P_MIN -12.5f
#define P_MAX 12.5f
#define V_MIN -30.0f
#define V_MAX 30.0f
#define KP_MIN 0.0f
#define KP_MAX 500.0f
#define KD_MIN 0.0f
#define KD_MAX 5.0f
#define T_MIN -12.0f
#define T_MAX 12.0f
#define MAX_P 720
#define MIN_P -720
#define Communication_Type_GetID 0x00 //获取设备的ID和64位MCU唯一标识符
#define Communication_Type_MotionControl 0x01 //用来向主机发送控制指令
#define Communication_Type_MotorRequest 0x02 //用来向主机反馈电机运行状态
#define Communication_Type_MotorEnable 0x03 //电机使能运行
#define Communication_Type_MotorStop 0x04 //电机停止运行
#define Communication_Type_SetPosZero 0x06 //设置电机机械零位
#define Communication_Type_CanID 0x07 //更改当前电机CAN_ID
#define Communication_Type_Control_Mode 0x12
#define Communication_Type_GetSingleParameter 0x11 //读取单个参数
#define Communication_Type_SetSingleParameter 0x12 //设定单个参数
#define Communication_Type_ErrorFeedback 0x15 //故障反馈帧
//参数读取宏定义
#define Run_mode 0x7005
#define Iq_Ref 0x7006
#define Spd_Ref 0x700A
#define Limit_Torque 0x700B
#define Cur_Kp 0x7010
#define Cur_Ki 0x7011
#define Cur_Filt_Gain 0x7014
#define Loc_Ref 0x7016
#define Limit_Spd 0x7017
#define Limit_Cur 0x7018
#define Gai