摘要
针对现在市场上部分三轴写字机存在着精度差、噪音大、速度较慢,写字效率不高的问题,本文根据三
轴写字机的组成构造,不同的电机控制曲线会对电机运动的动态性能产生影响,更改汉字的书写方式会提高汉字书
写效率的原理,分别采用了三轴写字机工作原理分析,控制变量分析,路径规划的方法,具体的工作有分析了步进
电机是如何减小步进角的、当四种速度曲线运行相同距离时,对比各个曲线的响应时间和加速度比较的方法来选择
最优曲线、简化算法,采用二叉树,计算出汉字的最少移动步数的工作,其次针对使用二叉树算法暴露出的缺陷,
采用了欧拉图和半欧拉图的特性,进一步优化了算法,得出了减小电机步进角是提高控制精度的关键、S型曲线最适
合于电机控制的结论并且给出了具体运行时刻求脉冲频率的算法、可以通过欧拉图简化汉字书写步骤的结论。最后
针对现在市面上几乎没有单片机控制写字机的现状,本文根据写字机的工作原理,采用了单片机编程控制电机的方
法,验证了单片机能够实现写字机控制的猜想。
关键词:写字机;步进角;控制曲线;路径规划;单片机
第1章 绪论
1.1 研究背景及意义
机器人技术近几年的研究及迭代发展速度客观上来说非常的快,工业机器人相关技术应用也已经日趋成熟[1];
与之相反的是,随着几十年的改革开放,劳动力价格节节攀升,生活生产设施普遍改善,国内大市场的竞争也愈发
的激烈,这就表明过去依靠劳动密集型支撑的制造业的道路已经快行不通了,因此调节产业结构,实现长远发展已
经势在必行。但是如何改革升级现代化制造业,进一步提升工业生产效率,推进我国现代化制造业进程,已经成为
我国新时期急需解决的问题之一[2]。
工业机器人具有许多优点,如低成本、高效率、安全性高等等,它的发展与成熟将有力推动我国制造业向更高
水平发展,并成为我国角色转变的一大保障。工业机器人不仅是现代化制造业的基石之一,同样它也在一定程度上
体现了一个国家的工业制造水平和科研能力,已经成为各个国家大力发展推进的学科之一[3]。
三轴桁架机械手因为其造价比较低廉,功能用途较为广泛,操作简单而且便捷等优点,常常被用于工业生产
中。在常见的喷涂、码垛、3D打印等生产活动中,常常可以看到3轴工业机器人的身影。但是,现阶段我国的工业机
器人研发技术还比较落后,主要还是引进外国生产的机器人,因此需要承担高昂的购买和维修费用。加之前文提过
的劳动力成本问题,这一系列的问题使得我们制造类企业对于工业机器人的需求出现了极为可观的增长。并且生产
模式的规范化,也对工业机器人产生了不少需求[4]。
中国桁架机械手的研究活动很晚才开始。当时在大连机床集团柔性自动加工设备生产线上所使用过的桁架机械
手也是直接从国外原装进口生产的。中国没有专门从事桁架机械手制造的生产商。随着桁架机械手在中国的不断发
展和演化,目前中国国内和国外的产品质量差距正在逐年缩小。例如大连机床集团和沈阳机床集团的出现。桁架机
械手的研究开发,使很多企业不得不切换到自动生产以保证自身的利益,例如,Foxconn公司实施的“机器更换”战
略。因其简单的结构、广泛的操作范围、简单的控制、高精度而在智能工厂中被广泛使用。 随着国内桁架机械手技
术水平的提高,中国的自动技术生产线有可能达到国际水平[5]。
在本文中介绍的写字机是导轨式写字机器人,属于三轴桁架机械手的一种,从一方面而言,学生在写字上,工
厂工人在作业画图上,领导在公司文件上批注评语上都会耗费大量时间,而写字机器人能够节约了人们书写的时
间,大大提高了人们的书写效率,减少无谓的时间浪费,从另一方面而言,写字机器人的功能不仅仅局限在写字
上,通过对写字机器人的研究,可以在高精度雕刻,3D打印,画图作业等方面取得长足的进步。
对于一名本科生而言,通过研究写字机器人可以使我加深对三轴桁架机械手的了解,在理论和实践方面得到一
些锻炼,为以后进一步深究打下一些基础。
1.2 国内外研究情况
1.2.1 国内现状
现在写字机主要有三种形式:导轨式写字机器人、轮式写字机器人和臂式写字机器人,本文所说的桁架机器人
也就是导轨式机器人,导轨式机器人与上述两种形式不同的地方在于,它采用框架式结构,主要通过X,Y两个方向的导轨进行运动,从而可以抵达X,Y平面的任意地方,然后在导轨的末端安装一支笔,通过Z轴方向上的控制器来保
证笔和纸面的接触和脱离。
我国的创客工厂科技有限公司曾研发了一款XY绘图仪写字机器人,如图1-1所示,该XY绘图仪机器人是一款绘画
机器人,它是基于Makeblock平台设计的,为导轨式写字机器人,整体呈现框架式结构,大部分机械零件为铝合金材
料铸成,而且也因为该型写字机的本身集成了多种高性能的电子模块,用户通过用它可以快速实现三维空间的精确
位置定位,三维定位的定位精度最高可以达到0.1mm以下,不仅如此它的工作范围也很大,可以在310mm*390mm的平
面内进行移动。如果再配合mDraw或者Benbox等软件,通过更换机头,该款XY绘图仪写字机器人可以完成多种功能,
包括写字、绘图和雕刻作品等[6]。
图1-1 XY绘图仪写字机器人
2021年米莱诺公司推出了HK结构导轨式四轴写字机,如下图1-2所示,它增加了红外线辅助放置,防止放歪影响书写
效果,采用全金属机身,解决了亚克力板易碎的问题使机身更稳定,刚性更强,采用高精度导轨,书写效果更加精
细,而且该写字机采用4988独立电机驱动, XYZ单独驱动,成本高但能有效避免出现乱写现象,并且该写字机的主
控板得到了全面升级,采用了HC运动算法更加安全稳定,响应达到了微秒级别,而且它采用了抗干扰精密设计,机
身内部高度集成,稳定性和可靠性更好。
图1-2 HK结构四轴写字机
1.2.2 国外现状
写字机在国外的历史非常悠久,如图1-3所示,在150年前,瑞士的钟表匠皮埃尔·伊奇维特·德罗兹连同他的
儿子研制出了世界上第一款能够写和弹钢琴的世界上最古老的发条控制写字机器人。虽然它有一定的写字功能,但
没有软硬件系统,所以还不是现代意义上的写字机器人[7]。
图1-3 发条控制写字机器人
从第一台机械手在美国诞生以来,机械手的开发一直非常迅速。由桁架机械手和数控机床组成的制造系统已经
成为西方等国家的流行产品。
如图1-4所示,2016年,美国Evil Mad Science LLC团队设计了AxiDraw写字机器人,它也是导轨式写字机器
人,它可以支持多种书写工具,包括我们平时常用的钢笔、圆珠笔、铅笔等等,而且它的精度相当不错,可以支持
7
在A4纸或者更小的纸上进行书写,并且该团队还公开了软件源码,可以供许多写字机爱好者编写一套属于自己的字
体[8]。
图1-4 AxiDraw写字机器人
1.2.3 存在的问题及解决思路
如果写字机采用三电机模式,那么写字机一般为悬臂结构,由于悬臂结构的缺陷,所以常常导致不能高速高精
度写字,通常悬臂结构写字机的写字速度不超过60字/分钟,解决思路是采用四电机结构,四电机结构通常为龙门结
构,它的写字速度通常可达100字/分钟以上。
写字丢步或者写字偏移,解决思路是:这可能与机械装配或者电路控制有关,查看零件是否松动,定位是否精
准即可。
如果电机只能朝一个方向运动,我们可以将正常轴的驱动换到不正常的上面去,如果此时不正常的轴运行正
常,那么即可判断该轴驱动损坏,自行购买新的驱动,更换即可。
如果通电移动时电机抖动,我们可以检查电机线是否接触良好,电机抖动一般是缺相导致,即电机过冲或者失
步了。条件允许的话,我们可以用热熔胶将接线头进行固定。同时可以用按照上一个问题互换驱动来判断到底是线
接触不良还是驱动本身问题,驱动问题更换驱动即可。
第2章 写字机系统的整体结构设计
写字机系统由软件及硬件组成,本章首先确定了系统被控对象桁架机械手,在本实验中特指写字机,针对写字
机简述了其构成和控制原理。由写字机的输入输出需求,为下面的控制方案设计打下基础。
2.1 写字机组件功能介绍
实验室的三轴桁架写字机主要包含三个滚珠丝杠轴线模组,这三个运动支撑组件均为桁架机械写字机的核心组
件,丝杠模组主要由步进电机和滚珠丝杆组成,这三个模组并配有三个TB6600升级版驱动器,以下将逐一介绍各模
块功能。
2.1.1 步进电机
简而言之,步进电机是指是一种可通过软件将电磁脉冲信号输入转换成步进角位移输出的一种执行器,即当步进电
机收到脉冲信号时,步进电机会按预设方向以固定角度旋转,该角度称为步进角。
步进角是步进电机的一个重要指标。通过改变步进电机的转子齿轮的运行拍数,根据步进电机的转子齿轮的转
子齿数,可以算出电机的步进角,它们之间的相互关系如下所示:
(2.1)
其中(2.1)式中: 为步进角; 为运行拍数; 为转子齿数。以转子50齿为例,两相电机四拍运行时步距角为
=360度/(50*4)=1.8度(俗称整步),而这也就是实验室中42电机步进角1.8°的由来[9]。
2.1.2 步进电机驱动器
步进电机的步距角,因为受到制作工艺的限制,所以齿数有限,因此我们就必须采用驱动器来进行细分,以便
达到进一步减小步距角的目的,由此来提高电机的动态性能,如提高步进电机运动控制的分辨率,使电机运行更加
平稳有力,减小电动的低频振荡,降低系统噪声[10]。
实验室中写字机上的采用的是TB6600升级版驱动器,这是一款两相步进电机驱动器。它不但可以通过dir实现电
机正转和反转控制,而且通过拨码开关实现细分和电流控制。步进电机在该驱动器的驱动下,能够实现低振动、小
噪声、高速度的运行。
因为 步距角=电机固有步距角/细分数。如:一台固有步距角为1.8°的步进电机在4细分下步距角为1.8°/4=0.
45°,驱动板上拨码开关1、2、3分别对应S1、S2、S3,开关4、5、6分别对应S4、S5、S6[12],下表则是具体设定
8
表:
表2-1 细分数设定表
细分 脉冲/转 S1状态 S2状态 S3状态
NC NC ON ON ON
1 200 ON ON OFF
2/A 400 ON OFF ON
2/B 400 OFF ON ON
4 800 ON OFF OFF
8 1600 OFF ON OFF
16 3200 OFF OFF ON
32 6400 OFF OFF OFF
表2-2 电流大小设定表
电流(A) S4状态 S5状态 S6状态
0.5 ON ON ON
1.0 ON OFF ON
1.5 ON ON OFF
2.0 ON OFF OFF
2.5 OFF ON ON
2.8 OFF OFF ON
3.0 OFF ON OFF
3.5 OFF OFF OFF
具体的我们把步进电机的细分设定到1600份,电流设定到2.0A,即步进角是0.225°。
拨动驱动器上对应的按钮即可。
2.1.3 滚珠丝杆
滚珠丝杠是将旋转运动直接转换为连续直线运动的较理想选择[11],由于其摩擦运动阻力很小,滚珠丝杠可以
广泛直接应用于其他各种精密工业零件和各种精密机械加工装置。图2-1是滚珠丝杆的结构示意图:
图2-1 滚珠丝杆示意图
2.2 写字机的整体架构
三轴桁架机器人主要由三个滚珠丝杠轴线模组构成。其放置规则遵循笛卡尔坐标系,三个模组并配有三个
TB6600升级版驱动器,如图2-2所示,所以该写字机是直角坐标型机器人,可以实现在X,Y,Z直角空间坐标内的三
轴运动。
图2-2 写字机示意图
2.3 写字机的工作原理
从整体架构中可以看出写字机工作原理是:控制器发出脉冲信号,三台步进电机驱动器就会将脉冲信号转变成
电流信号,驱动步进电机按设定的方向转动一个固定的角度,并且通过滚珠丝杠将旋转运动转换成线性运动,如此
传动,我们通过控制器编程来驱动三个轴,就可以使末端圆珠笔达到预定位置。
2.4 本章小结
本章首先针对写字机简述了其构成和工作原理,由写字机的工作原理可以为下面的控制系统设计打下基础。
自动控制要求稳、准、快,由于写字机系统是开环控制,所以电机的控制精度决定了系统的准确性,通过对写
字机工作原理的研究可以得出结论:想要提高控制精度,需要减小步进角使丝杆传动更精确,而电机整步步进角一
般是确定的,所以我们只要提高细分驱动器细分数即可,而且细分的越多,电机运行的也越加平稳,但是一般而言
细分到4就可以了。
第3章 写字机最优控制规律
由上一章可知,脉冲个数决定电机转子旋转角度,脉冲频率大小决定转子速度,当我们决定写一个字时,如
‘一’,控制器会发出一串脉冲,这些脉冲的频率会直接影响电机控制的性能,所以我们会研究速度(脉冲频率)曲
线对电机的影响,找出最优速度曲线并且实现这种曲线。
3.1 步进电机的加减速策略
在写字机工作过程中,要求写字机能够稳、准、快的完成响应。在一般情况下,系统允许的极限启动频率理论
上设计的比较低,但是又要求电机的实际运行速度尽量高,以保证系统响应的快速性,可是如果写字机按照要求的
速度直接启动,则会因速度超过极限启动频率,造成系统不能正常启动,发生堵转(转速为0,但仍然输出扭矩)或者
系统不能运行的情况。当系统快要运行到终点时如果突然停止,那么则会因系统的惯性,导致出现过冲现象,使得
系统响应发生偏离。因此,我们在写字机的控制的过程中,要求写字机的运行速度需要有一个过程:升速一恒速一
降速一停止。
系统在要求快速响应的同时,升速、降速的过程时间也应该尽量地缩短,使步进电机在不失步(电机运转时运
转的步数,不等于理论上的步数)条件下,用最少的时间升速,降速到给定速度。所以,电机速度控制的关键是选择
合适的速度运行曲线[13]。
步进电机常用加速减速方法有直线型加速减速和曲线型加速减速。直线型的有线性、梯形等;曲线型加速由指
数型加速和S型加速。直线型加速减速的控制虽然容易实现,但是加速减速的过程不够平滑,而且实际加速减速的效
果也不如曲线型加速减速。曲线型加速减速的过程虽然平滑,但在实际实践中不如直线型容易实现。下面的图3-1说
明了4种加减速曲线的形状,即(a)在加速和减速段,速度随时间的变化的关系为线性关系,(b)按照阶梯规律进行升
速降速,即电机的转速像台阶一样跃升,©是升降速阶段是指数函数,而(d)则是S型:
图3-1 四种加速减速曲线
3.2 四种曲线的仿真比较
我们假设电机运动时开始和停止速度都为5.0mm/sec,最大速度为10.0mm/sec,最大加速度和最大减速度均为
9
5000.0mm/s,电机从开始运动到最后结束运动共计用时11ms。
由此我们可以得出直线型加减速曲线的函数表达式:
我们假设阶梯型曲线在加速和减速阶段经过4个阶梯,通过对最终位置的拟合,我们发现如果要保证相同的移
动位置,那么对于梯形曲线则必须延长匀速运行时的时间,具体表达式如(3.2)所示:
对于指数规律运行的函数,则可由待定系数法确定加速和减速段,在这里我们选用2为底的指数进行拟合,但是
和梯形运动规律一样,要想移动到相同的位置,也必须延长匀速运行的时间,指数规律运行的函数的具体表达式如
(3.3)所示:
对于S型曲线,选用的是余弦函数作为S曲线段作为加速减速段,它可以较好的满足系统工作的要求,我们用起
始点,匀速运动的开始点和这两点的中间点,作为余弦函数相角对应PI,1.5PI,2PI所对应的点,我们可以得到
加速度余弦函数的表达式,同理我们可以得到减速段的表达式,具体的函数表达式如(3.4)所示[5]:
图3-2是根据速度函数所画出的速度曲线:
在上图中,由于加速度和减速段时间足够短,所以直线型,指数型和S型的加速段和减速段比较类似。下面图3-
3,图3-4,图3-5是四种控制曲线的位置比较图,其中绿色代表直线型控制规律,红色代表阶梯型控制规律,蓝色代
表指数型控制规律,黄色代表S型控制规律。从这些曲线的末端变化情况来看,响应的快慢由高到低分别是:S型=直
线型>指数型>阶梯型,所以相对于上述两种调速方法,指数型和梯形调速过程的时间会相对较长。
(1) 图(a)是电机按照直线规律进行升降速,在加速阶段变匀速阶段过程和在匀速阶段变减速阶段过程中这两处
有加速度之间的跳变,按此规律长时间运行会影响步进电机的使用寿命。
(2) 图(b)是按照阶梯规律进行升速降速,但是它的缺点也是如此,步进电机在每个台阶速度存在阶跃跳变,使
得电机在运行时在阶跃处存在很强的冲击,导致稳定性降低,损耗机械寿命。
(3) 图©是按照进行指数规律升速降速,这种加速减速控制算法虽然平滑性好,但加速度在速度交变出仍然存
在跳变,导致系统仍然会受到微性冲击力[14]。
(4) 图(d)是S型曲线,在图中没有突变,而S型曲线加速减速的核心在于防止加速度产生突变,它可以有效的减
小冲击,使得步进电机运动的更加平稳,比以上三种曲线更加适合高精度的系统控制。
3.3 S型曲线的实现
由3.2节我们得出了S型曲线相对于另外三种曲线更适合于电机控制,接下来要解决的是如何实现S型曲线,具体
的是如何使控制器在恰当的时间发出合适频率的脉冲,以实现预期的S型速度曲线。
在这里我们仍然选择余弦函数作为S曲线段,如下图3-7所示,我们选择余弦函数的0~PI段作为S曲线的下降段,
PI~2*PI段作为S曲线的上升段,其中T是上升段与匀速段的交点时间,Vmax是电机运行的最高速度。这里时间的单位
是秒,速度的单位是转/秒。
因为上升段的角频率为 ,且是余弦函数向左移动半个周期,向上移动一个幅值的结果,所以加速段的速度函数
,同理可得减速段的速度函数为 ,至于 为
匀速段Vmax则是由自己设定的[15]。
以下图3-8是实现S型曲线的流程图:
电机运行速度和脉冲频率的关系为 ,其中v的单位为r/s,P是脉冲频率,单位为Hz,m是细分数,下面
图3-9给出的是1.8°步进角,整步运行时电机在给定时间上的脉冲频率的代码,只要设定上升时间,最高运行转速
以及完成所有动作时电机应该转动的圈数,我们就可以求出在电机运行期间的t时刻,控制器应该发出的脉冲频率。
如下图所示当设定上升时间为1秒,最高转速为100r/s,完成整个动作需要 500转时,在第2秒,控制器应该发
出20000Hz脉冲频率的脉冲。
图3-10 具体时刻控制器应发出的脉冲频率
3.4 本章小结
本章主要比较在电机控制中的常见的四种控制规律,并且通过MATLAB验证了S型曲线更适合控制电机运动,其他
三种曲线或者是响应滞后,或者是在运动时存在冲击,多多少少存在一些问题。
自动控制要求快、准、稳,选择好的运动曲线能够保证快速性,间接影响稳定性。S型曲线有很多种,而本文中
选用余弦函数作为加速和减速段可以很好的满足要求,并且在最后给出了在电机运行期间的t时刻,控制器应该发出
的脉冲频率。
第4章 汉字的最短路径规划
在写字机的书写过程中,如果按照正常的书写顺序,将会降低书写效率,并且当写字机长时间运动时,会造成
不必要的机械损耗,影响写字机工作寿命。所以,本章节最主要的目的是:为汉字从起点到终点规划出一条最短的
路线,从而提高书写效率。
4.1 汉字规划要求
如果我们要写出‘一帆风顺’这四个汉字,对于复杂的汉字可以拆分成简单的部首,如‘帆’字可以拆成
‘巾’和‘凡’,顺字可以拆成‘川’和‘页’,我们选择拆分后最为复杂的字‘风’来进行分析,‘风’字的结
构如图4-1所示。
我们汉字规划的要求是能够从起点1书写到终点6,并且期间必须得经过‘风’这个字的所有笔画,但这些笔画
有些是可以重复的。
之所以起点要从1开始,从6结束,是因为1是进入‘风’字这最近的入口,6是‘风’字最远的出口,当然从
‘风’字的任何一个地方进入都可以,从任何一个地方出去也都行,只要遍历了这个字的所有笔画就行了,但是入
口选择的不同,可以极大的影响着最终所遍历的路径的长短,出口选择的不同,会影响着下一个字所遍历路径的长
短。一般的话,对于‘人’,‘风’这种开放性的字,从最近的进去,最远的出去,可以获得较好的效果。
图4-1 风字的结构图
从上述不难发现,我们其实要遍历所有的笔画,从这些遍历的路径中选择最短的一个即可,其实这就是图的遍
历,我们将‘风’字所有的交点设置为节点,加上起点和终点,就可以将‘风’字抽象成图4-2的这张无向图,图中
的各个圆圈是汉字的节点,也就是各个笔画的交点,线段上的数字是各个交点之间的距离,绿色的节点是起始节
点,现在的要求也就简化为,从绿色节点开始,找出能够一次性遍历图中所有边的最小路径(允许重复遍历某个
边)。
图4-2 ‘风’字抽象图
但是图的遍历较为复杂,为了简化计算,我们采用树的遍历,即破坏图中的回路,我们把图4-1风字的结构图中
的4号节点和5号节点与右边的笔画断开,则可以得到下面4-3的一颗树,在图中,两个边长为3的线段并无交点。
此时我们可以将其整理成一颗二叉树,并且我们可以将边长的信息存储到它后一个节点上。在下图中第一个节
点0代表它是根节点,从这里开始书写,它前面没有笔画,节点5代表从前面一个节点开始写字,写到该节点共走了5
步,所以问题又进一步的简化为:如何遍历整棵树的所有节点,并且遍历的方法是:从根节点开始,一次性遍历
完,不允许节点跳跃,但是一个节点可以多次遍历。
4.2 用二叉树实现汉字规划
二叉树有多种遍历方法,如前序遍历、中序遍历、后序遍历、层序遍历,这为我们提供了很多选择,为了选出
合适的遍历方法,以及确定编程思路,我们考察图4-5中最简单的二叉树。
图(a)这棵二叉树可以代表一个简单的汉字‘人’,如图4-5(b)中所示,节点0代表绿色节点,它是开始的节
点,节点3代表蓝色节点,这意味着从绿色到蓝色共用了3步,节点4代表了从绿色节点到黄色节点共用了4步。
我们总共有两种方法遍历完所有的边,第一种是从绿色节点开始,先走到蓝色节点,再折返到绿色节点,再从
绿色节点走向黄色节点,总共走了10步,第二种是从绿色节点开始,先走到黄色节点,再折返到绿色节点,再从绿
色节点走向蓝色节点,总共走了11步,两相比较第一种方案走的步数最少。
图4-5 算法抽象
我们从中可以抽象出具体的算法:我们首先要比较两个子节点的大小,如果左叶子节点较小,则我们路径选择
是:从根节点出发,先到左叶子节点,再折返根节点,最后走向右叶子节点;如果右叶子节点较小,则先遍历右叶
子节点。
综上所述,由于要先比较左叶子节点和右叶子节点,所以我们应该采取后序遍历,主要算法代码如下:
图4-6 使用二叉树的算法
可以从中算出‘风’字所需46步笔画,具体书写方式如下图所示:
图4-7 最短路径图
但是如果按照传统的书写方式,我们需要58步,即按照以下的书写方式进行:
图4-8 正常路径图
由此可以看出运用此算法,对于‘风’字可以节省近20%的运动量。所以,该算法可以有效地提高机械运动效
率。但是该算法也有许多不足之处,具体如下:
(1)为了简化问题,将图改成树,对汉字需要断点,将回路破坏,回路破坏的地方不同,将直接影响最优解。
(2)我们只能在汉字笔画上进行遍历,这就导致了所有的笔画必须联通,对于不连通的字必须设法联通,如
‘风’字,需要将‘叉’与‘撇’相连。
(3)还是由于第二个问题,我们只能在汉字笔画上遍历,导致我们不能从笔画以外的空白处遍历,如‘干’字,
从第一个横的最右边直接调到第二个横的最右边,显然能节省更多的运动量,但是由于算法原因,暂时无法实现。
4.3 用欧拉路径实现汉字路径规划
由于用二叉树实现汉字路径规划存在种种弊端,这就要求我们另寻它法,针对第一个问题我们考虑采用图的遍
历方法,而汉字的最短路径规划要求我们最好能够一笔画完成所有的汉字路径,这就促使我们考虑到欧拉路径。
欧拉图是指从任何一个点开始都恰好能够一次走遍图中所有的边,能够走遍所有的点并且能够返回出发点的
图,而半欧拉图是指从出发点开始能够一次走遍图中所有的边,能过走遍所有的点但是并不能返回出发点的图,从
欧拉图的定义来看,这就很符合我们的需求。
而判定一个图是否为欧拉图也很简单,对于无向图而言,只要所有的点是偶数价,那么它就是欧拉图;当除了
出发点和结束点是奇数价,其余所有的点都是偶数价时,那么它就是半欧拉图[16]。
还是以“风”字为例,在下图4-9中,对于1号点,它有一个关联的边,所以是奇数价,对于2号节点,它有三个关联
的边,所以是奇数价,同理3号4号5号6号点均是奇数价,所以该图不是欧拉图也不是半欧拉图。
我们可以根据握手定理,每添加一条边就可以多提供2度,这样就可以改变各个点的度数,如下图4-10所示,我
们将2号点和3号点相连,4号点和5号点相连,这样除了出发点和结束点是奇数价外,所有的点均是偶数价,这样虽
然多走了一点路,但是整张图变成了半欧拉图。
如图4-11所示,我们也可以将3号点和5号点,2号点和四号点连接起来,这样我们也可以得到一张半欧拉图,无
论欧拉图还是半欧拉图都是可以一笔画走完的,增添了这两条边后,与上图相比,都是多走了6格距离。
所以我们可以总结出利用欧拉路径实现汉字路径规划的步骤:1. 针对汉字抽象成无向图。2. 通过増边的方式
将无向图整理成欧拉图或者半欧拉图。3. 得出最短路径。
如果一个汉字抽象成的无向图有m个偶数价的点,n个奇数价的点,如果n是偶数(n=2k),那么通过握手定理,
再增加k条边就可以得到欧拉图,增加(k-1)条边就可以得到半欧拉图,如果n是奇数(n=2k+1),根据握手定理,这
是不可能存在的,所以对于所有的汉字,我们都可以将其变成欧拉图或者半欧拉图。
我们增添的路径不一定要求在汉字上,只要联通两个点即可,从这可以看出增添路径可以解决二叉树的第二个
困境:不能走空白的地方缩短书写路径。
对于怎样增添最短的路径,这就需要穷举法了。这也是事先准备工作,针对上面的“风”字,根据图4-12和图
4-13,我们可以计算出最短路径为46,这与二叉树的结论一致,但是针对其他汉字,由于断点等问题,可能就不会
取得这样的效果。
为了实现这样的效果,我们主要采用Hierholzer 算法,具体流程如下,代码见附录:
(1)从起点出发,进行深度优先搜索。
(2)每次沿着某条边从某个顶点移动到另外一个顶点的时候,都需要删除这条边。
(3)如果没有可移动的路径,则将所在节点加入到栈中,并返回。
4.4 本章小结
本章的主要目的是提高汉字的书写效率而提出一种新的算法,它与传统书写格式不同,该算法不拘泥于笔画顺
序,而是力求以最短的路径来完成所有的笔画书写。
我们由简单的二叉树算法推及到欧拉图算法,实现了对汉字的路径的简化,对于大部分汉字能够节省近10%~20%的运动量,这显然能提高写字机的工作效率。
第5章 单片机实现写字机的运动控制
本章主要目的是验证单片机进行写字机控制的可行性,本章中所采用的控制器是51单片机,编写程序所用的软
件为Keil4,仿真软件为proteus。
以下是写字机书写的原理:我们对写字机主要采用绝对运动控制的方式进行书写,三轴写字机具体如下:
图5-1 写字机示意图
如图5-2所示,我们可以将当前位置设为坐标原点,三个坐标轴分别为三个电机的外侧方向,通过相对于坐标原
点的距离,来判断出当前圆珠笔的具体位置,底下的虚线框是书写平台,O点是笔尖的位置,同时也是绝对坐标原点
(它距离直面仍然有一段距离,因为一开始将三组滑块放置于梯形丝杠中央位置,这可以在丝杆的有效范围内达到写
字机最大的书写范围),它是一个重要的参考点,如果我们想写‘一’字,可以先控制Z轴电机向下,直至抵达纸
面,然后再控制Y轴电机向右移动,这样就可以写出一个‘一’来了。
图5-2 坐标抽象图
对于横、竖,我们可以通过对z轴,y轴,x轴的先后移动实现,而对于撇、捺,若从(0,0)划到(3,3)可通过x
轴电机和y轴电机联动,让两个电机以相同的速度运动,就可以达到目标;如果是(0,0)到(3,4),让两个电机以不
同的速度运行就行了。
由前文可知,写字机的控制实现主要依赖对三个轴的控制,即只要实现对三个电机的正转、反转以及变速控
制,就可以实现写字功能,所以本章就用单片机从硬件、软件及仿真三个部分实现对电机的控制。
5.1 系统的总体设计
本套件由单片机最小系统、LCD1602液晶显示屏、独立按键和步进电机模块构成。主要功能如下:
(1) 本设计采用STC89C51单片机作为主控制器
(2) 采用LCD1602实时显示数据
(3) 开机后默认显示两行,第一行为设置值,dir转动方向和spe转动速度
(4) 第二行为当前值,cir表示正转或反转的圈数,ang表示转动的角度
(6) 本设计分为五个按键,一个正转键,一个反转键,一个加速键,一个减速键,一个开始键。
系统框图如下图5-3所示,当键盘按下后,单片机会接受并转换成控制信号发送给ULN2003。ULN2003主要作用连
接步进电机从而驱动步进电机,LCD显示当前步进电机的工作状态。
图5-3 单片机控制系统框图
5.2 硬件电路设计
硬件部分主要是由单片机最小系统和外围模块构成的,接下来会一一说明各个模块,并会说明各个模块的连接
以及具体所需的零件。
5.2.1 51单片机最小系统电路设计
单片机的最小系统是指能够使单片机工作的最小组成电路,在本次实验中单片机最小系统是由时钟电路,复位
电路和STC89C51单片机构成的[17]。
单片机复位相当于电脑重启,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部
的程序自动从头开始执行。如下图5-4所示,本设计采用的是按键手动复位,系统接通电源时,单片机自动上电复位
后进入正常运行状态。当系统运行出现问题时,可以人 为按下复位按键,使Vcc的+5 V电平直接加到RST端,
时钟电路:时钟电路主要功能是为单片机工作提供节拍,如果拿人来作比喻的话,时钟电路工作就像人体心脏
跳动一般,能够使单片机发出的信号有节奏地传到系统的每一个角落[18]。
如下图所示,电容C2和C3的作用是稳定频率和快速起振,他们的电容值为30pF。
5.2.2 液晶显示模块电路设计
本实验选用的是LCD1602点阵型液晶模块,在液晶屏上它可以在横方向上显示16个字符,纵方向上可以显示两
排,这也是1602的由来;在一块点阵区域内画出想要的图案,所以通过合理的编程可以在屏幕上显示字母、数字以
及符号,下面是LCD1602的实物图。
图5-6 LCD1602实物图
下图是LCD1602的连接图,引脚说明如下:前两个管脚是电源地和电源正极;第三个管脚VO是液晶显示偏压信
号,通过输入不同电压值,可以调节液晶屏的显示亮度,所以在下图中接了一个电位器以达到调压效果;第四个引
脚RS是数据/命令选择段,通过改变电压高低,可以设置是传输数据还是传输命令;第五个引脚是数据选择端,通常
是写数据,一般设置为低电平;第六个引脚是使能引脚;第七到第十四引脚是数据引脚。P0口接1602液晶不需要加
上拉电阻,如果做单个的IO口用就要加上拉电阻,仿真里P0口必需要加上拉电阻,这个是仿真和实际的差别。
5.2.3 电机驱动模块电路设计
由于实验条件的变化,在本章中选用的步进电机是28BYJ-48型电机,如图5-9所示,它是DC-5V四相步进减速电
机(步进角为5.625°,减速比为1/64);与之前两相步进电机分析类似,见如下5-8示意图,当A、B、C、D四相绕组
轮流供电,则转子会沿着A、B、C、D方向转动,若通电顺序相反,则逆时针转动。步进角之所以是5.625°,是因为
我们采用了半步驱动,即通电顺序为A-AB-B-BC-C-CD-D-DA-A……而该电机转子上实际有8个齿,根据第二章的介
绍,该电机半步驱动的步进角为360/(428),即5.625°。该电机还有一个特点,那就是它为减速电机,如图5-10
所示,且减速比为1/64,即内部转子转64圈,外部的轴才转一圈。
所以依据上面的分析,我们可以得出电机的正转、反转表,以反转为例,A、B、C、D各相的通电顺序如下表5-1所
示,‘1’代表通电,‘0’代表断电:
如图5-11所示,接下来要介绍的是ULN2003驱动模块,常见的51系列单片机(如at89c51、stc89c52等等),它
们的P1、P2、P3输入输出口是弱上拉I/O口,也就是说它们的拉电流能力很弱。以STC89C51为例,当我们把某个I/O
赋值为1时,这个I/O口最大也只能向外提供220μA的电流,而步进电机需要的启动电流则远远大于这个数值。
ULN2003驱动模块芯片就是为了应对这种情况,它可以放大电流,增加单片机的驱动能力,可以使单片机直接控
制电机转动。
ULN2003具体结构如图5-12所示,ULN2003在逻辑上相当于一个7路反向器电路,即当输入端为高/低电平时,
ULN2003输出端为低/高电平。
在连接上如下图5-13所示,驱动器ULN2003A的1B4B引脚分别接到P1口的四个引脚,电机的A相D相 相应的接到
驱动器的1C~4C引脚,电机驱动模块其余的引脚接到相应的高电平和地之间即可。
5.2.4 按键模块电路设计
按键如图5-15所示,按照设计功能要求,只需要5个按键来依次控制正转、反转、加速、减速、启动停止,所以
采用独立按键的方法已经能够很好地满足人机交互的需求,具体如下图5-16所示,我们将按键依次连接到P3口的引
脚上,我们先将单片机的P3口引脚先初始化为高电平,然后不断扫描P3口,当有按键按下时,P3口的对应引脚会变
成低电平,我们就知道是哪一个按键按下了,然后再执行相应的功能。
5.3 软件部分设计
5.3.1 软件设计概略
整个系统软件可分为启动停止、正反转和加减速三个部分。通过按键来设置速度,正反转等参数,通过定时器
产生脉冲来达控制步进电机的目的。
5.3.2 电机驱动部分程序设计
由上一节可知,电机若想连续转动,其必须依照严格的通电顺序,以反向转动为例,如果不考虑驱动器,按照
上一节给出的反向转动各相通电顺序,如果将P1口低4位输出全部设为1(也是可以设成0的),那么为了保证反向转
动,那么P1口应该循环输出0x8f、0xcf、0x4f、0x6f、0x2f、0x3f、0x1f、0x9f;但是如果再加上ULN2003反向驱动
器,则P1口正确的输出应该是0x7f、0x3f、0xbf、0x9f、0xdf、0xcf、0xef、0x6f;同理可得,对于正向转动,P1
口的正确的循环输出应该是0xef、0xcf、0xdf、0x9f、0xbf、0x3f、0x7f、0x6f,下图是反转表格和正转表格。
以上解决了电机正转、反转各相通电问题,接下来是解决如何使电机进行加速、减速的问题,对于本章而言,
单片机每接受到一个控制脉冲(以定时器中断实现),电机上电流的相序便会改变一次,步进角也会增加一次,具体
的当外面的轴旋转一周时需要360°/(5.625°/64)=4096 次控制脉冲,通过改变控制脉冲频率,我们可以实现对电
机的加速和减速,假设我们需要外面的轴60秒转一圈,即60秒中断4096次,所以一次中断需要60000000/4096=14648
个时钟周期,即定时器需计时14648次即可;如果我们需要外面的轴30秒转一圈,即30秒中断4096次,所以一次中断
需要30000000/4096=7324个时钟周期,即定时器计时7324次,如下图5-19所示,显然脉冲宽度变窄了,换言之脉冲
频率变高了,电机的转速也变高了,这就解决了电机加速、减速的问题。
图5-19 不同转速下的脉冲频率
最后关于电机转动的角度问题,这个就很容易解决了,我们可以通过计算脉冲的个数,脉冲个数*5.625°/64就
是电机转过的角度,脉冲个数%4096就是电机转过的圈数。下图就是电机驱动部分的流程图。
图5-20 电机驱动部分流程图
5.3.3 按键扫描程序设计
在按键扫描中,我们需要5个按键来依次控制正转、反转、加速、减速、启动停止,由于机械触点弹性的原因,
按键在按下或者抬起时存在按键抖动,所以我们需要按键消抖,虽然有专门的去抖电路,但是为了方便,这里我们
采用的方法是软件消抖。
下图是进行一次按键扫描的流程图,由于按键抖动的时间一般在5~10ms之间,所以我们采用延时的方法就可以
很好地解决抖动问题,确定按键是否按下,主要在于对按键按下进行两次检测确定,所以在第一次按下时延时5ms,
再确定是否真的按下,只有这两次都为真,才能确定真的有按键按下。
一般完整的按键操作要包括按下和抬起释放,所以在确定按下后还有检测是否抬起释放了,在抬起后再执行相
应的程序[19],。
5.3.4 液晶显示程序设计
液晶显示程序主要是显示电机的工作状态,实现LCD功能主要包括LCD1602的写数据、写命令、初始化等操作。
下面主要讲LCD是如何实现在屏幕上显示功能的,因为具体的显示穿插在各个模块中,所以不再进行描述。
LCD1602写操作的时序图如下图5-23所示,写操作主要包括写数据操作和写命令操作,我们将其一并概括,一般
写操作1602液晶的流程如下:
(1)通过RS确定是写数据还是写命令。
(2)读写控制端设置为写,即低电平。
(3)将数据或命令送到数据线上。
(4)给E一个高脉冲将数据送入液晶控制器,完成写操作。
我们在两个命令之间可以稍作延时,来保证数据的稳定性。
为数据显示做准备,我们需要对LCD液晶屏进行初始化,具体有:
(1)设置显示模式,WriteCommand (0X38)命令是设置162显示, 57点阵,8位数据接口,其中WriteCommand函数,
是上文提及的写命令操作。
(2)显示开、关和光标设置,WriteCommand(0x06);设置当读或写一个字符后地址指针加一,且光标加一
(3)显示开及光标设置,WriteCommand(0x0c)设置显示开及光标不显示
(4)清屏,WriteCommand(0x01)设置清屏
(5)WriteCommand(0x80)设置数据指针起点
在具体程序中,在这些操作之后还通过写数据操作显示了初始字段。所以液晶显示的主要步骤就是先初始化,
再通过写数据进行显示。
关于液晶显示的最后一个函数是利用LCD1602显示三位数的速度,这个也很容易实现,主要将速度的个、十、百
位分离,然后在液晶屏的指定位置上通过写数据命令写上去就可以了,不过值得注意的是数据要+30h,进行ASCLL码
转换,否则不能正确显示。
5.4 仿真及实物测试
5.4.1 软件仿真实验
在本文中选用的仿真软件是Proteus,Proteus是由Lab Center Electronics公司推出的一款EDA工具软件。
Proteus具有原理布图、线上PCB自动布线、SPICE电路仿真、互动电路模拟仿真、仿真处理器及其外围电路模拟仿真
等特点功能[20]。
接下来是具体操作步骤:
(1) 在proteus中绘制硬件电路图,并保存,在图5-24中1号是时钟电路,2号是复位电路,它们与51单片机构成
了单片机最小系统,5号是按键,可以通过按键判断需要执行的指令,4号是驱动器,3号是电机,驱动器可以通过单
片机发出的指令驱动电机,6号是LCD显示屏,7号为上拉电阻主要是增加输出驱动能力,单片机可以通过LCD屏显示
电机的运动状态。
(6) 如图5-29所示,在DSN文件中双击单片机并选择hex文件,然后就可以进行仿真了
图5-29 选择hex文件进行仿真
(7)如图5-30所示,点击play按钮进行仿真,液晶显示屏会初始化,由上到下,由左到右分别是电机转动方向,
电机转速,电机转动的圈数,电机所转动的角度;开始默认正转,转速为5圈/min,转动圈数为0,转角也为0。
图5-30 LCD屏初始显示
(8) 如图5-31所示,按下第五个按键,电机开始转动,开始默认正转,如图5-32所示,当转动超过一圈时,cir加
(11) 反之,如图5-35所示,当我们连续按下第四个按键两次时,电机会减速,速度变成第四档
图5-35 电机减速
(12) 如图5-36所示,当我们再次按下第五个按键时,电机会停止转动
图5-36 电机停止转动
5.5 本章小结
本章主要通过电机的正反转,加减速验证了单片机控制写字机写字的可能性,并且从proteus仿真和实物模拟进
一步进行了验证。
在本章中电机的控制主要是通过按键扫描,然后根据具体按键判断参数变化,之后通过全局变量传递给定时
器,并用定时器中断模拟脉冲,通过定时长短实现电机的变速控制。
第6章 总结和展望
6.1 总结
针对现在有些写字机精度差的问题,本文根据写字机的控制原理,具体分析了导轨式写字机的组成结构,了解
了写字机是开环控制,所以准确性由电机步进精度决定,明白了步进角如何在电机和驱动器的作用下缩小的,得出
了减小电机步进角是提高控制精度的关键的结论。
针对噪音大、速度较慢的问题,本文根据采用不同的电机控制曲线会对电机运动的动态性能产生影响的原理,
采用了对四种加减速控制曲线用MATLAB进行仿真比较的方法,具体是当四种速度曲线运行相同距离时,对比各个曲
线的响应时间和加速度比较的方法来选择最优曲线,得出了S型曲线最适合于电机控制的结论并且给出了具体运行时
刻求脉冲频率的算法。
针对书写效率慢的问题,本文根据更改汉字的书写方式会提高汉字书写效率的原理,采用了路径规划的方法,
具体做了简化算法,采用二叉树,计算出汉字的最少移动步数的工作,达到了提高写字机写字效率的结果,其次针
对使用二叉数算法暴露出的缺陷,采用了欧拉图和半欧拉图的特性,进一步优化了算法。
最后针对现在市面上几乎没有单片机控制写字机的现状,本文根据写字机的工作原理,采用了单片机编程控制
电机的方法,实现了电机的正转反转,加速减速,验证了单片机能够实现写字机控制的猜想。
6.2 展望
虽然由于步进电机的精度比较高,可以实现开环控制,但是在单片机仿真过程中发现电机转动的角度和理论上
应转动的角度存在一定的误差。
最后一部分单片机实现比较简陋,在此基础上如果能实现闭环功能,即当我们自动设定一个速度,电机能够自
动调节跟上这个速度,那就更完善了。