1、- 1 -鼠标控制步进电机运动鼠标控制步进电机运动设计报告设计报告题题目目: 鼠标控制步进电机运动鼠标控制步进电机运动作作者:者:ss(www.eisoc.co.cc)设计日期:二零一零年八月设计日期:二零一零年八月- 2 -串口部件传感器摘要:摘要:本作品实现用 PC 鼠标控制触杆在半球型空间内高精度运动,及记忆运行路径,回放路径功能。动力采用两个四相步进电机,由电机驱动芯片 L298 搭建驱动电路板。控制器没有单独做,采用学习板的 P3 口输出驱动信号。上位机界面用 MicroSoft Visual Basic 6.0 编写,通过串口通信协议与单片机实现数据和命令的传输。1、 方案论证最初
2、设想实现远程的电机控制器,能够将电机参数实时传送给控制端,控制端能够高精度地控制电机运动。方案一:采用红外控制原理,用遥控器控制两台电机运转。红外技术可以实现“无线化” ,具有较高的数据传输速率。动力源采用直流减速电机,驱动电路采用大功率晶体管构成的桥式驱动电路,采用 PWM 调节电机转速。方案二:STC 单片机具有异步全双工串行通信能力,串行口所需传输线少、通信距离长、通信速率高的特点,特别适用于控制系统以及远程通信。利用 PC对数据的高速处理能力可以实现比用按键更高的命令传输率, 适合高精度实时控制。采用步进电机以实现对运动体角度和位移的精确控制。综合考虑以上两种方案,红外遥控器只能通过按
3、键控制,操作者不可能每秒按超过 5 下,故其控制信号是离散的,无法实现“实时” 、 “高精度”的要求。自编的上位机程序将控制界面设定的区域内鼠标器的运动信息通过算法转换成命令代码,传送给单片机,经单片机就译码输出相应的驱动相序即可控制两台步进电机的运动情况。 考虑到步进电机经每相励磁后需要 5ms 至 10ms 的缓冲时间重新建立,单片机每 10ms 接收以一次上位机发送的方向信号,故 1S 内控制器最多可接收 100 个命令,大大高于红外按键式遥控器。单片机将控制器运转情况发送给上位机。步进电机更适合用单片机控制,并且消除了脉宽调制带来的高功耗和误差大。没有驱动信号时电机四个线圈不同电,线圈
4、只在驱动信号到来的一瞬间通电,即使电机以全速运转,线圈的大部分时间是不同电的,这样就减小了电源负载。综上分析,采用方案二。2、 总体方案组成与设计:该设计分为上位机模块、电机控制模块、运转平台模块。PC 上位机界面步进电机控制板电机运转平台- 3 -3、设计实现:3.1上位机的设计3.1.1 通信协议与通信部件的实现MicroSoft Visual Basic 6.0 提供了丰富的控件, “MicroSoft Comm Control6.0”是串口通信要用到的部件。将串口部件的通信参数设置为:.Settings = 9600,n,8,1.InBufferSize = 500.OutBuffer
5、Size = 1.InputMode = 0.InputLen = 100.SThreshold = 1.InBufferCount = 0 清除接收缓冲区.OutBufferCount = 0 清除发送缓冲区.RThreshold = 1完整程序附在附录 1 中。设计完成的“HelloMotor!”软件界面如下:上位机界面分为鼠标移动信息采集区、信息显示、控制按钮区三部分。- 4 -原点(0,0)X 轴Y轴9960 unit4740 unit3.1.2 鼠标移动信息的采集与转换为防止电机误操作,软件界面规定了一矩形框定义为“HelloMotor!”软件的可控区域(如图黑色区域所示) 。约定只
6、有鼠标进入此区域并且单击(在可控区域的任意位置)才触发控制事件。这个矩形框有自身的坐标系,如图所示:通过 Picture1_MouseMove 方法采集到鼠标的坐标信息(X,Y) ,与上次采集到的坐标值(X1,Y1)进行比较,tempX = X - X1, tempY = Y - Y1。在此约定:tempX 大于 0,输出一号电机左移信号,tempX 小于 0,输出一号电机右移信号,tempX 等于 0,输出一号电机保持信号(即不动作) ;tempY 大于 0,输出二号电机上移移信号,tempY 小于 0,输出二号电机下移信号,tempY 等于 0,输出二号电机保持信号(即不动作) 。3.3
7、电机控制模块单片机部分借用学习板,使用 P3 口作两台步进电机的驱动相序输出。驱动电路用驱动芯片 L298N 和光耦 P521 搭建。原理图如下:鼠标移动信息采集区鼠标移动信息采集区- 5 -L298N 为SGS-THOMSON Microelectronics 所出产的双全桥步进电机专用驱动芯片( Dual Full-Bridge Driver ) ,内部包含 4 信道逻辑驱动电路,是一种二相 和四相步进电机的专用驱动器,可同时驱动 2 个二相或 1 个四相步进电机,内含二个 H-Bridge 的高电压、 大电流双全桥式驱动器, 接收标准 TTL 逻辑准位信号,可驱动 46V、2A 以下的步
8、进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的 IO 端口来提供模拟时序信号。L298N 主要参数:综合考虑步进电机的扭矩、反应时间和功耗,这里用+12V 的驱动电压。在调试中发现,在 12V 直流稳压电源供电的情况下,电机运转五分钟后表面发烫,温度在 70-80,差了相关资料,这个值在电机机身允许温度范围内。本控制器不用 L298 产生相序,相序表由单片机提供。电机采用的是洛社微特电机厂生产的 28BYJ48A 型号电机, 为四相八拍电机,电压为 DC5VDC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。 每一个脉冲信号对应步进电机的某一相或两相
9、绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC-CD-DA-AB),八拍(A-AB-B-BC-C-CD-D-DA-A)。1 相励磁方式:在每一瞬间只有一个线圈导通,其特点是励磁方法简单、消耗电力小、精确度良好。但是转矩小、振动较大,每送一次励磁信号电机内部可走 2.8125(从外部看电机转了 0.0879)2 相励磁方式:在每一瞬间有两个线圈导通,特点是转矩大、振动较小,每送一次励磁信号可走
10、 2.8125。1-2 相励磁方式:1 相与 2 相轮流导通,精确度提高,且运行平滑。每送一次励磁信号可走 5.625。综上考虑采用 1-2 相励磁方式。相序表如下:uchar code CCW8=0 x08,0 x0c,0 x04,0 x06,0 x02,0 x03,0 x01,0 x09;/逆时钟旋转相序表- 6 -uchar code CW8=0 x09,0 x01,0 x03,0 x02,0 x06,0 x04,0 x0c,0 x08;/正时钟旋转相序表3.3 运转平台模块一号电机水平放置,二号电机垂直放置,两电机轴线共面垂直,电机机身固定在一起,构成两个自由度的装置。四、设计总结经过
11、一段时间的调试,可以用鼠标灵活地控制电机按指定路径运转。这个作品虽然没有实际应用场合,但这个过程让我学到了步进电机的控制方法,也尝试了一种新颖的电机控制方式。步进电机有很广阔的应用领域,在以后,用鼠标远程实时控制执行机构运作这种思路可能有某种应用。参考文献:1王守中. 51 单片机开发入门与典型实例 北京:人民邮电出版社,2008.82童诗白. 模拟电子技术基础 第四版.北京:高等教育出版社,2001.13黄智伟. 全国大学生电子设计竞赛训练教程. 北京:电子工业出版社,2005- 7 -附录附录 1 1:上位机软件代码Dim X1, Y1 As SingleDim OutByte(0)As
12、ByteDim picture_click As BooleanPublic Sub ComPortOpen()With MSComm1.CommPort = 1.Settings = 9600,n,8,1.InBufferSize = 500.OutBufferSize = 1.InputMode = 0.InputLen = 100.SThreshold = 1.InBufferCount = 0 清除接收缓冲区.OutBufferCount = 0 清除发送缓冲区.RThreshold = 1End WithEnd SubPrivate Sub Picture1_MouseDown(Bu
13、tton As Integer, Shift As Integer, X As Single, YAs Single)If Button = 1 Thenpicture_click = TrueElse: picture_click = FalseEnd IfEnd SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, YAs Single)Dim control As StringLabel2.Caption = XLabel4.Caption = YIf X 9900 Or X
14、 4545 Or Y 0 Thenpicture_click = FalseEnd IfIf picture_click = True ThentempX = X - X1tempY = Y - Y1- 8 -X1 = XY1 = YIf tempX 0And tempY = 0 Thenrightcontrol = 2ElseIf tempX = 0And tempY 0 Thendowncontrol = 4ElseIf tempX 0And tempY 0 Thenleft-upcontrol = 5ElseIf tempX 0 Thenleft-downcontrol = 6ElseI
15、f tempX 0And tempY 0 Thenright-downcontrol = 7ElseIf tempX 0And tempY 0 Thenright-upcontrol = 8Else: control = 0End IfOutByte(0) = Val(control)MSComm1.Output = OutByteEnd IfEnd SubPrivate Sub MSComm1_OnComm()Dim BufWith MSComm1Select Case .CommEventCase comEvReceiveBuf = MSComm1.InputLabel7.Caption
16、= Label7.Caption & Buf按照 ASCII 码接收,MCU端已将数字 0-9 处理成其 ASCII 码值发送MSComm1.InBufferCount = 0End SelectEnd WithEnd SubPrivate Sub Form_Load()Call ComPortOpenMSComm1.PortOpen = TrueEnd Sub- 9 -附录附录 2 2:单片机控制部分代码#include#include#define uchar unsigned char#define uint unsigned int/*定义变量*uchar speed_para=10;
17、bdatazero=0;uchar code p18=0 x09,0 x08,0 x0c,0 x04,0 x06,0 x02,0 x03,0 x01; /1 号电机相序表,1-2 相励磁方式uchar code p28=0 x90,0 x80,0 xc0,0 x40,0 x60,0 x20,0 x30,0 x10;/2 号电机相序表,1-2 相励磁方式uchar code ok=电机准备就绪!0;uchar code yuandian=正在回到原点!;ucharmemory1;/uchar code memory2;/*/声明函数/*/void delayms(uint z);void sen
18、d_str(uchar *str);/void yuandian();/voidPCre();/voidMCUre();/*void delayms(uint z)/延时 1msuchar a,b,c;while(z-)for(a=0;a1;a+)for(b=0;b3;b+)for(c=0;c219;c+);void send_str(uchar *str)/* 发送字符串函数 */unsigned char i = 0;/* 声明无符号字符变量 i,初始 i=0 */while(stri != 0)/* 遇到0,则停止发送 */- 10 -SBUF = stri;/* 发送字符串 */whi
19、le(!TI);/* 等特数据传送 */TI = 0;/* 清除数据传送标志 */i+;/* i 加 1, 下一个字符 */void main(void)uchar data_UART,m,n;/zero=0;SCON = 0 x50;/* 设定串行口工作方式 1 */TMOD = 0 x20;/* 定时器 1,自动重载,产生波特率 */TH1 = 0 xFD;/* 波特率 9600*/TR1 = 1;/* 启动定时器 1 */ES=1;IE=0 x90;P1=0 x00;delayms(5000);send_str(ok);/l1=0;while(1)if(RI)RI=0;data_UART
20、=SBUF;REN=0;switch(data_UART)case 0:break;case 1:m=m-1; if(m0)m=8;/leftP1=p1m;delayms(10);m=m-1; if(m8)m=0;/right- 11 -P1=p1m;delayms(10);m=m+1; if(m8)m=0;P1=p1m;delayms(10);data_UART=0;break;case 3:n+=1; if(n8)n=0;/upP1=p2n;delayms(10);n+=1; if(n8)n=0;P1=p2n;delayms(10);data_UART=0;break;case 4:n-=
21、1; if(n0)n=8;/downP1=p2n;delayms(10);n-=1; if(n0)n=8;P1=p2n;delayms(10);data_UART=0;break;case 5:m=m-1; if(m0)m=8;/ left-upn-=1; if(n0)n=8;P1=p1m+p2n;delayms(10);m=m-1; if(m0)m=8;n-=1; if(n0)n=8;P1=p1m+p2n;delayms(10);data_UART=0;break;case 6:/left-downm=m-1; if(m8)n=0;P1=p1m+p2n;delayms(10);m=m-1;
22、if(m8)n=0;P1=p1m+p2n;delayms(10);data_UART=0;break;case 7:/right-downm=m+1; if(m8)m=0;n+=1; if(n8)n=0;P1=p1m+p2n;delayms(10);m=m+1; if(m8)m=0;n+=1; if(n8)n=0;P1=p1m+p2n;delayms(10);data_UART=0;break;case 8:/right-upm=m+1; if(m8)m=0;n+=1; if(n8)n=0;P1=p1m+p2n;delayms(10);m=m+1; if(m8)m=0;n+=1; if(n8)n=0;P1=p1m+p2n;delayms(10);data_UART=0;break;default:/send_str(error);break; REN=1;
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。