野火PID上位机通信移植
一、简介
在调试pid参数的时候,需要用到上位机,这里选用“野火多功能调试助手”。
使用调试助手,需要下位机与上位机之间的通信协议,下载野火关于电机的相关例程,可以找到已经写好的通信协议。我们只需要将通信协议移植到我们自己的程序里就行。野火的例程使用HAL库写的,所以我的电机程序也是用HAL库写的,如果要将通信协议改成标准库,要更麻烦一些。
二、示例
1.添加文件
选择野火电机例程中的“PID——增量式按键修改目标值”,将其中的“protocol”文件夹和“pid”文件夹复制到自己的程序当中(我直接用的野火的pid算法),我将其重新命名为“PID”和“PID_PROTOCOL”,然后在keil5中添加这个.c文件和.h头文件。
2.修改头文件
将这两个文件所包含的头文件修改成自己程序的头文件。比如我这里,我将其他的头文件都放在了“head.h”里,所以我只需要将pid.h和pid_protocol.h添加到head.h,再改成#include "head.h"就可以了。
或者将野火例程中的include都替换成自己的头文件。
3.修改usart
打开野火例程中的"stm32f4xx_it.c"文件,会发现有两个中断服务函数。
查看其宏定义可知,DEBUG_USART_IRQHandler(void)实际是USART1_IRQHandler,所以我们将其中的内容复制到自己程序的中断服务函数中,并且将他说使用的句柄UartHandle替换成自己的。
并且将pid的通信函数添加到此处,如下:
4.修改代码
pid.c中,这两个可以删掉,因为没用。
pid_protocol.c中,启动电机、停止电机换成自己的启停函数,第三个SET_BASIC_TIM_PERIOD(temp)查看宏定义,是__HAL_TIM_SET_AUTORELOAD(&TIM_TimeBaseStructure, (T)*50 - 1),就是设置重装载值,因为我不需要修改周期,所以我是直接注释了这个指令,需要的话替换即可。
在pid_protocol.c中,将句柄UartHandle替换成自己的usart句柄,比如我是UART1_Handler。
在main函数中添加这两个函数,进行相应的初始化。
这个地方需要点修改,将红框里的内容去掉,因为我不需要,将画红线的输入参数改成电机的速度。然后将time_period_fun()函数插到计算速度的地方去。比如:
我这里每50ms就会计算一次速度,然后pid计算,如果速度与目标值不一样,就会调用DC_motor_SpeedChange()函数。
将pid的计算值传给电机,修改电机速度。
版权声明:本文为CSDN博主「我与赌毒不共戴天」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52684874/article/details/119706975
暂无评论