c用着不顺手,总有种有心无力的感觉,一个好办法是把c的源码找来翻译成java理解充分后再写c,
基础1 , can总线通信
can通信的内容很多,这里用到的只涉及标准数据帧,
控制器发送的报文格式:
发送的控制信号只有一个信息,电流 current
高八位低八位的解释:
一个字节是8位二进制,汇编中,为了表示一个整数类型,用两个字节来表示,即总共16位。
20是0000 0000 0001 0100 其中前0000 0000为高8位,后边0001 0100为低8位
两个字节的数据能表示正65535 - 负65536之间的数,如257表示为0000 0001 0000 0001.所以0000 00001为高8位,0000 0001为低8位
举个例子 给canId为2的电调 257的控制电流:
uint16_t current = 257 ;
uint8_t stmp[8] = {0, 0, 0, 0, 0, 0, 0, 0}; //每个元素是8位 故类型是uint8_t
stmp[2] = (current >> 8); //id 为2的c610 //高八位
stmp[3] = current; //低八位
CAN.sendMsgBuf(0x200, 0, 8, stmp);
c610 是根据控制信号来行动的, 控制信号大约2.5秒收不到就停转
电流范围-10000~10000. 面对输出轴 正的电流时电机是逆时针转动,负 顺时针
基础2 pid闭环控制算法
https://www.cnblogs.com/sasasatori/p/11672918.html
这里有文章讲的详细,本质是根据反馈调整输出
举一个简单的例子,狗不听话要打一顿,
通过计算觉得打5下就能听话然后打5下 这是开环控制,有点是简单速度快,缺点是5下可能打太疼了也可能打的轻不长记性
每打一下看看啥反应 是闭环控制
基础3 设备相关
arduino uno + mcp2515模块+
https://github.com/Seeed-Studio/CAN_BUS_Shield
usb_can模块和他的上位机 用于调试 (很重要 can通信调通了后就没用了)
资料
大疆的源码和
https://blog.csdn.net/Introver_t/article/details/80103041
上面这个可能运行不了,但是对理解大疆的源码有帮助