PID控制电机知识概述

​在很多学科竞赛中,我们时常会使用到电机。那么本篇文章我们就来说说如何基于STM32F4xx来驱动电机。
首先本篇文章的内容主要有以下几点:

一.我们需要控制什么样的电机。
二.控制这个电机所需要学习的知识。
三.如何对电机的速度进行控制。

一. 我们需要控制什么样的电机

在这里插入图片描述
我们所要控制的是带有编码器的电机,编码器的工作原理下文会讲到,这里将他理解为可以读出当前电机速的一个模块就好。

接下来我们对上图电机的接线简单的说明一下:由上至下依次标号1 ~ 6
1,6号线:电机电源输入。

2,5号线:电机编码器供电。

3,4号线双向编码器读值线路。

二、控制这个电机所需要学习的知识。
1.初始化相关GPIO口。

示例:

 GPIO_InitTypeDef  GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能PB,PE端口时钟
​
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;         //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);           //根据设定参数初始化GPIOB.5
 GPIO_SetBits(GPIOB,GPIO_Pin_5);             //PB.5 输出高电平

初始化GPIO口几点注意事项:

1.开启时钟的总线需要准确。(查找总线翻阅参考手册即可)

2.配置的输出模式需要根据使用的用途进行调整。

​2. TIM定时器使用。

TIM定时器使用之定时器:顾名思义就是将TIM定时器作为定时器然后使其产生中断,然后我们对中断服务函数进行操作。
这部分最重要的就是了解定时器定时时间的计算:

例:寄存器配置如下:

	TIM_TimeBaseInitStruct.TIM_Period        = (10000 - 1);   //重装载值
    TIM_TimeBaseInitStruct.TIM_Prescaler     = (7200 - 1);    //预分频系数

在默认时钟为72M时计算如下:
预分频系数为7199,那么定时器时钟频率为72M / 7200 = 10kHz

周期为0.1ms,定时器计数达到重装值时候,产生定时器中断

则定时器中断时间为10000 * 0.1ms = 1s

TIM定时器使用之PWM输出:即使用TIM的PWM模式使对应IO口输出PWM方波。部分配置主要代码:


  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1      设置为模式一即小于CCRX为有效
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStructure.TIM_Pulse =250;        //CCRx
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出的有效极性  低
  TIM_OC3Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 通道3
 
  TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR1上的预装载寄存器
  TIM_ARRPreloadConfig(TIM8,ENABLE);//ARPE使能 //这个周期生效或下个周起生效
  TIM_Cmd(TIM8, ENABLE);  //使能TIM8
  
  TIM_CtrlPWMOutputs(TIM8, ENABLE);     //高级定时器需要这句才能输出PWM

TIM定时器使用之编码器读值:即使用定时器的编码器模式,对电机速度进行读值。部分配置主要代码:

// 定时器编码器模式初始化
  //配置时基单元
  TIM_DeInit(TIM3);                //复位TIM3相关寄存器
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);      //初始化
  TIM_TimeBaseStructure.TIM_Prescaler = 0;            //分频值
  TIM_TimeBaseStructure.TIM_Period = 65535;            //自动重装载
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;      //
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down; // 这里可以自己设置,或使用默认值
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  //此处:TIM_ICPolarity_Rising 意思是不反相
  TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising ,TIM_ICPolarity_Rising); // 这里配置了编码器模式
  //配置编码器
  TIM_ICStructInit(&TIM_ICInitStructure);  //该结构中按缺省值(默认)填入
  TIM_ICInitStructure.TIM_Channel=TIM_Channel_1 |TIM_Channel_2;    //通道
  TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;  //设置
  TIM_ICInitStructure.TIM_ICFilter = 0;  //配置滤波器值
  TIM_ICInit(TIM3, &TIM_ICInitStructure);  //设置通道
  TIM_SetCounter(TIM3, 0);
  TIM_Cmd(TIM3, ENABLE);            //定时器总开关

这里使用的是TIM3定时器的通道1和2。

3.PID算法相关知识:

