步进电机实验报告.docx
- 文档编号:26565725
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:44
- 大小:457.93KB
步进电机实验报告.docx
《步进电机实验报告.docx》由会员分享,可在线阅读,更多相关《步进电机实验报告.docx(44页珍藏版)》请在冰豆网上搜索。
步进电机实验报告
步进电机实验报告
单片机实验
课程名称:
步进电机表实验
授课班级:
2010级自动化三班
任课教师:
***
计划学时:
32学时
实验组员:
张藤耀赵福亮王聪慧
秦菱蔚梁钦郑欢
摘要…………………………………………………………………………
第一章概述………………………………………………………………………………………….
1.1实验目的…………………………………………………………………………
1.2实验要求…………………………………………………………………………
1.3步进电机的介绍……………………………………………………………………
1.4研究思路…………………………………………………………………………
第二章硬件设计…………………………………………………………..
2.151单片机介绍……………………………………………………………………
2.2UIN2003A……………………………………………………………………………
2.3ZLG7290……………………………………………………………………………
2.3.17290工作原理…………………………………………………………………
2.3.27290引脚图……………………………………………………………………
第三章相关图像……………………………………………………………….
3.1总电路图………………………………………………………………………
3.27290控制数码管………………………………………………………………………
3.3程序流程图…………………………………………………………………………
3.3.1控制框图…………………………………………………………………………
3.3.2流程图…………………………………………………………………………
第四章调试………………………………………………………………………
第五章心得体会…………………………………………………………………
附录【一】系统程序……………………………………………………………
附录【二】参考文献…………………………………………………………….
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。
您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
图1步进电机剖面图
1.4研究思路
1、了解单片机本身内部应有的资源,如:
中断、定时器、计数器、I\O的使用。
2、了解步进电机的工作原理和作用。
3、根据步进电机的原理,分析并分配单片机内部资源,并根据单片机的资源,来实现硬件电路的设计以及软件程序的编写。
4.、对于自己不熟悉的东西,查阅资料。
5、在设计好单片机步进电机时,要学会分析电路中出现的问题,并好好总结。
第二章硬件设计
2.1单片机的简介
单片机是续计算机出现之后,并随着电器时代大到来,人们借助电气技术想实现了自动控制机械,自动生产线甚至自动工厂,但依靠计算机去完成每一个自动的过程,反而有些复杂以及资源的乱费;所以用更方便,更微小,更智能的微型处理器来处理工业现场的测控领域,控制领域,有着重大意义;更何况目前,彩电,冰箱,空调,录像机,VCD,遥控器,游戏机,电饭煲等无处不见单片机的影子,所以单片机将会更满足我们的生活,会更取代大型的计算机。
现在单片机主要按用途,大体上可分为两大类:
1--通用型单片机2--专用型单片机
专用型单片机是指用途比较专一,出厂时程序已经一次性固化好,不能再修该的单片机。
例如电子表里的单片机就是其中的一种。
其生产成本很低。
通用型单片机的用途很广泛,使用不同的接口电路及编制不同的应用程序就可完成不同的功能。
小到家用电器仪器仪表,大到机器设备和整套生产线都可用单片机来实现自动化控制。
2.2UIN2003
本文选用ULN2003构成步进电机的驱动电路,下面但见介绍下ULN2003的结构和特点:
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。
该电路的特点如下:
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
ULN2003方框图如图2所示。
图2ULN2003内部方框图
利用ULN2003以及AT89C54RD设计的步进电机驱动电路如图3所示。
2.3ZLG7290
2.3.17290工作原理
ZLG7290的核心是一块ZLG7290B芯片,它采用I2C接口,能直接驱动8位共阴式数码管,同时可扫描管理多达64只按键,实现人机对话的功能资源十分丰富。
除具有自动消除抖动功能外,它还具有段闪烁、段点亮、段熄灭、功能键、连击键计数等强大功能,并可提供10种数字和21种字母的译码显示功能,用户可以直接向显示缓存写入显示数据,而且无需外接元件即可直接驱动数码管,还可扩展驱动电压和电流。
此外,ZLG7290B的电路简单,使用也很方便。
用户按下某个键时,ZLG7290的INT引脚会产生一个低电平的中断请求信号,读取键值后,中断信号就会自动撤销。
正常情况下,微控制器只需要判断INT引脚就可以得到键盘输入的信息。
微控制器可通过两种方式得到用户的键盘输入信息。
其一是中断方式,该方式的优点是抗干扰能力强,缺点是要占用微控制器的一个外部中断源。
其二是查询方式,即通过不断查询INT引脚来判断是否有键按下,该方式可以节省微控制器的一根I/O口线,但是代价是I2C总线处于频繁的活动状态,消耗电流多并且不利于抗干扰。
2.3.27290引脚图
图37290引脚图
第三章相关图像
3.1总体电路图
3.27290控制数码管
3.3程序流程图
3.3.1控制框图
3.3.2流程图
第四章调试
1、按照实验原理图连接好电路图。
2、根据原理图编写程序。
3、电路上电,调试程序,观察并控制电机使其按照预期的行为工作。
4、当电机可以通过按键控制其正转加减速、反转加减速程序、点动后,调试结束。
5、优化程序,整理实验结果。
总的来说,过程比较顺利,只是粗心之下,连线出现了错误,对于此,我进行了深刻的自我检讨和批评。
在经过老师的知道后,我们终于实现了实验要求的功能,能实现正反转,快慢变化及点动等。
第五章收获体会
首先是关于课题的选择,开始是准备做一个万年历,经过查看资料后发现计算机的过程实现比较的复杂,而这次的课程设计时间比较短,故放弃了这个想法。
经过各种筛选,最后决定做步进电机的相关设计,起初看着指导书上的内容觉得实现步进电机是比较的简单的,但当我真正开始设计之后才发现并没有想像中那么的简单。
这学期的微机课和单片机课没怎么学好,故感觉在做这个设计时有点困难,比如汇编程序。
后来决定用c来编写程序,这样稍微轻松点,在设计程序中涉及到了中断程序的编写,发现已学的理论知识完全用不上来,也许这就是理论脱离时间的结果,在期间恶补了单片机的中断知识及其相应的程序编写。
通过这次课程设计实验,我对步进电机调速控制系统有了实际的了解和认识,提高了动手能力。
本次实验把书本上、课堂上学到的知识灵活地运用到实际的实物上,感觉是对学以致用的一种锻炼和考验提高了用所学知识解决实际问题的能力,加深和巩固的对知识的理解和掌握。
控制电路、驱动电路、测速反馈电路、步进电机几个模块的整合,也实际中提高了自己对系统的认识,有了些整体的概念和思维观。
实验是团队合作完成的,从设计电路到设计软件,然后仿真到做硬件做出符合要求的控制系统,不仅从实际中锻炼了动手能力而且学会了团队合作,互相学习,提高自己。
这次的课程设计总的感觉就是很累,但在不断的学习机实践当中学到了很多东西,知识的提高那是最基础的,中断,电路工作及相关的知识都是得到了提升;然后就是个人处理问题能力的提高,虽然说这次的设计不算一个大的项目,但也算是小的雏形,课题的选择,前期的准备,理论的实践,知识的提高,处理实际问题及后期的总结归纳。
付出去收获往往是成正比的,这次的课程设计中得到了充分的体现。
总的来说,这次设计的步进电机控制电路还是比较成功的在设计中遇到了很多问题,最后在自己的思考下,宿舍大家一起经过激烈的探讨下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。
不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识。
同时,对未来有了更多的信心。
最后,对文老师表示忠心的感谢,老师,你辛苦了。
附录【一】系统程序
主程序:
/************************************************************************
基于51单片机的异步电机控制程序
************************************************************************/
#include
#include"VIIC_C51.H"
#include"ZLG7290.h"
#defineucharunsignedchar
#defineuintunsignedint
/*四相步进电动机单、双八拍运行状态表
111111100FEHA
111111000FCHAB
111111010FDHB
111110010F9HBC
111110110FBHC
111100110F3HCD
111101110F7HD
111101100F6HDA
*/
sbitPA=P1^0;//P1控制电机
sbitPB=P1^1;
sbitPC=P1^2;
sbitPD=P1^3;
sbitRST=P1^4;
sbitKEY_INT=P3^2;//看是否更改为P3^2
sbitSCL=P1^6;
sbitSDA=P1^7;
ucharcodestep_tab[9]={0xff,0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};
uintcodedelaytime[4]={60,40,20,10};//延时时间列表
//变量的定义
uchardirection;//状态变量0-正向,1-反向
ucharcontinuous;//状态变量0-指定步数运行,1-连续速度运行
ucharrun;//状态变量0-电机未运行,1-电机运行中
ucharspeed_num;//连续速度运行标号1-4
ucharcur_step;//八拍运行状态
ucharstep_num;//指定运行的步数,范围0-99
//键值定义
#defineKey_dir1//方向键
#defineKey_Run2//启动键
#defineKey_stop3//停止键
#defineKet_Step4//单步运行键
#defineKey_step_add5//步数加键
#defineKey_step_sub6//步数减键
#defineKey_speed_add7//速度加键
#defineKey_speed_sub8//速度减键
#defineKey_Con_Set9//连续运行与指定步数运行切换键。
//定义键盘中断标志,FlagINT0=1表示有键按下
volatilebitFlagINT0=0;
voidKeyProsess(ucharkey);
/************************************************************************
函数:
INT0_SVC()
功能:
ZLG7290键盘中断服务程序
说明:
中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
************************************************************************/
voidINT0_SVC()interrupt0
{
unsignedcharKeyValue;
//读取键值
KeyValue=ZLG7290_GetKey();
//处理键值
KeyProsess(KeyValue);
}
/************************************************************************
函数:
Delay()
功能:
定时器实现延时tms
************************************************************************/
voidDelay(unsignedintt)
{
do
{//TH=64536
TH1=0xFC;
TL1=0x18;
TR1=1;//启动定时器T1并等待中断
while(!
TF1);
TF1=0;//中断请求标致清零
TR1=0;//停止T1定时器
}while(--t);
}
/************************************************************************
函数:
DispDir()
功能:
显示方向子程序
说明:
dat0正向,1反向
************************************************************************/
voidDispDir(uchardat)
{
if(dat==0)
{
ZLG7290_SendCmd(0x60+7,0x0f);//"F"表示正转
}
else
{
ZLG7290_SendCmd(0x60+7,0x0b);//"B"表示反转
}
}
/************************************************************************
函数:
DispSpeed()
功能:
显示速度号子程序
说明:
dat1~4代表四种不同的速度
************************************************************************/
voidDispSpeed(uchardat)
{
ZLG7290_SendCmd(0x60+5,dat);
}
/************************************************************************
函数:
DispStepNum()
功能:
显示运行步数号程序
说明:
间接实现转过指定角度=步距角*步数
************************************************************************/
voidDispStepNum(uchardat)
{
unsignedchard;
d=dat/10;
ZLG7290_SendCmd(0x60+1,d);
d=dat-d*10;
ZLG7290_SendCmd(0x60+0,d);
}
/************************************************************************
函数:
DispContinuous()
功能:
显示运行状态,连续还是指定步数
说明:
0-指定步数运行,1-连续速度运行
************************************************************************/
voidDispContinuous(uchardat)
{
if(dat==0)
{
ZLG7290_SendCmd(0x60+3,0x0d);//'d'表示指定步数运行状态
}
else
{
ZLG7290_SendCmd(0x60+3,0x0c);//'C'表示连续速度运行
}
}
/************************************************************************
函数:
OnStep()
功能:
实现单步运行
************************************************************************/
voidOneStep()
{
if(direction==0)
{//正向
if(cur_step==8)
{
cur_step=1;
}else
{
cur_step++;
}
P1=step_tab[cur_step];//输出
}
else
{
if(cur_step<=1)
{
cur_step=8;
}else
{
cur_step--;
}
P1=step_tab[cur_step];//输出
}
}
/***************************************************************************
函数:
OnContinue()
功能:
连续运行
***************************************************************************/
voidOnContinue()
{
if(continuous!
=0)
{//连续运行
while(run!
=0)
{
OneStep();
Delay(delaytime[speed_num-1]);//延迟目的改变转速
}
}
else
{//指定步数运行
if(step_num!
=0)
{
OneStep();
Delay(50);//50ms延迟
step_num--;
DispStepNum(step_num);//更新显示步数即显示剩下没有执行的步数
if(run==0)return;//若停止键按下,则停止
}
else
{
run=0;//停止
return;
}
}
}
/****************************************************************************
函数:
KeyProsess()
功能:
键值处理程序
****************************************************************************/
voidKeyProsess(ucharkey)
{
switch(key)
{
caseKey_dir:
//方向键
if(run==0)
{
if(direction==0)
direction=1;
else
direction=0;
DispDir(direction);
}
break;
caseKey_Run:
//启动键
if(run==0)
{
run=1;
}
break;
caseKey_stop:
//停止键
if(run!
=0)
{
run=0;
}
break;
caseKet_Step:
//单步运行键实现点动功能
if(run==0)
{
run=1;
OneStep();
run=0;
}
break;
caseKey_step_add:
//步数加键n=(步距角*60)/(360*t*0.001)单位r/min
if(run==0)
{
if(step_num==99)
{
step_num=0;
}else
{
step_num++;
}
DispStepNum(step_num);
}
break;
caseKey_step_sub:
//步数减键
if(run==0)
{
if(step_num==0)
{
step_num=99;
}else
{
step_num--;
}
DispStepNum(step_num);
}
break;
caseKey_speed_add:
//速度加键
if(run==0)
{
if(speed_num==4)
{
speed_num=1;
}else
{
speed_num++;
}
DispSpeed(speed_num);
}
break;
caseKey_speed_sub:
//速度减键
if(run==0)
{
if(speed_num==1)
{
speed_num=4;
}else
{
speed_num--;
}
DispSpeed(speed_num);
}
break;
caseKey_Con_Set:
//连续运行与指定步数运行切换键。
if(run==0)
{
if(continuous==0)
{
continuous=1;
}else
{
continuous=0;
}
DispContinuous(continuous);
}
break;
default:
break;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 实验 报告