SimpleFOC 库的主要目标是提供一个简单且有效率的无刷电机和步进电机控制方法。所以通信协议方面的实现其实超出了本库的目标范畴。但是却给了Commander 接口,使用类似G代码的通信协议。
要使用CAN总线怎么办?(QAQ)
可以使用TTL转CAN模块.
当用户发送命令时会发生什么?
commander收到字符串 MVD0.76 时:
它首先检查命令ID,发现是’M’,则将剩余字符串发送给电机回调函数处理。电机的回调函数进一步检查命令ID是什么,发现是’V’,则将剩余字符串发送到速度PID回调函数。然后速度PID回调函数扫描命令ID并发现它是’D’,因此会设置D环数值。
如果Commander收到 OE 时:
它找到的第一个ID是’O’,比如是motor,则将剩余的字符串发送给此命令的回调函数(本例中为电机的回调函数)。然后,电机的回调函数发现是命令“E”,并获知这个命令是要获取还是设置其所指示的状态(已启用/已禁用)。它检查剩余的字符值是否为空,如果为空则意味着用户发送的是get请求。
完整指令
https://docs.simplefoc.com/docs_chinese/commander_motor
用户自定义命令
自定义函数需要两步
1.定义要运行的函数
2.注册到simplefoc的commander里
void myFunc(char*){
// 要执行的命令函数
}
Commander commander = Commander(...)
void setup(){
...
//注册
commander.add('A',myFunc,"my functionality");
...
}
void loop(){
..