这部分学习可参考:https://www.bilibili.com/video/BV1Ds411t7x4?from=search&seid=17723158423363342532

三.如何对电机的速度进行控制

学习完上面这部分,我们对于控制电机所需要用到的部分已经清楚了。

接下来我们在只要将上面的配置结合起来就能做到对电机的控制。

结合思路如下:

  1. 初始化GPIO口。
  2. 设定一个定时器为编码器模式,并初始化它。
  3. 设置一个定时器,负责每隔一段时间将编码器的计数值读出来。
  4. 设置PWM输出,相关寄存器配置。
  5. 结合编码器读出的数值编写PID算法。
  6. 根据PID算法所返回的值,改变PWM占空比。
  • 23
    点赞
  • 210
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
PID电机控制目录 第1 章 数字PID 控制 1.1 PID 控制原理 1.2 连续系统的模拟PID 仿真 1.3 数字PID 控制 1.3.1 位置式PID 控制算法 1.3.2 连续系统的数字PID 控制仿真 1.3.3 离散系统的数字PID 控制仿真 1.3.4 增量式PID 控制算法及仿真 1.3.5 积分分离PID 控制算法及仿真 1.3.6 抗积分饱和PID 控制算法及仿真 1.3.7 梯形积分PID 控制算法 1.3.8 变速积分PID 算法及仿真 1.3.9 带滤波器的PID 控制仿真 1.3.10 不完全微分PID 控制算法及仿真 1.3.11 微分先行PID 控制算法及仿真 1.3.12 带死区的PID 控制算法及仿真 1.3.13 基于前馈补偿的PID 控制算法及仿真 1.3.14 步进式PID 控制算法及仿真 第2 章 常用的PID 控制系统 2.1 单回路PID 控制系统 2.2 串级PID 控制 2.2.1 串级PID 控制原理 2.2.2 仿真程序及分析 2.3 纯滞后系统的大林控制算法 2.3.1 大林控制算法原理 2.3.2 仿真程序及分析 2.4 纯滞后系统的Smith 控制算法 2.4.1 连续Smith 预估控制 2.4.2 仿真程序及分析 2.4.3 数字Smith 预估控制 2.4.4 仿真程序及分析 第3 章 专家PID 控制和模糊PID 控制 3.1 专家PID 控制 3.1.1 专家PID 控制原理 3.1.2 仿真程序及分析 3.2 模糊自适应整定PID 控制 3.2.1 模糊自适应整定PID 控制原理 3.2.2 仿真程序及分析 3.3 模糊免疫PID 控制算法 3.3.1 模糊免疫PID 控制算法原理 3.3.2 仿真程序及分析 第4 章 神经PID 控制 4.1 基于单神经元网络的PID 智能控制 4.1.1 几种典型的学习规则 4.1.2 单神经元自适应PID 控制 4.1.3 改进的单神经元自适应PID 控制 4.1.4 仿真程序及分析 4.1.5 基于二次型性能指标学习算法的单神经元自适应PID 控制 4.1.6 仿真程序及分析 4.2 基于BP 神经网络整定的PID 控制 4.2.1 基于BP 神经网络的PID 整定原理 4.2.2 仿真程序及分析 4.3 基于RBF 神经网络整定的PID 控制 4.3.1 RBF 神经网络模型 4.3.2 RBF 网络PID 整定原理 4.3.3 仿真程序及分析 4.4 基于RBF 神经网络辨识的单神经元PID 模型参考自适应控制 4.4.1 神经网络模型参考自适应控制原理 4.4.2 仿真程序及分析 4.5 基于CMAC(神经网络)与PID 的并行控制 4.5.1 CMAC 概述 4.5.2 CMAC 与PID 复合控制算法 4.5.3 仿真程序及分析 4.6 CMAC 与PID 并行控制的Simulink 仿真 4.6.1 Simulink 仿真方法 4.6.2 仿真程序及分析 第5 章 基于遗传算法整定的PID 控制 5.1 遗传算法的基本原理 5.2 遗传算法的优化设计 5.2.1 遗传算法的构成要素 5.2.2 遗传算法的应用步骤 5.3 遗传算法求函数极大值 5.3.1 遗传算法求函数极大值实例 5.3.2 仿真程序 5.4 基于遗传算法的PID 整定 5.4.1 基于遗传算法的PID 整定原理 5.4.2 基于实数编码遗传算法的PID 整定 5.4.3 仿真程序 5.4.4 基于二进制编码遗传算法的PID 整定 5.4.5 仿真程序 5.5 基于遗传算法摩擦模型参数辨识的PID 控制 5.5.1 仿真实例 5.5.2 仿真程序 第6 章 先进PID 多变量解耦控制 6.1 PID 多变量解耦控制 6.1.1 PID 解耦控制原理 6.1.2 仿真程序及分析 6.2 单神经元PID 解耦控制 6.2.1 单神经元PID 解耦控制原理 6.2.2 仿真程序及分析 6.3 基于DRNN 神经网络整定的PID 解耦控制 6.3.1 基于DRNN 神经网络参数自学习PID 解耦控制原理 6.3.2 DRNN 神经网络的Jacobian 信息辨识 6.3.3 仿真程序及分析 第7 章 几种先进PID 控制方法 7.1 基于干扰观测器的PID 控制 7.1.1 干扰观测器设计原理 7.1.2 连续系统的控制仿真 7.1.3 离散系统的控制仿真 7.2 非线性系统的PID 鲁棒控制 7.2.1 基于NCD 优化的非线性优化PID 控制 7.2.2 基于NCD 与优化函数结合的非线性优化PID 控制 7.3 一类非线性PID 控制器设计 7.3.1 非线性控制器设计原理 7.3.2 仿真程序及分析 7.4 基于重复控制补偿的高精度PID 控制 7.4.1 重复控制原理 7.4.2 基于重复控制补偿的PID 控制 7.4.3 仿真程序及分析 7.5 基于零相差前馈补偿的PID 控制 7.5.1 零相差控制原理 7.5.2 基于零相差前馈补偿的PID 控制 7.5.3 仿真程序及分析 7.6 基于卡尔曼滤波器的PID 控制 7.6.1 卡尔曼滤波器原理 7.6.2 仿真程序及分析 7.6.3 基于卡尔曼滤波器的PID 控制 7.6.4 仿真程序及分析 7.7 单级倒立摆的PID 控制 7.7.1 单级倒立摆建模 7.7.2 单级倒立摆控制 7.7.3 仿真程序及分析 7.8 吊车-双摆系统的控制 7.8.1 吊车-双摆系统的建模 7.8.2 吊车-双摆系统的仿真 第8 章 灰色PID 控制 8.1 灰色控制原理 8.1.1 生成数列 8.1.2 GM 灰色模型 8.2 灰色PID 控制 8.2.1 灰色PID 控制的理论基础 8.2.2 连续系统灰色PID 控制 8.2.3 仿真程序及分析 8.2.4 离散系统灰色PID 控制 8.2.5 仿真程序及分析 8.3 灰色PID 的位置跟踪 8.3.1 连续系统灰色PID 位置跟踪 8.3.2 仿真程序及分析 8.3.3 离散系统灰色PID 位置跟踪 8.3.4 仿真程序及分析 第9 章 伺服系统PID 控制 9.1 伺服系统低速摩擦条件下PID 控制 9.1.1 Stribeck 摩擦模型描述 9.1.2 一个典型伺服系统描述 9.1.3 仿真程序及分析 9.2 伺服系统三环的PID 控制 9.2.1 伺服系统三环的PID 控制原理 9.2.2 仿真程序及分析 9.3 二质量伺服系统的PID 控制 9.3.1 二质量伺服系统的PID 控制原理 9.3.2 仿真程序及分析 第10 章 PID 实时控制的C++语言设计及应用 10.1 M 语言的C++转化 10.2 基于C++的三轴飞行模拟转台伺服系统PID 实时控制 10.2.1 控制系统构成 10.2.2 系统各部分功能的软件设计 10.2.3 仿真程序及分析 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值