步进电机课程设计实验报告.docx

上传人:b****8 文档编号:9750789 上传时间:2023-05-21 格式:DOCX 页数:28 大小:1.87MB
下载 相关 举报
步进电机课程设计实验报告.docx_第1页
第1页 / 共28页
步进电机课程设计实验报告.docx_第2页
第2页 / 共28页
步进电机课程设计实验报告.docx_第3页
第3页 / 共28页
步进电机课程设计实验报告.docx_第4页
第4页 / 共28页
步进电机课程设计实验报告.docx_第5页
第5页 / 共28页
步进电机课程设计实验报告.docx_第6页
第6页 / 共28页
步进电机课程设计实验报告.docx_第7页
第7页 / 共28页
步进电机课程设计实验报告.docx_第8页
第8页 / 共28页
步进电机课程设计实验报告.docx_第9页
第9页 / 共28页
步进电机课程设计实验报告.docx_第10页
第10页 / 共28页
步进电机课程设计实验报告.docx_第11页
第11页 / 共28页
步进电机课程设计实验报告.docx_第12页
第12页 / 共28页
步进电机课程设计实验报告.docx_第13页
第13页 / 共28页
步进电机课程设计实验报告.docx_第14页
第14页 / 共28页
步进电机课程设计实验报告.docx_第15页
第15页 / 共28页
步进电机课程设计实验报告.docx_第16页
第16页 / 共28页
步进电机课程设计实验报告.docx_第17页
第17页 / 共28页
步进电机课程设计实验报告.docx_第18页
第18页 / 共28页
步进电机课程设计实验报告.docx_第19页
第19页 / 共28页
步进电机课程设计实验报告.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

步进电机课程设计实验报告.docx

《步进电机课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《步进电机课程设计实验报告.docx(28页珍藏版)》请在冰点文库上搜索。

步进电机课程设计实验报告.docx

步进电机课程设计实验报告

指导教师评定成绩:

审定成绩:

重庆邮电大学

自动化学院

 

计算机控制技术课程设计报告

设计题目:

步进电动机调速控制

 

单位(二级学院):

自动化学院

学生姓名:

林参

专业:

自动化

班级:

0810903

学号:

2009212466

指导教师:

陈勇

 

设计时间:

2012年6月

摘要

步进电动机是将电脉冲信号转变为角位移的开环控制元件。

通过单片机AT89C52控制的脉冲信号的频率和脉冲数控制电机的转速、停止的位置,而不受负载的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

采用对射式光电传感器H92B4为步进电机的测速原件,它利用码盘对光速的遮挡,由同步回路选通电路,从而检测码盘有无遮挡。

光电式旋转编码器是转速或转角的检测元件,旋转编码器与电机相连,当电机转动时,带动增量式码盘旋转,便发出转速或转角信号。

L297步进电机专用控制器,芯片内的PWM斩波器电路可开关模式下调节步进电机绕组中的电机绕组中的电流,用于计算机控制的两相双极和四相单相步进电机,能够用于控制此步进电机,并与L298双全桥步进电机专用芯片等共同组成驱动电路。

控制算法上,利用增量式PID算法,从测试传感器采样的信号经PID控制和所测试相结合消除减少误差,编出满足要求的程序。

由以上几个主要部分共同构成步进电机闭环控制系统,驱动电路驱动电机,测速提供为反馈,AT89C52控制步进电机的正反转、和转速增减,实现对步进电机的控制,并由显示器显示出正反转方向和转速。

关键词:

步进电动机PIDAT89C52L297L298H92B4

设计题目

步进电动机调速控制

一、平台

1、二相四线制步进电动机;

2、以单片机作为控制器。

二、设计目的:

1、设计步进电机控制电路;

2、设计步进电机调速控制电路,要求采用变频调速;

3、采用PID两种基本算法:

位置算法和增量算法,并要求知道这两种算法的特点;

(1)位置算法:

(2)增量算法:

4、步进电动机旋转误差小于1%;

5、实现正反转;

6、速度检测与显示及控制。

三、设计要求:

1、整个课程设计的各个环节都要求学生自己动手。

2、提供相应的算法分析与计算。

3、自己选择计算机控制设备,构建一个简单的计算机控制系统。

4、对课程设计进行总结,撰写课程设计报告。

5、课程设计时间1.5周。

设计内容

