运动控制M法T法测速单片机程序设计.docx

上传人:b****8 文档编号:10663795 上传时间:2023-02-22 格式:DOCX 页数:21 大小:180.04KB
下载 相关 举报
运动控制M法T法测速单片机程序设计.docx_第1页
第1页 / 共21页
运动控制M法T法测速单片机程序设计.docx_第2页
第2页 / 共21页
运动控制M法T法测速单片机程序设计.docx_第3页
第3页 / 共21页
运动控制M法T法测速单片机程序设计.docx_第4页
第4页 / 共21页
运动控制M法T法测速单片机程序设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

运动控制M法T法测速单片机程序设计.docx

《运动控制M法T法测速单片机程序设计.docx》由会员分享,可在线阅读,更多相关《运动控制M法T法测速单片机程序设计.docx(21页珍藏版)》请在冰豆网上搜索。

运动控制M法T法测速单片机程序设计.docx

运动控制M法T法测速单片机程序设计

M法、T法测速单片机程序设计

摘要

本设计为M法、T法测速的单片机程序设计。

使用STC89C52单片机作为控制器,使用该单片机的外部中断和定时器对编码器的输出的脉冲进行采样来计算出电机的转速。

可以使用按键输入来调整M法、T法测速法中Z、Tc和Tt等参数以及测速方法的选择,以此来增强本设计的适应性。

参数选择结果和电机转速计算结果均显示在LCD1602上。

关键字:

STC89C52,M法、T法测速,LCD1602,电机转速

 

Abstract

Thisdesignasm,t-lawvelocitymeasurementofsingle-chipcomputerprogramming.UsingSTC89C52single-chipcomputerasthecontroller,usingthemicrocontroller'sexternalinterruptsandtimersforencoderoutputpulseissampledtocalculatethespeedofthemotor.Canbeadjustedusingtouchtonem,tlawVelocimetryparameterssuchasz,TtandTc,aswellasinspeedmeasurementmethodofchoice,asawaytoenhancetheadaptabilityofthisdesign.ParameterselectionandcalculationofmotorspeedresultsareavailableonLCD1602.

Keywords:

STC89C52,M、Tmethod,theLCD1602,Motorspeed

第1章绪论

 

1.1旋转编码器

旋转编码器是用来测量转速的装置,光电式旋转编码器通过光电转换,可将输出轴的角位移、角速度等机械量转换成相应的电脉冲以数字量输出(REP)。

它分为绝对式和增量式两种。

技术参数主要有每转脉冲数(几十个到几千个都有),和供电电压等。

单路输出是指旋转编码器的输出是一组脉冲,而双路输出的旋转编码器输出两组A/B相位差90度的脉冲,通过这两组脉冲不仅可以测量转速,还可以判断旋转的方向。

1、增量式编码器

增量式编码器轴旋转时,有相应的相位输出。

其旋转方向的判别和脉冲数量的增减,需借助后部的判向电路和计数器来实现。

其计数起点可任意设定,并可实现多圈的无限累加和测量。

还可以把每转发出一个脉冲的Z信号,作为参考机械零位。

当脉冲已固定,而需要提高分辨率时,可利用带90度相位差A,B的两路信号,对原脉冲数进行倍频。

增量式旋转编码器示意图如图1-1所示。

图1-1增量式旋转编码器示意图

2、绝对值编码器

绝对值编码器轴旋转器时,有与位置一一对应的代码(二进制,BCD码等)输出,从代码大小的变更即可判别正反方向和位移所处的位置,而无需判向电路。

它有一个绝对零位代码,当停电或关机后再开机重新测量时,仍可准确地读出停电或关机位置地代码,并准确地找到零位代码。

一般情况下绝对值编码器的测量范围为0~360度,但特殊型号也可实现多圈测量。

1.2数字测速的精度指标

1.2.1分辨率

分辨率定义:

改变一个计数值所对应的转速变化量,用符号Q表示。

当被测转速由n1变为n2时,引起记数值增量为1,则该测速方法的分辨率是

