赞
踩
刚入门智能车的朋友们可能都知道备赛时要对电机进行PID调试,看了一大堆资料,了解了什么是位置式PID,什么是增量式PID,kuakua一顿乱写,写好了电机PID控制代码。写好代码之后,诶!我要怎么调试呢?怎么在电脑上看电机的转速呢?哦~!懂了!要用上位机来看。诶!上位机是什么?……
估计小白们一开始肯定会有这样的疑惑吧。下面我就开门见山,给大家展示一下我用的“上位机”。
它长这个样子:(乍一看有点像MC里的方块)
刚开始电机PID调试(速度波动很大,纵轴表示速度,蓝线和紫线是目标速度,分别为左右轮):
电机PID调试完成后(速度波动小):
电机PID调参到上图所示的程度应该就差不多了,虽然每个队每辆车的调试结果可能有所差异,但也大差不差。在这篇文章里我主要讲如何让电机的转速在电脑中显示,方便车友们PID调参。
逐飞关于无线模块的资料都是免费开源的(获取链接我会放在文末)。当你向逐飞客服要资料时,你收到的资料大概会是这样:
这里给出了两种上位机,一个是逐飞科技无线转串口上位机,一个是sscom32上位机(在串口助手压缩文件里)。虽然给了这两个上位机,但看图像调PID的话这两个上位机基本用不上。
拿到资料之后,我们首先点开串口说明书,在这里我建议大家购买最新或者较新版本的无线串口模块。接着按照说明书里的内容配置好无线串口模块。我一开始没有配置,波特率之类的参数都默认好了,如果一开始你没有配置无线串口模块不能实现数据发送的话,就按照说明书配置一遍。
接下来就到了配置虚拟示波器(VisualScope)。之前没听说过虚拟示波器的可能不知道在哪里找到这个示波器的资源,但其实这个资源是可以直接和逐飞客服要的(我会放在文末),而且逐飞的代码库里有与虚拟示波器之间的通信协议(代码层面),在写代码的时候直接调用逐飞库里的函数就可以实现数据在示波器显示了。(野火调试助手之类的上位机也很好用,但是逐飞没有现成的函数实现数据在野火上位机的显示。)
获取虚拟示波器资源之后,参照使用说明配置好串口与示波器。最重要的是通信端口(我这里是COM7)和波特率(115200)。
配置好以上,我们给MCU烧录带有数据传送的代码,就可以实现数据在虚拟示波器的显示。
- //以下代码编写使用了逐飞最新的库
- #include "zf_common_headfile.h"
-
- int16 data1=0, data2=0, data3=0, data4=0;
- uint8 data_buffer[10];
-
- int main(void)
- {
- clock_init(SYSTEM_CLOCK_600M); // 初始化芯片时钟 工作频率为 600MHz
- debug_init(); // 初始化默认 debug uart(这些初始化函数默认加入)
- wireless_uart_init (); // 无线转串口模块 初始化
-
- while(1)
- {
- data1+=10;
- data2-=10;
- data3*=2;
- data4+=1;
- virtual_oscilloscope_data_conversion (data1, data2, data3, data4, data_buffer); // 将4个数据打包
- wireless_uart_send_buff(data_buffer, 10); // 发送数据
- }
- }
以上代码的data1等变量为测试参数,实际运用时换成编码器值encoder1、encoder2、encoder3、encoder4。
无线转串口资料:https://pan.baidu.com/s/1nTQtYR_6dBcDM_vS_UEv9A
虚拟示波器:https://pan.baidu.com/s/198CMXTZsbI3HAEqNXDngBw
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。