四、计算机控制系统的总体规划与设计思路:

此步进电机调速计算机控制系统主要由以下4部分组成

1、单片机AT89C52的控制电路

2、L297和L298组成驱动电路

3、对射式光传感器为测速元件测速(用的是T法测速)组成的反馈回路

4、二相四线制步进电机

由以上4部分组成步进电机调速计算机控制闭环控制系统。

在AT89C52中载入增量式PID控制算法的程序,通过对按键的操作,控制步进电机的转速(加速、减速、正反转),并在显示器上显示出转速。

最终实现完整的二相四线步进电机调速的计算机控制系统。

设计基本框图如下:

 

 

五、硬件综合设计

1.总体原理电路图:

 

2.实物图:

1、控制电路AT89C52

实体图:

AT89C52是一个低电压,高性能CMOS的8位单片机,片内含8kbytes的可反复擦写的FLASH只读程序存储器和256bytes的随机存取数据存储器(RAM)

采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

主要工作特性是:

片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;

片内数据存储器内含256字节的RAM;

具有32根可编程I/O口线;

具有3个可编程定时器;

中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;

串行口是具有一个全双工的可编程串行通信口;

具有一个数据指针DPTR;

低功耗工作模式有空闲模式和掉电模式;

具有可编程的3级程序锁定位;

AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;

AT89C52最高工作频率为24MHz

 

2、驱动电路L297和L298

实体图:

L297是步进电机专用控制器,它能产生4相控制信号,可用于计算机控制的两相双极和四相单相步进电机,能够用单四拍、双四拍、四相八拍方式控制步进电机。

芯片内的PWM斩波器电路可开关模式下调节步进电机绕组中的电机绕组中的电流。

该集成电路采用了SGS公司的模拟/数字兼容的I2L技术,使用5V的电源电压,全部信号的连接都与TFL/CMOS或集电极开路的晶体管兼容。

L297的芯片引脚特别紧凑,采用双列直插20脚塑封封装,其引脚见图1,内部方框见图2。

  

  

内部电路图

[2]

在图2所示的L297的内部方框图中。

变换器是一个重要组成部分。

变换器由一个三倍计算器加某些组合逻辑组成,产生一个基本的八格雷码(顺序如图3所示)。

由变换器产生4个输出信号送给后面的输出逻辑部分,输出逻辑提供禁止和斩波器功能所需的相序。

为了获得电动机良好的速度和转矩特性,相序信号是通过2个PWM斩波器控制电动波器包含有一个比较器、一个触发器和一个外部检测电阻,如图4所示,晶片内部的通用振荡器提供斩波频率脉冲。

每个斩波器的触发器由振荡器的脉冲调节,当负载电流提高时检测电阻上的电压相对提高,当电压达到Uref时(Uref是根据峰值负载电流而定的),将触发器重置,切断输出,直至第二个振荡脉冲到来、此线路的输出(即触发器Q输出)是一恒定速率的PWM信号,L297的CONTROL端的输入决定斩波器对相位线A,B,C,D或抑制线INH1和INH2起作用。

CONTROL为高电平时,对A,B,C,D有抑制作用;为低电平时,则对抑制线INH1和INH2有抑制作用,从而可对电动机和转矩进行控制。

L298内部包含4通道逻辑驱动电路。

可以方便的驱动两个直流电机,或一个两相步进电机。

L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。

L298可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7V电压。

4脚VS接电源电压,VS电压范围VIH为+2.5~46V。

输出电流可达2.5A,可驱动电感性负载。

1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。

L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。

5,7,10,12脚接输入控制电平,控制电机的正反转。

EnA,EnB接控制使能端,控制电机的停转。

表1是L298功能逻辑图。

In3,In4的逻辑图与表1相同。

由表1可知EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,电机正或反转。

同为低电平电机停止,同为高电平电机刹停。

3、步进电机及对射式光电传感器H92B4

 

步进电动是一步一步转动的,故叫步进电动机。

步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行。

随着数字控制系统的发展,步进电动机的应用将逐渐扩大。

H92B4是有高发射功率的砷化镓红外发射管和高灵敏度的光敏管组成。

她是利用被检测物对光束的遮挡,由同步回路选通电路,从而检测物体有无。

特点:

易安装、高可靠性:

响应速度快,光缝0.8mm;槽宽4mm,脚距8.8mmm。

