步进电机运动控制器设计

合集下载

基于STM32的步进电机运动控制设计

基于STM32的步进电机运动控制设计

图1 系统设计图3第 38 卷 数字技术与应用 4#define KEY0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8) //KEY0为PA8上按键的值键盘扫描函数u8 KEY_Scan(void)的程序设计思路如图4所示:3.3 中断技术STM32的每一个GPIO引脚都可以作为外部中断的中断输入口,都能配置成一个外部中断触发源。

STM32把同一个序号的引脚组成一组,每组对应一个外部中断/事件源(即中断线)EXTIx(x:0~15),将众多中断触发源分成16组。

本系统软件设计中,加速、减速、停止按键设置为中断源,即PA10、PA11、PA12引脚对应3个外部中断源,分别对应的中断线是EXTIx10~EXTIx12。

外部中断配置函数void exit_config(void)中主要代码如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用时钟GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);//设置PA10~PA12为中断源EXTI_Init(&EXTI_InitStructure);//外部中断初始化NVIC_Init(&NVIC_InitStructure);//中断优先级初始化在中断服务函数中,中断线EXTIx15~EXTIx10共用一个外部中断通道E XT I 15_10_I R Q n,同时也共用一个中断服务函数EXTI15_10_IRQHandler()。

在中断服务函数中,判定是什么中断源。

如果是停止中断,就不再加载脉冲;如果是加速中断,则减少加载的脉冲延时;如果是减速中断,则增加脉冲延时。

3.4 延时设计STM32中有很多定时器,本文中的延时设计采用其中的滴答定时器(SysTick)。

它是一个24位的系统节拍定时器,具有自动重装载和溢出中断功能,所有基于Cortex-M3的芯片都可以由此获得一定的时间间隔[2]。

步进电机运动控制系统硬件部分的设计

步进电机运动控制系统硬件部分的设计

