步进电机控制实训报告.doc

上传人:jian****018 文档编号:8962298 上传时间:2020-04-02 格式:DOC 页数:17 大小:134.50KB
返回 下载 相关 举报
步进电机控制实训报告.doc_第1页
第1页 / 共17页
步进电机控制实训报告.doc_第2页
第2页 / 共17页
步进电机控制实训报告.doc_第3页
第3页 / 共17页
点击查看更多>>
资源描述
2010/2011学年第1学期专用周实习报告课程名称 : 班 级 : 姓 名 : 学 号 : 教学周数 : 地 点 : 指导教师 : 可编程控制器的设计摘要:介绍了一种基于AT89S52单片机控制的步进电机的设计,系统分为单片机控制、LCD显示、步进电机驱动和按键设置四个模块,设计的系统能通过按键来控制步进电机,并且步进电机的状态能通过LCD液晶模块实时显示出来,使人们直观的看出步进电机的运行状态。用ULN2003驱动步进电机,并由按键分别控制步进电机的启/停,快速/慢速,正转/反转。实现了步进电机的基本功能。本报告对该系统的工作原理、硬件电路和软件进行了详细介绍。关键词: LCD液晶显示 ULN2003电机驱动、按键控制、步进电机第1章 引言本系统是基于单片机控制的综合系统,单片机通过按键的设置实现步进电机的变速及LCD实时显示步进电机的转速。它综合了电子技术和单片机软硬件技术,在控制模块选择、电机选择和驱动模块选择中都进行了各种方案的对比比较,从中选出最合适的方案。第2章 方案比较与论证总体系统框图如图1所示:按键控制AT89S52微控制ULN2003驱动模块LCD液晶显示图1 系统框图2.1 微控制模块选择方案一:采用89S52作为步进电机控制器。经典52单片机具有价格低廉、使用简单等优点。一个微型计算机,其控制模块功能较全。方案二:采用STM32F103XX作为步进电机控制器。STM32通过寄存器模式,寻址方式灵活,RAM和FLASH容量大,运算速度快、低功耗、低电压等,且通过TIM2的输出比较模式来控制步进电机以连续周期的50%和一个可变频率。DMA控制器可用来改变时钟周期,Systick定时器灵活地产生中断。但这次设计可编程控制器控制电机较简单没必要采用STM32,51就可以。基于以上分析,选择方案一。2.2 步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、启停的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机一个脉冲信号, 电机则转过一个步距角。因此,步进电机具有快速启停能力,如果负荷不超过步进电机所能提供的动态转矩值,就能立即使步进电机启动或反转,而且步进电机的转换精度高,驱动电路简单,非常适合定位控制系统。2.3 步进电机驱动模块的选择方案一:采用继电器对电动机的开和关进行控制,通过开关的切换对电机的速度进行调整。这个方案的优点是电路较为简单,实现容易;缺点是继电器的响应速度慢、机械结构易损坏、寿命较短。方案二: 采用DSP芯片,配以电机控制所需要的外围功能电路,通过数控电压源调节电机运行速度,实现控制物体的运动轨迹。该方案优点是体积小、结构紧凑、使用便捷、可靠性提高。但系统软硬件复杂、成本高。方案三: 采用专用芯片ULN2003。ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。基于上述理论分析和实际情况,拟定选择方案三。第3章 系统硬件设计3.1 电机驱动系统的设计ULN2003的原理和封装图分别如图2和图3所示: 图3 ULN2003封装图 ULN2003引脚的功能如下所示:引脚1:CPU脉冲输入端,端口对应一个信号输出端。 引脚2:CPU脉冲输入端。 引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。 引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。 引脚7:CPU脉冲输入端。 引脚8:接地。 引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端。 参考电路接法 引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。 引脚15:脉冲信号输出端,对应2脚信号输入端。 引脚16:脉冲信号输出端,对应1脚信号输入端。3.2 LCD1602显示: 在本系统中我们采用1602字符型液晶显示模块来显示步进电机的转速、起停以及正反转等步进电机的状态。字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供内部自动上电复位电路,+5V工作电压。一共有16个引脚,其中一对电源引脚、一对LED背光电源引脚、LCD驱动电压引脚、一个模式选择引脚用p2.2口来控制、一个读写操作引脚用p2.1口控制、一个使能引脚用p2.0口来控制、7个数据引脚用p0口来控制。其中LCD驱动电压V0可通过滑动变阻器进行调节,一般V0为零伏。具体应用电路图如图5所示:图5 LCD显示模块应用电路第4章 系统软件设计本系统的软件设计分LCD显示子程序、按键扫描测试、步进电机控制程序和主程序组成。整个系统采用C语言进行编写。1. 主程序主程序包括系统的初始化、LCD子程序的调用以及定时器中断函数和步进电机控制函数组成。系统初始化包括对LCD显示模块数据位、命令位,步进电机停止、转速的定义与初始化,LCD显示程序显示静态的“Step Motor”和动态的不同速度水平式步进电机的转速以及正反转的标志,定时器中断函数主要设定定时器中断间隔和步进电机的转速,步进电机控制函数由步进电机索引函数和对索引值的加减函数组成。系统的主程序流程图如图10所示图10 主函数流程图2. LCD子程序LCD子程序主要实现的功能是显示步进电机的状态。显示动态字符函数是用来显示步进电机的转速计转向状态,例如:第一行显示:Step Motor 第二行显示:rate: 6 STOP系统LCD显示子程序流程图如图所示程序流程图如:开始按键扫描检测按键按下?按键1?按键2?电机停止电机正转进行数据处理进行数据处理LED显示速度正反转标志志否否否是是是是按键3?电机反转进行数据处理否是是按键4?电机加速进行数据处理否是是按键5?电机减速进行数据处理否是是 通过用P2.3控制停止键、P2.4控制正转键、P2.5控制反转键、P2.6控制加速键、用P2.7控制减速键,在程序中我们通过按键来调试电机的速度与正反转,再根据他的速度进行数据处理,再在显示屏上显示出来: 参考文献1 李宁,基于MDK的STM32处理器开发应用,北京航空航天大学出版社2 黄智伟,全国大学生电子设计竞赛系统设计,北京航空航天大学出版社3 康华光,陈大钦,电子技术基础,高等教育出版社附录一主要元器件清单:器件名称器件数量AT89S52微控制器1片电机驱动芯片ULN20031片步进电机1个晶振、电阻、电容、按键等若干附录二源代码包括两个文件:步进电机.C、LCD.C;步进电机.C:#include /管脚定义头文件#include lcd.h#define uchar unsigned char#define uint unsigned intsbit BEEP = P37; /蜂鸣器sbit k0 = P23;sbit k1 = P24;sbit k2 = P25;sbit k3 = P26;sbit k4 = P27;bit direction; /方向标志uchar code cdis1 = Step Motor ;uchar code cdis2 = RATE: ;uchar code cdis3 = STOP; /停止uchar code cdis4 = ; /正转uchar code cdis5 = ; /反转uchar count1 = 0,count2 = 0;uchar rate=9; /预设定速率值uchar code FFW8= /正转表 0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9 ;uchar code REV8= /反转表 0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1 ;char code reserve3_at_ 0x3b; /保留0x3b开始的3个字节/* x*0.14ms 延时子函数*/void delay(uchar x) uchar i; while(x-) for (i = 0; i14; i+) ; /* 蜂鸣器响一声*/void beep(void) uchar i; for (i=0;i4) rate-; else rate = 4;while(!k3); if(0=k4) beep(); delayms(10); if (0=k4) /“”键 if(rate 15) rate+; else rate = 15; while(!k4); /* 定时器 0 中断服务子函数 (负责步进电机运行)*/void motor_onoff() interrupt 1 TL0 = 0xcc; /2ms定时常数 TH0 = 0xf8; count1+;/基本延时rate设为9 if(count1 rate) return; else count1=0; if(direction=1) /运行方向标志 if(count2 8) P1 = FFWcount2; /取数据,正转 count2+; /取数据次数加1 if(count2=8) count2=0; else if(count2 8) P1 = REVcount2; /取数据,反转 count2+; /取数据次数加1 if(count2 = 8) count2=0; /*/LCD.C:#include #include #define DATA_PORT P0sbit LCD_RS = P2 0;sbit LCD_RW = P2 1;sbit LCD_EN = P2 2;/* us延时子程序 (4.34us)*/void delayNOP() _nop_(); _nop_(); _nop_(); _nop_();/* ms延时子程序*/void delayms(unsigned int ms) unsigned char k; while (ms-) for (k = 0; k 114; k+) ; /* 检查LCD忙状态 lcd_busy为1时,忙,等待。 lcd-busy为0时, 闲,可写指令与数据。*/void lcd_busy() bit busy; busy = 1; while (busy) LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; busy = (bit)(DATA_PORT &0x80); delayNOP(); LCD_EN = 0;/* 写指令数据到LCD RS=L,RW=L,EN 下降沿执行写操作。D0-D7=指令码。 Check=1,进行忙检测。*/void lcd_wcmd(unsigned char cmd, bit Check) if (Check) lcd_busy(); /进行忙检测 LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; DATA_PORT = cmd; delayNOP(); LCD_EN = 0;/* 写显示数据到LCD RS=H,RW=L,EN 下降沿执行写操作。D0-D7=数据。*/void lcd_wdat(unsigned char dat) lcd_busy(); /进行忙检测 LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; DATA_PORT = dat; delayNOP(); LCD_EN = 0;/* LCD初始化设定*/void lcd_init() delayms(15); lcd_wcmd(0x38, 0); /16*2显示,5*7点阵,8位数据 delayms(5); lcd_wcmd(0x38, 0); /不进行忙检测,强制执行三次。 delayms(5); lcd_wcmd(0x38, 0); delayms(5); lcd_wcmd(0x38, 1); /进行忙检测 delayms(5); lcd_wcmd(0x0c, 1); /显示开,关光标 delayms(5); lcd_wcmd(0x06, 1); /移动光标 delayms(5); lcd_wcmd(0x01, 1); /清除LCD的显示内容 delayms(5);/* 设定显示位置*/void lcd_pos(unsigned char xpos, unsigned char ypos) if (ypos = 0x01) lcd_wcmd(xpos | 0x80), 1); if (ypos = 0x02) lcd_wcmd(xpos | 0xc0), 1);/* 自定义字符写入CGRAM*/*void writetab(unsigned char mytab) unsigned char i; lcd_wcmd(0x40,1); /写CGRAM for (i = 0; i 8; i+) lcd_wdat(mytabi);*/* 写字符串子函数*/void wr_string(unsigned char str,unsigned int time) unsigned char num = 0; while (strnum) lcd_wdat(strnum+); delayms(time); /*/
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!