【电机应用控制】——直流有刷电机&驱动板/编码器介绍&PID算法&实操代码思路

目录

前言

一、电机简介

二、直流有刷电机

1、基本知识

2、直流有刷驱动板

3、编码器介绍

三、PID算法

四、实操思路

1、单环控制

2、双环控制

3、三环控制

 拓:闭环死区

总结


前言

声明:学习笔记来自正点原子B站教程,仅供学习交流!!

玩具车、平衡车、无人机、印刷机、打印机、手机振动马达


一、电机简介

电机即电动机(motor),也叫作马达,电能转化为机械能。

分类:

按电源:直流、交流

按用途:驱动用、控制用

按运转速度:高速、低速、恒速、调速

常用的:

直流电机(有刷、无刷)、舵机、步进电机、伺服电机


1、直流有刷电机(Brushed DC Motor,简称BDC)是内含电刷装置的将直流电能转化为机械能的电动机。例如四驱赛车四个马达

操控方便、成本低、维护时换电刷即可;

结构相对复杂,电刷与换向器之间有摩擦,易产生电火花产生电磁干扰,噪音大寿命短故障多。

主要用于印刷机械、电动玩具、电风扇、低端自行车、各种消费型便宜产品。对扭矩有要求的场合需要加上减速齿轮,以增大扭矩——减速电机


2、直流无刷电机(BLDC)是指无刷和换向器的电机,又称无换向器电机。转子式(外壳跟着转,四轴飞行器)、内转子式、PMSM(内部绕组和反电动势与前两个不同,反电动势是正弦波,运转更加流畅,而前两个是方波)。

无碳刷结构,干扰小,噪音低,运转流畅、高速且寿命长;

控制较为复杂,可以使用方波或者正弦波换相。

主要用于四轴飞行器、汽车、工业工控、发动机等。


3、步进电机是一种把电脉冲信号转换为角位移或线位移的电动机

控制简单、低速扭矩大、速度取决于脉冲频率、(角)位移取决于脉冲个数;

存在空载启动频率,不可高于该频率否则就会丢步甚至堵转。

主要应用于3D打印机,绘图仪,数控机床等等。


4、伺服电机servo motor)可以理解为绝对服从控制信号指挥的电机,内部由一个伺服驱动器和一个PMSM电机.

控制速度、位置精度非常准确,效率高寿命长;

驱动器可设置电机工作在转速、转矩、位置等模式;但价格昂贵,控制复杂,内有232、485等协议。

主要应用于自动化生产线,机器人,自动化工业设备等等。


5、舵机(Servo)实际上可以看作一个伺服电机,主要由直流电机、减速齿轮组、角度传感器、控制电路构成。

一般旋转角度0~180°;闭环系统,可反馈转动的角度信息;通过PWM波占空比大小指定输出轴的旋转角度。

主要应用于飞机的舵面、机器人关机等。


二、直流有刷电机

1、基本知识

直流有刷电机(BDC)在允许范围内,供电即可工作,只需要调整电压即可改变转速,具有良好的调速性能。

结构:包括定子(产生固定磁场)、转子(若干绕组组成,受磁场力运动)、电刷(将外部电流输入到绕组上)和换向器(改变绕组中电流方向)。

参数:额定电压、额定电流、额定转速(r/min或PRM)、额定扭矩(kg*cm)、减速比(N:1)

电机原理:左手定则

测速原理:编码器测速,以磁电式编码器为例,它由磁盘和霍尔传感器组成,利用霍尔传感器来感知磁盘S极和N极的变化,把这种变化转换为脉冲信号。

