您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页工业控制实训

工业控制实训

来源:爱go旅游网
机电工程学院课程设计报告

课程名称: 工业控制实训 专业班级: 学 号: 学生姓名: 指导教师: 完成时间: 2015.12.21-2015.12.25 报告成绩:

评阅意见: 评阅教师 日期

工业控制实训

一、设计任务与要求

本次实训工业控制实训,原则上指导老师只给出大致的设计要求,在设计思路上不框定和约束同学们的思维,在实验室能够提供的条件下,对硬件电路和软件平台,不限定选择,对设计的题目除了老师提供的参考题目,同学们也可以发挥自己的创造性,和老师商量后确定新的实训题目,允许大家有所发挥,并力求设计方案可行、思路独特、效果良好。

所选题目:电机转速控制系统

方案要求:制作的系统能够设定电机的转速,在规定的时间内实现电机

转速随设定值变化而变化并达到稳态值(即设定值)。反馈环节通过光电传感器测量电机转速,然后将转速信号送入处理器处理,采用合适的算法计算并输出电机控制量,使电机控制达到控制要求。人机界面自选,要求人机界面能显示电机的适时转速。

主要技术指标:

1.调节时间(从设定转速到电机转速达到稳态的时间):t≤4s 2.稳态余差(电机的实际运行转速在稳态情况下和设定值的误差):3%

二、方案设计与论证

总体设计方案:

用单片机控制PWM电路使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在采用单片机产生PWM脉冲的软件实现上比较方便。

调速设计方案:

调速采用PWM(Pulse Width Modulation)脉宽调制,工作原理:通

过产生矩形波,改变占空比,以达到调整脉宽的目的。PWM的定义:脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V,5V}这一集合中取值。模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。

三、硬件电路设计

(1)STC89C52简介 1、功能特性

STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器。STC89C52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

2、引脚说明:

端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第二功能 RXD TXD INTO* INT1* TO T1 WR* RD* 说明 串行数据输入口 串行数据输出口 外部中断0输入 外部中断1输入 定时器0外部计数输入 定时器1外部计数输入 外部数据存储器写选通 外部数据存储器读选通 表3.1 P3口的第二功能定义

P0口作为地址总线(低8位)及数据总线时,为双向口。作为通用的I/O口使用时,为准双向口。而P1、P2、P3口均为准双向口。

P0口:漏极开路的双向I/O口。当AT89C51扩展外部存储器及I/O接口芯片时,P0口作为地址总线(低8位)及数据总线的时分复用端口。P0口也可作为通用的I/O口使用,但需加上拉电阻,这时为准双向口。P0口可驱动8个LS型TTL负载。

P1口、P2口、P3口为准双向口,具有内部上拉电阻,可驱动4个LS型TTL负载。P1口是完全可提供给用户使用的准双向口;当AT89C51扩展外部存储器及I/O时,P2口作为高8位地址总线用,输出高8位。P3口还提供第二功能。 RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。

ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般,ALE仍以时钟振荡频率的1/6输出

固定的脉冲信号,因此它可对外输出时钟或用于定时目的。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。EA端为高电平(接Vcc端),CPU则先执行内部程序存储器的指令,PC值超过0FFFH时,将自动读取片外程序寄存器空间中的程序。

FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 (2)单片机的最小系统

STC89C52单片机它是硬件电路的核心部分,时钟电路晶振使用12MHz,复位电路采取按键复位方式。

1、复位电路

复位电路有按键复位和上电复位,我采用按键复位。按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。电路图如图。

复位电路

2、时钟电路

由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即

可。晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。晶振两边的电容主要有以下作用,晶振后面的电容是负载电容,可以用来微调晶体震荡频率,电容的取值一般来说是30pF的瓷片电容。其电路原理图如图

单片机系统的时钟电路

3.3:LCD显示电路

1、1602芯片介绍

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。1602采用标准的16脚接口,其中:

第1脚:VSS为电源地 第2脚:VDD接5V电源正极

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

第6脚:E(或EN)端为使能(enable)端。 第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极2、显示电路

2、电路原理图

Lcd显示电路

4.4:按键电路

对按键电路的设计可以由2种方式:一种方式是直接按键设计,这种设计电路适用于按键较少的控制;另一种方式是矩阵式键盘的设计,它适用于对控制按键较多的电路控制。本课题总共设计按键有4个设定/保存、减速、加速、开机运行。由于课题调试采用的LK-51单片机键盘采用的是矩阵式键盘,为方便电路的调试,因此我所采用矩阵键盘作为控制按键。

