智能车竞赛·通过虚拟示波器实现电机PID调参

这篇具有很好参考价值的文章主要介绍了智能车竞赛·通过虚拟示波器实现电机PID调参。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要针对智能车小白,大佬可以浅看一下,如有错误希望大家多多指正。

引入:

刚入门智能车的朋友们可能都知道备赛时要对电机进行PID调试,看了一大堆资料,了解了什么是位置式PID,什么是增量式PID,kuakua一顿乱写,写好了电机PID控制代码。写好代码之后,诶!我要怎么调试呢?怎么在电脑上看电机的转速呢?哦~!懂了!要用上位机来看。诶!上位机是什么?……

估计小白们一开始肯定会有这样的疑惑吧。下面我就开门见山,给大家展示一下我用的“上位机”。

  • 这里插一句,因为百度百科对“上位机”的释义是:可以直接发出操控命令的计算机,屏幕上显示各种信号变化(液压,水位,温度等)。我用的这个软件(VisualScope)没有发出操控命令的功能,只能显示信号变化,所以下面都把它叫做示波器

它长这个样子:(乍一看有点像MC里的方块)

智能车竞赛·通过虚拟示波器实现电机PID调参

刚开始电机PID调试(速度波动很大,纵轴表示速度,蓝线和紫线是目标速度,分别为左右轮):

智能车竞赛·通过虚拟示波器实现电机PID调参

电机PID调试完成后(速度波动小):

智能车竞赛·通过虚拟示波器实现电机PID调参

 电机PID调参到上图所示的程度应该就差不多了,虽然每个队每辆车的调试结果可能有所差异,但也大差不差。在这篇文章里我主要讲如何让电机的转速在电脑中显示,方便车友们PID调参。

第一步 硬件准备

  •  编码器。可以这么说,电机闭环的实现离不开编码器。如果你是双驱车那就要有两个编码器,四驱车(H/M)就要有四个编码器。编码器用龙邱或者逐飞的都可以。要带方向的还是正交编码视个人情况而定。
  • 无线模块。本人使用的是逐飞的恩智浦智能车无线串口模块,排针端和USB端各一个,一个插在电脑接收数据,一个插在主板的串口模块发送数据。

第二步 配置无线模块和虚拟示波器

逐飞关于无线模块的资料都是免费开源的(获取链接我会放在文末)。当你向逐飞客服要资料时,你收到的资料大概会是这样:

智能车竞赛·通过虚拟示波器实现电机PID调参

 这里给出了两种上位机,一个是逐飞科技无线转串口上位机,一个是sscom32上位机(在串口助手压缩文件里)。虽然给了这两个上位机,但看图像调PID的话这两个上位机基本用不上。

拿到资料之后,我们首先点开串口说明书,在这里我建议大家购买最新或者较新版本的无线串口模块。接着按照说明书里的内容配置好无线串口模块。我一开始没有配置,波特率之类的参数都默认好了,如果一开始你没有配置无线串口模块不能实现数据发送的话,就按照说明书配置一遍。

接下来就到了配置虚拟示波器(VisualScope)。之前没听说过虚拟示波器的可能不知道在哪里找到这个示波器的资源,但其实这个资源是可以直接和逐飞客服要的(我会放在文末),而且逐飞的代码库里有与虚拟示波器之间的通信协议(代码层面),在写代码的时候直接调用逐飞库里的函数就可以实现数据在示波器显示了。(野火调试助手之类的上位机也很好用,但是逐飞没有现成的函数实现数据在野火上位机的显示。)

