野火多功能上位机的移植#串口pid调参

第一次写博客,有不到位的地方见谅。。。

我们平时在调pid的过程中,大多数人都是调一次参数下载一次程序,小的程序还好说,大点的项目编译一次基本就30s去了,特别是智能车比赛的有个编译器,那编译速度。。。啧啧,就不点名了。而且有时候一般不止一组pid,像平衡车这种就3,4组pid。像飞控这种10多组pid更是把人调麻。。。假设使用串口调参,原来一分钟改一次参数,现在几秒钟,效率提升何止10倍。而且还可以用蓝牙,把发送端接电脑,接收端连单片机可以实现无线调参。用串口当然需要一个好的上位机,我用过许多上位机,一个偶然突然发现野火的多功能上位机巨好用!!!以下是他的UI,很简洁美观。

a18d3c2d95ea40f8a86b795f22870ff1.png

 可以看到功能很多,不仅有波形显示,还有pid数据下发,还有地图和摄像头,太全了,强烈推荐。

于是,我看了下野火的代码,发现这个上位机程序全是HAL库,虽然HAL不错,但是有些外设老一点的hal资料不好找,而且标准库也用习惯了,于是,我移植了上位机的程序,过程挺顺利。

首先,继承了上位机的所有功能,包括设置各个通道的pid值,目标值和复位。

同时,新增了将pid值写入flash的功能,只需按下按键,就能把对应通道的pid值写入flash,在初始化时读取,上电复位不丢失。重要说明,关于flash写入的操作一定要格外谨慎,因为flash不像led灯,随便你怎么弄,flash的写入次数是有限制的,好像是10万次,看起挺多,但是你单片机一直调用的话,一分钟就废了,所以你可以灯测试一下,确保flash的条件不会一直出发!!!在这里值得一提的是,写入和读取时有个难点,因为pid数据为float数据,而flash寄存器16位,那么,如何将float存入flash,还能够较高程度还原?

网上大部分的方法是将float拆分成两个short存入连续的寄存器,然后通过算法融合。但是我感觉较为麻烦,于是,我想到了通过sprintf函数将float数据打印成字符串,之后读出字符串后再通过atof转化回来,实测可行。。

下面看下上位机的输出效果,pid没调。

这里得着重说一下,在循环中将数据发到上位机时有一个bug,假如你定义了一个变量x,你想显示x的波形,你不能直接调用set_computer_value(SEND_FACT_CMD, CURVES_CH1, &x, 1);     // 给通道 1 发送实际值,否者你会发现一个神奇的现象,x的值可能直接变成范围上限,如果x是u8,那么就是255,如果是char,变成127。为了稳健一点,最好再定义一个变量y,把x传入y,在调用函数将y上报,

y=x;

set_computer_value(SEND_FACT_CMD, CURVES_CH1, &y, 1);这个没有问题,

还有一个小bug,在初始化pid上报同步上位机数据的时候,第一次给上位机发信息时,上位机可能没有反应,这时候加个循环就行了,pid多上报几次。

用上位机的时候选择模式2,将鼠标放在纵轴上滚动滚轮可以调节显示的范围。

板子用的我自己做的板子,这里用的串口1调参,你可以用别的串口输出显示你想看的信息。想要板子的话也可以私我。板子集成有rgb灯,蜂鸣器,舵机接口,两个编码电机接口,2种6050接口,lcd屏幕,编码旋钮,12V降压,电机驱动tb6612驱动,背后还有esp12F,用来无线通信,足够满足大部分比赛。

就写到这吧,欢迎大家讨论修改,工程放下边,永久有效。好用的话回来点个赞,

链接:https://pan.baidu.com/s/1rTm70adOsz-ot0moVnrx3w 
提取码:6666

如有侵权的地方请联系速删

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
野火上位机PID波形是指在野火PID助手软件中,通过串口通信将PID控制器的输出值和实际值以波形的形式显示出来。这样可以直观地观察PID控制器的调节效果。在野火PID助手中,可以通过设置主调量设定值、主调实际值、主调的PID输出、副调的实际值和副调的PID输出等参数来实现PID控制。\[2\]当野火PID助手发送数据时,另一端的串口助手软件可以接收并显示野火PID助手发来的数据,从而分析PID控制器下发数据的数据格式。\[1\]如果遇到野火PID助手下发指令板子没有反应,或者板子上传数据PID数据无法显示曲线,可以先排查串口数据的格式是否正确,然后检查自己程序中的串口收发函数是否正确编写,只有串口数据符合规定的协议格式,才能正确进行数据通信。\[3\] #### 引用[.reference_title] - *1* *3* [电机PID控制补充篇-野火上位机串口协议介绍](https://blog.csdn.net/hbsyaaa/article/details/123966179)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【单片机学习笔记】(36):理解应用PID算法,通过上位机查看波形以整定PID参数](https://blog.csdn.net/wenhaiii/article/details/120941979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值