T法测速:

记录编码器两个相邻输出脉冲的间的高频脉冲个数M2,f0为高频脉冲频率,

 

电机转速

T法测速的分辨率:

T法测速误差率:

T法测速适用于低速段。

 

六、软件综合设计

3.设计流程图:

总体流程图

测速流程图

4.PID两种基本算法:

位置算法和增量算法,采用变频调速

(1)位置算法:

(2)增量算法:

5.实现以上要求的控制算法(已调试正确):

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineF6//表示光电码盘一圈的齿数

#defineT40//采样周期10ms,250us为单位

#definePID_K2

#definePID_I0.1

#definePID_D0.1

#defineST_cishu50//更新显示频率设为0.5s,10ms为单位

sbitclk=P1^0;//脉冲

sbitcw=P1^1;//转向

sbitfull=P1^2;//半步、全步

sbitreset=P1^3;

sbitduanen=P2^6;//段选锁存

sbitweien=P2^7;//位选锁存

sbitfuhao=P2^2;//正负符号位

sbitdirKey=P3^4;//设置位移

sbitplusKey=P3^5;

sbitsubKey=P3^6;

sbitrevKey=P3^7;//反转

intUk_1=0;

intUk=0;

ucharposKey=0;//屏幕显示位置标志

intspeed[3]={0,0,0};//存速度差值

intSi,n=0,m=0;//n为转速,m为T法高速脉冲个数,Si为m记数允许标志位

uchartime_n1=500;

uchartime_n2;

intspeedSet,speed_set;//定时器1首先就输出一个电平变化,再根据PID输出设置z=speed_set

intspeed_n=0;//用于显示的测试的速度

intoutallow=1;//输出允许,第一次设置完生效,开始输出

intST_allow;//速度测试允许位

intST_counter=0;//计数变量,用于计显示更新频率

intfankui=0;

voiddisplay(int);

voiddelay(int);

voidLED(int,int);

voidxiaoying(void);

voidreadKey();

voidinitial();

voidpid();

voidpid_f_to_time_n1();

voidST_get();

/****************************初始化***************************/

voidinitial()

{

IE=0x80;//开总中断

TCON=0x01;//IT0=1时外部中断0为下跳沿触发

TMOD=0x21;//定时器0工作方式1,定时器1工作方式2,自动重载

TH0=0xec;//定时5ms,初值为60536,产生高速脉冲

TL0=0x78;

TH1=0x06;//定时250us,输出脉冲精度

TL1=0x06;

Si=0;

time_n2=1;

clk=1;

}

/**************************显示函数****************************/

voiddelay(inti)

{

intx,y;

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

{for(y=1;y<333;y++);}

}

voidxiaoying()

{

weien=1;

P0=0xff;

weien=0;

}

voidLED(intshu,intwei)