补充:霍尔效应是测量磁场最常用的方法,在通路中接入一块薄的导电板让电流流过它,电荷会沿着导线从板的一边流向另一边,此时若在板块附近引入磁场,在洛伦兹力的作用下电荷载流子会偏转到板的一边,连接上电压表就可测量到因为电荷偏转而产生的电压,即这个过程是把磁场转换为可测量电压的效应。基本霍尔元件大豆提供很小的电压,因此大多芯片都设有高效益放大器霍尔传感器有两类,分别提供模拟信号输出数字信号输出,前者由霍尔元件、稳压器、放大器组成,适用于测量“距离”;后者只提供“开”或“关”的两种输出状态,内部有个施密特触发器,提供迟滞或两个不同的阈值电压,所以输出要么高要么低,如霍尔效应开关,常用作3D打印机和数控机床上的限位开关以及工业自动化系统中的检测和定位。此外霍尔传感器还作为车轮转速传感器以及曲轴或凸轮轴位置传感器


2、直流有刷驱动板

接口:编码器接口、控制采集信号专用接口、控制采集信号备用接口、电机电源M+、M-、驱动板电源DC12-60V。

实物接线材料:直流有刷电机、直流有刷驱动板、电机开发板(单片机)、排线、编码器接口端子、12V直流电源。

驱动板功能&原理:

H桥驱动

H桥可控制电机的运动和正反转,包括电机的转速。注意不能让同一侧的三极管同时接通,防止电源短路。

               

   

 从左到右,首先利用单片机产生两路互补的PWM信号,比如UH为1时UL为0,进入高速光耦EL0631(TA),光耦有隔离保护的作用,输出后PWM波与输入相反,比如UH为0、UL为1;这两路信号会分别进入上下两个半桥芯片(黄色),芯片的输入输出逻辑逻辑表如上(SD低电平时输出无效,也叫刹车/停止引脚)。

功能实现:

  • 电机启停:IO控制半桥芯片SD引脚的输入电平
  • 电机正反转:最简单的就是利用两个IO进行翻转,但是需要注意死区时间
  • 电机调速:一个IO固定输出,另一个使用PWM输出(改变占空比)
  • 电机正反转、调速实现: PWM互补输出,即两个IO固定输出与PWM输出交替进行。

代码函数:

  1. 定时器初始化函数:初始化通道IO,配置定时器、PWM互补输出以及死区控制
  2. 电机初始化函数:初始化SD引脚IO,默认拉低SD
  3. 电机启动函数:开启定时器和拉高SD引脚,开启定时器函数:HAL_TIM_Base_Start
  4. 电机停止函数:关闭定时器和拉低SD引脚,关闭定时器函数:HAL_TIM_Base_Stop
  5. 电机正反转函数:先关闭两个通道的PWM输出,正转就开启主通道,反转就开启互补通道,关闭PWM输出函数:HAL_TIM_PWM_Stop、HAL_TIMEx_PWMN_Stop

电流采集

电流采集,要想了解此时电机的工作状态,可通过采集电流检测,比如检测是否发生堵转等。

                     

实际是通过测量电压和已知电阻计算出的。从左到右,Motor-接在电压测量电路,采样电压I-V=电机电流*R32;但一般采样电压较小需要经过放大,此处是差分放大电路,放大倍数N=12/(1+1)=6倍,乘以放大倍数放大后再加上个参考电压Vref1.27进行一个抬升;输出电压Iout=6*电机电流*R32+1.27V,所以通过采集Iout得出,电机电流I=(Iout-Vref)/ (N*R32)

功能实现:

  • 通过ADC1的通道8(PB0)检测电机未启动时Iout的电压,作为参考电压Vref
  • 检测电机允许启动后Iout的电压Vrun
  • 计算实际电流I= (Vrun - 参考电压Vref ) / 0.12 A。0.12是0.02乘以放大倍数得出的。

电压采集

                            

非常简单!首先电阻分压Va=POWER/(12+12+1),a点电压等于引脚3处电压,利用电压跟随电路保证引脚1电压也等于3,即VBUS=V1=Va=POWER/25;采集VBUS,计算出PWER=25*VBUS。

