基于瑞萨M16C的步进电机精确控制

上传人:沈*** 文档编号:41701180 上传时间:2021-11-22 格式:DOC 页数:31 大小:1.25MB
返回 下载 相关 举报
基于瑞萨M16C的步进电机精确控制_第1页
第1页 / 共31页
基于瑞萨M16C的步进电机精确控制_第2页
第2页 / 共31页
基于瑞萨M16C的步进电机精确控制_第3页
第3页 / 共31页
点击查看更多>>
资源描述
本科生毕业设计(论文)正文基于瑞萨M16C的步进电机精确控制摘 要本论文题目是在WINDOWS XP为操作系统的开发平台下,使用瑞萨的HEW编辑器,瑞萨的NC30编译器和瑞萨的KD30调试器,编写好控制系统代码,使用瑞萨的M16C系列单片机芯片,来实现SIHONGMOTOR16H38-0806A二相六线步进电机的基本驱动,键盘的基本控制,LCD显示器的基本显示。并运用L298N驱动电路作为接受M16C系列单片机的电脉冲输出信号从而满足二相六线步进电机的基本驱动要求并通过LCD显示器准确的描述其基本转动内容。通过M16C系列单片机的芯片自带定时器的PWM输出来构成对二相六线步进电机所需要的时序脉冲的输入,进而实现对二相六线步进电机的精确和细分的控制。本文主要论述的是二相六线步进电机应用的背景知识和背景技术外,另外,还对二相六线步进电机的工作原理进行描述,然后以瑞萨的M16C系列单片机的芯片为主的控制器提出了整个系统的硬件设计方案及如何利用瑞萨的M16C系列单片机的芯片来控制二相六线步进电机的运行。关键词:步进电机,M16C单片机,PWM,细分,精确控制PRECISE CONTROL FOR STEPPER MOTOR BASED ON RENESAS M16CABSTRACTThe topic of this paper is in the WINDOWS XP operating system development platform, the use of Renesas HEW editor, Renesas NC30 compiler and KD30 debugger, to write a good control system code, the use of Renesas M16C series single chip, to achieve SIHONGMOTOR16H38-0806A phase six wire stepper motor basic drive, keyboard control, LCD basic display display. And the use of L298N drive circuit as to accept the M16C Series MCU electrical pulse output signal to meet two phase six wire stepper motor basic drive requirements and through the LCD display accurate description of its basic contents of rotation. Through the M16C Series MCU chip built-in timer PWM output of two phase six wire stepper motor need timing pulse input, and then the two phase six wire stepper motor subdivision control precision and.This article main elaboration is phase six wire stepper motor application background and technical background, in addition, also on two phase six wire stepper motor principle are described, and then to Renesas M16C series single chip based controller is presented. The system hardware design and how to use Renesas M16C Series MCU the chip to control the phase six wire stepper motor running.Key Words:Stepper motor,Renesas single-chip M16C,PWM,Subdivision,Precise Control目 录第一章 绪论11.1 引言11.2 步进电机的分类11.3 步进电机应用背景21.4 国内外研究情况2第二章 技术概述32.1 单片机控制步进电机驱动原理32.1.1 步进电机驱动原理32.1.2 步进电机的细分原理42.2 瑞萨M16C芯片及其开发板的介绍52.3 NC30编译器及KD30调试器使用技术说明62.3.1 NC30的编译过程62.3.2 KD30软件调试器的使用方法6第三章 步进电机控制系统的硬件设计83.1 控制系统总体构成83.2 控制系统的电路图93.2.1 瑞萨M16C芯片平面图93.2.2 LCD电路图103.2.3 按键的电路图103.2.4 细分控制按键电路图113.2.5 瑞萨M16C单片机+二相六线步进电机+L298N的电路设计图113.3 系统实现平台及工具12第四章 步进电机控制系统的软件设计134.1 步进电机控制系统的程序流程图134.2 系统功能模块层次划分图144.3 步进电机控制系统的操作序列图和状态迁移图及示意图154.4 步进电机的主要文件构成表194.5 控制系统的功能检测20第五章 结论21参考文献22致谢23附 录24第一章 绪论1.1 引言 历史证明了,一个发展国家的制造业水平在相当大的程度上决定了该国家的综合实力,国家的发展也在相当大的程度上依考于其先进的制造业水平,所以,绝大多数的发展国家都相当重视并发展制造业,在二战之后,计算机控制技术、微电子技术、信息和自动化技术有了疾快的发展,并在制造业中得到了越来越广泛的应用,拥有很多特点的步进电机就是一个极其重要角色。   步进电机又称脉冲电机或称阶跃电机,是将电脉冲信号转变为线位移或角位移的开环控制元件,它不能直接接到交流电源上。在不超载的情况下,步进电机的转速,停止的位置只取决与电脉冲信号的脉冲数和频率,而不会受其负载变化而变化, 其应用发展己有八十多年的历史。可以说步进电机是纯粹的数字在控制的,步进电机驱动器通过控制电脉冲,控制步进电机各相绕组的导通或者是截止,从而使步进电机产生步进转动。步进电机可以在很宽广的频率范围内通过改变电脉冲频率来实现其调速、快速起停、正反转控制等,这也是步进电机最突出的特点。正是由于步进电机具有这么突出的特点,所以才能成为了机电一体化的关键产品之一,在广泛应用的各种自动化控制系统中。随着微电子及其计算机技术的快速发展,步进电机的需求量与日俱增,与昔日不能相提并论,在各个国家的国民经济领域都有很广泛的应用,所以本课题的研究是非常有必要的。1.2 步进电机的分类步进电机种类很多,但,主要可以分为机械式,电磁式,组合式3种类。如果按其结构分,可以分为反应式(VR),永磁式(PM)和混合式(HB)3种类。(1)Variable Reluctant (反应式步进电机)一般为三相的步进电机,步进角为1.5度。其步进电机的转子中没有绕组,是由软磁材料构成的。成本低,结构简单,步距角也可以很小。但只有单段式的步进电机和多段式的步进电机,动态性能比较差。(2)Permanent Magnet (永磁式步进电机) 一般为两相的步进电机,体积小,步进角一般为7.5度或者15度。其步进电机的转子本身就是个磁源,是永磁材料构成的。并定子极数和它的极数相等,所以一般的步距角相对的比较大。但,它的动态性能也相对的较好,消耗的功率也相对的比反应式的要低。(3)Hybri(混合式步进电机)其结构上的转子加有永磁体,这是提供软磁材料的工作点。它是综合了反应式和永磁式两种的特点。因此这种步进电机的工作效率高,使用电流小,并具有较强的反电势,在其转动的过程中,比其他的平稳且低噪声。它一般分为两相或者无相:两相步进电机一般为1.8度,无相步进电机一般为0.72度。1.3 步进电机应用背景步进电机是将其电脉冲信号转变为线位移或角位移的开环控制元件。在其不超载的情况下,步进电机的转速,停止的位置只取决于电脉冲信号的脉冲数和频率,而不会受其负载变化而随之变化的,这也使得其在速度、位置等方面更加让人感觉到很简单。步进电机的输入脉冲数与输出轴的角位移量成正比,不受其环境温度及电压的影响,没有累积的定位误差,所以控制输入的数字脉冲数就可以实现步进电机的精确定位;而步进电机的输入的脉冲频率与输出轴的转速成正比,所以控制输入的脉冲频率就能够准确的控制着步进电机的转速,就可以实现在很宽广的范围内精确调其转速。并且由于它的体积小,控制方便等的特点,所以在自动生产线,自动化仪表,打印机,数控系统,绘图机,机器人及计算机外围设备中得到非常广泛应用1。1.4 国内外研究情况国内外研究现状与发展趋势:电机产业经过多年的发展,取得了长足进步。并且以每年一定的速度递增,已成为国民经济和国防建设中不可缺少的基础性工业。国民经济与科学技术的发展,世界电机制造基地正在快速地向中国转移,为电机产业提供了无限的发展空间。国内:过去在浙江,江苏,北京,四川等地都在生产且使用大力距步步进电机进行机床控制,资金雄厚的公司采用了交流电动机进行机床控制。设施还是比较的落后。国外:基本不再使用大力距步步进电机,因为成本比较高,多数用直流电动机或者是空心转杯电机。第二章 技术概述2.1 单片机控制步进电机驱动原理2.1.1 步进电机驱动原理如图2-1-1和图2-1-2所示,这是一个二相六线的步进电机,其在结构上也是由转子和定子组成的,当脉冲电流流过其定子绕组时,在其磁拉力的作用下,带动转子旋转了一个角度,使其磁极方向改变,且,又带动转子旋转了一个角度。本论文以二相六线步进电机为例,若按ABCDA规律循环顺序通电,这种控制方式称为二相四拍。若按AABBBCCCDDDAA规律循环顺序通电,这种控制方式称为二相八拍。无论采取哪一种方式,步进电机的转角恒为一个齿距角。电机转子的角位移用a表示,则a=360度,四拍的控制方式的步距角为a=360度/(50*4)=1.8度,俗称为整步(图2-1-3)。八拍的控制方式的步距角为a=360度/(50*8)=0.9度,俗称为半步(图2-1-4)。运用单片机的输出功能,通过编程实现输出四个信号分别给步进电机的四个端口A+(blk)、A-(grn)、B+(red)、B-(blu),通过改变步进电机的通电循环顺序来改变电机的转动方向5。图2-1-1 两相步进电机结构的示意图图2-1-2 两相步进电机绕线的示意图图2-1-3 整步状态的电流方波和磁场矢量的示意图图2-1-4 半步状态的电流方波和磁场矢量的示意图2.1.2 步进电机的细分原理电机的细分方法有诸多种,其中,PWM细分技术是目前较为常用的细分方式,其实质是通过在其电机线圈中产生阶梯型的电流,改善其电机性能并达到细分的目的3。也就是通过对步进电机励磁绕组中的电流控制,使其内部形成均匀的圆形旋转磁场,并让其电流范围能在零到最大值之间有多个稳定的电流值,磁场矢量值和方向也就会存在多个稳定的值,从而实现步进电机步距角的细分。在正常的情况下,合成的磁场矢量值就决定了其步进电机的旋转力矩的值,所以,相邻的磁场矢量之间的夹角值也就决定了步距角的值。因此,要想进行对步进电机的恒力矩进行均匀细分控制,就必须得合理的控制步进电机绕组线中的电流 7。PWM(Pulse Width Modulation)控制技术-脉冲宽度调制方式,通过对一系列的脉冲宽度实行控制,来等效获得自己所需要的波形,其技术在逆变电路中运用的非常的广泛。其特点是从MCU到被控制系统的信号都是数字形式的,所以,不需要进行数模转换。占空比-保持高电平的时间与其PMW的时钟周期之间的比,只要带宽足够宽,无论什么模拟值都可以用PMW实现编码。这也就会增强了对噪声抵抗的能力。使用自带的PWM模块的单片机通过配置硬件资源可以驱动步进电机,根据其方波所产生的占空比不同的方波,可以获得类似与正弦波的阶梯型状态的电流,从而获得较高的细分精度。适合运用在精确系数高的精准控制仪器上。图2-1-5步进电机细分电流矢量的示意图2.2 瑞萨M16C芯片及其开发板的介绍本论文所采用的瑞萨芯片是M16C/62P群中的M16C -M30626FHPFP MCU(图2-2-1), 图2-2-1 瑞萨M16C芯片产品型号,存储器容量及封装的示意图该MCU是采用了80引脚的QFP塑封。具有高效率指令,高性能指令,1M字节的地址空间,快速执行指令的能力同时还有高速DMA控制器和乘法器,具备高速算术/逻辑运算处理的OA,通信设备及工业设备的控制8。其中,CPU有基本指令数为91条,最短指令执行时间为41.7ns或100ns,运行模式为单芯片(模式)或者存储器扩展(模式)或者微处理器(模式),存储器容量为1M字节,可以通过扩展到4M字节。外围功能有端口为114个(113个为输入,1个为输出),多功能定时器为定时器A(16为*5个通道)、定时器B(16为*5个通道)。(1)定时器AM16C/62P(80引脚版)中的定时器A没有定时器A1的TA1IN引脚和TA1OUT引脚、定时器A2的TA2IN引脚和TA2OUT引脚。其模式可以分为定时器(模式):对内部计数源进行计数的模式、事件计数器(模式):对来自外部的脉冲、其它定时器的溢出或者其它定时器的下溢进行计数的模式、单次触发定时器(模式):在计数值变为“0000h”之前,只进行1次脉冲输出的模式、脉宽调制(PWM)(模式):连续输出任意宽度的脉冲的模式。(2)定时器B M16C/62P(80引脚版)中的定时器B没有定时器B1的TB1IN引脚。其模式可以分为定时器(模式):对内部计数源进行计数的模式、事件计数器(模式):对来自外部的脉冲、其它定时器的溢出或者其它定时器的下溢.进行计数的模式、脉冲周期测定/脉宽测定(模式):测定外部脉冲周期或者脉宽的模式,A/D转换器为10位A/D转换器(1个电路,26个通道)AD转换的结果从A/D寄存器获取10。,中断为内部(中断)29个、外部(中断)8个、软件(中断)4个、中断优先级有7级。小键盘、SW1-SW10控制键等。 图2-2-2 瑞萨M16C芯片结构示意图2.3 NC30编译器及KD30调试器使用技术说明2.3.1 NC30的编译过程(1) 编写C语言源文件,汇编语言源文件,可再定位的目标文件程序。(2) 对启动程序ncrt0.a30进行汇编,对C语言源程序xxx.c进行编译和汇编,连接可再定位的目标文件ncrt0.r30和xxx.r30(3) 在命令提示符下生成目标文件(xxx.x30)。2.3.2 KD30软件调试器的使用方法(1) 装载编译过的目标程序,在File中的Load module下,选着指定的xxx.x30文件并装入文件。(2) 执行装入的文件程序,并点击运行按钮,运行其目标程序。 (3) 执行装入的文件程序到指定行,在代码窗口中的BRK列上设置我们所需的断点,并执行其程序。(4) 打开含有主函数(main函数)的源文件并开始调试目标程序。(5) 切换调试程序显示至汇编语言和C语言及混合显示。(6) 以行为基本单位,确认调试程序的流程。(7) 改变或者查看其变量内容,通过Basic打开C语言查看窗口,点击添加按钮添加调试变量,查看调试变量内容。(8)将数组名赋给指针变量,查看或者改变指针指向的数组。(9) 查看或者改变其指定地址内存的内容,通过Basic Window打开寄存器窗口,点击地址列,指定调试开始地址,查看内存内容。(10) 查看或者改变更多内存的内容,通过Basic Window打开跳转窗口。其使用方法与寄存器窗口相类似。(11) 查看或者改变其寄存器的内容。第三章 步进电机控制系统的硬件设计3.1 控制系统总体构成如图3-1-1所示的是二相六线的步进电机控制系统的总体构成图,从图可以看出控制键盘,控制指令(程序模块),脉冲分配器(l298n驱动)和二相六线的步进电机之间控制的相互关系。即用户可以通过控制键盘来控制瑞萨M16C单片机的相应控制模块,而其控制模块将会把用户的所需要的要求转变为对二相六线的步进电机的控制信号,瑞萨M16C单片机对二相六线的步进电机的控制信号会经过l298n驱动电路的转化之后,再将其信号输出给二相六线的步进电机。同时瑞萨M16C单片机控制模块也将对二相六线的步进电机的运行信息同步到LCD显示器上显示出来。图3-1-1 控制系统总体构成图3.2 控制系统的电路设计3.2.1 瑞萨M16C芯片平面图3-2-1 瑞萨M16C芯片平面的示意图图3-2-1所示的是本论文题目所用的瑞萨M16C芯片平面图,从图中可以看出共有100引脚。3.2.2 LCD电路图图3-2-2 LCD电路的示意图图3-2-2所示的是本论文题目所用的瑞萨M16C单片机开发板上的LCD电路图,从图中可以看出P10端口及P0端口是控制LCD显示的数据控制端口。3.2.3 按键的电路图图3-2-3 步进电机输入步数的控制按钮电路的示意图图3-2-3所示的是本论文题目所用的瑞萨M16C单片机开发板上为二相六线的步进电机输入步数的控制按钮电路图,从图中可以看出P1端口是输入步数的控制按钮的数据控制端口。3.2.4 细分控制按键电路图图3-2-4 步进电机细分控制按钮电路图的示意图图3-2-4所示的是本论文题目所用的瑞萨M16C单片机的开发板上为二相六线的步进电机细分控制的按钮电路图,从图中可以看出P3端口是细分控制按钮的数据控制端口。3.2.5 瑞萨M16C单片机+二相六线步进电机+L298N的电路设计图3-3-5 瑞萨单片机+步进电机+L298N的电路设计图的示意图 如3-3-5 瑞萨单片机+步进电机+l298n的电路设计图所示的是二相六线的步进电机的信号输出端口即P7_2,P7_4,P7_6,P8_0,它们各分别是瑞萨M16C单片机芯片上的四个定时器,即定时器A1,定时器A2,定时器A3,定时器A4的PWM脉冲输出的引脚,它们输出给予驱动二相六线的步进电机所需要的驱动信号,经过l298n驱动电路的转化之后,将会把其直接输出给二相六线的步进电机。3.3 系统实现平台及工具步进电机控制系统的构成由瑞萨M16C开发板,l298n驱动电路,二相六线步进电机及(+)12V电源。运用汇编语言及C语言通过KD30,NC30及HEW开发工具在WINDOWS XP操作系统下实现编写并将其顺利完成。第四章 步进电机控制系统的软件设计4.1 步进电机控制系统的程序流设计图4-1-1 步进电机控制系统的程序流程图的示意图此二相六线步进电机的控制系统实现了以下功能:键盘功能键实现对SIHONGMOTOR16H38-0806A二相六线步进电机运行方式的基本控制,数字键实现对SIHONGMOTOR16H38-0806A二相六线步进电机参数的基本设置;显示器能够显示SIHONGMOTOR16H38-0806A二相六线步进电机运行的步数;通过键盘输入预定步数,实现瑞萨M16C单片机对SIHONGMOTOR16H38-0806A二相六线步进电机带动负载进行预定工作的控制。本系统采用加速定位控制,避免了启动速度过大而使SIHONGMOTOR16H38-0806A二相六线步进电机不能正常启动。4.2 系统功能模块层次划分设计 图4-2-1 系统功能模块结构层次划分的示意图图4-2-1所示的是系统功能模块结构层次划分图,从图中可以看出步进电机的控制系统分为两大模块,即定时器中断模块和步进电机控制系统的主模块。其中,定时器中断模块是用来产生定时扫描按键和定时运行系统的功能;步进电机控制系统的模块主要实现的是步进电机控制系统的两种模式,即普通驱动模式和精确控制模式以及其按键检测功能。图4-2-2 定时器中断图的示意图定时器中断服务:步进电机控制系统一开启就开始初始化,其中就包括定时器的初始化。定时器在每隔一定时间就会发生一次中断请求用于其检测是否有按下按键及其系统的运行情况。通过定义中断标志位来判定是否发生中断请求。中断的动作:中止主程序,将控制转移到中断程序中;寄存器的值的保存在堆栈区域中;中断的处理;恢复被保存的寄存器的值;从中断程序返回到主程序中。4.3 步进电机控制系统的操作序列图和状态迁移图及示意图图4-3-1 控制系统的普通驱动模式操作序列图的示意图图4-3-2 控制系统的细分模式控制状态迁移图的示意图图4-3-1和图4-3-2所示的是当步进电机控制系统为普通驱动模式时,用户,二相六线步进电机及步进电机控制系统三者之间对于对事件反应的时间顺序的关系图和当步进电机控制系统在选择细分模式时的操作示意图。步进电机控制系统会先初始化基本信息,根据用户的实际需求可以选择7种细分模式,即,将SW8为ON即六十四细分模式;SW8为OFF且SW7为ON即三十二细分模式;SW8为OFF,SW7为OFF,SW6为ON即十六细分模式;SW8为OFF,SW7为OFF,SW6为OFF,SW5为ON即八细分模式;SW8为OFF,SW7为OFF,SW6为OFF,SW5为OFF,SW4为ON即四细分模式;SW8为OFF,SW7为OFF,SW6为OFF,SW5为OFF,SW4为OFF,SW3为ON即半步状态模式,每次控制键的变化,系统都会随之变化,LCD同步显示出变化的信息。用户选择完细分模式后,可按SW9(RUN)键,步进电机控制系统启动,当用户按下SW10(STOP)时,步进电机控制系统停止,然后马上停止步进电机驱动信号的输出。图4-3-3 控制系统的精确控制模式操作序列图的示意图图4-3-3所示的是步进电机控制系统的精确控制模式的操作序列图,系统先会初始化信息。然后根据用户将控制键SW2为ON,然后将输入步数的控制键SW3为ON。就可以向控制系统输入实际所需的步数,如果用户用键盘输入的500的步数。控制系统则会在LCD显示器上显示出用户所输入的值即500,此时的步进电机控制系统的启停状态为RUN。当500步的电脉冲驱动信号全部输出时,控制系统将会停止向步进电机输出电脉冲驱动信号,LCD显示器也将显示出步进电机控制系统的启停状态为STOP。图4-3-4 控制系统的户模式切换操作序列图的示意图图4-3-4所示的是步进电机控制系统中用户的两种模式的切换的序列图,步进电机控制系统开始显示为普通驱动模式的信息,并在LCD显示器上显示出。将控制键SW1为ON时,切换到精确控制模式,并在LCD显示器上显示出精确控制模式的信息。在精确控制模式下,将控制键SW3为OFF(禁止输入),且将控制键SW1为OFF时,步进电机控制系统便会切换为普通驱动模式,并在LCD显示器上显示处普通驱动模式的信息。图4-3-5 控制系统的启停及速度控制状态迁移图的示意图图4-3-5所示的是步进电机控制系统的运行和停止之间的状态相互转变的示意图。按下控制键SW9则是从停止状态迁移到运行状态。按下控制键SW10则是从运行状态迁移到停止状态。运行速度状态迁移事件则是通过旋转控制旋转VERF旋钮引起的A/D变化进而获得二相六线步进电机的运行速速。图4-3-6 控制系统的方向控制状态迁移图的示意图图4-3-6所示的是步进电机控制系统的二相六线步进电机旋转方向(顺势针和逆时针)的状态迁移图。即将控制键SW2为ON时,步进电机旋转方向为顺时针方向;将控制键SW2为OFF时,步进电机旋转方向为逆时针方向。 图4-3-7 控制系统的键盘示意图图4-3-7所示的是控制系统的键盘示意图,键盘的输入操作:键盘的字符分布为第一行:ABCD, 第二行:EFGH,第三行:IJKL,第四行:*MN#.键盘的数字分布为第一行:123#, 第二行:456#,第三行:789#,第四行:#0#.在精准控制模式下,用键盘向系统输入步数时,以#号为结束信号,输入大于三位数时,控制系统将自动结束输入模块,并显示前三位所输入的步数。图4-3-8 控制系统的三次抖动取消算法的示意图如图4-3-8所示的是系统中启动和停止的两个控制键的三次抖动取消算法的示意图,即将控制键SW9和控制键SW10的三次抖动取消算法。其主要目的是对控制键进行重复判断,提高按键操作的灵敏度和减少操作所引起的误差。图4-3-9 控制系统的LCD显示画面设计示意图如图4-3-9所示的是步进电机控制系统的LCD显示画面设计图。第一行,模式的显示即步进电机控制系统的普通控制模式和精确控制模式;第二行,步进角的显示即步进电机在运行时的步进角为1.8度,0.9度,0.45度,0.225度,0.1125度,0.05625度,0.028125度,这里的步进角共有六种角度且会随着选择的变化而变化;第三行中,左边是运行状态的显示:STOP表示停止运行, RUN表示正在运行;右边是转向的显示:L_D表示逆时针旋转, R_D表示顺时针旋转;第四行中,步进电机的旋转角速度的显示,在步进电机运行时旋转速度显示会随着A/D转换器的变化而随之改变。4.4 步进电机的主要文件构成表 图4-4-1 控制系统的主要文件及其功能表的示意图如图4-4-1所示的是控制系统的主要文件及其功能和作用,文件主要包括有启动文件, C语言头文件,C语言源文件,汇编源文件。4.5 控制系统的功能检测控制系统功能检测是对步进电机控制系统运行之后,对所编写的系统进行检测和分析。(1)模式切换测试:控制键SW1为ON,LCD显示器显示为精确控制模式;控制键SW3和控制键SW1都为OFF,LCD显示器显示为普通驱动模式。 (2)输入控制测试:控制键SW1和控制键SW3都为ON,键盘输入步数的值不超过两位并且以“#”结束键结束,输入步数为三位时,控制系统自动结束,并且输入步数位前三位的值。 (3)转向控制测试:控制键SW2为ON,二相六线步进电机顺时针旋转;相反则,逆时针旋转。(4)启停控制测试:控制键SW9为ON,二线六线步进电机开始运行;控制键SW10为ON,二相六线步进电机停止运行。(5)细分模式控制测试:SW8为ON即六十四细分模式;SW8为OFF且SW7为ON即三十二细分模式;SW8为OFF,SW7为OFF,SW6为ON即十六细分模式;SW8为OFF,SW7为OFF,SW6为OFF,SW5为ON即八细分模式;SW8为OFF,SW7为OFF,SW6为OFF,SW5为OFF,SW4为ON即四细分模式;SW8为OFF,SW7为OFF,SW6为OFF,SW5为OFF,SW4为OFF,SW3为ON即半步状态模式。SW8为OFF,SW7为OFF,SW6为OFF,SW5为OFF,SW4为OFF,SW3为OFF即整步状态模式。 第五章 结论 通过实现基于瑞萨M16C的步进电机控制系统。有效地控制SIHONGMOTOR16H38-0806A二相六线步进电机的运行停止、转向、转速的控制及六十四细分等七种细分模式。利用LCD显示器同步显示SIHONGMOTOR16H38-0806A二相六线步进电机的运行情况。参考文献1 谢宝昌,任永德. 电机的DSP控制技术及其应用.北京:北京航空航天大学出版社,2005.2 王鸿钰.步进电机控制技术入门.上海:同济大学出版社,1990.3 李念强.单片机原理及应用.北京:机械工业出版社,2007.4Liyu Cao,Howard M.Schwartz.Oscillation,Instability and Control of Stepper Motors. Nonlinear Dynamics.Canada.Springer Netherlands,1999,4:383-404.5 沈志勤.电子技术基础.北京:清华大学出版社,2006.6 刘国永,陈杰平.单片机控制步进电机系统设计.安徽技术师范学院学报,2002,04:61-63.7 孙玲,尹福昌.单片机控制步进电机细分驱动的实现研究.科技资讯,2007,35:89-90.8 王义军.单片机原理及应用习题与实验指导书.北京:中国电力出版社,2006.9 周根林.嵌入式系统原理与应用.南京:南京大学出版社,2006. 10 陆延丰.三菱M16C/62单片机原理和应用.北京:北航出版社,1997. 致谢感谢在本论文题目的研究开发过程中得到赵海东老师的细心指导,感谢在本论文撰写的过程中得到于庆丰老师细心指导,感谢给予我帮助的同学。附 录 A/D旋转按钮控制程序:/*""FUNCCOMMENT""* function name : caladvdc(void);* function : get A/D result* return : int*""FUNC COMMENTEND""*/int caladvdc(void) int value_ad,result; /Variable definitions value_ad = ad0;/get result from ad register result = 0; /Variable definitions result = 0;/Variable definitions/*change the value of ad register into a number between 0 and 500*/ if(value_ad & 0x0200)result += 2500; if(value_ad & 0x0100)result += 1250; if(value_ad & 0x0080)result += 625; if(value_ad & 0x0040)result += 313; if(value_ad & 0x0020)result += 156; if(value_ad & 0x0010)result += 78; if(value_ad & 0x0008)result += 39; if(value_ad & 0x0004)result += 20; if(value_ad & 0x0002)result += 10; if(value_ad & 0x0001)result += 5; result += 2; result += 5; result /= 10;return result;/*""FUNC COMMENT""* function name : void calpwmspeed()* function : get the motor 's speed and drive it*""FUNC COMMENTEND""*/void calpwmspeed() /*get pwm vlaue from ad result*/ volatile unsigned int value; if(RUN=mtr.state)/if motor's state is run change pwm'value value=(unsigned int)(caladvdc()/500.0)*65535); /get the a/d result if(value<1799) ta0=1799; mtr.speed=2400/FlgF; /calculate the motor's speed else ta0=value; mtr.speed=(unsigned int)(2400000*1.8/value/FlgF); /calculate the motor's speed motorturn(); /drive the motor for one step键盘按钮的初始化:/ key code for characterconst char KeyChar = 'A', 'B', 'C', 'D','E', 'F', 'G', 'H','I', 'J', 'K', 'L','*', 'M', 'N', '#'/ key code for numberconst char KeyNum = 1, 2, 3, '#',4, 5, 6, '#',7, 8, 9, '#','#', 0, '#', '#'输入控制程序:/*""FUNC COMMENT""* function name : unsigned int getvalue()* function : change the usee's input into a number* return : unsigned int*""FUNC COMMENTEND""*/unsigned int getvalue() int i=0,sum=0;/Variable definitions if(Input0='#') Input0='0' return 0; for(;Inputi!='#'i+) if(Inputi+1='#') sum+=Inputi;Inputi+=48; else sum+=Inputi;Inputi+=48;sum*=10; Inputi='0' return (unsigned int)(sum);中断程序:/*""FUNC COMMENT""* function name : void ta0intr(void)* function : interrupt server*""FUNC COMMENT END""*/#define PWMNUM 10void ta0intr(void)/*interrupt server function*/ static char PWMtime1=PWMNUM; /sw test waiting time static char PWMtime2=PWMNUM; /system run waiting time if(0=-PWMtime1) /Judge the count value PWMtime1=PWMNUM; FlgSW=TRUE;/Determine key tag value assignment if(0=-PWMtime2)/Judge the count value PWMtime2=PWMNUM;FlgSYS=TRUE;/Determine key tag value assignment 64细分控制程序:/*""FUNC COMMENT""* function name : void directionsw1(void)* function : detect sw1 to make sure motor run direction*""FUNC COMMENTEND""*/void directionsw1(void)static Flag_F_Old=0; /Variable of definition static char Flag_M_Old='C'/Variable of definition if(!p3_0)mtr.mode='N' /Judgment mode control keyelsemtr.mode='A' if(p3_1=0)mtr.direct=RIGHT;/Judging reverse control keyelsemtr.direct=LEFT; if(mtr.mode='A')/To determine whether the precision model if(p3_2)FlgInput=FALSE;/Judgment input control keyselseFlgInput=TRUE; if(mtr.mode='N')/To determine whether the normal mode FlgF=1; if(!p3_2)FlgF=2;/The 2 subdivision mode selectionif(!p3_3)FlgF=4;/The 4 subdivision mode selectionif(!p3_4)FlgF=8;/The 8 subdivision mode selectionif(!p3_5)FlgF=16;/The 16 subdivision mode selectionif(!p3_6)FlgF=32;/The 32 subdivision mode selectionif(!p3_7)FlgF=64;/The 64 subdivision mode selectionif(Flag_F_Old!=FlgF&&FlgF>=4)FlgChange=TRUE;if(Flag_F_Old!=FlgF&&(FlgF=1|FlgF=2)FlgChange1=TRUE; if(Flag_M_Old!=mtr.mode) mtr.state=STOP;mtr.speed=0;Flag_F_Old=FlgF;Flag_M_Old=mtr.mode;精准控制时步进角的初始化:Constunsignedintstep1=0xfffe,0xfffe,0x0000,0x0000; constunsignedintstep2=0x0000,0x0000,0x0000,0x0000,0x0000,0xfffe,0xfffe,0xfffe; constunsignedintstep= 0x7fff,0x8c89,0x98f4,0xa522,0xb0f5,0xbc4e,0xc714,0xd13c,0xda76,0xe2e7,0xea63,0xf0d9,0xf639,0xfa75,0xfd84,0xff5e,0xfffe,0xfffe,0xff5e,0xfd84,0xfa75,0xf639,0xf0d9,0xea63,0xe2e7,0xda76,0xd13c,0xc714,0xbc4e,0xb0f5,0xa522,0x98f4,0x8c89,0x7fff,0x7fff,0x7375,0x670a,0x5adc,0x4f09,0x43b0,0x38ea,0x2ed4,0x2586,0x1d17,0x159b,0x0f25,0x09c5,0x0589,0x027a,0x00a0,0x0000,0x0000,0x00a0,0x027a,0x0589,0x09c5,0x0f25,0x159b,0x1d17,0x2586,0x2ed4,0x38ea,0x43b0,0x4f09,0x5adc,0x670a,0x7375,0x7fff;精准控制时定时器的taxs的设置:if(FlgChange1)/detect if a new modle changed from 1 to 2 ta1s=1;/timer A1began to count the flag is set to true ta2s=1;/timer A2began to count the flag is set to true ta3s=1;/timer A3began to count the flag is set to true ta4s=1;/timer A4began to count the flag is set to true count1=0;/Stepper motor driver a phase table look-up index initialized to 0 count2=FlgF*2;/Stepper motor driver B phase look-up table index initialized to 2multiplied by the number of segments count3=FlgF*3;/Stepper motor driver c phase look-up table index initialized to 3multiplied by the number of segments count4=FlgF;/Stepper motor driver D phase look-up table is initialized to the number of segments of subscript FlgChange1=FALSE;/step motor changes to 1, the 2 subdivision flag is set to false if(FlgChange)/detect if a new modle changed from 4 to 64 /*initial the index*/ ta1s=1; ta2s=1; ta3s=1; ta4s=1; count1=0;/Stepper motor driver A phase table look-up index initialized to 0 count2=34;/Stepper motor driver A phase table look-up index initialized to 34 count3=51;/Stepper motor driver A phase table look-up index initialized to 51 count4=17;/Stepper motor driver A phase table look-up index initialized to 17 FlgChange=FALSE;/step motor changes to 1, the 2 subdivision flag is set
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!