直流电机与PID算法

1、电机

1.1 直流电机

简言之就是,如果将电压的正负极分别接到电机的正负极,电机正转,若将电压的负极接到电机的正极,电机反转。

我们可以调节施加在电机上面的直流电压大小, 即可实现直流电机调速, 改变施加电机上面直流电压的极性, 即可实现电机换向

1.2 减速比

一般直流电机的转速都是一分钟几千上万转的, 所以一般需要安装减速器。

减速器是一种相对精密的机械零件, 使用它的目的是降低转速, 增加转矩。 减速后的直流电机力矩增大、 可控性更强。

例如一直流电动机装有减速器, 减速器如图 1-2 所示, 1:100 的减速比=与电机转子连接轴的小齿轮齿数与输出主轴的大齿轮齿数之比,电机(与电机转子连接轴) 转动 100 圈, 输出主轴 1 圈。

减速比计算公式: 减速比=输入转速÷输出转速。

1.3 编码器

1.3.1 编码器简介

编码器是一种将角位移或者直线位移转换成一连串电数字脉冲的一种传感器。 我们可以通过编码器测量电机转动的位移或者速度信息。

编码器按照工作原理, 可以分为增量式编码器和绝对式编码器, 绝对式编码器的每一个位置对应一个确定的数字码, 因此它的示值只与测量的起始和终止位置有关, 而与测量的中间过程无关。 我们常用的编码器为增量式编码器。

从编码器检测原理上来分, 还可以分为光学式、 磁式、 感应式、 电容式。 常见的是光电编码器(光学式) 和霍尔编码器(磁式) 。 一般来说光电编码器是霍尔编码器精度的几十倍。

MG513 电机上嵌有两种不同编码器的电机, 一种是 GMR 编码器的电机,一种是霍尔编码器的电机。 编码器带上拉输出, 默认上拉到供电 VCC 引脚, 可单片机直接采集。 GMR 编码器的精度是霍尔编码器的 38 倍, 精度更高, 测量低速时比霍尔编码器表现领先很多, 并兼具有霍尔编码器的磁稳定性, 一般情况下霍尔编码器也够用。 两种编码器的参数对比如表 1-1 所示。

1.3.2 编码器的工作原理

霍尔编码器是由霍尔码盘和霍尔元件组成。 霍尔码盘是在一定直径的圆板上等分地布置有不同的磁极。 霍尔码盘与电动机同轴, 电动机旋转时, 霍尔元件检测输出若干脉冲信号, 为判断转向, 一般输出 A 相和 B 相存在一定相位差的方波信号。 可以通过单片机采集 AB 相的脉冲数据, 根据脉冲换算得到电机位置数据

GMR 编码器是一种使用磁阻效应进行测量的编码器。 它利用了在磁性材料上施加外加磁场时, 磁矩在自旋转动的过程中会产生电阻值变化的现象。 利用这种效应, 可以测量磁性标尺的位移, 并输出相应的电信号。 GMR 编码器一般有A、 B、 Z 三根输出信号线。 其中 A、 B 是用来获取位置信息的正交编码信号, Z 信号则是用于标记旋转一周的起始位置。 由于在实际使用中我们没有使用到 Z信号, 所以在设计时没有将其引出, 只使用到了 A、 B 两相信号。 GMR 编码器具有高分辨率、 高精度、 低温漂移等特点 。

1.3.3 四倍频

四倍频是通过程序提升我们的编码器的精度的一种数据处理方法, 可以有效的最大化我们的编码器的精度和测量精度 。

图 1-4 是一个编码器输出的波形图, 正常我们一般的处理方式是通过 A 相去计数, B 相去判断目前的转动方向。 具体实现比如: A 相的上升沿计数或者下降沿计数, 同时在 A 相的上升沿或者下降沿来根据 B 相此时的电平状态来判断转向。

四倍频则是同时计算 AB 两相的每个跳边沿, 这样子原本在 A 相计数的一个脉冲周期内就实现了四次计数, 从而实现了精度的提升。

1.3.4 编码器编程实现

因为编码器输出的是标准的正交方波, 所以我们可以使用单片机(STM32 STM8 51 等) 直接读取。

在软件中的处理方法是分两种, 自带编码器接口的单片机如 STM32, 可以直接使用编码器硬件接口(定时器 CH1&CH2) 计数, 然后从对应的寄存器读出相应的数据。 STM32 的程序实际就是初始化定时器为编码器模式即可。

没有编码器硬件接口的单片机, 可以通过外部中断接口测量, 比如把编码器 A 相输出接到单片机的外部中断接口, 这样就可以通过跳边沿触发中断, 然后在对应的中断服务函数里面, 通过 B 相的电平来确定正反转。 如当 A 相来一个跳变沿的时候, 如果 B 相是高电平就认为是正转, 低电平就认为是反转。