电路总原理图:

PCB图如下图所示:

四、软件设计

PWM型波软件设计:

程序流程图:

2、测速软件设计

设定转速值 初始化 开始 设定键按下

光电传感器测量电机转速 电机开始转动 按下保存键、按下开机键

计算并输出电机控制量

1602显示电机转速 五、仿真过程与仿真结果

软件仿真:本次实训通过Proteus软件进行仿真,先在此软件上画出实训电路图,然后通过KEIL软件进行程序的编译与导入,最后在此软件上进行仿真,验证次电路的正确性。仿真结果描述如下:

1、仿真开始,1602显示“Welcome to use”字样,按下“设定”按键开始设定电机转速值,利用“数据加”“数据减”按键调整电机的转速,转速调整完毕按下“保存”按键,再按下“开机”按键,电机开始转动,并且1602显示屏上实时显示电机的转速。 下图所示为转速设定情况

下图所示为电路整体运行情况:

六、安装与调试

1:制版

在Altium Designer软件上画出实训原理图,接着导入制作PCB电路板,最后经打印、转印、腐蚀、打孔,最后做出电路板。步骤如下:

(1)、画出原理图,生成相应的PCB图,对PCB图进行布线设计,尽量简洁美观,

(2)、将PCB图打印到转印纸上。

(3)、将打印好PCB的转印纸平铺在覆铜板上,准备转印。

(4)、用热应机加温将转印纸上黑色油墨粉压在覆铜板上形成高精度的抗腐。 (5)、准备好三氯化铁溶液进行腐蚀,结束之后清洗干净晾干后打孔。 (6)、对照原理图及PCB安装所需元件并焊接好。 2:电路调试:

电路元器件焊接好后,在开发板上将程序导入芯片,进行硬件调试。 硬件调试分为静态调试和动态调试。

静态调试为

1、目测,检查外部的各种元件或测电路是否有断点。

2、用万用表测试,先用万用表复核目测有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。 动态调试:

动态调试是在静态调试的基础上进行的,利用电脑给电路板供电,检测是否与仿真及设计要求一致,若发现不一致,应分析其原因,并排除故障,再进行调试,直到满足要求。实验结果如图所示:

七、结论与心得 总结:

本文对单片机用于转速测量的理论、原理进行了系统的分析、比较,设计了显示接口电路和应用程序。以下从四个方面进行总结:

硬件电路 :单片机用于转速测量种类较多,方法各有不同,在硬件设计上根据使用场合、功能和要求,采用的电路也有差异,单片机有用80c5l系列的80c3l、80c5l等,并对其进行扩展,接口采用8155、8255等用于显示。本系统采用89c51单片机,充分利用单片机内部自带的两个16位定时/计数器进行设计,较完全的开发了单片机自身的功能,接口利用了89c5l的Po口具有较大的电流驱动能

力的特点,来扩展驱动芯片,直接由单片机驱动,简化了硬件电路。有一定的实用价值和较高的性价比,可用于工业控制中的转速检测、民用电器及其他应用。 2.测量方法 :在测量原理上采用先进的M的测量方法,保证了高转速的测量中获得较高的精度。应用范围广泛,可通过扩展进行二次开发。

3.程序调试 :本系统进行了全面的程序设计,显示程序、中断服务程序和初始化程序,并对这些程序在uvision2软件上进行编译和调试,可以运行和转换成HEx文件,通过编程器写入芯片中。基本达到了设计的要求。

4.改进方法和进一步的工作 :转速的定时时间长、短,其设定值是人为估计的,可以针对具体的应用,根据转速的实际惰况来调整定时时间。下步工作能制作完整电路工作板,即硬件电路,用示波器测量其参数。更深入的分析其精度和误差。

心得:

由于本次是工业实训,所以整体来说困难较大。因此在调试过程中出了很多问题,首先是制版打孔时多打了几个孔,导致有了断线,其次1602显示屏与底座接触不良,导致液晶显示屏无法正确的显示时间,后来发现是液晶显示屏接触问题,修正后使得显示屏得以正确的显示。最后在程序下载时总是检测不到单片机,后来更换单片机以后可以检测到才发现是单片机坏了;所以更换单片机以后基本实现了整体的功能。

因此通过本次实训我切实体会到了设计的困难,无论是从设计原理图还是制作PCB以及接下来的转印、打孔、焊板、调试。每一步都需要足够的细心以及耐心才可以完成。