功能实现:

  • ADC1的通道9(PB1)检测VBUS对应的ADC值,计算VBUS = ADC值 * 3.3 / 4096
  • 根据VBUS计算POWER的电压, POWER =  25 * VBUS 即 POWER= ADC值 * 3.3 /  4096 * 25

温度采集(热敏电阻)

                              

跟电压采集一样简单!VTEMP=3.3*4700/(4700+Rt),然后根据传感器厂家提供的电阻与温度对应公式算出实际温度。

功能实现:

  • 通过ADC1的通道0(PA0)检测VTEMP ,算出Rt = 3.3 *  4700 / VTEMP – 4700
  • 根据Rt算出实际温度值 Rt = Rp * exp( B* ( 1/T1 - 1/T2 ) )。此处公式为传感器厂商给定。

3、编码器介绍

编码器:一种将直线位移、角位移数据转换为脉冲信号、二进制编码的设备。常用于测量物体运动的位置、角度或者速度。光电式/磁电式、绝对式/增量式,交叉组合成四种。

编码器分类:

①磁电增量式

利用霍尔效应将位移转换为计数脉冲,用脉冲个数计算位移和速度。用A、B两个传感器的目的是也可以通过脉冲相位差判断正反转。

            

②光电增量式

利用光电系统将位移转换为计数脉冲,用脉冲个数计算位移和速度。增量式着重测量位移和速度,

            

③光电绝对式:不同位置、角度时,光敏元件根据受光转换出相应的电平信号,形成二进制数。

                   

0-15:0000~1111(白块为0黑块为1)。格雷码盘每相邻的两个只相差一个位(不是相差1),是二进制码码盘的改进版。


编码器参数:

①分辨率:编码器可以测量的最小距离。对于增量式编码器,分辨率即转轴每旋转一圈所输出的脉冲数(PPR)

②精度:编码器输出的信号数据与实际位置之间的误差,常用 角分 ′ 、角秒 ″ 表示

③最大响应频率:编码器每秒能输出的最大脉冲数,单位Hz,也称为PPS

④最大转速:指编码器机械系统所能承受的最高转速

拓:STM32定时器的编码器接口模式就相当于带有方向选择的外部时钟


编码器接口HAL库函数:

HAL_TIM_Encoder_Init();//初始化定时器基础参数及编码器接口
HAL_TIM_Encoder_Start();//开启编码器接口通道
HAL_TIM_PeriodElapsedCallback();//定时器更新中断回调函数
__HAL_TIM_IS_TIM_COUNTING_DOWN();//读取DIR位,判断计数方向


 代码实现:

定时器初始化(初始化IO,配置定时器、编码器接口,增加TIM6更新中断)

更新中断回调函数(处理溢出中断,判断溢出方向,记录溢出次数,计算电机速度)

编码器计数函数(总计数值=计数当前值+溢出次数*65536)

电机速度滤波(根据计数值计算电机转速,并增加滤波功能)

利用下面的冒泡排序,排好下列10个数后,去掉最小的两个和最大的两个,中间的6个相加取平均值,这样就可对电机的速度进行滤波。

//将数据从小到大排序
int  i , j , temp;
int  data[ 10 ] = { 1 , 5 , 4 , 3 , 9 , 10 , 15 , 14 , 6 , 0 } ;
                
for ( i = 10 ; i >= 1 ; i-- ) 				/* 冒泡排序 */ 
{
        for ( j = 0 ; j < ( i – 1 ) ; j++ ) 
        {
                if ( data[ j ] > data[ j + 1] )    	/* 数值大小比较 */
                { 
                        temp = data[ j ] ; 			/* 数值换位 */
 		      data[ j ] = data[ j + 1 ] ;
 		      data[ j + 1 ] = temp ;
                 }
         }
}

一阶低通滤波:

Y(n)= q*X(n)+(1+q)*Y(n-1)