{

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//最后为负号

ucharcodeDSY_WEI[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

duanen=1;

P0=DSY_CODE[shu];

duanen=0;

weien=1;

P0=DSY_WEI[wei];

weien=0;

delay

(2);

}

voiddisplay(inta)//a为测得转速

{

intqian;

intbai;

intshi;

intge;

if(a<0)

{

LED(10,4);

xiaoying();

(int)qian=-a/1000;

(int)bai=-a%1000/100;

(int)shi=-a%100/10;

(int)ge=-a%10;

}

else

{

(int)qian=a/1000;

(int)bai=a%1000/100;

(int)shi=a%100/10;

(int)ge=a%10;

}

LED(qian,3);

xiaoying();

LED(bai,2);

xiaoying();

LED(shi,1);

xiaoying();

LED(ge,0);

xiaoying();

}

/******************************PID****************************/

voidpid()

{

Uk=PID_K*(speed[2]-speed[1])+PID_I*speed[2]+PID_D*(speed[2]2*speed[1]+speed[0])+Uk_1;//增量式算法

Uk_1=Uk;

if(Uk>150)//越界处理

{

Uk=Uk_1;

}

}

voidpid_f_to_time_n1()

{

if(time_n1>4)//频率最高不能超过1500Hz,设定最高为1000Hz250us*4=1ms

{

time_n1=600/Uk;//步距角为1.8估T=1/f=0.3*n.T=250us*2*time_n1(us)Uk~f

}

else{time_n1=6;}

}

/***********************速度差值计算***************************/

voiddelta_n()

{

speed[0]=speed[1];

speed[1]=speed[2];

speed[2]=speed_set-n;

}

/***************************速度检测**************************/

voidST_time()interrupt0//外部中断0

{

if(Si==0)//Si为测试速度而设,Si=0,则记第一次,Si=1,则应关闭TR0

{

TR0=1;

Si=1;//关闭标志,表明测量一个周期内波形完成

}

else

{

TR0=0;

IE=IE&0xfc;//关定时中断0和外部中断0

Si=0;

(int)n=60000/(m*F*5);//计算转速F为放大系数,表示转一圈输出多少脉冲

if(!

fuhao)

{

n=-n;

}

m=0;

}

}

voidST_count()interrupt1//定时中断0,产生高速脉冲,10ms一次

{

m++;

if(m>10000)//若转速低至10s一个信号,则认为转速为0,防止m越界

{n=0;}

TH0=0xec;

TL0=0x78;

}

voidST_get()//获取速度函数,供外部调用

{

IE=IE|0x03;//开定时器0和外部中断0定时器IE设置位,EA,,,ES,ET1,EX1,ET0,EX0

}

/**************************速度输出****************************/

voidSO_time()interrupt3//定时中断1,用于定时输出脉冲

{

time_n2--;//250us一次

if(!

time_n2)

{

time_n2=time_n1;//上个脉冲完后再取新设置的值

clk=~clk;

}

fankui++;

if(fankui==33)

{

clkf=~clkf;

fankui=0;

}

ST_allow++;//定时采样允许,采样周期40*250us=10ms

if(ST_allow==T)

{

ST_allow=0;

ST_get();//开中断,不会影响时间

}

}

/**********************键盘设置函数****************************/

voidreadKey()

{

inttemp=0;

if(dirKey==0)

{

delay(30);

while(!

dirKey);//放开生效,不影响中断

posKey=posKey+1;

if(posKey>=4)

{

posKey=0;

speed_set=speedSet;//设置完四个数,使设置生效

if(outallow)//初始为1

{

ET1=1;//定时1中断允许,开始输出脉冲

TR1=1;//输出允许

outallow=0;

}

}

}

//显示

if(posKey)//在设置时才能按加减

{

{

if(posKey==1){

(int)temp=speedSet/100;

xiaoying();

LED(temp,2);

}elseif(posKey==2){

(int)temp=speedSet%100/10;

xiaoying();

LED(temp,1);

}elseif(posKey==3){

(int)temp=speedSet%10;

xiaoying();

LED(temp,0);

}

}

if(plusKey==0)

{

delay(30);

while(!

plusKey);

if(speedSet<999)

{

if(posKey==1){

if(speedSet/100<9){

speedSet+=100;}

}elseif(posKey==2){

speedSet+=10;

}elseif(posKey==3){

speedSet+=1;

}

}

}

if(subKey==0)

{

delay(30);

while(!

subKey);

if(speedSet>0)

{

if(posKey==1)

{

if(speedSet/100>0)

{

speedSet-=100;

}

}

elseif(posKey==2)

{

speedSet-=10;

}elseif(posKey==3){

speedSet-=1;

}

}

}

}

if(revKey==0)

{

delay(30);

while(!

revKey);

cw=~cw;

fuhao=~fuhao;

}

}

/*****************************主函数***************************/

voidmain()

{

initial();//初始化

while

(1)

{

readKey();

if(!

posKey)//没有设置转速时显示实时速度

{

display(n);

}

if(!

outallow)//第一次设置完成可以输出

{

if(!

ST_allow)//定时采样允许,采样周期

{

delta_n();//采集速度后再计算速度差

pid();

pid_f_to_time_n1();

}

}

}

}

设计总结

通过这次课程设计实验,我对步进电机调速控制系统有了实际的了解和认识,提高了动手能力。

本次实验把书本上、课堂上学到的知识灵活地运用到实际的实物上,感觉是对学以致用的一种锻炼和考验,提高了用所学知识解决实际问题的能力,加深和巩固的对知识的理解和掌握。

控制电路、驱动电路、测速反馈电路、步进电机几个模块的整合,也实际中提高了自己对系统的认识,有了些整体的概念和思维观。

实验是团队合作完成的,从设计电路到设计软件,然后仿真,到做硬件做出符合要求的

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2