步进 电机 是将 电脉 冲信号 转变为角位移 或线位移 的开 环 控制元件 。 在非超载 的情 况下 , 电机 的转速 、 停止 的位置 , 只取
( ) L /R G 3 ) 5 A EP O ( 0 。地址锁存信号输 出端 /P O E R M编程 脉 冲输入 端 ;
Байду номын сангаас
决于脉 冲信号 的频率和 脉冲数 , 不受负载变 化的影 响 , 而 即给
输入 和输 出 , 反向放大器 可 以配置 为片 内振荡 器 。 该 石晶振荡 和陶瓷振 荡均可采用 。 如采 用外部时钟 源驱动器件 ,T 2 X AL 应 不接受 。有余输入 至内部时钟信 号 ,要 通过一个 二分频触发
器, 因此对外部 时钟信号 的脉 宽无任何 要求 , 但必 须保证脉 冲
了一 种 灵 活 性 高 且 价 廉 的方 案 11 单 片 机 的 引 脚 功 能 .
除 , 通过 正确 的控制信 号组 合 , 可 并保 持 A E管脚 处 于低 电 L 平 1 来 完成 。在芯 片擦 操作 中 , 码阵 列全被 写“ ” 0ms 代 1 且在
任何非空 存储字节被重复编程 以前 , 该操作 必须被执行 。
此外 ,T9 5 设有稳态 逻辑 , 以在低 到零频 率的条件 A 8C 1 可
下静态逻 辑 , 持两种软件 可选的掉 电模式 。在闲置模 式下 , 支
C U停止工作 。 R M定时器 、 P 但 A 计数器 、 口和中断系统仍在 串 工作 。 在掉 电模 式下 , 保存 R AM 的内容并 且冻结振荡器 , 禁止
所用其他 芯片功能 , 到下一 个硬件复位 为止。 直
单 片机是 一种时序 电路 , 必须有 脉 冲信号 才能工作 , 其 在

步进电机运动控制系统设计

步进电机运动控制系统设计

步进电机运动控制系统设计设计时考虑到CPU在执行指令时可能受到干扰的冲击,导致程序”跑飞”或者进入”死循环”,因此,设计了看门狗电路,使用的是MAXIM公司生产的微处理系统监控集成芯片MAXI813。

本文还详细地给出了相关的硬件框图和软件流程图,并编制了该汇编程序。

步进电机最早是在1920年由英国人所开发。

1950年后期晶体管的发明也逐渐应用在步进电机上,这对于数字化的控制变得更为容易。

以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的系统中。

在生产过程中要求自动化、省、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。

步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。

随着微和技术的发展,步进电机的需求量与日俱增,在各个国民领域都有应用。

步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。

步进电机可以直接用数字信号驱动,使用非常方便。

一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。

步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。

在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。

因此非常适合于单片机控制。

步进电机还具有快速启动、精确步进和定位等特点,因而在数控机床,绘图仪,打印机以及光学仪器中得到广泛的应用。

步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。

传统电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关键的作用。

步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。

步进电机控制器的设计

步进电机控制器的设计
'步 进 电机 的 工作 原 理 步进 电机是 数字控 制 电机 , 的旋 转是 以固定 的角度 ( 步距角) 它 称为 ~步 一 步运行 的 , 特 点是没有 积 累误差 , 以广泛应 用 于各种 开环 控制 。它将 脉冲 其 所 信号转 变成角 位移, 即给一个 脉冲信 号, 步进 电机就转 动一 个角度 , 因此 非常 适 合于 C L / P A的控 制 。步进 电机 可分 为反 应 式步 进 电机 ( 称 “ R ’、 PD FG 简 V 永磁 式 步进 电机 ( 称 “ M” 简 P )和混 合 式 步进 电机 ( 称 “ 简 HB” )。
扪 【

鲣 …l i广 几 : 1 . ; : : ni 3 O H : 1: r 门 n n 门: I 鲮 l2 H l n :n n n :门 n . : :n … 0 ; : 广 n l
l M ; 门; 门. 几 几 八 :几 几 : l 1 门 ; : 几 几
l: j
_ 埘 : : : : : .1几 O 。 . . . : ; ] I 几 几 几 几 r : 1
在 复位 信号 r s t e e 无效 , r s t 1 如 果转 向控 制信 号 dr 1 则 即 e e 为 时, i为 , 输 出脉冲 按 “ — 2 4— 8 1 1 — — ”变 化 , 步进 电机 进 行 正转 : 如果 转 向控制 信 号 d r为 0 则 输 出脉 冲按 “ i , 8— 4— 2 1 8”变化 , — — 从而 实现 步进 电
r s t 输入 型, ee : 复位信 号, 电平 有 效 。 低 d r 输入 型 , 向控 制信 号 。 i: 转 p a e 输入 型, hs : 脉冲 输 出 。 设计采 用 四相 步 进 电机, 相激 磁 方式 。利 用 V D 一 H L语 言 可得源 程 序 分 析步进 电机控 制模 块 的功能 , 以用 图 3所示 的状 态转换 图表示 : 可

基于STM32和FPGA的多通道步进电机控制系统设计共3篇

基于STM32和FPGA的多通道步进电机控制系统设计共3篇

基于STM32和FPGA的多通道步进电机控制系统设计共3篇基于STM32和FPGA的多通道步进电机控制系统设计1本文介绍了基于STM32和FPGA的多通道步进电机控制系统设计。

一、设计目标本次设计的目标是:设计一个可控制多路步进电机的系统,具备高效、可靠的控制方式,实现步进电机多通道运动控制的目标。

二、硬件选型1、主控芯片STM32本设计采用STM32作为主控芯片,STM32系列微控制器具有高性能、低功耗、高集成度、易于开发等优点,非常适合此类控制系统。

2、FPGA本设计采用FPGA作为数据处理和控制模块,FPGA具有可编程性和高速、低功耗的特点,在电机控制系统中有广泛的应用。

3、步进电机步进电机具有速度可调、定位精度高等特点,很适合一些高精度的位置控制系统。

4、电源模块电源模块负责为整个系统提供稳定的电源。

5、驱动模块驱动模块负责驱动步进电机,其控制原理为将电机的输入电流拆分为若干个短脉冲信号,每一个短脉冲信号控制一个步距运动。

三、系统设计1、STM32控制器设计STM32控制器是本系统的核心,其功能是读取FPGA发送的控制信号和控制步进电机的运动。

STM32控制器处理的信号主要包括方向信号、脉冲信号、微步子段等控制参数,将这些参数按照驱动模块的需求分发到各个驱动模块中,从而控制步进电机的运动。

