范文一:多用途步进电机控制芯片
多用途步进电机控制芯片
该芯片共有三种驱动工作模式:波驱动(Wave)模式、半步驱动(Half Step)式,全步模式。
芯片结构示意图
各部分功能分析
脉冲产生部分:该部分实际上是一系列特殊的计数器,每当CP时钟的上升沿到来时,计数器输出下一状态,驱动步进电机。
时钟控制部分:该部分实际上是带输入控制的同相门。当en,0时,门被封锁,输出高阻态;en,1时,门打开,CP通过该门输入。该部分可用作停车控制。与MCU接口时,CP可由单独的振荡电路提供,MCU不用干预CP的产生,可节省MCU时间。
输入输出逻辑控制:该部分包括输出选择,模式选择,复位控制,方向控制,全桥驱动抑制信号控制。这一部分在设计的顶层模块中描述。
根据步进电机三种不同驱动方式的特点,列出驱动口的真值表,利用状态机的方法建立相应模型。在Verilog语言中,可以将时钟信号上升沿设置为触发的敏感事件,用case语句实现状态的转移,由if,else检测正反转控制信号和rst信号。每当cp的上升沿到来时,电路输出下一状态。fw,1时,电机正转,fw,0反转,rst,0时输出复位,rst,1时正常工作。每个Verilog模块以module开头,以endmodule结束。
时钟控制模块设计
本电路是时钟信号传输的通道,电路时钟输出端cpd接至脉冲输入cp端。当en,1时,系统正常工作,cpd,cp;en,0时,cpd输出高阻态,无时钟脉冲输入到脉冲产生器。en可作为紧急停车控制。
源程序如下:
驱动抑制信号的设计
在本设计中,输出驱动采用L298高压大电流双H桥芯片,输入为逻辑电平,具有输入抑制功能。下面以两相双极步进电机接法来说明驱动抑制信号的作用。
L298可接入Rs作为电流反馈。正常工作时(A,1,B,0),电流通路为Vss,Q1,L,Q4,Vdd。由驱动波形分析可知,在波驱动和半步模式下,当换流时(A,B,0),Q4没有关断,续流通道Vdd,D2,L,Q4,Rs,Vdd,这样不仅会延长绕组电流衰减时间,还会增大Rs上的功耗。为解决这一矛盾,特引入抑制信号inh。此时若使抑制信号inh,0,就可强制Q1、Q2、Q3、Q4全部关断,此时,换流通道Vdd,D2,D3,Vss。当抑制信号有效时,还能防止信号串扰。
图5是L298其中一个全桥的示意图。其中,A、B两路信号分别用于控制两个桥臂,当A、B两路信号不同时为0时,驱动抑制inh,1,不产生抑制作用;当A,B,0时,inh,0,产生抑制。
由上述分析可知:inh1,A,B,inh2,C,D(inh1,inh2分别为左右两桥的驱动抑制信号)。
3(4 顶层模块设计
顶层模块中包括有输出选择,驱动模式选择,复位控制,方向控制及全桥驱动抑制信号控制。因此,根据系统控制要求,调用上述所有的模块,是顶层模块的主要任务。当mode,00时,输出为波驱动模式,mode,01时,输出为全步模式,mode,10时,输出为半步模式,mode,11时,err,1,报错,输出为高阻态。抑制输出为in1、in2,全步模式时in1、in2输出均为1。
顶层设计源程序如下:
根据顶层模块的功能,我们设计了该模块的测试程序,并进行了仿真。由波形分析可见,完全达到设计要求。下面给出mode,10时,半步驱动的输出波形。顶层仿真波形如下:
由于各模块的独立性,在物理测试过程中可对各模块分开综合调试,以此确保硬件电路能同时满足预期的功能和逻辑约束条件。本设计使用Syplify作为综合器,生成edif文件后,用lattice的ispEXPERTComplier生成jed文件,再用ispDCD配合JTAG电缆下载至lattice ispLSI1032中进行硬件电路验证。
4 结束语
本设计综合后下载于ispLSI1032,并以此构成步进电机控制系统,使用ASTROSYN 12V步进电机进行了试验。试验中由89C2051单片机产生模式选择信号,由555组成振荡电路,产生1(5kHz时钟信号。试验证明,此系统功能满足设计要求,控制灵活,工 作稳定,电机无失步现象。
范文二:步进电机
步进电机
中文名步进电机
外文名stepping motor
拼音[bù jìn diàn jī]
属性感应电机的一种
别称步进器
工作原理按电磁学原理,将电能转为机械能
目录
1 主要分类
2 选择方法
3 基本原理
? 工作原理
? 发热原理
4 主要构造
5 指标术语
? 静态指标术语
? 动态指标术语
6 特点特性
? 主要特点
? 主要特性
7 测速方法
8 功能模块设计
9 优势及缺陷
? 优点
? 缺陷
10 驱动方法
11 驱动要求
12 电机选择
13 注意
主要分类
步进电机在构造上有三种主要类型:
反应式(Variable Reluctance,VR)、永磁式(Permanent Magnet,PM)和混合式(Hybrid Stepping,HS)。
反应式:定子上有绕组、转子由软磁材料组成。结构简单、成本低、步距角小,可达1.2°、但动态性能差、效率低、发热大,可靠性难保证。
永磁式:永磁式步进电机的转子用永磁材料制成,转子的极数与定子的极数相同。其特点是动态性能好、输出力矩大,但这种电机精度差,步矩角大(一般为7.5°或15°)。 混合式:混合式步进电机综合了反应式和永磁式的优点,其定子上有多相绕组、转子上采用永磁材料,转子和定子上均有多个小齿以提高步矩精度。其特点是输出力矩大、动态性能好,步距角小,但结构复杂、成本相对较高。
按定子上绕组来分,共有二相、三相和五相等系列。最受欢迎的是两相混合式步进电机,约占97%以上的市场份额,其原因是性价比高,配上细分驱动器后效果良好。该种电机
的基本步距角为1.8°/步,配上半步驱动器后,步距角减少为0.9°,配上细分驱动器后其步距角可细分达256倍(0.007°/微步)。由于摩擦力和制造精度等原因,实际控制精度略低。同一步进电机可配不同细分的驱动器以改变精度和效果。
步进电机和驱动器的选择方法:
判断需多大力矩:静扭矩是选择步进电机的主要参数之一。
负载大时,需采用大力矩电机。力矩指标大时,电机外形也大。
判断电机运转速度:转速要求高时,应选相电流较大、电感较小的电机,以增加功率输入。且在选择驱动器时采用较高供电电压。
选择电机的安装规格:如57、86、110等,主要与力矩要求有关。
确定定位精度和振动方面的要求情况:判断是否需细分,需多少细分。
根据电机的电流、细分和供电电压选择驱动器。
基本原理
工作原理
通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。
发热原理
通常见到的各类电机,内部都是有铁芯和绕组线圈的。绕组有电阻,通电会产生损耗,损耗大小与电阻和电流的平方成正比,这就是我们常说的铜损,如果电流不是标准的直流或正弦波,还会产生谐波损耗;铁心有磁滞涡流效应,在交变磁场中也会产生损耗,其大小与材料,电流,频率,电压有关,这叫铁损。铜损和铁损都会以发热的形式表现
出来,从而影响电机的效率。步进电机一般追求定位精度和力矩输出,效率比较低,电流一般比较大,且谐波成分高,电流交变的频率也随转速而变化,因而步进电机普遍存在发热情况,且情况比一般交流电机严重。
主要构造
步进电机也叫步进器,它利用电磁学原理,将电能转换为机械能,
人们早在20世纪20年代就开始使用这种电机。随着嵌入式系统(例如打印机、磁盘驱动器、玩具、雨刷、震动寻呼机、机械手臂和录像机等)的日益流行,步进电机的使用也开始暴增。不论在工业、军事、医疗、汽车还是娱乐业中,只要需要把某件物体从一个位置移动到另一个位置,步进电机就一定能派上用场。步进电机有许多种形状和尺寸,但不论形状和尺寸如何,它们都可以归为两类:可变磁阻步进电机和永磁步进电机。
步进电机是由一组缠绕在电机固定部件--定子齿槽上的线圈驱动的。通常情况下,一根绕成圈状的金属丝叫做螺线管,而在电机中,绕在齿上的金属丝则叫做绕组、线圈、或相。指标术语
静态指标术语
1、相数:产生不同对极N、S磁场的激磁线圈对数。常用m表示。
2、拍数:完成一个磁场周期性变化所需脉冲数或
导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A。
3、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度/(转子齿数*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
4、定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)。
5、静转矩:电机在额定静态电作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积的标准,与驱动电压及驱动电源等无关。虽然静转矩与电磁激磁安匝数成正比,与定齿转子间的气隙有关,但过分采用减小气隙,增加激磁安匝来提高静力矩是不可取的,这样会造成电机的发热及机械噪音。
动态指标术语
1、步距角精度:步进电机每转过一个步距角的实际值与理论值的误差。用百分比表示:误差/步距角*100%。不同运行拍数其值不同,四拍运行时应在5%之内,
八拍运行时应在15%以内。
2、失步:电机运转时运转的步数,不等于理论上的步数。称之为失步。
3、失调角:转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。
4、最大空载起动频率:电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。
5、最大空载的运行频率:电机在某种驱动形式,电压及额定电流下,电机不带负载的最高转速频率。
6、运行矩频特性:电机在某种测试条件下测得运行中输出力矩与频率关系的曲线称为运行矩频特性,这是电机诸多动态曲线中最重要的,也是电机选择的根本依据。
其它特性还有惯频特性、起动频率特性等。电机一旦选定,电机的静力矩确定,而动态力矩却不然,电机的动态力矩取决于电机运行时的平均电流(而非静态电流),平均电流越大,电机输出力矩越大,即电机的频率特性越硬。要使平均电流大,尽可能提高驱动电压,采用小电感大电流的电机。
7、电机的共振点:步进电机均有固定的共振区域,二、四相感应子式的共振区一般在180-250pps之间(步距角1.8度)或在400pps左右(步距角为0.9度),电机驱动电压越高,电机电流越大,负载越轻,电机体积越小,则共振区向上偏移,反之亦然,为使电
机输出电矩大,不失步和整个系统的噪音降低,一般工作点均应偏移共振区较多。
8、电机正反转控制:当电机绕组通电时序为AB-BC-CD-DA或()时为正转,通电时序为DA-CD-BC-AB或()时为反转。
特点特性
主要特点
1、一般步进电机的精度为步进角的3-5%,且不累积。
2、步进电机外表允许的最高温度。
步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80-90度完全正常。
3、步进电机的力矩会随转速的升高而下降。
当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
4、步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。
步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。 步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。 主要特性
1、步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。
2、三相步进电机的步进角度为7.5度,一圈360度,需要48个脉冲完成。
3、步进电机具有瞬间启动和急速停止的优越特性。
4、改变脉冲的顺序,可以方便的改变转动的方向。
因此,打印机、绘图仪、机器人等设备都以步进电机为动力核心。
测速方法
步进电机是将脉冲信号转换为角位移或线位移。
一是过载性好。其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,步进电机使用时对速度和位置都有严格要求。
二是控制方便。步进电机是以“步”为单位旋转的,数字特征比较明显。
三是整机结构简单。传统的机械速度和位置控制结构比较复杂,调整困难,使用步进电机后,使得整机的结构变得简单和紧凑。测速电机是将转速转换成电压,并传递到输入端作为反馈信号。测速电机为一种辅助型电机,在普通直流电机的尾端安装测速电机,通过测速电机所产生的电压反馈给直流电源,来达到控制直流电机转速的目的。 功能模块设计
本模块可分为如下3个部分:
·单片机系统:控制步进电动机;
·外围电路:PIC单片机和步进电动机的接口电路;
· PIC程序:编写单片机控制步进电功机的接口程序,实现三角波信号的输出功能。
(1)步进电动机与单片机的接口。
单片机是性能极佳的控制处理器,在控制步进电机工作时,接口部件必须要有下列功能。 ①电压隔离功能。
单片机工作在5V,而步进电机是工作在几十V,甚至更高。一旦步进电机的电压串到单片机中,就会损坏单片机;步进电机的信号会干扰单片机,也可能导致系统工作失误,因此接口器件必须有隔离功能。
②信息传递功能。
接口部件应能够把单片机的控制信息传递给步进电机回路,产生工作所需的控制信息,对应于不同的工作方式,接口部件应能产生相应的工作控制波形。
③产生所需的不同频率。
为了使步进电机以不同的速度工作,以适应不同的目的,接口部件应能产生不同的工作频率。
(2)电压隔离接口。
电压隔离接口专用于隔离低压部分的单片机和高压部分的步进电机驱动电路,以保证它们的正常工作。
电压隔离接口可以用脉冲变压器或光电隔离器,基本上是采用光电隔离器。单片机输出信号可以通过TTL门电路或者直接送到晶体管的基极,再由晶体管驱动光电耦合器件的发光二极管。
发光二极管的光照到光电耦合器件内部的光敏管上,转换成电信号,再去驱动步进电机的功率放大电路,电流放大接口是步进电机功放电路的前置放大电路。它的作用是把光电隔离器的输出信号进行电流放大,以便向功放电路提供足够大的驱动电流。
(3)工作方式接口和频率发生器。
用单片机控制步进电动机,需要在输入输出接口上用3条I/0线对步进电动机进行控制,这时,单片机用I/O口的RA0、RAI、RA2控制步进电动机的三相。
优势及缺陷
优点
1、电机旋转的角度正比于脉冲数;
2、电机停转的时候具有最大的转矩(当绕组激磁时);
3、由于每步的精度在百分之三到百分之五,而且不会将一步的误差积累到下一步因而有较好的位置精度和运动的重复性;
4、优秀的起停和反转响应;
5、由于没有电刷,可靠性较高,因此电机的寿命仅仅取决于轴承的寿命;
6、电机的响应仅由数字输入脉冲确定,因而可以采用开环控制,这使得电机的结构可以比较简单而且控制成本;
7、仅仅将负载直接连接到电机的转轴上也可以极低速的同步旋转;
8、由于速度正比于脉冲频率,因而有比较宽的转速范围。
缺陷
1、如果控制不当容易产生共振;
2、难以运转到较高的转速;
3、难以获得较大的转矩;
4、在体积重量方面没有优势,能源利用率低;
5、超过负载时会破坏同步,高速工作时会发出振动和噪声。
驱动方法
步进电机不能直接接到工频交流或直流电源上工作,而必须使用专用的步进电动机驱动器,它由脉冲发生控制单元、功率驱动单元、保护单元等组成。驱动单元与步进电动机直接耦合,也可理解成步进电动机微机控制器的功率接口。
驱动要求
1、能够提供较快的电流上升和下降速度,使电流波形尽量接近矩形。具有供截止期间释放电流流通的回路,以降低绕组两端的反电动势,加快电流衰减。
2、具有较高韵功率及效率。
步进电机驱动器,它是把控制系统发出的脉冲信号转化为步进电机的角位移,或者说:控制系统每发一个脉冲信号,通过驱动器就使步进电机旋转一个步距角。也就是说步进电机的转速与脉冲信号的频率成正比。所以控制步进脉冲信号的频率,就可以对电机精确调速;控制步进脉冲的个数,就可以对电机精确定位。步进电机驱动器有很多,应以实际的功率要求合理的选择驱动器。
电机选择
步进电机有步距角(涉及到相数)、静转矩、及电流三大要素组成。
一旦三大要素确定,步进电机的型号便确定下来了。
1、步距角的选择
电机的步距角取决于负载精度的要求,将负载的最小分辨率(当量)换算到电机轴上,每个当量电机应走多少角度(包括减速)。电机的步距角应等于或小于此角度。市场上步进电机的步距角一般有0.36度/0.72度(五相电机)、0.9度/1.8度(二、四相电机)、1.5度/3度(三相电机)等。
2、静力矩的选择
步进电机的动态力矩一下子很难确定,我们往往先确定电机的静力矩。静力矩选择的依据是电机工作的负载,而负载可分为惯性负载和摩擦负载二种。单一的惯性负载和单一的摩擦负载是不存在的。直接起动时(一般由低速)时二种负载均要考虑,加速起动时主要考虑惯性负载,恒速运行进只要考虑摩擦负载。一般情况下,静力矩应为摩擦负载的2-3倍内好,静力矩一旦选定,电机的机座及长度便能确定下来(几何尺寸)。
3、电流的选择
静力矩一样的电机,由于电流参数不同,其运行特性差别很大,可依据矩频特性曲线图,判断电机的电流。
注意
1、步进电机应用于低速场合---每分钟转速不超过1000转,(0.9度时6666PPS),最好在
1000-3000PPS(0.9度)间使用,可通过减速装置使其在此间工作,此时电机工作效率高,噪音低;
2、步进电机最好不使用整步状态,整步状态时振动大;
3、由于历史原因,只有标称为12V电压的电机使用12V外,其他电机的电压值不是驱动电压伏值,可根据驱动器选择驱动电压(建议:57BYG采用直流24V-36V,86BYG采用直流50V,110BYG采用高于直流80V),当然12伏的电压除12V恒压驱动外也可以采用其他驱动电源,不过要考虑温升;
4、转动惯量大的负载应选择大机座号电机;
5、电机在较高速或大惯量负载时,一般不在工作速度起动,而采用逐渐升频提速,一电机不失步,二可以减少噪音同时可以提高停止的定位精度;
6、高精度时,应通过机械减速、提高电机速度,或采用高细分数的驱动器来解决,也可以采用5相电机,不过其整个系统的价格较贵,生产厂家少,其被淘汰的说法是外行话;
7、电机不应在振动区内工作,如若必须可通过改变电压、电流或加一些阻尼的解决;
8、电机在600PPS(0.9度)以下工作,应采用小电流、大电感、低电压来驱动;
9、应遵循先选电机后选驱动的原则。
范文三:步进电机
8255A 并行实验(一)
一、实验目的
了解 8255A 芯片的结构及其编程方法,通过“ 0”方式的应用—步进电机控制实验,学 习并行接口电路及其控制程序的设计原理与方法。
二、实验内容
用 8255的 PA 口作输出口,控制四相步进电机以双八拍方式运行;接合 8255 的 PC 口 设置按键来控制电机的起停。
三、实验要求
1. 利用 MFID 实验平台和步进电机驱动模块板进行硬件连接,利用 MF2KI 集成开发环境 进行步进电机软件控制程序的设计、调试,直到使步进电机正常运行。
2. 掌握程序中延时部分的控制
四、实验原理
1.步进电机驱动模块板电路原理如图所示。模块板上包括接口的对象永磁式四相步进 电机和驱动电路达林顿管 TIP ,保护电路 74LS373,相序指示灯以及开关 SW 1和 SW 2等。 2.步进电机接口设计原理与方法的详细阐述,参考课本计算机接口技术相关章节。
图 3.1 步进电机驱动模块电路原理框图
五、实验步骤
1.设计思路
首先对 8255初始化, PA 口作输出, PC0— PC3作输入, PC4— PC7作输出;同时 PC4置 “ 1” 则关 74LS373即关步进电机; 程序中查询 PC1、 PC0状态, 当 SW2按下 , 即 PC1为 “ 0” 则向 PA 口依次装载双八拍步进电机的加电代码,从而驱动步进电机转动,调用延时程序控 制电机运行速度。 运行过程中同时还检测 SW1是否按下, 即 PC0状态是否为 “ 0“, 若为 “ 0” 则停转步进电机,并退出程序。
2.准备工作
将实验平台的电源开关拔到“内”的位置。启动“ MF2KI ”集成环境,对 8255芯片进行 测试,确保工作正常。
3. 硬件连接
跳线设置:模块电源 L 区 JP8跳接。
单线连法如右图:
图 3.2 单线连接
4. 程序设计、编译、连接、运行
在“虚拟课堂”——“参考程序”页面中,下载 8255并行实验 (一 ) :Step.asm 程序 到本地机器的 E 盘目录下, 对照实验原理和程序流程图把相应空格处的代码填写好, 然后对 程序进行调试、运行。
5.实验观察
记录实验现象,对照实验现象分析参考程序,得出结论。要求按 sw2 启动步进电机, sw1停止并退出程序
六、实验思考
1.参考程序中的四相步进电机运行方向,如果要按反方向运行有什么方法?
2.在给定的参考程序中,步进电机是按四相双八拍方式运行的,如果按四相单四拍运行, 应当如何造相序表,观察分析和比较这两种运行方式有什么不同的效果。
3.如果要改变步进电机的运行速度,程序应当如何做修改
附:
(1)程序流程图:
(2)参考程序:
;*------------------------------------------------------* ;* Step.asm(步进电机控制接口实验 ) * ;*------------------------------------------------------* code segment
assume cs :code , ds :code
org 100h
start :jmp begin
psta db 05h , 15h , 14h , 54h , 50h , 51h , 41h , 45h ; 相序表 message db 'Press sw2 to start !' ; 系统提示 db 0dh , 0ah
db 'If you want to quit,press sw1!'
db 0dh , 0ah ,'$'
begin: mov ax , cs
mov ds , ax
mov ah , 09h ; 显示提示信息
mov dx ,seg message
mov ds , dx
mov dx ,offset message
int 21h
图 3.3 步进电机程序流程图
mov dx ,303h ; 初始化 8255A,PA 、 PB 口输出 ,pc0-pc3输入, pc4-pc7输出
mov al ,81h
out dx , al
mov al ,09h ; 置 PC4=1关闭 74LS373
out dx , al
L: mov dx , 302h ; 查 SW2按下?(PC1=0 )
in al , dx
and al ,02h ; 未按下,等待
jnz L
mov dx , 303h ; 置 PC4=0,打开 74LS37
mov al , 08h
out dx , al
reload: mov si ,offset psta ; 设相序表指针
mov cx , 8; 设 8拍循环次数
lop: mov dx , 302h ; 查 SW1按下?(PC0=0 ?)
in al , dx
and al ,01h
jz quit ; 已按下,退出
mov al ,[si ] ; 未按下,送相序代码到 PA 口
mov dx , 300h
out dx , al
mov di , 0afh
mov bx , 0ffffh ; 延时
delay: dec bx
jnz delay
dec di
jnz delay
inc si ; 相序表指针 +1
dec cx ; 循环次数 -1
jnz lop ; 未到 8次,继续
jmp reload ; 已到 8次,重新赋值
quit: mov dx , 303h ; 置 PC4=1,关闭 74LS373
mov al , 09
out dx , al
mov ah , 4ch ; 程序退出
int 21h
code ends
end start
范文四:步进电机...
步进电机智能控制接口电路设计
山东大学机械工程学院 宋现春 艾兴
摘要:介绍一种由可编程计数器8254组成的步进电机智能控制接口电路,通过该接口CPU只需要几条简
单的控制指令即可实现对步进电机的运行方向、速度和转角大小实现自动控制,而电机运行时CPU可以用来处理其他工作。
关键词:步进电机控制、可编程计数器
在许多测量和智能控制系统中,要求控制系统能对步进电机的速度、运行步数及方向进行控制,即系统应能根据控制量的大小对脉冲的频率和数量进行控制。最常用的实现方法是用软件循环延时取反某I/O口来实现,延时时间决定脉冲信号频率,循环次数决定脉冲个数。这种方法虽然简单方便,但其缺点是在脉冲发生过程中,CPU被独占,不能处理其他工作。这在许多场合是非常不利的,甚至难以实现。为此我们采用可编程计数/定时器8254及其他逻辑电路器件设计了一种智能型步进电机控制接口电路。只需要几条简单的指令就可以产生具有一定频率和数目的脉冲信号。
1. 硬件电路及工作原理。 硬件接口电路如图1所示。
控制线 控制电路
图1 步进电机智能控制接口电路
计数器0工作于方式3,即脉冲分频方式,写入计数值为N,通过对时钟信号Φ进行N分频在输出口OUT0产生一频率为f的方波信号,则f??/N。计数器0的工作时序如图2所示。
将信号f同时接至 CLK0(?)
计数器1的C1和“或非”
门74LS02的一个输入 WR 端,输出O1接至74LS02的另一个输入端。计数器
1工作于方式1,写入计 OUT0
数值为K,每触发一次,图2 计数器0(方波发生器)工作时序图
O1立即变低,其变低周期等于K个输入脉冲(OUT0)的周期。选用系统中任一I/O口PI作为触发选通控制线,PI和PI分别接至计数器的门控端G1和G0。通常情况下,当计数器控制字写入后,74LS02输出端为低电平;当触发控制线PI有“上跳变”脉冲出现时,OUT端产生频率为f(f??/N)的K个脉冲信号,其时序关系如图3所示。在整个脉冲产生过程中,CPU可用来处理其他工作,大大提高了系统的实时处理能力。
OUT0
GATE1(PI) OUT1
输出至步进电机图3 计数器1(外触发选通计数器)工作时序图
2. 软件设计
软件部分主要包括计数器的控制字设置以及计数值写入。计数值N和K分别决定要产生的脉冲信号频率和脉冲个数。如前所述,N??/f,
在实际系统中,根据采样周期T的 长度,适当选择计数值N,以便保证 采样间隔T大于K个脉冲信号周期, 即T?K?
1f
,否则容易产生丢失脉
冲。控制软件框图如图4所示。
另外,因为在许多微机系统中 硬件复位时I/O口要自动置位成高 电平,为了防止系统在硬件复位时 产生误触发,触发选通信号PI应采
用负脉冲沿触发,并且触发脉冲低 电平周期至少要大于二个机器周
图4步进电机智能控制软件框图 期,这样才能保证其脉冲上升沿起
作用。
作者通讯地址:山东济南经十路73号,山东大学(南校区)机械工程学院 宋现春 (收)
邮编: 250061 e-mail:songxch@hotmail.com
范文五:《步进电机》
步进电机控制设计 院(系) 别:机械与电子信息学院 专 业:机械设计制造及其自动化 班 级:
姓 名:
学 号:
指 导 老 师:
目录
一、实验目的及意义 ------------------------------3
二、实验要求 ------------------------------------3
三、设计时间与设计时间的安排 --------------------3
四、实验仪器简介 --------------------------------3
五、连线方式 ------------------------------------7
六、流程图 --------------------------------------7
七、电机速度的计算 ------------------------------9
八、实习心得 -----------------------------------10 附录 -------------------------------------------12
一、实验目的及意义
步进电机是利用电磁铁的作用原理, 将脉冲信号转换为线位移或角位移的电 机。每来一个电脉冲,步进电机转动一定角度,带动机械移动一小段距离。由于 步进电动机的这一工作职能正好符合数字控制系统要求, 因此它在数控机床、 钟 表工业及自动记录仪等方面都有很广泛的应用。 通过课程设计可以更好地把我们 所学的单片机知识,巩固所学的知识,并把所学的知识应用到实际生活中来。
1、了解步进电机控制的基本原理。
2、掌握控制步进电机转动的编程方法。
3、了解单片机控制外部设备的常用电路。
二、实验要求
本系统选用 AT89C51单片机为主控机。 通过扩展必要的外围接口电路, 实现对步 进电机控制器的设计,具体设计如下:
1. 查阅相关文献,熟悉课题背景和任务。
2. 深入学习 51系列单片机原理及 C 语言并学会用 keil 软件进行编程。
3. 通过组合实验箱上不同电路模块,实现 10 级速度控制,通过键盘切换速度, 并。
4. 显示当前速度。
5. 最好实现每一级之间的加减速,还有位移控制。
三、设计时间与设计时间的安排
1、设计时间:13周—— 18周
2、设计时间安排 :
13 周周 4 下午 (11.28) 方案设计 /查阅资料
14 周周 4 下午 (12.5) 方案设计 /查阅资料(提交设计任务书)
15 周周 4 全天 (12.12) 程序设计调试
周 日 全天 (12.15) 程序设计调试
16 周周 4 全天 (12.19) 程序设计调试
周 6 全天 (12.21) 程序设计调试(提交软件流程图)
17 周周 4 全天 (12.26) 程序设计调试
周日全天 (12.28) 程序设计调试
18 周周 1 全天 (12.30) 程序设计调试(以组为单位检查验收)
周 2 全天 (12.31) 撰写报告
周 3 全天 (1.1) 撰写报告(提交报告)
四、实验仪器简介
1、地址译码插孔
2、步进电机
步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机作步进式旋转。 切换是通 过单片机输出脉冲信号来实现的。 所以调节脉冲信号的频率便可以改变步进电机的转速, 改 变各相脉冲的先后顺序,可以改变电机的旋转方向。步进电机的转速应由慢到快逐步加速。
电机驱动方式可以采用双四拍 (AB→ BC → CD → DA → AB) 方式,也可以采用单四拍 (A→ B → C → D → A) 方式,或单、双八拍 (A
→ AB → B → BC → C → CD → D → DA → A) 方式。 各种工作方式的时序图如下:(高电平有效)
A B C D
上图中示意的脉冲信号是高有效,但实际控制时公共端是接在 VCC 上的,所以实 际控制脉冲是低有效。 8255的 PA 口输出的脉冲信号经(MC1413或 ULN2003A )倒相 驱动后,向步进电机输出脉冲信号序列。 MCS51或 80C196单片机也可以通过 P1口输 出脉冲信号控制步进电机的运转。
步进电机驱动电路
3、六位 LED 数码显示器和键盘电路
本实验仪的 LED 显示电路和键盘电路如图 1。显示电路和键盘电路可以工作在内驱和外 驱两种方式, 内驱是用 CPU 总线方式驱动, 通过总线读写外部设备的地址来控制显示和读入 键盘码。外部驱动方式是直接用 IO 方式驱动八段显示的段码、位码和键盘按键信息,这里 的 IO 控制可以用 CPU 的 IO 口来实现控制, 也可通过 8255等 IO 扩展电路来控制。 内驱、 外 驱由板上的拨动开关控制。
内驱方式 :将拨动开关拨到“内驱”位置,显示和键盘工作于内驱方式 ,显示控制的 位码通过总线由 74HC374输出, 经 ULN2003反向驱动后, 做 LED 的位选通信号。 位选通信号 也可做为键盘列扫描码,键盘扫描的行数据从 74HC245读回, 374输出的列扫描码经 245读 入后, 用来判断是否有键被按下,以及按下的是什么键。 如果没有键按下, 由于上拉电阻的 作用,经 245读回的值为高,如果有键按下, 374输出的低电平经过按键被接到 245的端口 上, 这样从 245读回的数据就会有低位, 根据 374输出的列信号和 245读回的行信号, 就可 以判断哪个键被按下。 LED 显示的段码由另一个 74HC374输出。
键盘和 LED 显示电路的地址译码见图,做键盘和 LED 实验时,需将 KEY/LED CS 接到相 应的地址译码上。位码输出地址为 0X002H ,段码输出地址为 0X004H ,键盘行码读回地址为
A B C D
单、双八拍工作方式
0X001H , 此处 X 是地址高四位 , 由 KEY/LED CS 决定。 例如将 KEY/LED CS 接到地址译码的 CS0上, 那么位码输出地址就为 08002H , 段码输出地址就是 08004H , 键盘行码读回地址为 08001H 。 外驱方式 :将拨动开关拨到“外驱”位置,八段显示和键盘工作于外驱方式,八段管的 段码控制由输出端口输出到 A~H插孔。 G0~G5是八段管的位码,同时也是键盘列扫描信号, IO 口输出的信号一方面可以点亮一位八段管, 另一方面向键盘输出列扫描信号。 K0~K3是键 盘行信号, IO 口可以从这里读到键盘按下的信息,与列扫描一起可以判断是哪个键被按下。
键盘及 LED 显示电路 五、连线方式:
六、流程图:总流程图:
步进电机流程图:
数码管显示流程图:
LED 主流程
读键输入子程序框图
七、电机速度的计算:
设置单片机晶振频率 fosc=12MHz,步进电机采用四相八拍形式,电机齿数为四, 所以定时器溢出一次电机旋转 360/(4*8)=11.25度, 设溢出一次所用的时间为 t , T=(65536-X)*1us; (1)
X=e*27*256+256, (e=0、 1、 2、 3、 4、 5、 6、 7、 8、 9) ; (2)
W=1000000/(32T); (3)
将(2)带入(1)即可算得:
T
=65280us;
T
1
=58368 us;
T
2
=51456 us;
T
3
=44544 us;
T
4
=37632 us;
T
5
=30720 us;
T
6
=23808 us;
T
7
=16896 us;
T
8
=9984 us;
T
9
=3072 us;
将结果带入(3)得:
W
=0.478707rad/s;
W
1
=0.535396rad/s;
W
2
=0.607315 rad/s;
W
3
=0.701554 rad/s;
W
4
=0.83041 rad/s;
W
5
=1.017253rad/s;
W
6
=1.312584 rad/s;
W
7
=1.84955 rad/s;
W
8
=3.130008 rad/s;
W
9
=10.17253 rad/s;
反转时的速度为 W
反
=-0.5 rad/s;
八、实习心得
我们是理工科学生, 课堂学习的东西以后都要应用于实际生产。 通过单片机 的课堂学习, 我们只不过是听老师讲单片机的原理, 但实际操作, 设计电路都做 不到, 并且也没有意识到了解单片机硬件部分的重要性, 也没有意识到设计电路 的重要性, 直到一次次实验中面对实验箱而不知道干什么时才意识到自己以前实 验靠着自己的 C 语言知识编程、实现老师要求的功能都是知其然不知其所以然。 做课程设计时我才真正意识到了解单片机硬件的原理的重要性。
这次课程设计虽然分了小组, 但是老师要求小组成员程序也不能一样, 所以 组内讨论较少, 组内两个成员选择了用 LCD 显示速度, 为了避免雷同, 我选择了 数码管显示。在实验中,开始几天他们都实现了显示,就剩下我自己了,我有点 着急。 恰巧付老师来看我们实习, 我就想付老师请教了为什么我的显示是闪烁的, 付老师给我解释 LCD 与数码管显示的原理不同, LCD 只需要一个脉冲,而数码管 需要持续脉冲, 当脉冲频率足够大就不会闪烁。 我的问题在于数码管与步进电机 用的都是软件延时,互相干扰,把步进电机改为中断定时就不会出现类似情况。 我听了付老师的意见,将控制步进电机的部分改为中断定时后显示果然成功了。 不仅如此,因为应用了中断定时,当键盘有键按下,电机以原有速度运转,当键 弹起, 电机才以按键要求速度运转, 这使得电机在级与级之间变速时很容易实现 速度比较并且加减速。
通过这次课程设计我认识到自己很多地方的不足, 会 C 语言可以编程实现功 能不代表学会了单片机, 因为如果没有以前的例子自己也不知道如何控制步进电 机, 如何控制数码管, 如何取出键值。 不了解单片机的原理不可能设计出电路图,
何谈画流程图, 更不用说编程序了。 所以我总结出了几点以后自己学好单片机的 方法:第一,学好原理,没学好原理其他都是空中楼阁,没有基础;第二,学会 设计电路,不会设计电路也就不能设计出新的产品,别人有了要求也实现不了; 第三,学会画流程图,只有能画出逻辑清晰的流程图才能为以后编程打好基础; 第四, 能够根据流程图编写出简洁明了的程序。 只有实现了以上几点我们才能说 自己学会了单片机。
附录:
程序:
#include #define mode8255 0x82 #define uchar unsigned char #define LEDLen 6 xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口 xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口 xdata unsigned char IN _at_ 0x8001; // 键盘读入口 xdata unsigned char control _at_ 0x9003; xdata unsigned char ctl _at_ 0x9000; #define Astep 0x01 #define Bstep 0x02 #define Cstep 0x04 #define Dstep 0x08 unsigned char s,e,w,num,r=0; unsigned char LEDBuf[LEDLen]; // 显示缓冲 code unsigned char LEDMAP[] = { // 八段管显示码 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0x8f,0x40 }; void Delay1(unsigned char CNT) { unsigned char i; while (CNT-- !=0) for (i=100; i !=0; i--); } void DisplayLED() { unsigned char i; unsigned char Pos; unsigned char LED; Pos = 0x20; // 从左边开始显示 for (i = 0; i < ledlen;="" i++)=""> LED = LEDBuf[i]; OUTSEG = LED; OUTBIT = Pos; // 显示一位八段管 Delay1(1); Pos >>= 1; // 显示下一位 }} code unsigned char KeyTable[] = { // 键码定义 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07 }; unsigned char TestKey() { OUTBIT = 0; // 输出线置为 0 return (~IN & 0x0f); // 读入键状态 (高四位不用 ) } unsigned char GetKey() { unsigned char Pos; unsigned char k; s = 6; Pos = 0x20; // 找出键所在列 do { OUTBIT = ~ Pos; Pos >>= 1; k = ~IN & 0x0f; } while ((--s != 0) && (k == 0)); // 键值 = 列 x 4 + 行 if (k != 0) { s *= 4; if (k & 2) s += 1; else if (k & 4) s += 2; else if (k & 8) s += 3; OUTBIT = 0; do Delay1(10); while (TestKey()); // 等键释放 return(KeyTable[s]); // 取出键码 } else return(0xff);} void xianshi(h) { if(h==0){ //显示 0级速度 W0=0.478707rad/s; LEDBuf[0] = LEDMAP[16]; LEDBuf[1] = LEDMAP[4]; LEDBuf[2] = LEDMAP[7];} if(h==1){ LEDBuf[0] = LEDMAP[16]; //显示 1级速度 W1=0.535396rad/s; LEDBuf[1] = LEDMAP[5]; LEDBuf[2] = LEDMAP[3];} if(h==2){ LEDBuf[0] = LEDMAP[16]; //显示 2级速度 W2=0.607315 rad/s; LEDBuf[1] = LEDMAP[6]; LEDBuf[2] = LEDMAP[0];} if(h==3){ LEDBuf[0] = LEDMAP[16]; //显示 3级速度 W3=0.701554 rad/s; LEDBuf[1] = LEDMAP[7]; LEDBuf[2] = LEDMAP[0];} if(h==4){ LEDBuf[0] = LEDMAP[16]; //显示 4级速度 W4=0.83041 rad/s; LEDBuf[1] = LEDMAP[8]; LEDBuf[2] = LEDMAP[3];} if(h==5){ LEDBuf[0] = LEDMAP[17]; //显示 5级速度 W5=1.017253rad/s; LEDBuf[1] = LEDMAP[0]; LEDBuf[2] = LEDMAP[1];} if(h==6){ LEDBuf[0] = LEDMAP[17]; //显示 6级速度 W6=1.312584 rad/s; LEDBuf[1] = LEDMAP[3]; LEDBuf[2] = LEDMAP[2];} if(h==7){ LEDBuf[0] = LEDMAP[17]; //显示 7级速度 W7=1.84955 rad/s; LEDBuf[1] = LEDMAP[8]; LEDBuf[2] = LEDMAP[4];} if(h==8){ LEDBuf[0] = LEDMAP[19]; //显示 8级速度 W8=3.130008 rad/s; LEDBuf[1] = LEDMAP[1]; LEDBuf[2] = LEDMAP[3];} if(h==9){ LEDBuf[0] = LEDMAP[1]; //显示 9级速度 W9=10.17253 rad/s; LEDBuf[1] = LEDMAP[16]; LEDBuf[2] = LEDMAP[1];} if(h==0xa) {LEDBuf[0] = LEDMAP[0]; //显示关闭,即速度为 0 LEDBuf[1] = LEDMAP[0]; LEDBuf[2] = LEDMAP[0]; } if(h==0xb) {LEDBuf[0] = LEDMAP[26];//显示反转速度 W 反 =-0.5 rad/s; LEDBuf[1] = LEDMAP[16]; LEDBuf[2] = LEDMAP[5];} } dingshi( ) { TMOD = 0x01; TH0 = 0xf6; TL0 = 0xff; ET0 = 1; EA = 1; num = 0; } void timer0( void ) interrupt 1 //中断入口地址 000BH {if(e==0xb) { TH0 = 0x9e;//执行反转 TL0 = 0x58; num++; if(num==1) ctl = Dstep+Astep; if(num==2) ctl = Dstep; if(num==3) ctl = Cstep+Dstep; if(num==4) ctl = Cstep; if(num==5) ctl = Cstep+Bstep; if(num==6) ctl = Bstep; if(num==7) ctl = Astep+Bstep; if(num==8){ ctl = Astep; num=0; } } else //执行十级变速,加减速 { w=27*e; if(w>=r) {TH0 = r; if(r<> } else {TH0 = r; if(r>=w)r--; } TL0 = 0xff; num++; if(num==1) ctl = Astep; if(num==2) ctl = Astep+Bstep; if(num==3) ctl = Bstep; if(num==4) ctl = Cstep+Bstep; if(num==5) ctl = Cstep; if(num==6) ctl = Cstep+Dstep; if(num==7) ctl = Dstep; if(num==8){ ctl = Dstep+Astep; num=0; } } } dianji() {unsigned char mode; control = mode8255; mode = 1; ctl = 0; dingshi(); } void main() { LEDBuf[0] = 0x00; LEDBuf[1] = 0x00; LEDBuf[2] = 0x00; LEDBuf[3] = 0x00; LEDBuf[4] = 0x00; LEDBuf[5] = 0x00; //给数码管输入初值,全灭 dianji();//初始化电机数据,打开中断定时 while (1) { DisplayLED(); //启动数码管 if (TestKey()) //检查是否有键按下 {e=GetKey(); } //如果有,将 W 值初始化,将键值付给 e xianshi(e); //显示速度 if(e==0xa) TR0=0; else TR0=1; //设置键 A 为停止 }} 转载请注明出处范文大全网 » 多用途步进电机控制芯片