智能车竞赛·通过虚拟示波器实现电机PID调参
虚拟示波器的操作界面

 获取虚拟示波器资源之后,参照使用说明配置好串口与示波器。最重要的是通信端口(我这里是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。

注意事项

  • 电机PID调试方法:先调 I 值,调至实际速度曲线在速度参考线附近振荡时,再调P值,最后根据实际调试效果来调试D值。如果仅调试了PI就能很好地实现速度闭环,那么D值就不是必要的(电机PI)。
  • 很重要的一点!调试效果除了受调参是PID数值的影响,还受无线串口发送数据间隔编码器获取电机转速的时间间隔影响。你想,编码器每间隔1s获取一次转速和每间隔1ms就获取一次转速对比,肯定是后者的精确度更高。这个获取数据的时间间隔是可以在代码直接修改,或者通过 systick_delay函数间接修改。

资料获取:

无线转串口资料:https://pan.baidu.com/s/1nTQtYR_6dBcDM_vS_UEv9A

虚拟示波器:https://pan.baidu.com/s/198CMXTZsbI3HAEqNXDngBw文章来源地址https://www.toymoban.com/news/detail-454003.html

写在最后:如果大家对本文章有任何疑惑的都可以在评论区留言。感谢!

到了这里,关于智能车竞赛·通过虚拟示波器实现电机PID调参的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT实现固高运动控制卡示波器

    目录 一、固高示波器 二、基于QCustomPlot实现示波器 三、完整源码         固高运动控制卡自带的软件有一个示波器功能,可以实时显示速度的波形,可辅助分析电机的运行状态。但是我们基于sdk开发了自己的软件,无法再使用该功能,原因是2个软件不能同时与控制卡通

    2024年02月04日
    浏览(25)
  • C# 使用 ScottPlot.WinForms 实现示波器的波形显示

    灵活使用C# 的部分图表组件,可以快速搭建一个【示波器】波形显示的界面 这里使用: ScottPlot.WinForms ,通过官方描述是开源的 下载地址:https://github.com/ScottPlot/ScottPlot.git visual studio 可以使用: NuGet 安装管理 ScottPlot.WinForms ScottPlot 支持:WPF 与 WinForms等多种实现方法 官方介绍

    2023年04月08日
    浏览(92)
  • PyVISA使用——用python控制TEK示波器源码实现

    项目上提出自动化测试需求,要求能够对板级信号使用示波器等仪器做自动化测量 使用PyVISA 方案实现。 VISA (Virtual Instrument Software Architecture) 是一个用于访问测量仪器和控制计算机之间的接口标准,由美国国家仪器公司(National Instruments)推出,用于实现仪器之间的通信和控

    2024年02月10日
    浏览(30)
  • ThunderScope开源示波器

    4CH,1GSa/S 开源示波器。前端很简洁,BUF802+LMH6518,ADC是HMCAD1511,用Xilinx A7 FPGA进行控制,数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网,强。 设计日志:https://hackaday.io/project/180090-thunderscope 开源地址:https://github.com/EEVengers/ThunderScope discord讨论组:

    2024年02月16日
    浏览(39)
  • 示波器带宽

    示波器有很多不同规格,确定了可捕获和测量信号的准确度。但是示波器的主要规格是其带宽。 所有示波器都具有以较高频率展示的低通频率响应,如下图所示。大多数带宽规格为 1 GHz 以及更低的示波器通常具有高斯频率响应。示波器高斯频率响应近似于单极点低通滤波器

    2024年02月13日
    浏览(33)
  • 电脑连接示波器读取数据

    示波器型号:北京普源的RIGOL MSO4034 首先连接示波器: 连接线与示波器相连的端口如上图USB DEVICE所示,是一个比较奇怪的方形接口。连接线的另一端是标准的USB typeA接口,可以直接插在电脑上,当示波器和电脑连接时,电脑会提示安装驱动。 该型号示波器端口是业界通用的

    2023年04月08日
    浏览(33)
  • STM32示波器设计

    目录 前言 1、硬件模块 2、示波器基础知识 2.1 当头一棒就是,波形的概念 2 .2 第二就是需要观察的波形参数 2.3 第三就是示波器参数 2.3.1 采样率 2.3.2 带宽 2.3.4 刷新率 3、ADC采集和DAC输出 3.1 ADC 采集实现 3.1.1 配置ADC采集为定时触发DMA采集模式 3.1.2 配置ADC关联的定时器 3.1.3 转

    2023年04月14日
    浏览(79)
  • 基于FPGA的示波器设计

    目录 一、设计要求 二、系统架构设计         本次基于FPGA的示波器设计主要技术要求包含以下内容: 系统能够实现模数转换功能,即包含ADC驱动模块; 系统能够实现ADC采集数据的缓存功能; 系统包含辅助测试模块,DAC数模转换模块; 系统能够实现ADC数据和LCD液晶显示数

    2024年02月14日
    浏览(31)
  • 嵌入式开发----示波器入门

    对于嵌入式工程师来说,示波器的使用极为重要,他就像是“电子工程师的眼睛”,把被测信号的实际波形显示在屏幕上,以供工程师查找定位问题或评估系统性能等,利用示波器能观察各种不同信号幅度随时间变化的波形曲线,还可以用来测试电量,如电压、电流、频率、

    2024年01月18日
    浏览(40)
  • 简单使用示波器485通讯抓波形

    串口通讯经常要用到示波器抓波形分析数据,很多人都熟悉232通讯抓波形,但是不清楚要怎么给485抓包,其实很简单 首先先准备一个120欧和一个33欧的电阻(没有阻值一样的可以使用阻值差不多的) 然后按下图接入到485通讯线上 然后将示波器的触发方式改为欠压   最后将示

    2024年02月16日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包