首先没有用中断的方式接收总线上的信息,因为来自c610的信号是1KHz的所以if (CAN_MSGAVAIL == CAN.checkReceive()) {
是不需要的,因为10微妙一个控制周期是一定有数据进来的
https://zhuanlan.zhihu.com/p/39573490
关于pid调参这里有个可以参考的文章。
首先前提是固定下来死循环里的delay(10);
和其他控制参数,只留下Kp,Ki,Kd是变量, 因为其他参数变化都会打破稳定,参数得重新调
首先,只配Kp, Ki Kd设为0。其实只设Kp在精确性要求不高的场景是可以的
(括号里加上:,保持速度稳定,而不关注目标值和实际值的差别)
这里就可以看到pid算法的直观表现,有一种直观感受,有一个目标值,输入是10ms一次的观测值,输出是电流(插入一个基础知识,电流和扭矩是在有效范围内成正比) 。算法的目标是要达到目标值,少了就加多,多了就减少,有负荷了就顶着干,没了就放松干
之后的参数之后再补