2、FPGA模块设计FPGA模块是本系统的数据处理模块,其主要功能是接收STM32发送的指令,进行解码并且转化为步进电机的控制信号,以驱动步进电机的运动,同时FPGA模块还负责将电机的运动数据反馈回STM32,以保证整个系统的稳定运行。

3、驱动模块设计驱动模块是本系统的控制模块,其主要功能是将电机的输入电流拆分成若干个短脉冲信号,每一个短脉冲信号控制一个步距运动,从而实现对步进电机的控制。

四、系统流程1、系统初始化整个系统初始化主要包括STM32控制器的初始化、FPGA模块的初始化、各个驱动模块的初始化、电源模块的初始化,当系统初始化完成后,所有硬件设备均已经准备完成,可以开始正常的运行。

基于51单片机的步进电机控制系统设计

基于51单片机的步进电机控制系统设计

基于51单片机的步进电机控制系统设计步进电机是一种特殊的直流电动机,具有定角度、定位置、高精度等特点,在许多领域得到广泛应用,如机械装置、仪器设备、医疗设备等。

本文将基于51单片机设计一个步进电机控制系统,主要包括硬件设计和软件设计两部分。

一、硬件设计步进电机控制系统的硬件设计主要包括51单片机、外部电源、步进电机驱动模块、以及其他辅助电路。

1.51单片机选择由于步进电机控制需要执行复杂的算法和时序控制,所以需要一个性能较高的单片机。

本设计选择51单片机作为主控芯片,因为51单片机具有丰富的外设接口、强大的计算能力和丰富的资源。

2.外部电源步进电机需要较高的电流供给,因此外部电源选择稳定的直流电源,能够提供足够的电流供电。

电源电压和电流的大小需要根据具体的步进电机来确定。

3.步进电机驱动模块步进电机驱动模块是连接步进电机和51单片机的关键部分,它负责将51单片机输出的脉冲信号转化为对步进电机的驱动信号,控制步进电机准确转动。

常用的步进电机驱动芯片有L297、ULN2003等。

4.其他辅助电路为了保证步进电机控制系统的稳定运行,还需要一些辅助电路,如限流电路、电源滤波电路、保护电路等。

这些电路的设计需要根据具体的应用来确定。

二、软件设计1.系统初始化系统初始化主要包括对51单片机进行外部中断、定时器、串口和IO 口等初始化设置。

根据实际需求还可以进行其他模块的初始化设置。

2.步进电机驱动程序步进电机的驱动程序主要通过脉冲信号来控制电机的转动。

脉冲信号的频率和脉冲宽度决定了电机的转速和运行方向。

脉冲信号可以通过定时器产生,也可以通过外部中断产生。

3.运动控制算法步进电机的运动控制可以采用开环控制或闭环控制。

开环控制简单,但无法保证运动的准确性和稳定性;闭环控制通过对电机转动的反馈信号进行处理来调整脉冲信号的生成,从而实现精确的运动控制。

4.其他功能设计根据具体的应用需求,可以加入其他功能设计,如速度控制、位置控制、加速度控制等。

基于51单片机的步进电机控制系统设计与实现

基于51单片机的步进电机控制系统设计与实现

步进电机工作原理
步进电机是一种基于磁场的控制系统,工作原理是当电流通过定子绕组时,会 产生一个磁场,该磁场会吸引转子铁芯到相应的位置,从而产生一定的角位移。 步进电机的角位移量与输入的脉冲数量成正比,因此,通过控制输入的脉冲数 量和频率,可以实现精确的角位移和速度控制。同时,步进电机具有较高的分 辨率和灵敏度,可以满足各种高精度应用场景的需求。
二、系统设计
1、硬件设计
本系统主要包括51单片机、步进电机、驱动器、按键和LED显示等部分。其中, 51单片机负责接收按键输入并控制步进电机的运动;步进电机用于驱动负载运 动;驱动器负责将51单片机的输出信号放大,以驱动步进电机。LED显示用于 显示当前步进电机的状态。
2、软件设计
软件部分主要包括按键处理、步进电机控制和LED显示等模块。按键处理模块 负责接收用户输入,并根据输入控制步进电机的运动;步进电机控制模块根据 按键输入和当前步进电机的状态,计算出步进电机下一步的运动状态;LED显 示模块则负责实时更新LED显示。
三、系统实现
1、按键输入的实现
为了实现按键输入,我们需要在主程序中定义按键处理函数。当按键被按下时, 函数将读取按键的值,并将其存储在全局变量中。这样,主程序可以根据按键 的值来控制步进电机的转动。
2、显示输出的实现
为了实现显示输出,我们需要使用单片机的输出口来控制显示模块的输入。在 中断服务程序中,我们根据设定的值来更新显示模块的输出,以反映步进电机 的实时转动状态。
基于单片机的步进电机控制系统需要硬件部分主要包括单片机、步进电机、驱 动器、按键和显示模块等。其中,单片机作为系统的核心,负责处理按键输入、 控制步进电机转动以及显示输出等功能。步进电机选用四相八拍步进电机,驱 动器选择适合该电机的驱动器,按键用于输入设定值,显示模块用于显示当前 步进电机的转动状态。

