野火PID上位机通信移植

野火PID上位机通信移植

一、简介

​ 在调试pid参数的时候,需要用到上位机,这里选用“野火多功能调试助手”。

image-20210823204059524

​ 使用调试助手,需要下位机与上位机之间的通信协议,下载野火关于电机的相关例程,可以找到已经写好的通信协议。我们只需要将通信协议移植到我们自己的程序里就行。野火的例程使用HAL库写的,所以我的电机程序也是用HAL库写的,如果要将通信协议改成标准库,要更麻烦一些。

二、示例

1.添加文件

​ 选择野火电机例程中的“PID——增量式按键修改目标值”,将其中的“protocol”文件夹和“pid”文件夹复制到自己的程序当中(我直接用的野火的pid算法),我将其重新命名为“PID”和“PID_PROTOCOL”,然后在keil5中添加这个.c文件和.h头文件。
image-20210807222013470

2.修改头文件

​ 将这两个文件所包含的头文件修改成自己程序的头文件。比如我这里,我将其他的头文件都放在了“head.h”里,所以我只需要将pid.h和pid_protocol.h添加到head.h,再改成#include "head.h"就可以了。

image-20210807222743726

image-20210807222901606

​ 或者将野火例程中的include都替换成自己的头文件。

3.修改usart

​ 打开野火例程中的"stm32f4xx_it.c"文件,会发现有两个中断服务函数。

image-20210807223645141

​ 查看其宏定义可知,DEBUG_USART_IRQHandler(void)实际是USART1_IRQHandler,所以我们将其中的内容复制到自己程序的中断服务函数中,并且将他说使用的句柄UartHandle替换成自己的。

image-20210807224800188
并且将pid的通信函数添加到此处,如下:

image-20210823204636504

4.修改代码

image-20210807225531925

​ pid.c中,这两个可以删掉,因为没用。

image-20210807225709011

​ pid_protocol.c中,启动电机、停止电机换成自己的启停函数,第三个SET_BASIC_TIM_PERIOD(temp)查看宏定义,是__HAL_TIM_SET_AUTORELOAD(&TIM_TimeBaseStructure, (T)*50 - 1),就是设置重装载值,因为我不需要修改周期,所以我是直接注释了这个指令,需要的话替换即可。

image-20210807230334046

​ 在pid_protocol.c中,将句柄UartHandle替换成自己的usart句柄,比如我是UART1_Handler。

image-20210807231204458

​ 在main函数中添加这两个函数,进行相应的初始化。

image-20210807233756022

​ 这个地方需要点修改,将红框里的内容去掉,因为我不需要,将画红线的输入参数改成电机的速度。然后将time_period_fun()函数插到计算速度的地方去。比如:
image-20210807234139893

​ 我这里每50ms就会计算一次速度,然后pid计算,如果速度与目标值不一样,就会调用DC_motor_SpeedChange()函数。

image-20210807234831113

​ 将pid的计算值传给电机,修改电机速度。

版权声明:本文为CSDN博主「我与赌毒不共戴天」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52684874/article/details/119706975

生成海报
点赞 0

我与赌毒不共戴天

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

QSPI Flash存储控制器(概述)

QSPI Flash存储控制器(概述) 1. 特征概述 内存映射的直接操作模式,用于Flash数据传输和执行Flash存储的代码;软件设置的间接操作模式,用于低延迟、非计

写一个锅炉温控系统

1.前言 我家在东北农村,冬天很冷,买了一个锅炉,需要循环泵的。简单来说就是锅炉水热了之后循环泵自动开启,然后将热水输送走,送到暖气,热水抽走,