分辨率Q越小,说明测速装置对转速变化的检测越敏感,从而测速的精度也越高。

1.2.2测速误差率

测速误差率:

转速实际值和测量值之差与实际值之比,记作

 

测速误差率反映了测速方法的准确性,δ越小,准确度越高。

测速误差率的大小决定于测速元件的制造精度,并与测速方法有关。

1.3M法测速

   M法是测量单位时间内的脉数换算成频率,因存在测量时间内首尾的半个脉冲问题,可能会有2个脉的误差。

速度较低时,因测量时间内的脉冲数变少,误差所占的比例会变大,所以M法宜测量高速。

如要降低测量的速度下限,可以提高编码器线数或加大测量的单位时间,使用一次采集的脉冲数尽可能多。

计算公式为:

时钟Z=倍频系数x编码器光栅数。

M法测速的分辨率:

M法测速误差率:

在上式中,Z和Tc均为常值,因此转速n正比于脉冲个数。

高速时M1大,量化误差较小,随着转速的降低误差增大。

所以,M法测速只适用于高速段。

1.4T法测速

T法是测量两个脉冲之间的时间换算成周期,从而得到频率。

因存在半个时间单位的问题,可能会有1个时间单位的误差。

速度较高时,测得的周期较小,误差所占的比例变大,所以T法宜测量低速。

如要增加速度测量的上限,可以减小编码器的脉冲数,或使用更小更精确的计时单位,使一次测量的时间值尽可能大。

计算公式为:

T法测速的分辨率

T法测速误差率

低速时,编码器相邻脉冲间隔时间长,测得的高频时钟脉冲个数M2多,所以误差率小,测速精度高,故T法测速适用于低速段。

 

第2章硬件系统设计

 

2.1STC89C52介绍

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,2个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。

另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T

可选。

单片机是指一个集成在一块芯片上的完整计算机系统。

尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:

CPU、内存、内部和外部总线系统,目前大部分还会具有外存。

同时集成诸如通讯接口、定时器,实时时钟等外围设备。

而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

单片机也被称为微控制器(Microcontroler),是因为它最早被用在工业控制领域。

单片机由芯片内仅有CPU的专用处理器发展而来。

最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对提及要求严格的控制设备当中。

INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳

图2-2单片机原理图

2.2硬件电路

2.3.1时钟电路

STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。

时钟可以由内部方式产生或外部方式产生。

内部方式的时钟电路如图4—2(a)所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。

定时元件通常采用石英晶体和电容组成的并联谐振回路。

晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。

其电路图2-3如下所示:

图2-3STC89C52的时钟电路

2.3.2显示电路

本设计的显示部分使用的是液晶显示器LCD1602,该显示器只能显示英文字母和数字,所以参数的说明尤其英语意思或是符号代替。

屏幕上会显示参数、模式以及计算后的速度。

图2-4显示电路原理图

2.3.3速度检测电路

光电编码器是开漏输出,所以在和单片机连接时需要加上拉电阻。

编码器输出端连接到51单片机外部中断0引脚上所以就可以在每次接收到脉冲时就能触发外部中断。

图2-5测速电路原理图

2.3.4按键输入电路

按键输入负责调整测速模式和改变参数的值,一个按键是“确认”按键,一个是“加”按键,在模式选择时为T法选择键;另一个是“减”按键,在模式选择时为M法选择键。

在调整参数的时候,也是根据“减”“加”调整参数。

其电路图如图2-6所示。

图2-6按键输入电路

第3章系统软件设计

 

3.1主程序设计

本设计程序运行时,通过按键输入首先来选择测速方法,然后设定测速法中T和Z等参数。

如果选择M法测速则外部中断0和定时器0同时打开,当计时时间Tc到时,读取外部中断中对脉冲个数M1,最终计算出转速并显示。

如果选择的是T法测速则只开外部中断0关闭定时器0,当外部中断检测到第一脉冲时打开定时器0开始计数。

检测到第二个脉冲是关闭定时器计算转速。

图3-1为主程序流程图。

