《鼠标控制步进电机运动设计报告》由会员分享,可在线阅读,更多相关《鼠标控制步进电机运动设计报告(12页珍藏版)》请在金锄头文库上搜索。
1、鼠标控制步进电机运动设计报告题 目:鼠标控制步进电机运动作 者:ss(www.eisoc.co.cc)设计日期:二零一零年八月摘要:本作品实现用PC鼠标控制触杆在半球型空间内高精度运动,及记忆运行路径,回放路径功能。动力采用两个四相步进电机,由电机驱动芯片L298搭建驱动电路板。控制器没有单独做,采用学习板的P3口输出驱动信号。上位机界面用MicroSoft Visual Basic 6.0编写,通过串口通信协议与单片机实现数据和命令的传输。1、 方案论证 最初设想实现远程的电机控制器,能够将电机参数实时传送给控制端,控制端能够高精度地控制电机运动。方案一:采用红外控制原理,用遥控器控制两台电
2、机运转。红外技术可以实现“无线化”,具有较高的数据传输速率。动力源采用直流减速电机,驱动电路采用大功率晶体管构成的桥式驱动电路,采用PWM调节电机转速。方案二:STC单片机具有异步全双工串行通信能力,串行口所需传输线少、通信距离长、通信速率高的特点,特别适用于控制系统以及远程通信。利用PC对数据的高速处理能力可以实现比用按键更高的命令传输率,适合高精度实时控制。采用步进电机以实现对运动体角度和位移的精确控制。 综合考虑以上两种方案,红外遥控器只能通过按键控制,操作者不可能每秒按超过5下,故其控制信号是离散的,无法实现“实时”、“高精度”的要求。自编的上位机程序将控制界面设定的区域内鼠标器的运动
3、信息通过算法转换成命令代码,传送给单片机,经单片机就译码输出相应的驱动相序即可控制两台步进电机的运动情况。考虑到步进电机经每相励磁后需要5ms至10ms的缓冲时间重新建立,单片机每10ms接收以一次上位机发送的方向信号,故1S内控制器最多可接收100个命令,大大高于红外按键式遥控器。单片机将控制器运转情况发送给上位机。步进电机更适合用单片机控制,并且消除了脉宽调制带来的高功耗和误差大。没有驱动信号时电机四个线圈不同电,线圈只在驱动信号到来的一瞬间通电,即使电机以全速运转,线圈的大部分时间是不同电的,这样就减小了电源负载。综上分析,采用方案二。2、 总体方案组成与设计:串口部件传感器电机运转平台
4、步进电机控制板PC 上位机界面 该设计分为上位机模块、电机控制模块、运转平台模块。3、设计实现:3.1 上位机的设计3.1.1 通信协议与通信部件的实现MicroSoft Visual Basic 6.0提供了丰富的控件,“MicroSoft Comm Control 6.0”是串口通信要用到的部件。 将串口部件的通信参数设置为:.Settings = 9600,n,8,1 .InBufferSize = 500 .OutBufferSize = 1 .InputMode = 0 .InputLen = 100 .SThreshold = 1 .InBufferCount = 0 清除接收缓冲
5、区 .OutBufferCount = 0 清除发送缓冲区 .RThreshold = 1 完整程序附在附录1中。设计完成的“HelloMotor!”软件界面如下: 上位机界面分为鼠标移动信息采集区、信息显示、控制按钮区三部分。3.1.2 鼠标移动信息的采集与转换X轴 为防止电机误操作,软件界面规定了一矩形框定义为“HelloMotor!”软件的可控区域(如图黑色区域所示)。约定只有鼠标进入此区域并且单击(在可控区域的任意位置)才触发控制事件。这个矩形框有自身的坐标系,如图所示:原点(0,0)鼠标移动信息采集区4740 unitY轴9960 unit通过Picture1_MouseMove方法
6、采集到鼠标的坐标信息(X,Y),与上次采集到的坐标值(X1,Y1)进行比较,tempX = X - X1, tempY = Y - Y1。在此约定:tempX大于0,输出一号电机左移信号,tempX小于0,输出一号电机右移信号,tempX等于0,输出一号电机保持信号(即不动作);tempY大于0,输出二号电机上移移信号,tempY小于0,输出二号电机下移信号,tempY等于0,输出二号电机保持信号(即不动作)。3.3电机控制模块 单片机部分借用学习板,使用P3口作两台步进电机的驱动相序输出。 驱动电路用驱动芯片L298N和光耦P521搭建。原理图如下: L298N 为SGS-THOMSON M
7、icroelectronics 所出产的双全桥步进电机专用驱动芯片( Dual Full-Bridge Driver ) ,内部包含4信道逻辑驱动电路,是一种二相 和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准 TTL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO端口来提供模拟时序信号。L298N主要参数: 综合考虑步进电机的扭矩、反应时间和功耗,这里用+12V的驱动电压。在调试中发现,在12V直流稳压电源供电的情况下,电机运转五分钟后表面发烫,温
8、度在70-80,差了相关资料,这个值在电机机身允许温度范围内。本控制器不用L298产生相序,相序表由单片机提供。 电机采用的是洛社微特电机厂生产的28BYJ48A型号电机,为四相八拍电机,电压为DC5VDC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC-CD-DA-AB),八拍(
9、A-AB-B-BC-C-CD-D-DA-A)。1相励磁方式:在每一瞬间只有一个线圈导通,其特点是励磁方法简单、消耗电力小、精确度良好。但是转矩小、振动较大,每送一次励磁信号电机内部可走2.8125(从外部看电机转了0.0879)2相励磁方式:在每一瞬间有两个线圈导通,特点是转矩大、振动较小,每送一次励磁信号可走2.8125。1-2相励磁方式:1相与2相轮流导通,精确度提高,且运行平滑。每送一次励磁信号可走5.625。综上考虑采用1-2相励磁方式。相序表如下:uchar code CCW8=0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09; /逆时钟旋转相序表uch
10、ar code CW8=0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08; /正时钟旋转相序表3.3 运转平台模块 一号电机水平放置,二号电机垂直放置,两电机轴线共面垂直,电机机身固定在一起,构成两个自由度的装置。四、设计总结 经过一段时间的调试,可以用鼠标灵活地控制电机按指定路径运转。这个作品虽然没有实际应用场合,但这个过程让我学到了步进电机的控制方法,也尝试了一种新颖的电机控制方式。步进电机有很广阔的应用领域,在以后,用鼠标远程实时控制执行机构运作这种思路可能有某种应用。参考文献:1王守中. 51单片机开发入门与典型实例 北京:人民邮电出版社,2008.82童
11、诗白. 模拟电子技术基础 第四版. 北京:高等教育出版社,2001.13黄智伟. 全国大学生电子设计竞赛训练教程. 北京:电子工业出版社,2005附录1:上位机软件代码Dim X1, Y1 As SingleDim OutByte(0) As ByteDim picture_click As BooleanPublic Sub ComPortOpen()With MSComm1 .CommPort = 1 .Settings = 9600,n,8,1 .InBufferSize = 500 .OutBufferSize = 1 .InputMode = 0 .InputLen = 100 .S
12、Threshold = 1 .InBufferCount = 0 清除接收缓冲区 .OutBufferCount = 0 清除发送缓冲区 .RThreshold = 1 End WithEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then picture_click = True Else: picture_click = False End IfEnd SubPrivate Sub Picture1_Mous
13、eMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim control As String Label2.Caption = X Label4.Caption = Y If X 9900 Or X 4545 Or Y 0 Then picture_click = False End If If picture_click = True Then tempX = X - X1 tempY = Y - Y1 X1 = X Y1 = Y If tempX 0 And tempY = 0 Then right control = 2 ElseIf tempX = 0 And tempY 0 Then down control = 4 ElseIf tempX 0 And tempY 0 Then left-up control = 5 ElseIf tempX 0 Then left-down control = 6 ElseIf tempX 0 And tempY 0 Then right-down control = 7 ElseIf tempX