基于51单片机的直流电机转速测量与控制_第1页
基于51单片机的直流电机转速测量与控制_第2页
基于51单片机的直流电机转速测量与控制_第3页
基于51单片机的直流电机转速测量与控制_第4页
基于51单片机的直流电机转速测量与控制_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理与应用课程设计院 系 信息工程学院 班 级 自动化1201班 学生姓名 学 号 日 期 基于51单片机的直流电机转速测量与控制 直流电动机作为执行元件,被广泛应用于控制领域,这次设计采用单片机作为控制芯片,控制算法采用PID控制,加上相应的输入输出通道,构成一个单闭环控制系统,使电机转速稳定运行,并通过数码管显示转速设定值和实际值。一、基本要求: 1.以80C51的基本知识和方法为基础,通过系统扩展达到应用单片机的目的。 2.根据应用系统结构规模的要求,掌握单片机外部扩展系统的硬件设计的基本过程,正确合理选择期间,绘制应用系统原理图。 3.根据设计任务和要求,画出程序整体流程图,然后

2、进行各程序模块的设计,编写控制程序。 4.掌握如何应用单片机仿真器或编程器来开发应用及仿真调试的过程,反复修改测试直至完成任务。二、设计内容 设计并调试一个程序使其实现如下功能: 1.在实验平台上通过键盘输入一个转速的设定值(例如25rpm),并在数码管上显示; 2.采用比例调节方法,使电机转速稳定在设定值; 3.测量电机的转速,并在实验平台数码管上显示; 4.转速稳定后,可随时修改转速设定值; 5.优化比例调节系统,使电机转速的调节时间较短,并尝试加入积分、微分环节,改善转速的静态和动态特性。电机转速不允许出现振荡。三、设计原理转速是工程上一个常用参数,旋转体的转速常以每秒钟或每分钟转数来表

3、示。转速测量方法很多,由于转速是以单位时间内的转数来衡量,再变换过程中大多是有规律的重复运动;霍尔开关传感器由于其体积小,无接触动态特性好,使用寿命长等特点,在测量旋转体的转速领域得到了广泛的应用。霍尔器件是由半导体材料制成的一种薄片,在垂直于平面方向上施加外磁场B,在沿平面方向两端加外电场,则使电子在磁场中运动,结果在器件的两个侧面之间产生霍尔电势,其大小和外磁场的磁场强度及电流大小成比例。 根据霍尔效应原理,将一块永久磁铁固定在电机封轴上的转盘边沿,转盘岁北侧轴旋转,磁钢也跟着同步旋转,在转盘附近安置一个霍尔器件,则霍尔器件首次刚所产生的磁场影响输出脉冲信号,其频率和转速成正比,测出该脉冲

4、的周期或频率即可计算出转速。  直流电机的转速与施加于电机两端的电压、电流大小有关,这次设计利用DAC0832控制输出到直流电机的电压值,即通过控制DAC0832的模拟输出信号量来控制电机的转速。当测出电机转速小于设定值时增大D/A输出电压;当测出电机转速大于设定值时减小D/A输出电压,从而使电机以某一速度恒速旋转。四、实验接线1、把DA0832的片选CS17孔和Xfer孔接至译码器YS2(0A000H-0AFFFH)孔相连接;2、DA0832的WR1孔和WR2孔连控制总线区的/WR孔相连接;3、把数模转换DAC0832输出Aout孔连直流电机DCin孔相连接;4、CS40与YS0相

5、连接;5、CKM孔(霍尔器件输出孔)连P3.2孔相连接。连线连线孔1连线孔21CS17Xfer2XferYS23WR1WR24WR2/WR5AoutDCin6CS40YS07CKMP3.2五、实现方法 1、整体结构设计键盘被按下后,通过检测把键码给单片机,单片机通过数码管显示设定值,同时判断实际值与设定值是否相等,调用PID函数进行调速,将PID调速函数的返回值进行DA转换,输入给电机,通过霍尔传感器测得电机的值,再与设定值比较,直到两值相等。可通过键盘再次输入另外一个值,重复上面的步骤,使电机转速达到设定值。数码管显示80C52单片机键盘霍尔传感器控制电机DA转换PID调速 2、转速测定方法

