1、步进电机设计报告硬件实习报告步进电动机的设计报告题 目:步进电动机的设计与制作学 院:大数据与信息工程学院专 业:计算机科学与技术班 级:电信 113学生姓名:王浩指导教师:马光喜老师2015年 1月 6日第页 共页硬件实习报告前言 -21.设计目标及内容 -31.1设计内容 -41.2设计目的 -42.硬件原理及设计分析 -42.1步进电机的工作原理 -52.2液晶显示原理 -52.3步进电机转速控制及显示设计(LCD显示转速)的硬件框图 -62.4总的硬件电路图 -73.软件分析及设计 -83.1软件需求分析 -83.2程序流程图 -83.3软件代码 -94.操作说明及结果分析 -185.
2、调试过程中遇到的问题和解决方法 -186.硬件实习总结 -197参考文献 -19第页 共页硬件实习报告前言在电子科技不断飞速发展的今天,数字控制技术得到了广泛而深入的应用。步进电机是一种将数字信号直接转换成角位移或线位移的控制驱动元件 , 具有快速起动和停止的特点。因为步进电动机组成的控制系统结构简单,价格低廉,性能上能满足工业控制的基本要求, 所以广泛地应用于手工业自动控制、 数控机床、组合机床、机器人、计算机外围设备、照相机 , 投影仪、数码摄像机、大型望远镜、卫星天线定位系统、医疗器件以及各种可控机械工具等等。步进电机突出的优点是它可以在宽广频率范围内通过改变脉冲频率来实现调速,在需要精
3、确定位的地方都要用到它,比如打印机、绘图仪等。而 LCD显示屏在很多数码产品中有着广泛的应用, 如计算器 ,IC 卡电话机 , 电子手表 , 掌上电脑 , 仪表显示屏等。同时,单片机也广泛应用于实时控制、 智能仪器、仪表通信和家用电器等各个领域,所涉及的内容非常广泛,是计算机科学、电子学、自动控制等基础知识的综合应用。单片机的应用系统有硬件和软件所组成。本次硬件实习是基于 51 单片机对步进电机转速进行控制, 加之液晶的显示, 使其转速的档位和方向显示在液晶上。第页 共页硬件实习报告1. 设计目标及内容1.1 设计内容1.1.1 利用实验平台上单片机 P0口输出脉冲序列, 74LS244输出开
4、关量,开关 K2 K7 控制步进电机转速,(分 6 档),K0,K1 控制转向。驱动方式分两种,四相四拍、四相八拍,通过软件设计,控制步进电机的转速和方向。 并将转速( 16档)和转向(正转“ 1”,反转“ 0”) 显示在 LCD显示器上1.2 设计目的1.2.1 了解步进电机控制的基本原理;1.2.2 掌握液晶显示图形的基本方法, 从而对其它液晶屏的使用也能得心应手。2. 硬件原理及设计分析2.1 步进电机的工作原理该步进电机为一四相步进电机, 采用单极性直流电源供电。 只要对步进电机的各相绕组按合适的时序通电, 就能使步进电机步进转动。 图 1 是该四相反应式步进电机工作原理示意图。图 1
5、 四相步进电机步进示意图开始时,开关 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方向转动。第页 共页硬件实习报告四相步进电机按
6、照通电顺序的不同, 可分为单四拍、 双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等, 但单四拍的转动力矩小。 八拍工作方式的步距角是单四拍与双四拍的一半, 因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图 2.a 、b、c所示:a. 单四拍 b. 双四拍 c 八拍图 2 通电时序波形本实验使用的步进电机用直流 +12V电压,电机线圈由 A、B、C、D 四相组成。驱动方式为四相四拍方式 , 各线圈通电顺序如下表。表中首先向 A 线圈输入驱动电流, 接着 B、C、D线圈驱动,最后又返回到 A 线圈驱动,按这种顺序切换,电机
7、轴按顺时针方向旋转。若通电顺序相反,则电机轴按逆时针方向旋转。(注:为提高步进电机负载能力和运行平稳,可使用四相八拍驱动方式。)顺序/ 相ABCD00111110112110131110表二:驱动方式2.2 液晶显示原理本实验用的是 1602 液晶, 1602 液晶可以显示两行字符,其写入字符是根据时序特点,写指令,写数据等操作。以下是1602 液晶的相关资料,读状态输入RS=L, R/W=H,E=H输出D0D7=状态字写指令输入 RS=L, R/W=L,D0D7=指令码, E=高 输出无脉冲读数据输入RS=H, R/W=H,E=H输出D0 D7=数据写数据输入 RS=H, R/W=L,D0D
8、7=数据, E=高脉 输出无冲第页 共页硬件实习报告表 二:基本操作时序表读写操作时序如图所示图 3:读操作时序图 4:写操作时序2.3 步进电机转速控制及显示设计( LCD显示转速)的硬件框图如图 5 所示,整个硬件围绕 51 单片机,根据开关输入通过外接电路控制步进电机的转速和方向,并显示在液晶上。8051 单片机作为处理器,整个硬件功能围绕 8051 进行实现,首先,由开关通过扩展输入实现对整个硬件功能的控制。当开关设置为某个状态时,由 8051 单片机输出相应的值,通过扩展输出对步进电机进行相应方向和转速的控制,并由 1602 进行相应的显示。第页 共页硬件实习报告8051单片机扩驱展
9、动步进电机输电出路LCD 驱动电路 液 晶扩展输 开关入图 5 硬件框图2.4 总的硬件电路图如硬件电路图图 6 所示。其中, 74LS373为地址锁存器, 74LS244为带 3 态输出的八缓冲器, 74LS273为带清除的八触发器; 74LS138为三八译码器。开关由扩展输入对单片机进行输入相关变量, 从而通过单片机对步进电机的转速和方向进行控制。再有液晶进行相应的显示。3. 软件分析及设计第页 共页硬件实习报告3.1 软件需求分析本实习要求用开关控制步进电机的转速和方向, 并将相应的数据显示在液晶上;通过分析,我们只需将开关的输入量转换成相应的步进电机转速即可, 然而,通过前面讲过的步进
10、电机的相关驱动方式我们可以知道, 转速可以通过设置延时子程序的时间长短来实现,而步进电机的方向则通过不同的时序来控制,从而加上很容易的实现步进电机的转速控制, 在根据液晶的时序规则来显示相应的数据,很简单的实现了整个实习要求。3.2 程序流程图如图 ( 图 7:程序流程图 ) 所示,在程序开始后先进行各个参数的初始化,然后对开关量进行读取, 根据读取的数值进行对步进电机的转速量和方向量进行设置,并同时在 LCD上显示出相应的数据,定时,置输出地址,然后输出相应的参数,从而实现对步进电机和液晶的相应控制。图 7:第页 共页硬件实习报告如下图 ( 图 8:LCD框图所示 ) 为 LCD液晶的显示子
11、程序框图 , 程序先进行 LCD 初始化,然后进行清屏,在需要写入时,对 LCD进行写操作,最后就可以显示出来你想要的字符。图 8: LCD 程序框图3.3 软件代码#include reg52.h#include /#define uchar unsigned char/#define uint unisgned int/#define BYTE unsigned char/#define num unsigned intsbit k1 = P20;sbit k2 = P21;sbit k3 = P22;sbit k4 = P23;sbit k5 = P24;sbit k6 = P25;sb
12、it k7 = P26;sbit k8 = P27;void delay1(unsigned int t) /电机驱动延时程序unsigned int k;while(t-)第页 共页硬件实习报告for(k=0; k100; k+)void motor_ffw(unsigned char i) /电机顺时针转动程序P1=0x01;delay1(i);P1=0x02;delay1(i);P1=0x04;delay1(i);P1=0x08;delay1(i);void motor_ffz(unsigned char i) /电机逆时针转动程序P1=0x01;delay1(i);P1=0x02;de
13、lay1(i);P1=0x04;delay1(i);P1=0x08delay1(i);sbit RS = P05; / 定义 P25 为液晶控制端口 RSsbit RW = P06;sbit E = P07;第 页 共页硬件实习报告uchar code table= Gui zhou da xue / 字符定义uchar code table1=wangxiaogang uchar code table2=1120020075 uchar code table3= SPEED:123456;uchar code table4= startstepmotor ;uchar code table5
14、= SPEED: ;uchar code table6=123456;typedef unsigned char BYTE; /定义字符变量 BYTE typedef unsigned int WORD; /定义整形变量 WORD typedef bit BOOL; / 字符变量 BOOL/LCD 驱动程序void lcddelay(BYTE ms) / 延时子程序BYTE i;while(ms-)for(i = 0; i 250; i+) / 循环 250 次_nop_();_nop_();_nop_(); / 空操作延时 1us_nop_();/ 测试 LCD 忙碌状态 -忙检测函数BOO
15、L lcd_bz()BOOL result; /定义字符变量 result,用于存放测试的 LCD 忙碌状态值RS=0;/寄存器的选择控制口,选择指令寄存器RW=1;/ 读写操作控制端口,RW = 1 表示读操作E=1;/_nop_();/延时 4us第 页 共页硬件实习报告_nop_();_nop_();_nop_();result = (BOOL)(P0 & 0x80);E=0;return result;/写入指令数据到 LCDvoid lcd_wcmd(BYTE cmd)while(lcd_bz();RS=0;RW=0;E=0;_nop_();_nop_();P0 = cmd;_nop
16、_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;/写入字符显示数据到 LCDvoid lcd_wdat(BYTE dat)while(lcd_bz();RS=1;RW=0;E=0;P0 = dat;_nop_();第 页 共页硬件实习报告_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;/LCD 初始化设定void lcd_init()lcd_wcmd(0x38); / 设置 LCD 为 8 位数据,两行显示, 5*7 点阵 lc
17、ddelay(1);lcd_wcmd(0x0E); / 显示开关控制指令设定, LCD 开显示和光标, 不闪烁lcddelay(1);lcd_wcmd(0x06); /设光标和画面的移动方式 I/D=1 ,S=0 设置读写操作之后 AC 自动加一,显示不移动lcddelay(1);lcd_wcmd(0x01); /清除 LCD 的显示内容lcddelay(1);void out0init()/ 外部中断 0 的初始化EX0 = 1;IT0 = 1;EA=1;void lcd_xianshi() /lcd 液晶显示程序lcd_wcmd(0x00);for(num=0;num15;num+)第 页
18、 共页硬件实习报告lcd_wdat(tablenum);delay(1);lcd_wcmd(0x80+0x40);for(num=0;num12;num+)lcd_wdat(table1num);delay(1);lcd_wcmd(0x80+0x40);for(num=0;num10;num+)lcd_wdat(table2num);lcd_wcmd(0x80+0x40);for(num=0;num11;num+)lcd_wdat(table3num);delay(1);lcd_wcmd(0x80+0x40);for(num=0;num14;num+)lcd_wdat(table4num);d
19、elay(1);lcd_wcmd(0x80+0x40);for(num=0;num0;c-)for(b=142;b0;b-)for(a=2;a0;a-);void 0ut0inter(void) interrupt 0 using 1delay1ms(10)if(k1 = = 0)delay1ms(2)if(k1 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);lcd_wdat(table60);delay(1);else if(k2 = =0)delay1ms(2)if(k2 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=10
20、0;lcd_wdat(table61);else if(k3 = =0)delay1ms(2)if(k3 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=80;lcd_wdat(table62);第 页 共页硬件实习报告else if(k4 = =0)delay1ms(2)if(k4 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=60;lcd_wdat(table63);else if(k5 = =0)delay1ms(2)if(k5 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=40;l
21、cd_wdat(table64);else if(k6 = =0)delay1ms(2)if(k6 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=30;lcd_wdat(table65);motor_ffw(i);else if(k7 = =0)delay1ms(2)if(k7 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);lcd_wdat(table60);delay(1);if(k2 = = 0)delay1ms(2)第 页 共页硬件实习报告if(k2 = =0)lcd_wcmd(0x80+0x40+0x07);delay
22、(1);i=100;lcd_wdat(table61);else if(k3=0)delay1ms(2)if(k3 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=80;lcd_wdat(table62);else if(k4 = =0)delay1ms(2)if(k4 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=60;lcd_wdat(table63);else if(k5 = =0)delay1ms(2)if(k5 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=40;lcd_wdat
23、(table64);else if(k6 = =0)delay1ms(2)第 页 共页硬件实习报告if(k6 = =0)lcd_wcmd(0x80+0x40+0x07);delay(1);i=30;lcd_wdat(table65);lcd_wdat(table65);motor_ffz(i);void main (void)lcd_xianshi();lcd_init();out0init();while(1)motor_ffw(i);delay1ms(80)motor_ffz(i);delay1ms(80)4. 操作说明及结果分析P1 八位分别接开关开关的八个口, F208 接 38 译码
24、器, PO 前四口分别接步进电机四口, F200 接液晶把程序烧写进去后运行, 液晶第一行显示 FX:当 K0 拨上时液晶显示 FX:1,步进电机顺时钟转,当拨上时液晶显示 FX:0,步进电机逆时针转,开关 K2 K7控制步进电机转速,(分 6 档),并正常显示在液晶上, K2 上拨时,第二行显示 SPEED:1;K3 上拨时显示 SPEED:2; K4 上拨时显示 SPEED:3; K5 上拨时显示 SPEED:4;K5 上拨时显示 SPEED:4;K6 上拨时显示 SPEED:7; K7 上拨时显示SPEED:8;整个程序运行符合实习要求。5. 调试过程中遇到的问题与解决方法第 页 共页硬件实习报告在整个调试过程中遇到了很多问题, 现在就几个比较有代表性和常见的问题加以说明。首先,在本人调试步进电机速度时,刚开始遇到了电机只抖不转的现象,当时检查了整个程序,未发生程序上的错误,于是很纳闷。不过再后来上网差了很多
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1