基于stm32103的步进电机控制系统设计

基于stm32103的步进电机控制系统设计

基于stm32103的步进电机控制系统设计步进电机是一类常用的电机,广泛应用于控制系统中。

本文旨在介绍步进电机及其在控制系统中的应用,并概述本文的研究目的和重要性。

步进电机是一种将电脉冲信号转换为旋转运动的电机。

构成和工作方式步进电机由定子、转子和驱动电路组成。

定子是电磁铁,可以根据输入的电流控制电磁铁产生磁场。

转子是由磁性材料制成的旋转部分,定子的磁场会使得转子受到磁力的作用而旋转。

步进电机的工作方式是通过不断输入脉冲信号来控制电机的运动。

每一次输入一个脉冲信号,步进电机就会转动一定的步进角度。

步进角度取决于步进电机的类型和驱动电路的设置,常见的步进角度有1.8度和0.9度。

输入脉冲信号旋转的步进角度输入脉冲信号的频率和方向决定了步进电机的转动速度和方向。

每一个脉冲信号的到来,步进电机会按照预定的步进角度旋转。

例如,若步进电机的步进角度为1.8度,那么每接收一个脉冲信号,步进电机就会旋转1.8度的角度。

综上所述,步进电机通过输入脉冲信号实现了精确而可控的旋转运动。

本文将阐述基于STM单片机的步进电机控制系统设计。

该设计包括硬件电路设计和软件程序设计。

本文将介绍如何通过STM与步进电机进行通信和控制,以实现预定的步进运动。

步进电机控制系统的硬件电路设计主要包括以下部分:步进电机驱动电路:通过STM的GPIO口控制步进电机驱动电路,实现电机的正转、反转和停止等操作。

电源电路:为步进电机提供稳定的电源供电,保证系统正常工作。

外设接口:设计相应的接口电路,实现STM与外部设备的连接。

步进电机控制系统的软件程序设计主要涉及以下方面:初始化设置:在程序开始运行时,对STM进行初始化设置,包括引脚配置、时钟设置等。

步进电机驱动程序:编写相应的程序代码,通过GPIO口控制步进电机的驱动电路,实现电机的正转、反转和停止等操作。

运动控制程序:编写相应的程序代码,通过控制步进电机的驱动电路,实现预定的步进运动,包括移动一定的步数、以特定的速度旋转等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、项目概述:用步进电机作为X-Y移动平台的执行机构,实现开环位置控制。

采用四相步进电机,一相激励时步距角为1.8°,由步进电机驱动器接受控制器的控制信号,采用单四拍方式,每拍为一步,可正反转。

步进电机的转动带动丝杆,将旋转运动转换为直线运动,步进电机的每一走步传递到X或Y方向的移动距离为0.02mm.系统中步进电机工作频率为500Hz--4KHz。

运动要求是:(1)当按键K1按下时,X方向步进电机正向运转,X正向移动1mm;当按键K2按下时,X方向步进电机反向运转,X反向移动1mm;当按键K3按下时,Y方向步进电机正向运转,Y正向移动1mm;当按键K4按下时,Y方向步进电机反向运转,Y反向移动1mm;(2)按键按住不放,连续运动直到按键释放,停止运转。

(3)控制器实时显示步进电机转过的步数和X或Y向移动的距离。

