步进电机运动控制器设计
- 格式:wps
- 大小:168.04 KB
- 文档页数:14
图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]。
步进电机运动控制系统设计设计时考虑到CPU在执行指令时可能受到干扰的冲击,导致程序”跑飞”或者进入”死循环”,因此,设计了看门狗电路,使用的是MAXIM公司生产的微处理系统监控集成芯片MAXI813。
本文还详细地给出了相关的硬件框图和软件流程图,并编制了该汇编程序。
步进电机最早是在1920年由英国人所开发。
1950年后期晶体管的发明也逐渐应用在步进电机上,这对于数字化的控制变得更为容易。
以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的系统中。
在生产过程中要求自动化、省、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微和技术的发展,步进电机的需求量与日俱增,在各个国民领域都有应用。
步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。
步进电机可以直接用数字信号驱动,使用非常方便。
一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。
步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。
在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。
因此非常适合于单片机控制。
步进电机还具有快速启动、精确步进和定位等特点,因而在数控机床,绘图仪,打印机以及光学仪器中得到广泛的应用。
步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。
传统电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关键的作用。
步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。
基于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单片机、外部电源、步进电机驱动模块、以及其他辅助电路。
1.51单片机选择由于步进电机控制需要执行复杂的算法和时序控制,所以需要一个性能较高的单片机。
本设计选择51单片机作为主控芯片,因为51单片机具有丰富的外设接口、强大的计算能力和丰富的资源。
2.外部电源步进电机需要较高的电流供给,因此外部电源选择稳定的直流电源,能够提供足够的电流供电。
电源电压和电流的大小需要根据具体的步进电机来确定。
3.步进电机驱动模块步进电机驱动模块是连接步进电机和51单片机的关键部分,它负责将51单片机输出的脉冲信号转化为对步进电机的驱动信号,控制步进电机准确转动。
常用的步进电机驱动芯片有L297、ULN2003等。
4.其他辅助电路为了保证步进电机控制系统的稳定运行,还需要一些辅助电路,如限流电路、电源滤波电路、保护电路等。
这些电路的设计需要根据具体的应用来确定。
二、软件设计1.系统初始化系统初始化主要包括对51单片机进行外部中断、定时器、串口和IO 口等初始化设置。
根据实际需求还可以进行其他模块的初始化设置。
2.步进电机驱动程序步进电机的驱动程序主要通过脉冲信号来控制电机的转动。
脉冲信号的频率和脉冲宽度决定了电机的转速和运行方向。
脉冲信号可以通过定时器产生,也可以通过外部中断产生。
3.运动控制算法步进电机的运动控制可以采用开环控制或闭环控制。
开环控制简单,但无法保证运动的准确性和稳定性;闭环控制通过对电机转动的反馈信号进行处理来调整脉冲信号的生成,从而实现精确的运动控制。
4.其他功能设计根据具体的应用需求,可以加入其他功能设计,如速度控制、位置控制、加速度控制等。
基于stm32103的步进电机控制系统设计步进电机是一类常用的电机,广泛应用于控制系统中。
本文旨在介绍步进电机及其在控制系统中的应用,并概述本文的研究目的和重要性。
步进电机是一种将电脉冲信号转换为旋转运动的电机。
构成和工作方式步进电机由定子、转子和驱动电路组成。
定子是电磁铁,可以根据输入的电流控制电磁铁产生磁场。
转子是由磁性材料制成的旋转部分,定子的磁场会使得转子受到磁力的作用而旋转。
步进电机的工作方式是通过不断输入脉冲信号来控制电机的运动。
每一次输入一个脉冲信号,步进电机就会转动一定的步进角度。
步进角度取决于步进电机的类型和驱动电路的设置,常见的步进角度有1.8度和0.9度。
输入脉冲信号旋转的步进角度输入脉冲信号的频率和方向决定了步进电机的转动速度和方向。
每一个脉冲信号的到来,步进电机会按照预定的步进角度旋转。
例如,若步进电机的步进角度为1.8度,那么每接收一个脉冲信号,步进电机就会旋转1.8度的角度。
综上所述,步进电机通过输入脉冲信号实现了精确而可控的旋转运动。
本文将阐述基于STM单片机的步进电机控制系统设计。
该设计包括硬件电路设计和软件程序设计。
本文将介绍如何通过STM与步进电机进行通信和控制,以实现预定的步进运动。
步进电机控制系统的硬件电路设计主要包括以下部分:步进电机驱动电路:通过STM的GPIO口控制步进电机驱动电路,实现电机的正转、反转和停止等操作。
电源电路:为步进电机提供稳定的电源供电,保证系统正常工作。
外设接口:设计相应的接口电路,实现STM与外部设备的连接。
步进电机控制系统的软件程序设计主要涉及以下方面:初始化设置:在程序开始运行时,对STM进行初始化设置,包括引脚配置、时钟设置等。
步进电机驱动程序:编写相应的程序代码,通过GPIO口控制步进电机的驱动电路,实现电机的正转、反转和停止等操作。
运动控制程序:编写相应的程序代码,通过控制步进电机的驱动电路,实现预定的步进运动,包括移动一定的步数、以特定的速度旋转等。
基于单片机AT89C52的步进电机的控制器设计步进电机是一种非常常见的电机类型,由于其具有精准定位、适应高速运动以及控制简单等特点,被广泛应用于各种自动化设备中。
本文将从步进电机的工作原理、控制方式以及基于单片机AT89C52的步进电机控制器设计等方面展开阐述。
首先,我们来了解步进电机的工作原理。
步进电机是一种特殊的同步电动机,它具有内置的磁化轭,在没有外部励磁的情况下也能自动旋转。
步进电机的旋转是由控制电流方向和大小来实现的。
通常情况下,步进电机每转动一定角度,称为“步距角”,它可以是1.8度、0.9度、0.45度等,不同的步距角决定了电机的分辨率。
步进电机的控制方式主要有全步进和半步进两种。
全步进是指每次控制信号脉冲后,电机转动一个步距角。
而半步进则是在全步进基础上,在脉冲信号中引入一半步距角的微调。
控制信号脉冲可以是脉冲序列或者方波信号。
基于单片机AT89C52的步进电机控制器设计主要包括控制信号发生器的设计和步进电机驱动电路的设计。
控制信号发生器负责产生相应的控制信号脉冲,而步进电机驱动电路将这些脉冲信号转化为电流信号驱动步进电机。
控制信号发生器的设计可以采用定时器/计数器模块来实现。
AT89C52芯片具有可编程的定时器/计数器,可以用来产生控制信号的脉冲。
通过设置定时器的工作方式和计数值,可以实现不同频率、占空比的控制脉冲。
步进电机驱动电路的设计主要包括功率级驱动电路和电流控制电路。
功率级驱动电路负责将控制信号转化为足够大的电流驱动步进电机,通常采用功率放大器来实现。
电流控制电路则用来控制驱动电流的大小,使步进电机能够顺畅工作。
电流控制电路通常采用可调电阻、电流检测电阻和比较器等元件组成。
在步进电机控制器设计中,还需要考虑到步进电机的特性和应用需求。
例如,步进电机的电源电压、额定电流、阻抗、扭矩等参数需要与驱动电路匹配。
此外,还需要考虑到步进电机的机械结构、位置传感器、防重叠措施等因素。
基于单片机的步进电机控制系统设计引言:步进电机是一种常用的电机类型,具有精准的位置控制、高效的能量转换等特点。
在许多自动化设备中广泛应用,如数控机床、3D打印机、机器人等。
本文将以基于单片机的步进电机控制系统设计为主题,介绍系统的硬件设计、软件设计以及实验验证。
一、硬件设计1.步进电机选型:根据实际应用需求,选择适当的步进电机。
包括步距角、转速范围、扭矩要求等等。
2.电源设计:步进电机需要驱动电压和电流,根据步进电机的额定电压和电流选用适当的电源。
3.驱动电路设计:步进电机通常需要驱动电路来控制电流和脉冲序列。
常见的驱动电路有全桥驱动器、半桥驱动器等。
4.信号发生器设计:步进电机通过脉冲信号来控制转动角度和速度,因此需要信号发生器来产生合适的脉冲序列。
常见的信号发生器有定时器、计数器等。
5.单片机接口设计:单片机作为步进电机控制系统的核心,需要与其他硬件进行通信。
因此需要设计合适的接口电路,将单片机的输出信号转换为驱动电路和信号发生器所需的电压和电流。
二、软件设计1.单片机程序框架设计:根据具体的单片机型号和开发环境,设计合适的程序框架。
包括初始化设置、主循环、中断处理等。
2.脉冲生成程序设计:根据步进电机的控制方式(如全步进、半步进、微步进等),设计脉冲生成程序。
通过适当的延时和输出信号控制,产生合适的脉冲序列。
3.运动控制程序设计:设计运动控制程序,实现步进电机的前进、后退、加速、减速等功能。
根据具体需求,可以设计不同的运动控制算法,如速度环控制、位置环控制等。
4.保护机制设计:为了保护步进电机和控制系统,设计合适的保护机制。
如过流保护、过压保护、过载保护等。
三、实验验证1.硬件连接:将步进电机、驱动电路和单片机按照设计进行连接。
2.软件调试:通过单片机编程,调试程序代码。
确保脉冲生成、运动控制等功能正常工作。
3.功能测试:对步进电机控制系统进行功能测试,包括正转、反转、加速、减速等功能。
通过观察步进电机的运动状态和测量相关参数来验证系统设计的正确性和性能。
一、项目概述:用步进电机作为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步;按住按键不放,持续运转到按键释放。