DJI核心A板按键控制M3508电机斜坡升速与斜坡降速——总结帖
按调试过程中出现问题时间倒序排列
- 升速与降速代码中的公共部分合并写了,如电流发送sendMotorCurrent(),导致电机无法运行(尚不清楚原因):
- 斜坡函数的重置问题:斜坡函数使用完成后,需resetcounter,下一次才能正常使用;但重置counter代码的位置十分关键,若放在电机降速或升速的代码中,将导致卡在斜坡起始位置,无法完成斜坡函数(因为中断循环会每次都重置counter)。解决方法:将重置counter代码放在按键中断里,当每按一次键就重置counter(关键是实现只resetcounter一次就进入电机转速斜坡上升或下降,在斜坡完成前不能再次运行resetcounter)
- 串口printf调试方法比较实用(注意串口名称USART/UART)
- Visualscope虚拟示波器的使用:工程中添加visuascope.c/h文件;在main.c中调用visuascope函数开启调试;
while(1){
VisualScope(UART7,getMotorVelocity(),getMotorTargetSpeed(),0,0);//visualscope示波器调试电机PID
delay_ms(1);
}
在visualscope界面勾选如图位置,Check Sum和CPC16的选择要根据visualscope中的相关设置确定,底部对应通道的勾一定要勾上;
再设置好波特率和串口COM值(设备管理器读取或串口调试助手XCOM中看)
程序下载到板子reset之后,点击run和resume(顶部第三个按钮)即可实时观察波形
- 按键次数判断方法:在按键中断中设置计数递增变量,按%取余的方式判断奇偶,区分第一次和第二次按键(要注意变量初始0为偶数需去除);设立标志位flag,按键中断里标志位翻转(待补充)
- 定时器中断处理函数里别误把清除中断标志位放在controlloop()前面了,否则contrLoop()不执行
- 常用调试方法:串口printf;设置led;设置蜂鸣器beep;设置断点;visualscope示波器