(4)系统供电电源为36 VDC。

二、系统设计:设计思想:1、用两台步进电机分别控制x、y方向的运动;2、采用动态显示方式,实时显示步数和距离;3、采用4个并行口输出控制信号以及采集开关输入信号。

总体方案:采用AT89C51作为控制器:P0口读入开关输入信号;P1口接步进电机驱动器ULN2003A;P2、P3口控制动态显示电路。

三、硬件设计:1、AT89C51晶振电路和手动复位电路:晶振电路:采用12MHz的晶振,其中电容C1,C2可在5—60pF之间选择,这两个电容的大小对振荡频率有微小的影响,可起频率微调的作用。

复位电路:当按键弹起时,相当于一个上电复位电路;当按键压下时,相当于RST端通过电阻与+5V的电源相连,提供足够宽度的阈值电压完成复位。

2、开关量读入:由P0口的低4位读入开关量信号。

3、步进电机控制电路:其中ULN2003A为步进电机驱动器,两台步进电机分别由P1口的低4位和高4位控制,并分别带动x,y方向的运动。

ULN2003A:输入高时,输出为低,COM端与步进电机中间两根线一起接高电平。

四相步进电机:采用单四拍方式通电,除去中间两根线,分别给每一相定子通电,磁场力带动转子转动。

从左上开始顺时针通电为正转;逆时针为反转。

4、动态显示电路:左边LED显示距离,右边显示步数。

P2口低4位输出压缩型BCD码:当步数为i时,用以下程序分别求出千位、百位、十位和个位。

并用TAB表转化为压缩型BCD码。

unsigned char TAB[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};i1=i/1000; 千位i2=(i%1000)/100; 百位i3=((i%1000)%100)/10; 十位i4=((i%1000)%100)%10; 个位i5=(i*2)/1000; 距离的十位(mm)i6=((i*2)%1000)/100; 距离的个位i7=(((i*2)%1000)%100)/10; 距离的小数点后一位i8=(((i*2)%1000)%100)%10; 距离的小数点后两位分别选通P2.4—P2.7,输出i1,i2,i3,i4;分别选通P3.0—P3.3,输出i5,i6,i7,i8;当显示左边LED第二根管时,使P3.4为低,显示小数点。

4511:输入为压缩型BCD码,输出为对应LED显示码。

5、总电路图:四、软件设计:#include<reg51.h>1、变量定义:sbit k1=P0^0; //开关输入sbit k2=P0^1;sbit k3=P0^2;sbit k4=P0^3;unsigned char xzz[]={0xfe,0xfd,0xfb,0xf7}; //x方向正转控制字unsigned char xfz[]={0xfb,0xfd,0xfe,0xf7}; //x方向反转控制字unsigned char yzz[]={0xef,0xdf,0xbf,0x7f}; //y方向正转控制字unsigned char yfz[]={0xbf,0xdf,0xef,0x7f}; //y方向反转控制字unsigned char TAB[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //将一位数转化为压缩型BCD码unsigned int bushu; //步数2、延时子程序;void DelayMs(unsigned int n) //毫秒级延时子程序{unsigned int i=0,j=0;for(i=0;i<n;i++)for(j=0;j<123;j++);}3、实时显示子程序:采集步数——运算出步数的千、百、十、个位以及距离的各个位数——置循环初值j=0——选通P2.4为低电平,输出i1的压缩型BCD码,延时5ms——选通P2.5为低电平,输出i2的压缩型BCD码,延时5ms——选通P2.6为低电平,输出i3的压缩型BCD码,延时5ms ——选通P2.7为低电平,输出千位的压缩型BCD码,延时5ms——选通P3.0为低电平,输出i5的压缩型BCD码,延时5ms——选通P3.1为低电平,输出i6的压缩型BCD码,延时5ms——选通P3.2为低电平,输出i7的压缩型BCD码,延时5ms——选通P3.8为低电平,输出i8的压缩型BCD码,延时5ms——判断j是否小于等于5,不是则完成循环。