6、设计 转速测控方法有频率法和周期法,因为电机转速较低,所以采用周期法进行计算,保证其精度。在设计中采用霍尔传感器采集信号,霍尔传感器是把旋转轴的转速变为相应频率的脉冲,然后通过外部中断测出相应的脉冲周期,计算转速,通过定时器0控制PID采样周期,将处理好的信号接入单片机的T0计数口进行编程计数,最后在数码管上显示结果。周期法即T法测速,T法是测量两个脉冲之间的时间换算成周期,从而得到频率。因存在半个时间单位的问题,可能会有1个时间单位的误差。速度较高时,测得的周期较小,误差所占的比例变大,所以T法宜测量低速。如要增加速度测量的上限,可以减小编码器的脉冲数,或使用更小更精确的计时单位,使一次测量

7、的时间值尽可能大。计算公式为:T法测速的分辨率 法测速误差率 低速时,编码器相邻脉冲间隔时间长,测得的高频时钟脉冲个数M2多,所以误差率小,测速精度高。3、PID调整转速设计 在实际应用中,最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。它因结构简单、稳定性好、工作可靠、调整方便而成为控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。 

8、; (1)比例(P)控制 比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。  (2)积分(I)控制 在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,

9、可以使系统在进入稳态后无稳态误差。 (3)微分(D)控制 在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件环节或有滞后组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免