本次滤波输出值=滤波系数*本次采样值+(1-滤波系数)*上次滤波输出值。其中滤波系数q取0~1,因为电子设备(编码器)的测量有时会有错误,不直接使用采样值,而要经过一定滤波——“自己理解:不完全相信采样数据,而是通过不断采样滤波,与之前滤波输出值加权,不断逼近电机速度变化,这个过程也称对于电机速度变化的响应过程,如下图:”

                          

 q越大对电机速度变化的响应越快,曲线越不平滑;越小响应越慢,曲线越平滑。根据实际情况自己调节。


三、PID算法

见控制理论系列文章PID算法!PID算法


四、实操思路

1、单环控制

单环:速度、电流、位置闭环只有一个,单独来实现。

速度闭环控制

①PID参数结构体:定义一个速度闭环的PID参数结构体变量

②初始化PID参数:把目标值、期望值、累计偏差清零、配置PID系数

③设置目标速度:在主函数中通过按键、上位机设置目标速度

④PID闭环控制:在TIM6的更新中断回调里进行PID计算,限制占空比

电流闭环控制

①PID参数结构体:定义一个电流闭环的PID参数结构体变量

②初始化PID参数:把期望值、累计偏差清零、配置目标值、PID系数

实际电流滤波:在AD1中断回调函数中对实际电流进行滤波

④设置目标电流:在主函数中通过按键、上位机设置目标电流

④PID闭环控制:在TIM6的更新中断回调里进行PID计算,限制占空比

位置闭环控制

 通过编码器的当前计数值反映电机的位置。代码实现思路与电机速度闭环控制一致,只不过定义的是位置闭环的PID参数结构体变量。


2、双环控制

双环:速度、电流、位置两两组合。单环容易出现超调和振荡或者说这种情况很难调节,考虑双环可跟容易调节PID参数达到稳定。双环控制分内环和外环,外环控制的是优先考虑对象,内环用于对控制效果进行优化。

速度+位置双环

位置是外环,速度是内环。首先采集到位置数据,计算出位置偏差输入到位置环,经过位置环PID计算输出值再与速度数据求偏差输入到速度环PID计算。

①PID参数结构体:定义位置、速度闭环的PID参数结构体变量

②初始化PID参数:把目标值、期望值、累计偏差清零、配置PID系数

③设置目标速度:在主函数中通过按键、上位机设置目标速度

④PID双环控制:在TIM6的更新中断回调里进行PID双环计算,限制输出

电流+位置双环

外环仍然是位置环,内环是电流。代码实现思路与上个相同。

电流+速度双环

外环是电流环,内环是速度环。代码思路与上相同,需要注意的一点是PID系数即使用的是同一款电机同样的设备,都可能不同,需要根据实际情况调节!


3、三环控制

三环:速度、电流、位置都参与到闭环控制。重要的(最关心的)放最外环,代码实现思路与上面的双环一致,只不过把双环计算改为三环计算。


 拓:闭环死区

如上图设置目标位置为375,但是该电机的位置最小变化值是50,那么就永远达不到目标值只能在350和400之间波动。小于闭环死区时,PID控制就无效,大于闭环死区PID控制才有效。设置闭环死区后,可在调节无效时停止调节,就消除了振荡,但代价就是变成了“开环输出”,一直存在一个静态误差,对于精度要求高的情况不适用。


总结

直流无刷电机基础知识先学到这里,还有很多实操自己没去实践!等待续更......

下次学习步进电机!

遇到挫折,要有勇往直前的信念,马上行动,坚持到底,决不放弃,成功者决不放弃,放弃者绝不会成功。成功的道路上,肯定会有失败;对于失败,我们要正确地看待和对待,不怕失败者,则必成功;怕失败者,则一无是处,会更失败。

往期精彩:

PID算法
STM32定时器输入捕获(IC)
STM32定时器输出比较(PWM波)
STM32定时中断
STM32外部中断
STM32GPIO精讲

猜你喜欢

转载自blog.csdn.net/weixin_51658186/article/details/129969845