基于单片机的电机转速PID控制

0、引言&实验器材

2020的国庆节一个人呆在实验室有点无聊,翻了翻还未填上的坑,发现对PID的理解一直停留在纸面上,不曾在现实中的系统中实际操作过(倒立摆和小四轴这些DIY入门训练都还没完整的做过,实在不甘心),于是从零搭建实验平台,以便深入理解PID算法,最后便有了此篇博客,仅作为记录本人学习之用,如有错误,还望指出,谢谢。

由于使用的串口助手没有曲线绘制功能,故暂无实际效果图(PID参数效果通过时间计算比较)

以下为本次所使用的材料

类目 型号
MCU N76e003
电机驱动 TB6612
电机 单霍尔编码器测速电机
电源 30V2A可调电源(10V)
串口模块 CH340C
示波器 普源 DS5062ME
编译环境 Keil4

1、PID算法

假设已对闭环控制有了最基本的认识(如无,可参考这篇文章),参考下图1可以得知,Setpoint为设定值(你所期望系统能达到的值),设定值和反馈值经过计算后得到当前Error(误差),后Error经过PID算法计算得到U,参考下图2,U经过执行机构(如电机)处理、输出,再通过测量元件(如编码器)得到反馈值,再与设定值进行计算,得到下一轮的误差,如此往复,直到设定值与反馈值一致。(位置型)
在这里插入图片描述
在这里插入图片描述
由上可知PID算法是一种通过对误差值的计算,控制执行机构达到设定值的一种算法。
其中Kp:比例调节、Ki:积分调节、Kd:微分调节,PID算法的公式如下式1所示
在这里插入图片描述

在这里插入图片描述

需要注意的是,以下所使用的各个计算公式,均是对PID算法进行离散化处理后得到的。

1.1、Kp:比例调节

比例调节的计算:Kp*Error
由上式可以看出,在比例调节中,输入与输出的信号成比例关系,但如果仅有P调节,系统将可能出现稳态误差。

关于稳态误差:控制系统的输出响应在过渡过程结束后的变化形态称为稳态。稳态误差为期望的稳态输出量与实际的稳态输出量之差。
比例调节作用:是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。

1.2、Ki:积分调节

积分调节的计算:Ki*(Error1+Error2+Error3+…+Error k)
简单来说,积分调节的计算过程就将积分系数*误差的累加值
积分调节是为了对稳态误差进行处理,同时提供系统精度,作用原理和效果可参考上方动图。

1.2.1、积分饱和现象:简单来说可理解为Error过大时,积分调节得到的数值过大,所以需要对最大输出值进行限制,防止出现积分饱和的发生。

1.2.2、为方便积分调节原理的理解,可假设系统出现稳态误差时,Error恒定不变,此时Kp与Kd调节均失效,但Ki并不受稳态误差影响,依然累积误差值,从而使PID调节不陷于稳态误差中。

为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。积分调节作用:是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出一常值。积分作用的强弱取决与积分时间常数Ti, Ti越小,积分作用就越强。反之Ti大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。

1.3、Kd:微分调节

微分调节的计算:Kd*(Erorr2-Erorr1)
其中Erorr1为上次的误差,Erorr2为本次的误差。
微分调节可以理解为对被控对象所产生的“阻尼”,当误差变化过快时,微分调节将出现较大“负值”(与误差变化方向相反值),抑制误差继续上升/下降(拉平曲线,参考动图)。

在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入 “比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。微分调节作用:微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化率,而当输入没有变化时,微分作用输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PD或PID控制器。

2、运行逻辑

在这里插入图片描述

2.1、计算转速

单片机通过使用输入捕获功能(上升沿触发),计算得到电机周期T,再通过T=1/f计算当前电机转动频率。
(备注:其中输入捕获采样6次以消除初值可能不稳的情况,由于串口中断优先级高于输入捕获优先级,所以人为将输入捕获设置为最高优先级,防止系统bug)
有关输入N76E003捕获的博文见此

初始化

	P00_Input_Mode;//将P00设置为输入模式
	P00 = 1;
	set_ENF0;//打开0通道噪声滤波

	TIMER2_CAP0_Capture_Mode;//采用CAP0组捕获信道
//	TIMER2_CAP1_Capture_Mode;
//	TIMER2_CAP2_Capture_Mode;
	
//	IC3_P00_CAP0_BothEdge_Capture;//设定P00通过CAP0通道,双边沿触发
//	IC3_P00_CAP0_FallingEdge_Capture;//下降沿触发
	IC3_P00_CAP0_RisingEdge_Capture;//上升沿触发,得到的是周期T=1/f
		
	set_ECAP;//使能输入捕获中断(位于拓展中断中)
	set_TR2;  //定时器2计数使能  

	set_T2DIV1;//16分频,通过PWM计算、测试(10ms)
	set_PCAP;
	set_PCAPH;//设定输入捕获为最高中断优先级

计算频率

	while(1)
	{
   
		if(i>=6)//由于周期会发生变化,该方法会造成一定不等延时
		{
   
			//周期转换,单位us---->ms
			time=10000/(temp[5]/100);//转换为频率
			Send_Data_To_UART0(time);//测试PID参数速度用if
			i=0;
		   // PID(Ev,time);
		}
	}

输入捕获中断

void Capture_ISR (void
  • 44
    点赞
  • 456
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值