同时深刻感觉到自己真的还有很多欠缺的地方,很多地方都不懂,必须通过查阅资料询问班级其他同学才得以顺利解决。这让我知道了自己的不足,相信这在以后的生活工作中会给我很大的帮助,让我可以顺利度过很多的难关。

八、程序

#include

#include

#include //包含随机函数rand()的定义文件 #define uchar unsigned char

#define uint unsigned int//LCD端口定义 sbit E=P2^7; sbit RW=P2^6;

sbit RS=P2^5;//LCD屏显定义

uchar code show_0[]=\" Welcom to use!\"; // 欢迎页面 uchar code show_1[]=\"BY:Guo qingmiao\" ;

//跟换为开发者姓名字母和数字

uchar code show_2[]=\"PWM: \"; // 温度 uchar code show_3[]=\"YW: \" ; uchar code show_4[]=\"ZS: S: R\" ; uchar code show_5[]=\"0123456789.\" ; uchar code show_6[]=\"SETTING... \" ; uchar code show_7[]=\"ZS: R \" ; uchar code show_15[]=\" \" ; uint zhuansu; uchar js; uchar l; uint i; uchar lsi; float dy,dl;

//电压,电流

//零时数据

// 转速

// 烟雾 // 转速

//

//转速测量值

uint zs; //转速设定值 uint temp; float f_temp; uchar yemian; uint wendu; sbit djsc=P3^0; uchar pwm,ph,pl; sbit set_kb=P1^0;

//电机输出

//温度

sbit up_kb=P1^1; sbit down_kb=P1^2; sbit right_kb=P1^3; sbit ds=P2^0;//ds18b20 //AD0804端口定义

sbit cs=P2^2; //芯片选择信号,控制芯片的启动和结果读取,低电平有效 sbit rd=P2^3; //读数据控制,低电平有效 sbit wr=P2^4; //AD转换起动控制,上升沿有效 sbit intr=P2^1; //AD转换结束输出低电平

sbit cs1=P3^1; //芯片选择信号,控制芯片的启动和结果读取,低电平有效 #define ad0_7 P0 //AD数据口 #define TEM #define HUM

0x03//温度检测命令 0x05//湿度检测命令

0x07//读寄存器 0x06//写寄存器

0x01//设置SHT11的工作精度为8位/湿度 12位温

#define REG_READ #define REG_WRITE #define FUNCTION_SET 度

uchar flag_tempeture=0; //显示温度位置的标志 uchar flag_humidity=0; //

湿

//*****************************************************以下是24c02操作

void mDelay(unsigned char j)//A normal delay { unsigned int s; for(;j>0;j--) { }

for(s=0;s<125;s++) {;} }

/***************************************** LCD操作代码

************************************************************************/

/***写命令***/ void cmd_w(uchar cmd) { RW=0; RS=0; E=1; P0=cmd; mDelay(1); E=0; }

/***写数据***/ void dat_w(uchar dat) { RW=0; RS=1; E=1; P0=dat; mDelay(1); E=0; }

/***清屏****/ void clear(void) {

cmd_w(0x01); //清屏

cmd_w(0x02); //清屏回到左上角 }

/***初始化**/ void init(void) {

cmd_w(0x38); cmd_w(0x0d); }

/***光标定位****/

void gotoxy(uchar x,uchar y) //x是行数,y是列数 { if(x==1)

{cmd_w(0x80+y);} else

{cmd_w(0xc0+y);} }

//显示函数

void play(uchar *j,uchar k) {

uchar m; for(m=0;mdat_w(*(j+m));

mDelay(20);

//K是显示的个数,j是地址

} }

//以下是参数设定时显示代码 void display(void) {

}

uint n; if (yemian==1) { }

n=zs; l=n/1000;

//取千位

gotoxy(2,9); //LCD光标定位

dat_w(show_5[l]); //写屏 l=(n % 1000)/100; gotoxy(2,10);

dat_w(show_5[l]); l=(n % 100)/10; gotoxy(2,11);

dat_w(show_5[l]); l=n % 10; gotoxy(2,12);

dat_w(show_5[l]);

//以下是安键操作代码 void anjian(void) {

if (set_kb==0)

{

mDelay(10); if(set_kb==0) {

yemian=0; js=0;

//延时10毫秒

clear();

gotoxy(1,0);

}

}

play(show_2,15); gotoxy(2,0); play(show_4,15);

while(set_kb==0);

if (up_kb==0) {

mDelay(10); if(up_kb==0) {

if (yemian==1) { }

zs=zs+10; if (zs>500)

zs=0;

//延时10毫秒

}

}

while(up_kb==0);

