自学内容网 自学内容网

位置式PID-控制步进电机-位置环-stm32

基本原理

1、软件设计

本闭环控制例程是在步进电机编码器测速例程的基础上编写的,这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到,完整的代码请参考本章配套的工程。 我们创建了4个文件:bsp_pid.c和bsp_pid.h文件用来存放PID控制器相关程序,bsp_stepper_ctrl.c、bsp_stepper_ctrl.h 文件用来存步进电机位置环控制程序及相关宏定义。

1. 编程要点
  1. 定时器 IO 配置

  2. 步进电机、编码器相关外设初始化

  3. 位置闭环控制实现

  4. PID参数整定

代码分析

PID代码

/**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2019-xx-xx
  * @brief   PID算法实现
  ******************************************************************************
  * @attention
  *
  * 实验平台:野火  STM32 F103 开发板 
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "./pid/bsp_pid.h"
#include "math.h"
#include "./stepper/bsp_stepper_ctrl.h"
#include "./protocol/protocol.h"
/* 定义全局变量 */
_pid pid;
float set_point=0.0;
int pid_status=0;

/**
  * @brief  PID参数初始化
*@note 无
  * @retval 无
  */
void PID_param_init()
{
/* 初始化参数 */
  pid.target_val=0.0;
  pid.actual_val=0.0;
  pid.err=0.0;
  pid.err_last=0.0;
  pid.integral=0.0;
  pid.Kp = 1.3;
  pid.Ki = 0;
  pid.Kd = 0;

  #if PID_ASSISTANT_EN
    float pid_temp[3] = {pid.Kp, pid.Ki, pid.Kd};
    set_computer_value(SEND_P_I_D_CMD, CURVES_CH1, pid_temp, 3);// 给通道 1 发送 P I D 值
  #endif
}

/**
  * @brief  设置目标值
  * @param  val目标值
*@note 无
  * @retval 无
  */
void set_pid_actual(float temp_val)
{
  pid.target_val = temp_val;    // 设置当前的目标值
}

/**
  * @brief  获取目标值
  * @param  无
*@note 无
  * @retval 目标值
  */
float get_pid_a

原文地址:https://blog.csdn.net/weixin_66732375/article/details/144676266

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!