void Displayss(unsigned int i) //实时显示子程序{unsigned int i1,i2,i3,i4,j,i5,i6,i7,i8;i1=i/1000;i2=(i%1000)/100;i3=((i%1000)%100)/10;i4=((i%1000)%100)%10;i5=(i*2)/1000;i6=((i*2)%1000)/100;i7=(((i*2)%1000)%100)/10;i8=(((i*2)%1000)%100)%10;for(j=0;j<=5;j++){P3=0xff;P2=0xe0;P2=P2|TAB[i1];DelayMs(5);P3=0xff;P2=0xd0;P2=P2|TAB[i2];DelayMs(5);P3=0xff;P2=0xb0;P2=P2|TAB[i3];DelayMs(5);P3=0xff;P2=0x70;P2=P2|TAB[i4];DelayMs(5);P3=0xee;P2=0xf0;P2=P2|TAB[i5];DelayMs(5);P3=0xfd;P2=0xf0;P2=P2|TAB[i6];DelayMs(5);P3=0xeb;P2=0xf0;P2=P2|TAB[i7];DelayMs(5);P3=0xe7;P2=0xf0;P2=P2|TAB[i8];DelayMs(5);}}4、稳定显示子程序:将实时显示的循环改为死循环,当再次按下开关则跳出。

void Display(unsigned int i) //稳定显示子程序{unsigned int i1,i2,i3,i4,i5,i6,i7,i8;i1=i/1000;i2=(i%1000)/100;i3=((i%1000)%100)/10;i4=((i%1000)%100)%10;i5=(i*2)/1000;i6=((i*2)%1000)/100;i7=(((i*2)%1000)%100)/10; i8=(((i*2)%1000)%100)%10; while(1){P3=0xff;P2=0xe0;P2=P2|TAB[i1];DelayMs(5);P3=0xff;P2=0xd0;P2=P2|TAB[i2];DelayMs(5);P3=0xff;P2=0xb0;P2=P2|TAB[i3];DelayMs(5);P3=0xff;P2=0x70;P2=P2|TAB[i4];DelayMs(5);P3=0xee;P2=0xf0;P2=P2|TAB[i5];DelayMs(5);P3=0xfd;P2=0xf0;P2=P2|TAB[i6];DelayMs(5);P3=0xeb;P2=0xf0;P2=P2|TAB[i7];DelayMs(5);P3=0xe7;P2=0xf0;P2=P2|TAB[i8];DelayMs(5);if(k1==0)break;if(k2==0)break;if(k3==0)break;if(k4==0)break;}}5、x、y方向正反转子程序:置初始步数为0,当有按键按下则触发相应运转子程序。

步数小于50则继续运行到50步(1mm);若按住按键不放,电机继续运转直到按键释放。

以x方向正转为例:置初始步数为0——判断k1是否为0(按下为0)或步数是否小于50 否跳出循环,结束子程序是将正转控制子送入P1口——步数+1——实时显示——延时10msvoid xzhengzhuan() //x方向正转子程序{bushu=0;while(k1==0||bushu<50){P1=xzz[bushu%4];bushu++;Displayss(bushu);DelayMs(10);}}void xfanzhuan() //x方向反转子程序{bushu=0;while(k2==0||bushu<50){P1=xfz[bushu%4];bushu++;Displayss(bushu);DelayMs(10);}}void yzhengzhuan() //y方向正转子程序{bushu=0;while(k3==0||bushu<50){P1=yzz[bushu%4];bushu++;Displayss(bushu);DelayMs(10);}}void yfanzhuan() //y方向反转子程序{bushu=0;while(k4==0||bushu<50){P1=yfz[bushu%4];bushu++;Displayss(bushu);DelayMs(10);}}6、主程序:置初值bushu=0,P2=0xf0,P3=0xff否判断k1是否为0 是执行xzhengzhuan子程序否判断k2是否为0 是执行xfanzhuan子程序否判断k3是否为0 是执行yzhengzhuan子程序否判断k4是否为0 是执行yfanzhuan子程序判断步数是否不为0 是执行Display子程序(稳定显示)void main() //主函数{bushu=0;P3=0xff;P2=0xf0;if(k1==0)xzhengzhuan();if(k2==0)xfanzhuan();if(k3==0)yzhengzhuan();if(k4==0)yfanzhuan();if(bushu!=0)Display(bushu);}五、系统仿真及调试:一旦有开关按下则连续走50步;按住按键不放,持续运转到按键释放。

相关文档
最新文档