直接翻译过来, 进行合理配置即可
不要怕英语, 都是高考过来的人了, 这些单词都是3500词里的, 而且
我们现在还能用各种在线免费的翻译软件
有同学的代码必须得按一下复位才开始跑
Keil里勾选reset and run
有同学代码用全局C++会报错, 但又想用C++语法
自行搜索Keil单个文件如何使用C++编译器
提示: 工程中添加好单个源代码文件后, 右键该文件, 对该文件单
独加—cpp11
3 关于数据流的问题
读/写不到数据, 考虑问题的可能
模块错误, 测, 换
电池没电, 开发板损坏, 串口模块损坏, 电调损坏等, 直接换
接线错误, 测, 改
CAN_H与CAN_L接反, 改回来
线断了, 万用表短路档滴一下
没有共地, 扯根线接一下
工程代码配置错误
开发板上的晶振频率与Cube时钟树配置不匹配
外设对应的GPIO与本身的GPIO是不匹配的
工程代码开发编写错误
利用逐行逐句调试功能, 以及串口绘图功能进行对数据流的追踪
并进行解决
常见问题举例
串口收不到数据
查配置, 收发双方的配置是否一致, GPIO是否与原理图对应上, 是
否配置对应的中断或DMA
查接线, Rx和Tx是否接反, 是否共地, 线路是否过长导致噪声干扰
极大
查晶振, 比如板载晶振24M, 但你在时钟树配置的是8M, 那么
115200的波特率相当于是345600, 或者说物理超频了
加断点debug, 查是否进入了中断
利用USB-TTL或串口绘图查发送的数据是否正确
底盘平动没问题但旋转抽风
这种情况下认为通信一切正常
利用串口绘图, 查看当前的底盘目标值以及各个电机的角速度关
系
有同学车的云台会一颤一颤的
首先排查接线问题, 是否松动, 电机电源线是否接触不良
不控制电机, 或者说不给电机发送控制指令, 利用总线分析仪观
察电机的反馈帧是否正常
利用串口绘图, 观察电机的反馈数据内容是否正常
给电机接控, 利用串口绘图, 观察电机的控制数据波形是否正常
在适当的地方打断点, 观察异常处变量的计算情况, 从而确定是
参数问题, 正负号问题还是什么其他的问题
如何快速获取PID参数, 这个参数到底有什么含义
PID有两个作用, 一个是控制, 一个是跟随
在控制方面, PID是一定程度上反映物理现实的
比如以速度为控制量的角度环, 我们输入的是当前角度和目标角
度, 输出的是角速度
P, 就代表着离目标越远, 我要有更大的角速度跟到目标值
结合电机最大角速度以及量纲等, 我们就可以直接预先设置一个
PID参数了, 而后再在这个参数值的附近微调
4 其他问题
机械问题, 如螺丝松动, 传动的间隙过大, 阻尼过大, 电机扭矩选型不适配
等
上位机问题, 如发送过来的数据不干净, 有NaN, 非零值为零等
5 总结
其实这一期视频某种程度上就是水视频. 当然, 对于新同学还是很有收获
的
调试调试, 要调, 还要试, 不要不敢尝试, 不要一遇到问题就问别人, 这不
利于自己的发展, 也耽误其他人的时间
在会查找资料的基础上, 还需要多想想物理现实, 多推推公式, 结合串口
绘图调参, 不要盲调
可能经历了上面排查的方法, 我们也无法对问题进行解决, 发到群里, 给
足自己的测试记录, 大家集思广益一起讨论一下, 也是很不错的
分享一位群友提出的好的交流: 我的底盘小陀螺会乱甩, 这是视频里
的效果xxx, 这是代码相关内容xxx, 这是我在上位机串口绘图看到的
波形xxx
虽然目前还没有完全解决, 但经过讨论与思考, 我们也都能对这个问
题进行了足够多的尝试, 并排除了一些问题, 剩下的需要进行分析的
方向也会逐渐明晰起来
培训资料
番外篇:如何 Debug
培训番外篇 4.7:开发环境问题与数据流问题两大类排障思路与常见实例(原文)
下载原始 PDF(0.4 MB)
以下为文档原文内容,插图与原 PDF 中位置一一对应:
如何Debug
1 引言
其实创作这次的补充内容的契机是想给大家来点奇文共赏. 在培训过程
中, 难免有一些初学者会提出一些比较离谱的问题, 对于这些问题, 本人实在
无力吐槽, 后来想想自己初学的时候也是这般无知, 遂释然. 但不得不说, 新
人和老登之间的知识壁垒, 往往不在于交流后会心一笑即可了然的技术和算
法, 也不在于你在战队呆了多久. 从能力而言, 成为一个战队老登, 需要的是
对问题的快速定位能力, 以及对问题的快速解决的能力. 如若能够掌握这两
点, 电控之路后面会很顺利的
而对于快速定位与快速解决问题, 我们将围绕问题这一核心进行展开.
对于RM电控而言, 我们的问题主要有如下两大类, 那就是开发环境与数据流
的两大问题. 其中, 在代码完全生成并烧录进开发板前的问题, 我认为是开发
环境的问题, 而烧录进开发板后, 开发板的表现则是数据流问题. 开发环境问
题大多以搜报错为主要方法, 而数据流问题则大多以追根溯源为主
此外, 机械结构, 上位机控制指令等, 也是问题的部分因素, 但这里暂不
过多讨论
开发环境的问题
数据流的问题
其他问题
这次内容偏向于经验之谈, 可能不同成长路线的队员对此有不同的见解,
各位见仁见智就好. 万变不离其宗, 那就是根据线索, 尤其是报错和表征来进
行分析
2 关于开发环境的问题
软件下载/安装/运行失败
首先想想是不是境外网站, 如果是, 尝试找境内的, 仔细看看说明文档
直接看报错内容, 根据报错先自行尝试解决
仔细想想是否漏看了教程, 或者老登给的资料, 或者用户手册
自己无法解决, 则对报错内容进行搜索, 其他人大概率也遇到过类似
问题
常见问题举例
视频简介的github链接访问不上
github在境外, 访问较为麻烦, 视频简介已经提到可以访问等价
的境内网站 https://git.lug.ustc.edu.cn 的
有同学的代码编译找不到某个h文件, 但我已经include了, 而且放到
了源代码文件里
Keil里面, 工程文件 ( 左侧栏 ) , 是源代码文件, 一般不需要把h文
件塞进去
include path 检查一下, 可能因为没有输入必要的路径
用我的电机库和CAN接口库, 代码编译提示找不到hcan2定义
因为那位同学的Cube没有打开CAN2
在Cube里配置一下CAN2, 或者注释掉相关代码就好了
打开Cube提示如下图内容
直接翻译过来, 进行合理配置即可
不要怕英语, 都是高考过来的人了, 这些单词都是3500词里的, 而且
我们现在还能用各种在线免费的翻译软件
有同学的代码必须得按一下复位才开始跑
Keil里勾选reset and run
有同学代码用全局C++会报错, 但又想用C++语法
自行搜索Keil单个文件如何使用C++编译器
提示: 工程中添加好单个源代码文件后, 右键该文件, 对该文件单
独加—cpp11
3 关于数据流的问题
读/写不到数据, 考虑问题的可能
模块错误, 测, 换
电池没电, 开发板损坏, 串口模块损坏, 电调损坏等, 直接换
接线错误, 测, 改
CAN_H与CAN_L接反, 改回来
线断了, 万用表短路档滴一下
没有共地, 扯根线接一下
工程代码配置错误
开发板上的晶振频率与Cube时钟树配置不匹配
外设对应的GPIO与本身的GPIO是不匹配的
工程代码开发编写错误
利用逐行逐句调试功能, 以及串口绘图功能进行对数据流的追踪
并进行解决
常见问题举例
串口收不到数据
查配置, 收发双方的配置是否一致, GPIO是否与原理图对应上, 是
否配置对应的中断或DMA
查接线, Rx和Tx是否接反, 是否共地, 线路是否过长导致噪声干扰
极大
查晶振, 比如板载晶振24M, 但你在时钟树配置的是8M, 那么
115200的波特率相当于是345600, 或者说物理超频了
加断点debug, 查是否进入了中断
利用USB-TTL或串口绘图查发送的数据是否正确
底盘平动没问题但旋转抽风
这种情况下认为通信一切正常
利用串口绘图, 查看当前的底盘目标值以及各个电机的角速度关
系
有同学车的云台会一颤一颤的
首先排查接线问题, 是否松动, 电机电源线是否接触不良
不控制电机, 或者说不给电机发送控制指令, 利用总线分析仪观
察电机的反馈帧是否正常
利用串口绘图, 观察电机的反馈数据内容是否正常
给电机接控, 利用串口绘图, 观察电机的控制数据波形是否正常
在适当的地方打断点, 观察异常处变量的计算情况, 从而确定是
参数问题, 正负号问题还是什么其他的问题
如何快速获取PID参数, 这个参数到底有什么含义
PID有两个作用, 一个是控制, 一个是跟随
在控制方面, PID是一定程度上反映物理现实的
比如以速度为控制量的角度环, 我们输入的是当前角度和目标角
度, 输出的是角速度
P, 就代表着离目标越远, 我要有更大的角速度跟到目标值
结合电机最大角速度以及量纲等, 我们就可以直接预先设置一个
PID参数了, 而后再在这个参数值的附近微调
4 其他问题
机械问题, 如螺丝松动, 传动的间隙过大, 阻尼过大, 电机扭矩选型不适配
等
上位机问题, 如发送过来的数据不干净, 有NaN, 非零值为零等
5 总结
其实这一期视频某种程度上就是水视频. 当然, 对于新同学还是很有收获
的
调试调试, 要调, 还要试, 不要不敢尝试, 不要一遇到问题就问别人, 这不
利于自己的发展, 也耽误其他人的时间
在会查找资料的基础上, 还需要多想想物理现实, 多推推公式, 结合串口
绘图调参, 不要盲调
可能经历了上面排查的方法, 我们也无法对问题进行解决, 发到群里, 给
足自己的测试记录, 大家集思广益一起讨论一下, 也是很不错的
分享一位群友提出的好的交流: 我的底盘小陀螺会乱甩, 这是视频里
的效果xxx, 这是代码相关内容xxx, 这是我在上位机串口绘图看到的
波形xxx
虽然目前还没有完全解决, 但经过讨论与思考, 我们也都能对这个问
题进行了足够多的尝试, 并排除了一些问题, 剩下的需要进行分析的
方向也会逐渐明晰起来
直接翻译过来, 进行合理配置即可
不要怕英语, 都是高考过来的人了, 这些单词都是3500词里的, 而且
我们现在还能用各种在线免费的翻译软件
有同学的代码必须得按一下复位才开始跑
Keil里勾选reset and run
有同学代码用全局C++会报错, 但又想用C++语法
自行搜索Keil单个文件如何使用C++编译器
提示: 工程中添加好单个源代码文件后, 右键该文件, 对该文件单
独加—cpp11
3 关于数据流的问题
读/写不到数据, 考虑问题的可能
模块错误, 测, 换
电池没电, 开发板损坏, 串口模块损坏, 电调损坏等, 直接换
接线错误, 测, 改
CAN_H与CAN_L接反, 改回来
线断了, 万用表短路档滴一下
没有共地, 扯根线接一下
工程代码配置错误
开发板上的晶振频率与Cube时钟树配置不匹配
外设对应的GPIO与本身的GPIO是不匹配的
工程代码开发编写错误
利用逐行逐句调试功能, 以及串口绘图功能进行对数据流的追踪
并进行解决
常见问题举例
串口收不到数据
查配置, 收发双方的配置是否一致, GPIO是否与原理图对应上, 是
否配置对应的中断或DMA
查接线, Rx和Tx是否接反, 是否共地, 线路是否过长导致噪声干扰
极大
查晶振, 比如板载晶振24M, 但你在时钟树配置的是8M, 那么
115200的波特率相当于是345600, 或者说物理超频了
加断点debug, 查是否进入了中断
利用USB-TTL或串口绘图查发送的数据是否正确
底盘平动没问题但旋转抽风
这种情况下认为通信一切正常
利用串口绘图, 查看当前的底盘目标值以及各个电机的角速度关
系
有同学车的云台会一颤一颤的
首先排查接线问题, 是否松动, 电机电源线是否接触不良
不控制电机, 或者说不给电机发送控制指令, 利用总线分析仪观
察电机的反馈帧是否正常
利用串口绘图, 观察电机的反馈数据内容是否正常
给电机接控, 利用串口绘图, 观察电机的控制数据波形是否正常
在适当的地方打断点, 观察异常处变量的计算情况, 从而确定是
参数问题, 正负号问题还是什么其他的问题
如何快速获取PID参数, 这个参数到底有什么含义
PID有两个作用, 一个是控制, 一个是跟随
在控制方面, PID是一定程度上反映物理现实的
比如以速度为控制量的角度环, 我们输入的是当前角度和目标角
度, 输出的是角速度
P, 就代表着离目标越远, 我要有更大的角速度跟到目标值
结合电机最大角速度以及量纲等, 我们就可以直接预先设置一个
PID参数了, 而后再在这个参数值的附近微调
4 其他问题
机械问题, 如螺丝松动, 传动的间隙过大, 阻尼过大, 电机扭矩选型不适配
等
上位机问题, 如发送过来的数据不干净, 有NaN, 非零值为零等
5 总结
其实这一期视频某种程度上就是水视频. 当然, 对于新同学还是很有收获
的
调试调试, 要调, 还要试, 不要不敢尝试, 不要一遇到问题就问别人, 这不
利于自己的发展, 也耽误其他人的时间
在会查找资料的基础上, 还需要多想想物理现实, 多推推公式, 结合串口
绘图调参, 不要盲调
可能经历了上面排查的方法, 我们也无法对问题进行解决, 发到群里, 给
足自己的测试记录, 大家集思广益一起讨论一下, 也是很不错的
分享一位群友提出的好的交流: 我的底盘小陀螺会乱甩, 这是视频里
的效果xxx, 这是代码相关内容xxx, 这是我在上位机串口绘图看到的
波形xxx
虽然目前还没有完全解决, 但经过讨论与思考, 我们也都能对这个问
题进行了足够多的尝试, 并排除了一些问题, 剩下的需要进行分析的
方向也会逐渐明晰起来
Was this page helpful?