if (down_kb==0) {

mDelay(10); if(down_kb==0) {

if (yemian==1) {

if (zs>10)

//延时10毫秒

}

}

}

}

zs=zs-10;

else

zs=500;

while(down_kb==0);

void Time0() interrupt 1 using 2 {

//t0定时器中断

TR0=0; //关闭定时器T0

TH0=(65536-500)/256; //重新给计数器T0赋初值

TL0=(65536-500)%256;// TR0=1; //启动定时器T0 i++ ; ph++; pl++; if(i>=500) {

i=0; TR1=0;

zhuansu=(TH1*256+TL1) ; //读取脉冲数 TH1=0 ; TL1=0; if (zhuansu>zs) { }

if (zhuansuif(pwm<100) if (pwm>1)

pwm=pwm-1;

//1秒定时到,读取脉冲数

}

}

pwm=pwm+1;

if(pl<100) { } else {

ph=0; pl=0; djsc=1;

if (ph>=pwm) { }

djsc=0;

} }

void main(void) { uchar j;

uint y; uchar jjjj; float lsdl; i=0; js=0; lsdl=0; jjjj=0; TR1=1;

TR0=1; //启动定时器T0

ph=0; pl=0; cs1=0;

djsc=0;

TMOD=0x51; //使用定时器T0

TH1=0; TL1=0;

TH0=(65536-500)/256; //将定时器计时时间设定为46083×1.085微秒

=50000微秒=50毫秒

TL0=(65536-500)%256;

EA=1; //开启总中断 ET0=1; //定时器T0中断允许 ET1=0; //定时器T0中断允许 TR1=0; TR0=0;

// zs=100; // pwm=30;

yemian=0;

init(); clear();

//以下 是显示欢迎及开发者 gotoxy(1,0); play(show_0,15); gotoxy(2,0); play(show_1,15); mDelay(2000);

clear();

gotoxy(1,0); play(show_2,15); gotoxy(2,0);

play(show_4,15); while(1) {

if (yemian==0)

//循环

{ //EA=0;

jjjj++;

cs1=0;

mDelay(10); EA=1;

y=pwm/1; l=y /100; gotoxy(1,6); dat_w(show_5[l]); l=(y%100)/10;

//取十位

gotoxy(1,7); //LCD光标定位 dat_w(show_5[l]); //写屏 l=y % 10; gotoxy(1,8);

dat_w(show_5[l]);

y=zs;

//取十位

l=(y%100)/10; gotoxy(2,11);

//LCD光标定位

dat_w(show_5[l]); //写屏 l=y % 10; gotoxy(2,12);

dat_w(show_5[l]); //转速显示 y=zhuansu;

l=(y % 10000)/1000;

gotoxy(2,3);

dat_w(show_5[l]); l=(y % 1000)/100; gotoxy(2,4);

dat_w(show_5[l]); l=(y % 100)/10; gotoxy(2,5);

//取十位

//LCD光标定位

//写屏 //取个位

dat_w(show_5[l]); l=y % 10;

gotoxy(2,6); //LCD光标定位

//写屏

dat_w(show_5[l]); if (set_kb==0) {

mDelay(10); if (set_kb==0) {

yemian=1;

clear(); }

while(set_kb==0); }

gotoxy(1,0); play(show_6,15); gotoxy(2,0); play(show_7,15);

if (right_kb==0)

{

mDelay(10); if (right_kb==0) {

}

}

if(TR1==0) {

pwm=zs; } else {

pwm=0; }

TR0=0; TR1=0;

TR0=1; TR1=1;

while(right_kb==0);

} } }

if(yemian!=0) {

anjian(); display(); //Delay_Ms(50);

//延时100毫秒

}

mDelay(100);

//延时100毫秒

九:参考文献

1、电气传动自动化19卷第4期

2、刘保录《基于单片机的电机综合参数测试仪设计》第10卷第2期

3、冯夏勇宾鸿赞《微机转速测量常用方法与精度分析》电子与自动化1995年第2期

4、何立民《Mcs一51系列单片机应用系统设计系统配置与接口技术》 北京航空航天大学出版社1990.1 5、聂小猛《Kenuv2》用户手册

6、傅丰林.模拟电子线路基础 [M]. 西安:西安电子科技大学出版社,2001.1 7、江志红.51单片机技术与应用系统开发案列精选 [M]. 北京:清华大学出版社,2008.12

8、王选民 智能仪器原理及设计 [M]. 北京:清华大学出版社。

9、杨加国 单片机原理与应用及C51程序设计 [M]. 北京:清华大学出版社,2008.3

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务