步进电机实验报告
更新时间:2024-04-10 06:42:01 阅读量: 综合文库 文档下载
论文题目: 步进电机的控制
课程名称: 计算机控制技术 学 院 信息工程学院 专业班级 应用电子技术(2)班 学 号 3109003108 姓 名 卢广彬 任课教师 黄国宏
2012年4 月 16 日
实验名称:步进电机的控制
实验目的:
1、 复习步进电机的工作原理,进一步加强对步进电机的应用方面的学习; 2、 了解芯片ULN2003A的工作原理,并利用单片机或者微机等对芯片加予控制; 3、 学会灵活编写单片机的控制及应用程序,进一步熟悉单片机的工作方式; 4、 学会用单片机及一外围设备组建具有独特功能的自动控制系统。
实验原理:
ULN2003A是一个具有16个引脚驱动芯片,其作用是将输入的较小电流放大,以便可以驱动一般的I/O无法驱动的较大功率的外围设备。下面将叙述ULN2003A的内部结构、芯片引脚功能、与单片机的连接方法及简单的应用。
一、ULN2003管脚排列如下图所示:ULN2003的内部结构和功能
ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003A时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003A是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。 比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。
ULN2003A的作用:
ULN2003A是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。 输入5VTTL电平,输出可达500mA/50V。
ULN2003A是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。 该电路的特点如下: ULN2003A的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器。
ULN2003A是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
ULN2003A引脚图及功能:
ULN2003 是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片。 经常在以下电路中使用,作为: 1、显示驱动 2、继电器驱动 3、照明灯驱动 4、电磁阀驱动
5、伺服电机、步进电机驱动等电路中。
ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它 能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来 处理的数据。
ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。 ULN2003 的封装采用DIP—16 或SOP—16
ULN2003A在各种控制电路中常用它作为驱动继电器的芯片,其芯片内部做了一个消线圈反电动势的二极管。ULN2003的输出端允许通过IC 电流200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。输出电流大,故可以直接驱动继电器或固体继电器(SSR)等外接控制器件,也可直接驱动低压灯泡。
ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。
ULN2003A中每对达林顿管的基极都串联有一个2.7kΩ的电阻,可直接与TTL或5V CMOS器件连接
ULN2003可以并联使用,在相应的OC输出管脚上串联几个欧姆的均流电阻后再并联使用,防止阵列电流不平衡。 2.1步进电机
步进电机是一种将电脉冲转化为角位移的执行机构。电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
2.2步进电机的控制
1.换相顺序控制: 通电换相这一过程称为脉冲分配。例如:混合式步进电机的工作方
式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。
2.控制步进电机的转向控制: 如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
3.控制步进电机的速度控制:如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。 2.3步进电机的工作过程
开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。 当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。 单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图3.a、b、c所示:
a.单四拍 b. 双四拍 c.四相八拍
步进电机工作时序波形图
对步进电机四个绕组依次实现如下方式的循环通电控制: 1、单四拍运行:正转A-B-C-D; 反转D-C-B-A
2、双四拍运行:正转AB-BC-CD-DA;反转DC-CB-BA-AD 3、八拍运行: 正转A-AB-B-BC-C-CD-D-DA
本实验使用的四相八拍的工作方式
3、实验原理图:
单片机控制步进电机的原理图如下图所示:
单片机STC89C52上电后根据程序在P1.0—P1.3这四个I/O口输出上面步进电机工作时序图中的四相八拍时序方波,方波电流经ULN2003A芯片构成的驱动模块放大到一定的程度,以便提供可以满足步进电机工作所需的功率,即可使步进电机工作。如图所示的电路图中,步进电机有三种工作方式:一是仿照自动升降国旗的系统,当SA按下后,就进入自动升国旗的模式,国歌的长度是49秒,电机转过24.5圈时,蜂鸣器就响一下,与此同时,在LCD1602上会计数,并显示电机转过的圈数;当SB按下后,则是降国旗,其他方面的跟升国旗的情况一样。二是正转方向上的加减速,只有SC这个按键按下后,就进入正转模式;再按SC键,就可以循环加减束。三是反转方向的加减速,情况和第二种工作方式相类似。
实验步骤及结果:
1、 按照实验原理图连接好电路图;
2、 根据原理图编写程序;
3、 电路上电,调试程序,观察并控制电机使其按照预期的行为工作;
4、 当电机可以通过按键控制其仿照自动升降国旗系统、正转加减速、反转加减速时,程序
调试结束;
5、优化程序,整理实验结果
实验程序:
#include
#define uint unsigned int #define uchar unsigned char #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0
uint flag,N; uchar step=3;
sbit keyA=P1^4; sbit keyB=P1^5;
//正转键 //反转键
sbit keyC=P1^6; //加速键 sbit keyD=P1^7; //减速键
sbit beep=P3^6; //报警器开关口 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管显示 uchar code F[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //四相八拍正转 TABLE uchar code R[]={0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3};
void delay(uint z) {
uint x,y; for(x=z;x>0;x--) }
void DelayUs2x(unsigned char t) {
while(--t); }
for(y=0;y<115;y++);
//延时子程序
//四相八拍反转 TABLE
void DelayMs(unsigned char t) {
while(t--)
{
//大致延时1mS DelayUs2x(245); DelayUs2x(245); } }
bit LCD_Check_Busy(void) {
DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET;
return (bit)(DataPort & 0x80);
}
void LCD_Write_Com(unsigned char com) {
while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_SET;
DataPort= com; _nop_(); EN_CLR; }
void LCD_Write_Data(unsigned char Data) {
while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; }
void LCD_Clear(void) {
LCD_Write_Com(0x01); DelayMs(5); }
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {
if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 }
else
{
LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s)
{
LCD_Write_Data( *s); s ++; } }
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {
if (y == 0) {
LCD_Write_Com(0x80 + x); } else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data); }
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5);
LCD_Write_Com(0x38); DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/ }
void display() { P0=0xFF; //P1口置1 LCD_Init();
LCD_Clear();//清屏
LCD_Write_String(0,0,\ LCD_Write_String(10,0,\ LCD_Write_String(12,0,\
LCD_Write_String(0,1,\LCD_Write_Char(7,1,0+0x30);
LCD_Write_Char(9,1,0x7e ); }
void STEP_F(uchar n) {
uint i;
for(i=0;i<8;i++) {
if(keyC==0)
{ while(!keyC); n--; if(n==0) }
{ n=3;
beep=0; delay(100); beep=1;
}
P1=F[i]; delay(n); }
}
void STEP_R(uchar n) {
uint i;
for(i=0;i<8;i++) {
if(keyD==0) {
while(!keyD); n--; if(n==0)
{ n=3;
beep=0; delay(100);
}
beep=1; }
P1=R[i]; delay(n);
} }
void keyboard() {
if(keyA==0)
{ }
flag=0; N=0;
LCD_Write_String(12,0,\
else if(keyB==0) {
flag=1; N=0;
LCD_Write_String(12,0,\
}
else if(keyC==0) {
while(!keyC);
flag=2; N=0; LCD_Write_String(12,0,\
}
}
else if(keyD==0) {
while(!keyD); flag=3; N=0; }
LCD_Write_String(12,0,\
void main() {
uint i,j;
//主程序
display(); while(1)
{
keyboard(); {
for(j=0;j<32;j++) {
for(i=0;i<8;i++)
{
P1=F[i]; delay(2); } }
N++;
if(N==245) {
beep=0;
delay(300); beep=1; break;
if(flag==0)
//电机转过45°
}
LCD_Write_Char(10,1,N/1000+0x30); LCD_Write_Char(11,1,N00/100+0x30 ); LCD_Write_Char(12,1,N000/10+0x30 ); LCD_Write_String(13,1,\
LCD_Write_Char(14,1,N000+0x30 ); }
else if(flag==1)
{ for(j=0;j<32;j++) { for(i=0;i<8;i++)
{
P1=R[i]; delay(2); } }
N++;
if(N==245) {
beep=0;
delay(300); beep=1;
//电机转过45°
break; }
LCD_Write_Char(10,1,N/1000+0x30); LCD_Write_Char(11,1,N00/100+0x30 ); LCD_Write_Char(12,1,N000/10+0x30 ); LCD_Write_String(13,1,\
LCD_Write_Char(14,1,N000+0x30 ); }
else if(flag==2) {
while(keyA&keyB&keyD) { for(j=0;j<9*step;j++) { STEP_F(step);
} N++;
LCD_Write_Char(10,1,N/1000+0x30);
LCD_Write_Char(11,1,N00/100+0x30 ); LCD_Write_Char(12,1,N000/10+0x30 ); LCD_Write_String(13,1,\
LCD_Write_Char(14,1,N000+0x30 );
} }
else if(flag==3) {
while(keyA&keyB&keyC)
{
for(j=0;j<9*step;j++) { STEP_R(step); }
N++;
LCD_Write_Char(10,1,N/1000+0x30);
LCD_Write_Char(11,1,N00/100+0x30 ); LCD_Write_Char(12,1,N000/10+0x30 ); LCD_Write_String(13,1,\
LCD_Write_Char(14,1,N000+0x30 ); } }
else break;
} P1=0xf0; }
心得体会:
俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是对实验的原理要一丝不苟的去研究,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。
虽然自己有实验板,但是部分硬件的设计跟焊接都要我们自己动手去焊,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。
当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。
再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。
正在阅读:
步进电机实验报告04-10
远光财务管理系统使用手册 5 - 图文10-03
《口语交际:趣味故事会》教案08-07
XX企业基于物流信息系统的库存策略探析07-05
大学英语第八单元测试及答案11-13
白公鹅 评课稿01-13
汇编语言实验301-06
新吊车组塔施工方案 - 图文10-11
分布式电源对配电网保护影响的研究开题报告+文献综述+中期报告+04-30
一场激烈的足球赛作文600字06-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 步进电机
- 实验
- 报告
- 考研问题大全
- 现代交换原理练习
- 汽车发动机构造与维修考试题库(含答案)
- 《中学数学高效课堂经验交流会》心得
- 水电站毕业生转正答辩题目
- 离退休人员返聘注意事项
- 数据库一体机(Exadata)日常运维手册
- 新沪科版八年级物理下册第七章《力与运动》单元测试卷(附答案)
- 中国古代文学作品选一自编最新复习资料精华版
- 饮食养生 论文
- 2016-2017学年高中化学 专题4.1.1 二氧化硅和硅酸教学案
- 实验2 word综合排版(一)
- 银行业金融机构案件防控知识试题及答案
- 南开大学16秋学期《古代汉语(一)》在线作业
- 会计造假案
- 钻井司钻作业选择题
- 最适合民营医院的岗位职责设定
- 深圳特区的区位条件分析
- 测试题2016寒假 试卷- 春节后
- 护士执业考试复习题第二套