图3-1主程序流程图

3.1M法测速程序设计

选择M法测速模式后,打开外部中断0,同时开启定时器0开始一定时间的定时,外部中断开始计数脉冲个数。

当定时间到的时候关闭外部中断和定时器,读取外部中断计数的个数并计算速度。

M法测速程序流程如图3-2所示。

图3-2M法测速程序流程图

3.2T法测速程序设计

程序初始化完成后选择T法测速模式,只打开外部中断0,当外部中断检测到脉冲的第一个跳变时打开定时器0的中断开始计时。

当外部中断检测到第二个跳变是关闭外部中断0和定时器并读取计时的时间值。

图3-3T法测速程序流程图:

图3-3T法测速程序流程图

 

总结

本设计是单片机对电机转速的测量。

不进使我熟练掌握了STC89C52的使用方法,而却将书本上学到的M法,T法测速应用到实践,有了更深入的了解。

关于本次课程设计,感慨颇深。

总的来说收获颇丰,尽管其中充满了艰辛与困难。

但看到自己的成果时,。

在亲身实践中,发现自己的一些不足的地方,有待进一步提高与改善。

此次课程设计任务是电机转速测量系统,在实际调试中遇到的种种问题使我在设计与调试中学习到了许多知识。

除此之外,我们要在拥有扎实的专业知识的前提条件下,在整个设计与调试过程中要有信心和耐心,对自己有信心,相信自己能够很好的完成本次设计任务。

在调试中不断发现问题进而解决问题,这是一个再学习的过程,其本身就是对自己的一次锻炼,培养了自己独立思考,动手解决问题的能力。

从而从各个方面得到提高与完善了自己,使自己的各个方面提高到一个新的台阶,同时为以后的工作打下基础。

 

参考文献

[1]彭介华.电子技术课程设计指导[M]湖南大学:

高等教育出版社,1999

[2]新型高精度测速方法探讨[J].安徽机电学院学报,1997年02期.

[3]张友德.单片微型机原理[M].上海:

复旦大学出版社,2005.

[4]康华光.电子技术基础.数字部分(第四版).北京:

高等教育出版社,2000

[5]张锡富.传感器.北京:

机械工业出版社,2001

[6]陈敏逊.近代电机调速技术[G]:

科学技术文献出版社,2004

[7]于海生.微型计算机控制技术选编.北京:

清华大学出版社,1999

[8]赖寿宏.微型计算机控制技术[M].北京:

北京航空航天大学出版社,1995

[9]高伟.AT89单片机原理及应用.北京:

国防工业出版社,2008.

[10]Schroeder,MEWolman,RLWetterneck,TBCarayon,P.Tubingmisloadallowsfreefloweventwithsmartintravenousinfusionpump[J].Anesthesiology,2006

[11]RGabriel,WLeonhard,MicroprocessorControlofInductionMotor[J].IEEE,1982

 

附录A系统原理图

附录B主要C语言源程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineDataPortP0//LCD1602数据端口

sbitLCM_RS=P2^5;//LCD1602命令端口

sbitLCM_EN=P2^7;//LCD1602命令端口

sbitKEY1=P1^1;//确认按键

sbitKEY2=P1^3;//减按键

sbitKEY3=P1^5;//加按键

uchartable[]="Modeselection:

";

uintM1=0;bitM_FLAG=0;//M法测速参数

uintM2=0;bitT_FLAG=0;//T法测速参数

uintZ=1,T=1000,n=100;//倍频系数*编码器光栅数采样周期

bitflag=0;

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidwrite_com(ucharcom)

{

LCM_RS=0;

DataPort=com;

delay(5);

LCM_EN=1;

delay(5);

LCM_EN=0;

}

voidwrite_data(uchardate)

{

LCM_RS=1;

DataPort=date;

delay(5);

LCM_EN=1;

delay(5);

LCM_EN=0;

}

voidinit()

{

LCM_EN=0;

write_com(0x38);

write_com(0x0e);

write_com(0x06);

write_com(0x01);

write_com(0x80+0x00);

}

