重 庆 邮 电 大 学
自 动 化 学 院
综合实验一设计报告
设计题目:51系列单片机直流电机闭环调速实验
单位(二级学院): 自 动 化 学 院
学 生 姓 名:
学 生 姓 名:
学 生 姓 名:
设计时间: 年 月
51系列单片机直流电机闭环调速实验
一、实验目的
1、熟悉直流电机的工作原理
2、熟悉51系列单片机的工作原理及调试方法
3、设计基于51系列单片机控制的直流电机调速原理图(要求实现电机的速度反馈测量)
二、实验要求
直流电机采用编码器测速
直流电机速度给定采用电位器进行模拟电压给定,0——5V
AD转采用12位转换
显示采用8位LED,或者LCD1602显示
键盘4X4,PID等参数通过键盘设置
控制算法:数字PID,参数在线修改
显示窗口:显示速度的设置值SV、速度的实际值PV
三、实验原理
控制算法比较:
PID控制原理PID调节器由比例调节器(P),积分调节器(I)和微分调节器(D) 构成,它通过对偏差值的比例积分和微分运算后,用计算所得的控制量来控制被控对象.图1所示为PID控制系统框图。
图1 PID控制系统框图
比例调节(P)
比例调节是数字控制中最简单的一种调节方法。其特点是调节器的输出与控制偏差e成线性比例关系,控制规律为:
式中:-比例系数,-偏差e为零时调节器的输出值.
当输出值S与设定的期望值R间产生偏差时,比例调节器会自动调节控制变量y(如为控制阀门的开度)的大小。控制变量y的大小会朝着减小偏差e的方向变化.比例系数的大小决定了比例调节器调节的快慢程度,大调节器调节的速度快,但过大会使控制系统出现超调或振荡现象。小调节器调节的速度慢,但过小又起不到调节作用。另外,虽然比例调节器控制规律简单,控制参数易于整定,但缺点是它只能在一种负载情况下实现无静差值的调节,当负载变化时,除非重新调整相应的),值的大小,否则控制系统将会产生无法消除的静差值。
比例微分调节(PI)
比例调节器的主要缺点是存在无法消除的静差值,影响了调节精度.为了消除静差值,在比例调节器的基础上并人一个积分调节器构成比例积分调节器,其调节规律可用下列(2)式表示.
(2)
式中:为积分常数,它的物理意义是当调节器积分调节作用与比例调节作用的输出相等时所需的调节时间称为积分常数。积分常数的大小决定了积分作用强弱程度,选择的越小,积分的调节作用越强,但系统振荡的衰减速度越慢。当 过小时,甚至会造成系统的持续振荡,使调节器的输出波动不定,给生产过程带来严重的危害。相反地当选择的越大,积分的调节作用越弱,虽然过渡过程中不容易出现振荡现象,但消除偏差e的时间却很长。积分调节对偏差有累积作
用,所以,只要有偏差e存在积分的调节作用就会不断地增强,直至消除比例调节器无法消除的静差值。
比例积分微分调节(PID)
加入积分调节后,虽可消除静差,使控制系统静态特性得以改善,但由于积分调节器输出值的大小是与偏差值e的持续时间成正比的,这样就会使系统消除静差的调节过程变慢,由此带来的是系统的动态性能变差.尤其是当积分常数很大时,情况更为严重。另外,当系统受到冲激式偏差冲击时,由于偏差的变化率很大,而PI调节器的调节速度又很慢,这样势必会造成系统的振荡,给生产过程带来很大的危害.改善的方法是在比例积分调节的基础上再加人微分调节,构成比例积分微分调节器(PID)。其调节规律可用(3)式表示。
(3)
式中: 为微分常数,它的物理意义是当调节器微分调节作用与比例调节作用的输出相等时所需的调节时间称为微分常数。
PID控制算法
单片机控制系统通过A/D电路检测输出值s,并计算偏差e和控制变量y,再经D/A转换后输出给执行机构,从而实现缩小或消除输出偏差的目的,使系统输出值s稳定在给定值区域内。在计算机控制过程中,整个计算过程采用的是数值计算方法,当采样周期足够小时,这种数值近似计算相当谁确,使离散的被控过程与连续过程相当接近。图2为单片机闭环控制系统框图 J。PID算法是将描述连续过程的微分方程转化为差分方程,然后,根据差分方程编制计算程序来进行控制计算的。另外在PID控制中,由于PID算式选择的不同,最终所得到的控制效果是不同的。下面进行PID控制算法的研究。
图2 单片机闭环控制系统框图
四、硬件电路设计
主系统由单片机最小系统、电机驱动模块、4X4矩阵键盘和AD转换四大模块组成。其中主控芯片采用8位单片机ATC52;电机驱动采用双H桥驱动芯片L298,能够驱动两台直流电机和一台步进电机,本实验采用直流电机作为控制对象;显示模块采用液晶显示屏LCD1602;AD转换模块才有12位AD转换芯片TLC2543,用以实现电机转速的设定。
电机转速采用电位器进行模拟电压给定,如下图“速度设置”标志下方电位器,电机转速的设定范围为0-499,设置间隔为4,即电位器阻值每增大1%,电机转速增大4转。显示模块中,“SV”表示设定转速,“PV”表示当前电机转速。PID参数值可由矩阵键盘设定。下图为系统达到稳定运行图和参数设置图。
图3 系统运行稳定图
图4 P 参数设置
图5 I 参数设置
图6 D 参数设置
五、程序设计
主程序如下所示,子程序见仿真文件夹:
#include #include "type.h" #include "LCD1602.h" #include "tlc2543.h" #include "pid.h" #include "app.h" #define INT_TIME 500 sbit PWM = P2^3; sbit IN1 = P2^4; sbit IN2 = P2^5; uchar timer_cnt1 = 0; uchar timer_cnt2 = 0; bit flag_s = 0; char duty = 00; void Int_T0_T1() { TH0 = (65536- INT_TIME)/256; TL0 = (65536- INT_TIME)%256; TMOD=0x51; ET0=1; EA=1; TR0=1; ET1=1; TR1=1; } void main(void) { int i; uchar temp; L1602_init(); delay(30); Int_T0_T1(); M_Pid.Kp = 1; M_Pid.Ki = 0.01;//.1; M_Pid.Kd = 0.0008; M_pid_init(1); speed_set = 200; PWM = 1; IN1 = 0; IN2 = 1; L1602_string(0,7,"r/min"); L1602_string(1,7,"r/min"); while(1) { switch (mode) { case DIS_MAIN: proc_main(); break; case SET_KP: case SET_KI: case SET_KD: proc_adj(); break; } if (flag_s) { flag_s = 0; get_sv(); if (flag_run) { duty = motor_pid(speed_set - speed_cnt); } switch (mode) { case DIS_MAIN: dis_main(); break; case SET_KP: case SET_KI: case SET_KD: dis_adj(); break; } } } } void Timer0_ser () interrupt 1 { TH0 = (65536- INT_TIME)/256; TL0 = (65536- INT_TIME)%256; timer_cnt1++; if (timer_cnt1 >= 100) { timer_cnt1 = 0; timer_cnt2++; if (timer_cnt2 >= 4) { timer_cnt2 = 0; speed_cnt = (TH1*256 + TL1); TH1 = 0; TL1 = 0; flag_s = 1; } } if (flag_run) { PWM = timer_cnt1 > duty? 0 : 1; } else { PWM = 0; } }