利用编码器采集到的电机输出的转速数据作为输入参量反馈回去, 从而形成闭环控制, 工程上用的比较普遍的是 PID 闭环控制, 所谓 PID 控制, 就是对系统偏差进行比例、 积分以及微分的控制。 PID 是闭环控制, 因此需要有传感器测量我们需要控制的参数, 并且反馈到我们的控制计算当中, 并且参与控制。 PID由 3 个单元组成, 分别是比例(Proportion) 单元、 积分(Integral) 单元、 微分(Differential) 单元。 通过对这三个单元的处理计算输出给执行器, 达到减小偏差最终实现收敛的过程 。

1.3.5 低速转动时定时器编码器模式测不准

参考:STM32定时器捕获编码器模式测速和方向测不准问题

点击低速转动时,编码器输出波形可能如(左图)所示,与我们所期待的(右图)并不相同,因此边沿捕获时AB无法正常识别相位,尤其是双边沿捕获时,只有在高速时才能正常识别相位。

如何验证是否是该问题导致的:

使用外部中断,每来一个上升沿就进入中断函数,计数值+1,验证电机小齿轮转一周时输出脉冲个数是否正确。

1.4 驱动电机

驱动电压一般所需的电压为12V,单片机无法实现供电,因此需要驱动电路来驱动。

举例:TB6612

2、PID算法

2.1 无人机举例:

参考视频:PID控制算法讲解

例如,直接输入参数,使机器人前进100米。

开环控制对于简单的任务或者精确度不高的情形是没有问题的。但如果机器人在运动过程中发生了偏移,或者前进的路途并不平坦,与我们预期的并不相同,那么机器人就无法实现前进100米的目标。

因此,我们更需要的是闭环控制(存在反馈回路),PID是闭环控制的一种。

我们希望无人机悬停到指定高度,我们能够控制的是无人机螺旋桨的旋转速度,旋转速度越快,升力F越大,但其上升会受到各种不确定因素的干扰。

error:距离误差,即当前高度到目标高度的误差。

P算法(proportional 比例):F∝error,F = Kp * error。Kp越大,升力和误差的比例就越大,控制系统的响应速度就越快。但同时,无人机在接近目标高度时,产生的震荡也越大

为了解决系统震荡的问题,引入D算法。D算法能够对无人机的速度做出响应。当无人机的速度过快时,D算法会抵消一部分由P算法计算出来的升力,从而减缓系统的震荡。

对距离求微分:

D算法(Derivative 微分):Kd越大,抵消的力越多,因此Kd设置过大时,会产生过冲(overshoot)的反效果。

如果只调整Kp和Kd,error永远不会被消除为0,因为只要误差存在,升力F一定存在,但在无人机接近目标高度时,error接近于0,升力接近于0,而我们需要的是升力F与重力G平衡。为了解决这个问题,我们需要累计误差值。如果长时间误差得不到修正的话,我们就需要给无人机提供更大的升力,迫使无人机上升

I算法(Integral 积分):Ki参数。对误差进行累积,从而提供更大的升力。加入Ki之后,无人机会慢慢朝目标高度靠拢,将误差消除为0。

伪代码:

简单来说,PID算法就是将误差进行比例放大,微分阻尼,积分误差补偿。

2.2 PID参数调试

2.2.1 调试

具体调试可参考图文详解PID调参,结合波形更清晰。

波形显示可使用野火多功能调试助手,野火串口调试助手PID功能(文末有工程链接)

以PI算法举例,应先将Ki置为0,从小到大调节Kp;大致合适(出现大幅震荡的临界值)后加入Ki,Ki通常比较小。

2.2.2 PI算法控制转速

参考:STM32-使用编码器计算WHEELETC小车(各车轮)速度及代码实现

M法(频率测量法):这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间的编码器脉冲数,计算速度值。设编码器单圈总脉冲数为C(编码器精度,编码器精度通常指的是编码器每转一圈产生的脉冲数), 在时间T0内,统计到的编码器脉冲数为M0,则转速n的计算公式为:

img

转轴转速 = 单位时间的计数值 / 编码器总分辨率

每秒脉冲数(即单位时间的计数值)= M0/T0

转速 = 每秒脉冲数/C(单圈脉冲数)

如果是减速电机:

输出轴转速 = 转轴转速 / 减速比

2.2.3 怎么处理速度

循环过程:

(1)单片机通过直流减速电机的编码器获得电机的实际转速,计算实际转速与设定的目标转速之间的误差;

(2)根据误差,PI控制器会算出一个用于将直流减速电机调整到目标转速的PWM值;

(3)将算出的PWM值输出给直流电机,对直流电机转速进行调整;

(4)再次读取直流电机转速传给单片机。

  • 31
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值