voidmain(void)

{

uchari;

init();//液晶初始化

write_com(0x80);

for(i=0;i<15;i++)

write_data(table[i]);

while(!

flag)

{

if(!

KEY2)

{

delay(15);write_com(0x80+15);write_data('M');

M_FLAG=1;T_FLAG=0;while(!

KEY2);

}

if(!

KEY3)

{

delay(15);write_com(0x80+15);write_data('T');

T_FLAG=1;M_FLAG=0;while(!

KEY3);

}

if(!

KEY1&&(T_FLAG||M_FLAG))

{flag=1;while(!

KEY1);}

}

write_com(0x80+0x40);

write_data('Z');

write_data('=');

write_data(Z/100+'0');

write_data(Z/10%10+'0');

write_data(Z%10+'0');

flag=0;

while(!

flag)

{

if(!

KEY2)

{

delay(15);

Z--;

write_com(0x80+0x42);

write_data(Z/100+'0');

write_data(Z/10%10+'0');

write_data(Z%10+'0');

delay(15);while(!

KEY2);

}

if(!

KEY3)

{

delay(15);

Z++;

write_com(0x80+0x42);

write_data(Z/100+'0');

write_data(Z/10%10+'0');

write_data(Z%10+'0');

delay(15);while(!

KEY3);

}

if(!

KEY1)

{flag=1;while(!

KEY1);}

}

write_com(0x80+0x48);

write_data('T');

write_data('=');

write_data(T/1000+'0');

write_data(T/100%10+'0');

write_data(T/10%10+'0');

write_data(T%10+'0');

write_com(0x80+0x4E);

write_data('m');

write_data('s');

flag=0;

while(!

flag)

{

if(!

KEY2)

{

delay(15);

T--;

write_com(0x80+0x4A);

write_data(T/1000+'0');

write_data(T/100%10+'0');

write_data(T/10%10+'0');

write_data(T%10+'0');

while(!

KEY2);

}

if(!

KEY3)

{

delay(15);

T++;

write_com(0x80+0x4A);

write_data(T/1000+'0');

write_data(T/100%10+'0');

write_data(T/10%10+'0');

write_data(T%10+'0');

while(!

KEY3);

}

if(!

KEY1)

{flag=1;while(!

KEY1);}

}

flag=0;write_com(0x01);

IT0=1;//下降沿触发

EX0=1;

TMOD=0x11;//定时/计数器0、1工作于方式1

TH0=0xFC;//12.000

TL0=0x18;

ET0=1;//允许定时/计数器0中断

if(M_FLAG)TR0=1;//启动定时/计数器0中断

elseif(T_FLAG)TR0=0;//启动定时/计数器0中断

EA=1;

while

(1)

{

;

}

}

voidInt0(void)interrupt0

{

if(M_FLAG)M1++;

if(T_FLAG)

{

TR0=1;

if(flag)

{

flag=0;

n=T*60/Z/M2;

write_com(0x80);

write_data('S');

write_data('p');

write_data('e');

write_data('e');

write_data('d');

write_data(':

');

write_data(n/10000+'0');

write_data(n/1000%10+'0');

write_data(n/100%10+'0');

write_data(n/10%10+'0');

write_data(n%10+'0');

write_data('r');

write_data('/');

write_data('m');

write_data('i');

write_data('n');

EA=0;

}

flag=1;M2=0;

}

}

voidTimer0(void)interrupt1

{

TH0=0xFC;//12.000

TL0=0x18;

M2++;

if(T==M2)

{

T=T/1000;

n=M1*60/Z/T;

write_com(0x80);

write_data('S');

write_data('p');

write_data('e');

write_data('e');

write_data('d');

write_data(':

');

write_data(n/10000+'0');

write_data(n/1000%10+'0');

write_data(n/100%10+'0');

write_data(n/10%10+'0');

write_data(n%10+'0');

write_data('r');

write_data('/');

write_data('m');

write_data('i');

write_data('n');

EA=0;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1