10、了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。 PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,这次设计用的工程整定方法,它主要依赖个人调试经验,直接在控制系统的试验中进行,方法简单、易于掌握。通过试验,在实际运行中进行调整与完善,利用该方法进行PID控制器参数的整定步骤如下: (1)首先预选择一个足够短的采样周期让系统工作; (2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡

11、周期; (3)在一定的控制度下通过公式计算得到PID控制器的参数。int PID ( ) /PID调速函数unsigned char Kp=2.0; /比例常数unsigned char Ki=2.5; /积分常数unsigned char Kd=0.2; /微分常数unsigned int error1=0;unsigned int error2=0;unsigned int error=0;int qi_n; /定义期待转速error=Key_temp-n;qi_n+=Kp*(error-error1)+Ki*error+Kd*(error+error2-2*error1);error2=

12、error1;error1=error;if(qi_n<0) /上下限幅处理qi_n=0;/驱动电机的电压不可能小于零,故当输出小于零时,输出值应为零if(qi_n>255)qi_n=255; /DA转换为8位,最大数值为255,故当大于255时,限制为255return qi_n; PID采样周期设定的为500ms,即每500ms调用一次PID函数,把PID返回值给DAC0832,控制电机转速,霍尔传感器测量电机转速,返回给单片机,逐步使电机转速与设定值相等。 4、键盘扫描显示 使用6×4的小键盘,向列扫描码地址逐列输出低电平,然后从行码地址读回。如果有键按下,则相应行

13、的值应为低,如果无键按下,由于上拉的作用,行码值为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。初始化地址参数显示缓冲区初始化 输出列扫描信号数码管显示列扫描信号移位有键输入? 否读入行信号 是读取键值该列有键输入? 是键值转换为显示数据 否6列扫描完? 否返回 是按照行列计算键值得键码等待键盘释放返回六、运行结果七、调试:调试看起来简单,却真的是最让人头疼的,一个很小的语句都用可能影响程序的结果,硬件对程序的影响也很大,同一片单片机,同一个程序,在不同的试验箱上运行结果就不同。首先写程序的时候,大家都没有头绪,几个人围着一台电脑

14、讨论如何构建程序轮廓,功能的实现应该采用什么样的方法,把这个问题解决之后,便开始了调试。主要出现下面几个问题:1、数码管显示转速的两位跳动,不稳定,来回闪。解决办法:仔细检查程序,理通程序,与同学讨论,把程序进行修改,下载,运行;如果结果不满意,再修改,运行;直到显示正确结果。数码管显示出现问题一般都是程序逻辑的问题使数码管显示不稳定,调整程序一般都可以解决。 2、不响应中断 CPU不响应中断或不响应某一个中断,这种错误的现象是连续运行时不执行中断任务程序的规定操作,当断点设在中断入口或中断服务程序中时碰不到断点。 错误的原因:中断控制寄存器的初值设置不正确,使CPU没有开

15、放中断或不许某个中断源请求;或者对片内的定时器、串行口等特殊功能寄存器和扩展的I/O口编程有错误,造成中断没有被激活。解决办法:用调试的方法,观察程序,分步调试,出现错误的地方进行程序一点一点的修改,并认真总结,再下载,运行,调试。3、数码管显示结果震荡,在设定转速左右震荡解决办法:刚开始是调整PID参数,但一直没有完全解决,后来换了台实验箱,发现电机转速还是挺稳定的。可能因为一些硬件对转速的影响也比较大,比如电机的阻力等等。八、心得体会: 周六、周日通过和几位有编程经验的同学探讨,把程序轮廓和流程图构建了出来,并且把程序内容基本上写完了。周一上午到实验室调试,才发现,自己感觉写好的程序,电动

16、机转都不转,调程序把电机调通了,但是震荡的特别厉害,出现了一些问题,通过分步调试,总结经验等把问题一个一个都解决了,感受到了集体力量的强大,不能独自一人战斗,要及时与大家探讨,在老师和同学们的帮助下,我也体会到了程序终于调通时的那种喜悦和满足,很有成就感。我觉得学校的实验平台非常不错,给我们提供了这么好的条件,我们应当好好珍惜,好好利用这几天的时间多学习些知识,不能浪费这么好的资源。我也做到了与同学和老师多沟通、多探讨,尽力把所学的知识通过实验平台更好的吸收和掌握。通过这几天的学习,确实使我对单片机的设计方法有了更深刻的理解和掌握,同时也让我把所学的知识广泛的应用到了实践中,充分的做到了理论与

17、实践相结合。 科研是需要认真、踏实、灵敏,考虑问题要全面,不能有漏洞,其次要多吸取大家的经验,善于总结。这几天老师也非常辛苦,每天陪我们在实验室,指导我们学习,非常感谢也非常庆幸遇到一个这么好的老师!九、课程设计程序#include "reg52.h"#include "absacc.h"#define LEDLen 6float DA;long int n;unsigned int t;unsigned char count;unsigned char time;unsigned char Key_temp;unsigned char k_TEMP2;

18、xdata unsigned char CS0832 _at_ 0xA000; /DA控制口xdata unsigned char OUTBIT _at_ 0x8002; /位控制口 xdata unsigned char OUTSEG _at_ 0x8004; /段控制口 xdata unsigned char IN _at_ 0x8001; /键盘读入口 char code dx5163 _at_ 0x0023; /mon51unsigned char LEDBufLEDLen; code unsigned char LEDMAP = /八段管显示码0F 0x3f, 0x06, 0x5b,

19、 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;code unsigned char KeyTable = /键码值定义,4*6键盘 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07;void delay(unsigned char ms)/延时函数uns

20、igned char x,y;for(x=ms;x>0;x-)for(y=110;y>0;y-);unsigned char TestKey() /检测按键被按下并读入 OUTBIT = 0; return (IN & 0x0f); unsigned char GetKey() /获取键码值 unsigned char Pos; unsigned char i; unsigned char k; i = 6; Pos = 0x20; do OUTBIT = Pos; /确定键所在列 Pos >>= 1; k = IN & 0x0f; while (-i

21、!= 0) && (k = 0); if (k != 0) /键码值=i*4+行 i *= 4; if (k & 2) i += 1; else if (k & 4) i += 2; else if (k & 8) i += 3; OUTBIT = 0; do delay(10); while (TestKey(); return(KeyTablei); /读取键值 else return(0xff);void Display() /用数码管显示设定值和转速值 unsigned char i; unsigned char Pos; unsigned ch

22、ar LED; Pos = 0x20; for (i = 0 ; i < LEDLen ; i+ ) OUTBIT = 0 ; LED = LEDBufi ; OUTSEG = LED ; OUTBIT = Pos ; delay(5); Pos >>= 1 ; OUTBIT = 0 ; int PID() /PID调速函数unsigned char Kp=2.0; /比例常数unsigned char Ki=2.5; /积分常数unsigned char Kd=0.2; /微分常数unsigned int error1=0;unsigned int error2=0;unsigned int error=0;int qi_n ; /定义期待转速error=Key_temp-n;qi_n+=Kp*(error-error1)+Ki*error+Kd*(error+error2-2*error1) ;error2=error1 ;error1=error ;if(qi_n<0) /上下限幅处理qi_n=0; /驱动电机的电压不可能小于零,故当输出小于零时,输出值应为零if(qi_n>255)qi_n=255; /DA转换为8位,最大数值为255,故当大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论