步进电机仿真和源代码

合集下载

步进电机控制-C程序及仿真

步进电机控制-C程序及仿真

步进电机控制-C程序及仿真步进电机步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。

步进电机可以直接接受数字信号,不需要进行数字与模拟量的转换,具有高精度快速启停能力。

在非超载的情况下,步进电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。

使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

一、步进电机的结构和工作原理步进电机是一种专门用于位置和速度精确控制的特种电机。

步进电机的最大特点是其“数字性”,对于微电脑发过来的每一个脉冲信号,步进电机在其驱动器的推动下运转一个固定角度(简称一步),如下图所示。

如接收到一串脉冲步进电机将连续运转一段相应距离。

同时可通过控制脉冲频率,直接对电机转速进行控制。

步进电机在构造上有三种主要类型:反应式(Variable Reluctance,VR)、永磁式(Permanent Magnet,PM)和混合式(Hybrid Stepping,HS)。

反应式定子上有绕组、转子由软磁材料组成。

结构简单、成本低、步距角小,可达1.2°、但动态性能差、效率低、发热大,可靠性难保证。

永磁式永磁式步进电机的转子用永磁材料制成,转子的极数与定子的极数相同。

其特点是动态性能好、输出力矩大,但这种电机精度差,步矩角大(一般为7.5°或15°)。

混合式混合式步进电机综合了反应式和永磁式的优点,其定子上有多相绕组、转子上采用永磁材料,转子和定子上均有多个小齿以提高步矩精度。

其特点是输出力矩大、动态性能好,步矩角小,但结构复杂、成本相对较高。

混合型,因具有高精度、高转矩、微小步进角和数个优异的特征,所以刚开始在OA 关系,其它的分类上也大幅的被使用,特别是在生产量上大半是使用在盘片记忆关系的磁头转送上。

按定子上绕组来分,共有二相、三相和五相等系列。

89C2051驱动步进电机的电路和源码

89C2051驱动步进电机的电路和源码

89C2051驱动步进电机的电路和源码时间:2006-10-26 来源: 作者: 点击:1434 字体大小:【大中小】程序stepper.cstepper.hex/** STEPPER.C* sweeping stepper's rotor cw and cww 400 steps* Copyright (c) 1999 by W.Sirichote*/#include c:\mc51\8051io.h /* include i/o header file */#include c:\mc51\8051reg.hregister unsigned char j,flag1,temp;register unsigned int cw_n,ccw_n;unsigned char step[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}#define n 400/* flag1 mask byte0x01 run cw()0x02 run ccw()*/main(){flag1=0;serinit(9600);disable(); /* no need timer interrupt */cw_n = n; /* initial step number for cw */flag1 |=0x01; /* initial enable cw() */while(1){{tick_wait(); /* wait for 10ms elapsed */energize(); /* round-robin execution the following tasks every 10ms */ cw();ccw();}}}cw(){if((flag1&0x01)!=0){cw_n--; /* decrement cw step number */if (cw_n !=0)j++; /* if not zero increment index j */else{flag1&=~0x01; /* disable cw() execution */ccw_n = n; /* reload step number to ccw counter */flag1 |=0x02; /* enable cww() execution */}}}ccw(){if((flag1&0x02)!=0){ccw_n--; /* decremnent ccw step number */if (ccw_n !=0)j--; /* if not zero decrement index j */else{flag1&=~0x02; /* disable ccw() execution */cw_n = n; /* reload step number to cw counter */flag1 |=0x01; /* enable cw() execution */}}}tick_wait(){ /* cputick was replaced by simpler ASM code 10ms wait */asm" JNB TCON.5,*"; /* wait for TF0 set */asm" CLR TCON.5"; /* clear TF0 for further set */asm" ORL TH0,#$DC"; /* reload TH0 with $DC, TL0 = 0 */}energize(){P1 = step[(j&0x07)]; /* only step 0-7 needed */}电路图Tags:步进电机89C2051如何用单片机控制步进电机时间:2006-10-26 来源: 作者: 点击:2106 字体大小:【大中小】步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

大学毕业设计 C51程序控制步进电机

大学毕业设计 C51程序控制步进电机

题目:简易步进电机控制步进电机控制摘要:本设计采用ATMEL公司DIP-40封装的AT89S52单片机实现对四相步进电机的手动和按键控制。

由单片机产生的脉冲信号经过分配后分解出对应的四相脉冲,分解出的四相脉冲经驱动电路功率放大后驱动步进电机的转动。

转速的调节和状态的改变由按键进行选择,此过程由程序直接进行控制。

通过键盘扫描把选择的信息反馈给单片机,单片机根据反馈信息做出相应的判断并改变输出脉冲的频率或转动状态信号。

电机转动的不同状态由液晶LCD1602显示出来。

而设计的扩展部分可以通过红外信号的发射由另一块单片机和红外线LED完成,用红外万能接收头接收红外信号,可以实现对电机的控制进行红外遥控。

关键字:四相步进电机单片机功率放大 LCD1602步进电机控制 (1)摘要 (1)关键字 (1)前言 (3)1系统总体方案设计及硬件设计 (4)1.1步进电机 (4)1.1.1 步进电机的种类 (4)1.1.2 步进电机的特点 (4)1.1.3 步进电机的原理 (5)1.2 控制系统电路设计 (7)1.3 液晶显示LCD1602 (7)1.4 AT89S52核心部件及系统SCH原理图 (9)1.5 LN2003A驱动 (10)2软件设计及调试 (13)2.1程序流程 (13)2.2软件设计及调试 (14)3 扩展功能说明 (15)4设计总结 (16)5 设计源程序 (16)6 附录 (21)参考文献 (22)附2:系统原理图及实物图 (23)步进电机广泛应用于对精度要求比较高的运动控制系统中,如机器人、打印机、软盘驱动器、绘图仪、机械阀门控制器等。

目前,对步进电机的控制主要有由分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。

分散器件组成的环形脉冲分配器体积比较大,同时由于分散器件的延时,其可靠性大大降低;软件环形分配器要占用主机的运行时间,降低了速度;专用集成芯片环形脉冲分配器集成度高、可靠性好,但其适应性受到限制,同时开发周期长、需求费用较高。

EMU8086 仿真软件在《 微机原理》 课程教学中的应用

EMU8086 仿真软件在《 微机原理》 课程教学中的应用

EMU8086 仿真软件在《微机原理》课程教学中的应用楼俊君(上海电力学院电自学院信控系,上海200090)摘要:针对微机原理教学中存在的问题,提出了用EMU8086 仿真软件来解决的办法,并通过两个实例说明了该软件在汇编程序设计和接口技术方面的应用。

关键词:微机原理;EMU8086;应用0 前言《微机原理》课程是目前高校计算机专业及其相关专业学生必修的一门专业基础课,是学生学习后续课程、毕业设计和今后工作的重要技术基础。

该课程的任务是以美国Intel公司生产的16位CPU8086 为主线,介绍微型计算机的硬件结构、工作原理、汇编语言程序设计方法及微型计算机的接口技术[1]。

由于该门课程对实践动手能力要求高,涉及的信息量大、知识点多、教学内容较抽象,学生普遍反映该门课很难学。

其中汇编语言程序设计和接口技术是学生学习的两大难点。

因为汇编程序设计涉及到汇编指令系统中相应指令的使用,而8086/8088CPU的指令系统共包含92种基本指令,对指令系统的学习即是对这92 种基本指令的功能和用法的介绍,这很容易让学生感到枯燥乏味,提不起学习兴趣。

并且汇编程序运行的传统方法界面不直观,无论是教师演示或是学生实验使用起来都感到不方便。

接口技术涉及到对可编程接口芯片的访问,这部分内容较抽象,学生学习起来感觉到很难理解。

作为该课程的授课教师,如何才能解决教学中存在的上述两大难点问题呢?笔者经过较长时间的探索和实践,发现用EMU8086这款仿真软件可较好地解决上述问题。

1 EMU8086 介绍EMU8086 是Digital River 公司推出的16位CPU8086的仿真软件,它将汇编语言程序设计和虚拟接口技术有机地结合起来,其内部集成了汇编程序编译器、连接器、参考例程、学习指南,并提供了交通灯、机器人、步进电机等七个虚拟外设,是学习Intel 8086 微处理器的理想工具。

EMU8086 的工作界面为纯WINDOWS,界面友好,由菜单栏、快捷按钮栏和用户工作区构成,它能模拟真实微处理器工作的每一步骤,通过单步调试显示指令执行后CPU 内部寄存器、存储器、堆栈、变量和标志寄存器的当前值,操作简单直观,通过它学生可以很快掌握汇编程序设计和接口技术等知识。

stm32步进电机控制教程

stm32步进电机控制教程

本教程介绍步进电机驱动和细分的工作原理,以及stm32103为主控芯片制作的一套自平衡的两轮车系统,附带原理图pcb图和源代码,有兴趣的同学一起来吧.本系统还有一些小问题,不当之处希望得到大家的指正.一.混合式步进电机的结构和驱动原理电机原理这部分不想讲的太复杂了,拆开一台电机看看就明白了。

电机的转子是一个永磁体,它的上面有若干个磁极SN组成,这些磁极固定的摆放成一定角度。

电机的定子是几个串联的线圈构成的磁体。

出线一般是四条线标记为A+,A-,B+,B-。

A相与B相是不通的,用万用表很容易区分出来,至于各相的+-出线实际是不用考虑的,任意一相正负对调电机将反转。

另外一种出线是六条线的只是在A相和B相的中间点做两条引出线别的没什么差别,六出线的电机通过中间出线到A+或A-的电流来模拟正向或负向的电流,可以在没有负相电流控制的电路中实现电机驱动,从而简化驱动电路,但是这种做法任意时刻只有半相有电流,对电机的力矩是有损失的。

步进电机的转动也是电磁极与永磁极作用力的结果,只不过电磁极的极性是由驱动电路控制实现的。

我们做这样的一个实验就可以让步进电机转动起来。

1找一节电池正负随意接入到A相两端;然后断开;(记为A正向)2再将电池接入到B相两端; 然后断开;(记为B正向)3电池正负对调再次接入A相; 然后断开;(记为A负向)4保持正负对调接入B 相;然后断开;(记为B负向)…如此循环你会看到步进电机在缓慢转动。

注意电机的相电阻是很小的接通时近乎短路。

我们将相电流的方向记录下来应该为:A+B+A-B-A+…,如果我们更换接线顺序使得相电流顺序为A+B-A-B+A+…这时我们会看到电机向反方向运动。

这里每切换一次相电流电机都会转动一个很小的角度,这个角度就是电机的步距角。

步距角是步进电机的一个固有参数,一般两相电机步距角为1.8度即切换200次可以让电机转动一圈。

这里我们比较正反转的电流顺序可以看出A+和A-;B+和B-的交换后的顺序和正反顺序是一致的,也就是前面所说的”任意一相正负对调电机将反转”。

FPGA实现步进电机控制源代码

FPGA实现步进电机控制源代码

FPGA实现步进电机控制源代码.txt我爸说过的最让我感动的一句话:“孩子,好好学习吧,爸以前玩麻将都玩儿10块的,现在为了供你念书,改玩儿1块的了。

”module fenpin(clk_48m,reset,out_door,addr,data,data_rd,rd,rw,Grating_a,Grating_b); input clk_48m,data_rd,reset,rd,rw,Grating_a,Grating_b;input [8:0]addr;output out_door;inout [7:0]data;reg flag;reg [23:0]step;reg [23:0]pul_counter;reg [5:0]clk_div1m;reg [23:0]den;reg [23:0]counter;reg [23:0]counter_now;reg [19:0]Grating_counter;reg [7:0]com;reg [7:0]databuff;reg out=0;reg data_link;reg direct;assign data=data_link?databuff:8'bzzzzzzzz;assign out_door=out&flag;always@(posedge clk_48m)if(clk_div1m<6'h2e)clk_div1m <=clk_div1m+1;elseclk_div1m<=0;assign clk_1m=(clk_div1m==6'h2e);always @(posedge clk_1m)beginif(!reset)begincounter_now<=24'b1111_1111_1111_1111_1111_1111; endelse if(com[0:0]==1'b1)beginif(counter_now>den)begincounter_now<=counter_now-1;endelsebeginendendelsebeginendendalways @(posedge clk_48m)beginif(!reset)begincounter<=0;endelse if(com[0:0]==1'b1)beginif(counter==counter_now-1)begincounter<=0;out=~out;endelsebegincounter<=counter+1;endendelsebeginendendalways @ (posedge out)beginif(!reset)beginflag<=1;pul_counter<=0;endelsebeginif(pul_counter==step)beginflag<=0;pul_counter<=0;endelse pul_counter<=pul_counter+1;endendalways@(posedge Grating_a)if(Grating_b==1)direct=1;else direct=0;always@(posedge Grating_a)beginif(!reset)Grating_counter=0;else if(direct==1)Grating_counter<=Grating_counter+1;else Grating_counter<=Grating_counter-1; endalways @(posedge clk_48m)beginif(!reset)begindata_link<=1'b0;endelse if(rw)begindata_link<=1'b1;endendalways @( posedge clk_48m )beginif(!reset)beginstep<=0;den<=0;com<=0;endelse if(data_rd&rw&!rd)case(addr)3'b000 : den[7:0]<= data;3'b001 : den[15:8]<= data;3'b010 : den[23:16]<=data;3'b011 : step[7:0]<= data;3'b100 : step[15:8]<= data;3'b101 : step[23:16]<=data;3'b110 : com[7:0]<=data;//数据传送完毕endcaseelsebeginendendalways @(posedge clk_48m)beginif(!reset)begindatabuff<=0;endelse if(data_rd&rd&!rw)case(addr)8'h00:databuff<=den[7:0];8'h01:databuff<=den[15:8];8'h02:databuff<=den[23:16];8'h03:databuff<=step[7:0];8'h04:databuff<=step[15:8];8'h05:databuff<=step[23:16];8'h06:databuff<=com[7:0];8'h07:databuff<=Grating_counter[7:0];8'h08:databuff<=Grating_counter[15:8];8'h09:databuff<={4'h0,Grating_counter[19:16]}; endcaseelsebeginend end endmodule。

用proteus学习步进电机

用proteus学习步进电机

用proteus学习步进电机步进电机是一种将电脉冲转化为角位移的执行机构。

通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

2.步进电机分哪几种?步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB)永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。

在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。

它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。

这种步进电机的应用最为广泛。

上面是我在网上搜到的,重复的事情就不要做了,所以我直接给粘过了,我简单的解释一下,步进电机了,一般有,二相的,三相的,五相的,所谓的的相,就是电机里面推动电机的转的东西,叫绕组,二相的了,就是有两个绕组,如果说分A,B的话,A转一下,B再转一下,一圈了是360度,一个可以转1.8度,算一算,就是20次,AB它们就像接力一样,你推着轴转一些,我在接着转。

很显然,如果有三项,或是五项的话,那么就会比较精细,也就是说,每次转度的角度,可以更小,可以更精确的控制,反正就是这么回事。

上图。

一开始,我看了这个MOTOR的线不知道怎么接,有6根,其实,中间的两根是接电源的,上面的两根,下面的两根,分别接单片机的IO口。

驱动步进电机的,用的是ULN2003 还有L297/L298 我问下朋友,他们说L297/298现在用的多些,今天先用ULN2003联下,有时间再用L297/L298试下,另我买的开发板是个两相的,是用H式三极管来驱动的,很有意思,for(i=0;i<speed;i++){}}void main(){uint j,count= 20;uint speed = 2000;while(1){for(j=0;j<count;j++){P1=0x03;//4个引脚轮流转动delay(speed);P1=0x06;delay(speed);P1=0x0c;delay(speed);P1=0x09;delay(speed);}}}步进电动机(Step Motor)是一种数字控制电动机,它能将数字脉冲信号转换成角位移,即向其输出一个脉冲信号,步进电机就转动一个角度或者直线位移一步,所以称其为步进电机。

单片机控制步进电机系统(C语言源代码)

单片机控制步进电机系统(C语言源代码)

说明: 本系统中采用了四个按键,分别与 80s52 的四个引脚相连,分别为 LCDEN,RS,WR,RD;
分别实现的功能是电机加速,减速,正反转。键盘一旦按下则表示向单片机发送了有效信号, 单片机就相应的进行调节。对于键盘的键按下的时候分为几个步骤,当键盘按下的时候,接 通电路,键盘扫描检测低电平,但检测到低电平之后不能够判断键是否被按下,因为抖动可 能引起这个变化,所有大概延时 5~10ms 之后再进行检测。如果再次检测到低电平之后说明 键被按下。这个过程就是所说的消除抖动。 3.3 显示部分 如图 5
Key Words:SCM; stepper motor; system; drive
目录
引言 4 1 单片机控制步进电机的一般原理 4 1.1 步进电机 4
1.1.1 步进电机介绍 4 1.1.2 步进电机分类 5 1.1.3 技术指标 5 1.1.4 步进电机工作原理 5 1.2 单片机 7 2 步进电机驱动实现 8 2.1 简介 8 2.2 驱动选择 8 3 系统硬件设计 9 3. 1 单片机控制电机 9 3.2 键盘 9 3.3 显示部分 10 程序流程图 11 总结 12 致 谢 13 参考文献 13 附录 13 C 代码 13
In this paper, given the design of the system hardware circuit,software design, human-computer interaction and so on.and it given the details description of each functional module.the main contents include the following:
功能特性描述

基于STM32的SPWM源代码

基于STM32的SPWM源代码

基于STM32的SPWM源代码1、TIMER输出PWM基本概念脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。

简单一点,就是对脉冲宽度的控制。

一般用来控制步进电机的速度等等。

STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM 输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。

1.1 PWM输出模式STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。

模式1和模式2的区别如下:110:PWM模式1-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

111:PWM模式2-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

由此看来,模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。

而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式,关于3种模式的具体资料,可以查看《STM32参考手册》的“14.3.9 PWM模式”一节,在此就不详细赘述了。

1.2 PWM输出管脚PWM的输出管脚是确定好的,具体的引脚功能可以查看《STM32参考手册》的“8.3.7 定时器复用功能重映射”一节。

在此需要强调的是,不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM。

单片机实验P3.3输入、P1口输出和步进电机控制实验

单片机实验P3.3输入、P1口输出和步进电机控制实验

单⽚机实验P3.3输⼊、P1⼝输出和步进电机控制实验南昌航空⼤学实验报告⼆0⼀⼀年⼗⽉⼀⼗七⽇课程名称:单⽚微型机实验名称:P3.3输⼊、P1⼝输出和步进电机控制实验班级: 080611 学⽣姓名:学号: 08061108 指导教师评定:签名:⼀、实验⽬的1、掌握P3⼝、P1⼝简单使⽤;2、学习延时程序的编写和使⽤;3、了解步进电机控制的基本原理;4、掌握步进电机转动编程⽅法。

⼆、实验内容及要求1、P3.3输⼊、P1⼝输出实验1)P3.3⼝做输⼊⼝,外接⼀脉冲,每输⼊⼀个脉冲,P1⼝按⼗六进制加⼀。

P1⼝做输出⼝,编写程序,使P1⼝接的8个发光⼆极管L1—L8按16进制加⼀⽅式点亮发光⼆极管。

2)P1⼝是准双向⼝,它作为输出⼝时与⼀般的双向⼝使⽤⽅法相同,由准双向⼝结构可知:当P1⼝作为输⼊⼝时,必须先对它置⾼电平,使内部MOS管截⽌,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输⼊产⽣影响。

若不先对它置⾼,且原来是低电平,则MOS管导通,读⼊的数据是不正确的。

3)延时⼦程序的延时计算问题。

对于延时程序:DELAY :MOV R6, #00HDELAY1:MOV R7, #80HDJNZ R7, $DJNZ R6, DELAY1查指令表可知MOV、DJNZ指令均需⽤两个机器周期,⽽⼀个机器周期时间长度为12/ 6.0MHZ,所以该段指令执⾏时间为:((80+1)×256+1)×2×(12÷6000000)=132.1ms。

图1 P3.3输⼊、P1图2 实验电路原理图2、步进电机控制实验1)从键盘上输⼊正、反转命令,转速参数和转动步数显⽰在显⽰器上,CPU再读取显⽰器上显⽰的正、反转命令,转速级数(16级)和转动步数后执⾏。

转动步数减为零时停⽌转动。

2)步进电机驱动原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。

驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速,微电脑控制步进电机最适合。

(三)高新技术领域代码

(三)高新技术领域代码
续一
代码 领域 代码 领域 020106 医用基因工程技术和产品 020603 基因工程生物体及产品检测技术 020107 反义酸技术及其药物 020604 基因工程生物体及产品安全控制技术 020108 医用细胞工程技术和产品 0207 生物医学工程 020109 人血代用品、人体自体血液回收机技术及产品 020701 医学影象111 单克隆抗体诊断试剂与试剂盒、单克隆抗体偶联导向药物、人源化抗体 020703 诊断试剂 020112 标准健康实验动物及疾病模型动物 0208 其他生物工程和新医药技术 020113 医用、药用酶工程 020801 其他生物工程和新医药技术 020114 新型高效工业用酶制剂 03 新材料及应用技术 020115 发酵工程产品 0301 金属材料 020116 连续发酵技术和设备 030101 高纯金属材料及氧化物 020117 细胞固定化技术及设备 030102 新型铝镁合金材料 020118 动植物细胞或组织大规模培养技术 030103 特种铜合金材料 020119 生物传感器 030104 稀有金属及稀土金属材料 020120 高效分离纯化介质及关键设备 030105 纳米金属材料 020121 生物活性物质的分析和提取新技术、新设备 030106 大直径硅单晶及新型半导体材料 020122 新型生物、医药培养、制取设备 030107 超导材料 020123 新型生物保健品、新型试剂 030108 形状记忆合金 020124 生物资源优化、储存及综合利用技术及产品 030109 高性能特种合金材料 0202 中药 030110 贵金属材料 020201 规范化种植中药材 030111 特种金属靶材 020202 标准化中药炮制及饮片加工 030112 新型高性能低合金钢、合金钢材料 020203 濒危药用资源(动植物)开发 030113 金属纤维及微孔材料 020204 采用现代先进工艺制造新型中药制剂技术 030114 非晶、微晶合金 020205 缓控式制剂 030115 特种粉末及粉末冶金制品 020206 标准浓缩颗粒剂等 030116 表面改性金属材料 020207 名优品种的二次开发新药 030117 触媒材料 020208 针对中医优势病种及疑难杂症新药 030118 磁性材料 0203 化学药 030119 新型高强高效焊接材料 020301 化学合成、半合成新药 030120 金属丝、箔材及异型材 020302 天然产物(动植物、微生物、海洋生物)中提取的新药及其经修饰的新药 030121 新型电池材料 020303 现代药物制剂技术 030122 电子信息技术用金属材料 020305 多功能与专一性兼备辅料 030123 生物医学用金属材料 0204 农业生物技术 030124 新型传感材料 020401 转基因植物生物反应器 030125 金属间化合物材料 020402 转基因动物乳腺生物反应器 030126 冷、热等静压工艺及技术 020403 转基因和基因敲除技术 030127 金属快速凝固技术 020404 主要动植物基因多态性与分子标记技术 030128 高性能防腐材料及技术 020405 异体器官移植材料、技术与产品 0302 无机非金属材料 020406 动植物基因工程育种 030201 高纯超细陶瓷粉体材料 020407 微生物基因工程育种 030202 纳米级无机非金属材料 020408 新型农用基因工程产品 030203 无机电子材料 020409 转基因植物及转基因动物 030204 高性能陶瓷、结构陶瓷 020410 动植物细胞工程育种 030205 陶瓷纤维 020411 动植物优良品种的快速繁殖技术 030206 玻璃纤维 0205 环境保护工程 030207 超硬材料 020501 有毒、有害污染物的生物降解与受污染环境的生物修复技术 030208 人工晶体 020502 有机废物的生物转化技术 030209 特种玻璃 020503 环境生物检测技术 030210 光学纤维 0206 生物安全 030211 环境材料 020601 生物优异种质的筛选开发技术 030212 新型建筑材料 020602 生物资源的安全保存技术 030213 生物医用无机非金属材料 续二

毕业设计论文基于matlab的步进电机转速控制仿真(论文)

毕业设计论文基于matlab的步进电机转速控制仿真(论文)

毕业设计论文基于matlab的步进电机转速控制仿真(论文)摘要一般电动机都是连续旋转而步进电动却是一步一步转动的故叫步进电动机每输入一个冲信号该电动机就转过一定的角度有的步进电动机可以直接输出线位移称为直线电动机因此步进电动机是一种把脉冲变为角度位移或直线位移的执行元件数字控制系统的发展步进电动机的应用逐渐扩大仿真环境下建立了步进电机模型不仅仿真结果与实物仿真一致而且其仿真方法简单仿真时间大大缩短是一种理想的步进电机仿真研究方法关键词仿真ABSTRACTGeneral Motors is a continuous rotation while the step is electric rotating step by step so called stepper motors Each input of a red signal the motor will turn a certain angle some stepper motors can be directly output line displacement known as the linear motor Therefore the stepper motor is a pulse into the point of displacement or linear displacement of the implementation of the components With the development of digital control systems stepper motor application gradually expanding Although the stepper motor has been widely used but the stepper motor does not like a normal DC motor AC motor used in the routine It must be double-ring pulsesignal drive circuit composed of control before useUsed in the product forming the beginning of Shang Ruoli simulation software circuit simulation is an important study of its Indispensable want of means to control program simulation environment for debugging not only without actually hardware better Bufen meet the engineering requirements Matlab language is a science and engineering calculations for high-level language which combines scientific computing automatic control signal processing neural networks image processing and other functions into one is an advanced mathematical analysis and computation software can be used as dynamic Modeling and Simulation MATLAB-Simulink simulation environment based on the establishment of a stepping motor under the model simulation results not only consistent with the physical simulation and the simulation method is simple the simulation time is shortened it is an ideal stepping motor simulation methodsKEY WORDS Stepper motor matlab simulation前言步进电机问世以后很快确定了自己的应用场合为开环高分辨率的定位系统工业应用发展到今已有约30年的历史目前还没有更适合的取代它的产品而且已经发展成为除直流和交流电机外的第三大类电动机产品但毕竟发展历史不长人们从应用的角度看仍有不成熟的感觉步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件在非超载的情况下电机的转速停止的位置只取决于脉冲信号的频率和脉冲数而不受负载变化的影响即给电机加一个脉冲信号电机则转过一个步距角这一线性关系的存在加上步进电机只有周期性的误差而无累积误差等特点使得在速度位置等控制领域用步进电机来控制变的非常的简单摘要 1ABSTRACT 2前言 3第1章引言 511步进电机概述 512系统仿真技术概述713仿真软件的发展状况与应用 7第2章 MATLAB概要821 MATLAB概述822 概述10第3章步进电机基本原理 1131 典型结构和工作原理1132 旋转通电方式1233 小步距角步进电机1434 其他型式的步进电动机16com步进电动机1635 步进电机的控制方式21com机的开环控制21com 步进电机的闭环控制22第4章混合式步进数学模型及其建模2341 混合式步进数学模型2342 混合式步进电机的建模 27第5章步进电动机的驱动电源3051混合式步进电机的绕组通电方式305.2 两相双四拍环形分配器32第6章步进电机控制方式仿真结果3561 PID控制器 35comID控制器35参考文献38致谢40第1章引言步进电机最早是在1920年代由英国人所开发1950年代后期晶体管的发明也逐渐应用在步进电机上对于数字化的控制变得更为容易往后经过不断改良使得今日步进电机已广泛运用在需要高定位精度高分解能高响应性信赖性等灵活控制性高的机械系统中在生产过程中要求自动化省人力效率高的机器中我们很容易发现步进电机的踪迹尤其以重视速度位置控制需要精确操作各项指令动作的灵活控制性场合步进电机用得最多11步进电机概述步进电机依其构造上的差异可分为三大类可变磁阻式VR型转子以软铁加工成齿状当定子线圈不加激磁电压时保持转矩为零故其转子惯性小响应性佳但其容许负荷惯性并不大其步进角通常为15°永久磁铁式PM型转子由永久磁铁构成其磁化方向为辐向磁化无激磁时有保持转矩依转子材质区分其步进角有45°90°及75°1125°15°18°等几种混和式HB型转子由轴向磁化的磁铁制成磁极做成复极的形式其乃兼采可变磁阻式步进电机及永久磁铁式步进电机的优点精确度高转矩大步进角度小目前市场上所使用的工业用步进电机以混和式HB型最为普遍步进电机的特征步进电机最大特征即是能够简单的做到高精度的定位控制以5相步进电机为例其定位基本单位分辨率为072°全步级036°半步级是非常小的停止定位精度误差皆在±3分±005°以内且无累计误差故可达到高精度的定位控制步进电机的定位精度是取决于电机本身的机械加工精度置及速度控制步进电机在输入脉冲信号时可以依输入的脉冲数做固定角的回转进而得到灵活的角度控制位置控制并可得到与该脉冲信号周波数频率成比例的回转速度具定位保持力步进电机在停止状态下无脉波信号输入时仍具有激磁保持力故即使不依靠机械式的刹车也能做到停止位置的保持动作灵敏步进电机因为加速性能优越所以可做到瞬时起动停止正反转之快速频繁的定位动作开回路控制不必依赖传感器定位步进电机的控制系统构成简单不需要速度感应器ENCODER转速发电机及位置传感器SENSOR就能以输入的脉波做速度及位置的控制也因其属开回路控制故最适合于短距离高频度高精度之定位控制的场合下使用中低速时具备高转矩步进电机在中低速时具有较大的转矩故能够较同级伺服电机提供更大的扭力输出高信赖性使用步进电机装置与使用离合器减速机及极限开关等其它装置相较步进电机的故障及误动作少所以在检查及保养时也较简单容易小型高功率步进电机体积小扭力大尽管于狭窄的空间内仍可顺利做安装并提供高转矩输出12系统仿真技术概述系统是由客观世界中实体与实体间的相互作用和相互依赖关系构成的具有某种特定功能的有机整体系统的分类方法是多种多样的习惯上依照其应用范围可以将系统分为工程系统和非工程系统工程系统的含义是指由相互关联部件组成的一个整体以实现特定的目的例如电机驱动自动控制系统是由执行部件功率转换部件检测部件所组成用它来完成电机的转速位置和其他参数控制的某个特定目标非工程系统的定义范围很广大至宇宙小至原子只要存在着相互关联相互制约的关系形成一个整体实现某种目的的均可以认为是系统如果想定量地研究系统地行为可以将其本身的特性及内部的相互关系抽象出来构造出系统的模型系统的模型分为物理模型和数学模型由于计算机技术的迅速发展和广泛应用数学模型的应用越来越普遍系统的数学模型是描述系统动态特性的数学表达式用来表示系统运动过程中的各个量的关系是分析设计系统的依据从它所描述系统的运动性质和数学工具来分又可以分为连续系统离散时间系统离散事件系统混杂系统等还可细分为线性非线性定常时变集中参数分布参数确定性随机等子类系统仿真是根据被研究的真实系统的数学模型研究系统性能的一门学科现在尤指利用计算机去研究数学模型行为的方法计算机仿真的基本内容包括系统模型算法计算机程序设计与仿真结果显示分析与验证等环节13仿真软件的发展状况与应用早期的计算机仿真技术大致经历了几个阶段20世纪40年代模拟计算机仿真50年代初数字仿真60年代早期仿真语言的出现等80年代出现的面向对象仿真技术为系统仿真方法注入了活力我国早在50年代就开始研究仿真技术了当时主要用于国防领域以模拟计算机的仿真为主70年代初开始应用数字计算机进行仿真[4]随着数字计算机的普及近20年以来国际国内出现了许多专门用于计算机数字仿真的仿真语言与工具如CSMPACSL SIMNOM MATLAB MatrixSystem Build CSMP-C等第2章 MATLAB概要21 MATLAB概述MATLAB是国际上仿真领域最权威最实用的计算机工具它是MathWork公司于1982年推出的一套高性能的数值计算和可视化数学软件被誉为巨人肩上的工具MATLAB是一种应用于计算技术的高性能语言它将计算可视化和编程结合在一个易于使用的环境中此而将问题解决方案表示成我们所熟悉的数学符号其典型的使用包括数学计算运算法则的推导模型仿真和还原数据分析采集及可视化科技和工程制图开发软件包括图形用户界面的建立MATLAB是一个交互式系统它的基本数据元素是矩阵且不需要指定大小通过它可以解决很多技术计算问题尤其是带有矩阵和矢量公式推导的问题有时还能写入非交互式语言如C和Fortran等MATLAB的名字象征着矩阵库它最初被开发出来是为了方便访问由LINPACK 和EISPAK开发的矩阵软件其代表着艺术级的矩阵计算软件MATLAB在拥有很多用户的同时经历了许多年的发展时期在大学环境中它作为介绍性的教育工具以及在进阶课程中应用于数学工程和科学在工业上它是用于高生产力研究开发分析的工具之一MATLAB的一系列的特殊应用解决方案称为工具箱toolboxes作为用户不可缺少的工具箱它可以使你学习和使用专门技术工具箱包含着M-file集它使MATLAB可延展至解决特殊类的问题在工具箱的范围内可以解决单个过程控制系统神经网络模糊逻辑小波仿真及其他很多问题经过几十年的完善和扩充它已发展成线形代数课程的标准工具在美国MATLAB是大学生和研究生必修的课程之一美国许多大学的实验室都安装有MATLAB供学习和研究之用它集数值分析矩阵运算信号处理和图形显示于一体构成了一个方便的界面友好的用户环境其包含的SIMULINK是用于在MATLAB下建立系统框图和仿真环境的组件其包含有大量的模块集可以很方便的调取各种模块来搭建所构想的试验平台同时SIMULINK还提供时域和频域分析工具能够直接绘制系统的Bode图和Nyquist图MATLAB系统可分为五个部分MATLAB语言这是一种高级矩阵语言其有着控制流程状态功能数据结构输入输出及面向对象编程的特性它既有小型编程的功能快速建立小型可弃程序又有大型编程的功能开发一个完整的大型复杂应用程序MATLAB的工作环境这是一套工具和设备方便用户和编程者使用MATLAB它包含有在你的工作空间进行管理变量及输入和采集数据的设备同时也有开发管理调试 profiling M-files MATLABs applications Bessel功能和快速傅立叶变换MATLAB应用程序编程界面这是一个允许你在MATLAB界面下编写C和Fortran程序的库它方便从MATLAB中调用例程即动态链接使MATLAB成为一个计算器用于读写MAT-files22 概述是用于仿真建模及分析动态系统的一组程序包它支持线形和非线性系统能在连续时间离散时间或两者的复合情况下建模系统也能采用复合速率也就是用不同的部分用不同的速率来采样和更新提供一个图形化用户界面用于建模用鼠标拖拉块状图表即可完成建模在此界面下能像用铅笔在纸上一样画模型相对于以前的仿真需要用语言和程序来表明不同的方程式而言有了极大的进步拥有全面的库如接收器信号源线形及非线形组块和连接器同时也能自己定义和建立自己的块模块有等级之分因此可以由顶层往下的步骤也可以选择从底层往上建模可以在高层上统观系统然后双击模块来观看下一层的模型细节这种途径可以深入了解模型的组织和模块之间的相互作用在定义了一个模型后就可以进行仿真了用综合方法的选择或用的菜单或MATLAB命令窗口的命令键入菜单的独特性便于交互式工作当然命令行对于运行仿真的分支是很有用的使用scopes或其他显示模块就可在模拟运行时看到模拟结果进一步可以改变其中的参数同时可以立即看到结果的改变仿真结果可以放到MATLAB工作空间来做后处理和可视化模型分析工具包括线性化工具和微调工具它们可以从MATLAB命令行直接访问同时还有很多MATLAB的toolboxes中的工具因为MATLAB和是一体的所以可以仿真分析修改模型在两者中的任一环境中进行小结综上所述利用MATLAB来仿真步进电机的运行情况可以帮助研究者更好更方便的了解步进电机的特性以便进一步改善其效率第3章步进电机基本原理31 典型结构和工作原理一般电动机都是连续旋转而步进电动却是一步一步转动的故叫步进电动机每输入一个冲信号该电动机就转过一定的角度有的步进电动机可以直接输出线位移称为直线电动机因此步进电动机是一种把脉冲变为角度位移或直线位移的执行元件步进电动机的转子为多极分布定子上嵌有多相星形连接的控制绕组由专门电源输入电脉冲信号每输入一个脉冲信号步进电动机的转子就前进一步由于输入的是脉冲信号输出的角位移是断续的所以又称为脉冲电动机随着数字控制系统的发展步进电动机的应用将逐渐扩大步进电动机的种类很多按励磁可分为反应式永磁式和感应子式按相数分则可分为单相两相和多相三种其中反应式步进电机用得比较普遍结构也比较简单所以以反应式步进电机为例介绍步进电机的工作原理反应式步进电动机的工作原理与反应式同步电机一样也是利用凸极转子横轴磁阻与直轴磁阻之差所引起的反应转矩而转动的为了便于理解先以一个简单的三相步进电动机为例图 3-1是反应式步进电动机结构示意图它的定子具有均匀分布的六个磁极磁极上绕有绕组两个相对的磁极组成一组联法如图所示图 3-1 三相反应式步进电动机的结构电机转子均匀分布着很多小齿定子齿有三个励磁绕阻其几何轴线依次分别与转子齿轴线错开 013て23て相邻两转子齿轴线间的距离为齿距以て表示即A 与齿1相对齐B与齿2向右错开13てC与齿3向右错开23てA与齿5相对齐A 就是A齿5就是齿132 旋转通电方式图 3-2 三相单三拍运行转子位置步进电动机的工作原理其实就是电磁铁的工作原理定子由若干相控制绕组构成每相依次通入直流电磁通具有力图沿磁阻最小路径通过的特点如A相通电BC相不通电时由于磁场作用齿1和齿3与A A对齐如图3-2a所示如B相通电AC相不通电时齿2应与B对齐此时转子向右移过13て此时齿3与C偏移为13て齿4与A偏移て-13て 23て如图3-2b所示如C相通电AB相不通电齿3应与C对齐此时转子又向右移过13て此时齿4与A偏移为13て对齐如图3-2c所示如A相通电BC相不通电齿4与A对齐转子又向右移过13て这样经过ABCA 分别通电状态齿4即齿1前一齿移到A相电机转子向右转过一个齿距如果不断地按A-B-C-A通电电机就每步每脉冲13て向右旋转如按A-C-B-A通电电机就反转这种按A-B-C-A方式运行的称为三相单三拍运行所谓三相是指步进电动机具有三相定子绕组单是指每次只有一相绕组通电三拍指三次换接为一个循环第四次换接重复第一次情况除了这种运行方式外三相步进电动机还可以以三相六拍和三相双三拍运行三相六拍运行的供电方式是A-AB-B-BC-C-CA-这时每一循环换接6次总共有6种通电状态这6种通电状态中有时只有一相绕组通电如A相有时有两相绕组同时通电如A相和B相图3-3表示这种方式对控制绕组供电时转子位置和磁通分布的图形开始时先单独接通A相这时与单三拍的情况相同转子齿1和3的轴线与定子极轴对齐如图3-3a所示当A和B两相同时通电时转子稳定位置将会停留在AB两定子磁极对称的中心位置上依此类推如果下面继续按照BC-C-CA-A的顺序使绕组换接那末步进电动机就不断按顺时针方向旋转当顺序顺序改为A-AC-C-CB-B-BA-A时步进电动机就反响即按逆时针方向旋转图 3-3 三相六拍运行aA相通电bAB相通电cB相通电dBC相通电可见单双六拍运行时步距角为15°比三拍通电方式时减小一半因此同一台步进电动机采用不同的通电方式可以有不同的拍数对应运行时的步距角也不同此外六拍运行方式每一拍也总有一相控制绕组持续通电也具有电磁阻尼作用电机工作也比较平稳33 小步距角步进电机以上这种结构形式的反应式步进电动机它的步距角较大常常满足不了系统精度的要求所以大多数采用如图3-4所示的定子磁极上带有小齿转子齿数很多的反应式结构其步距角可以做得很小下面进一步说明它的工作原理图3-4所示的是最常见的一种小步距角的三相反应式步进电动机定子每个图3-4 三相反应式步进电动机的结构极面上有5个齿转子上均匀分布40个齿定转子的齿宽和齿距都相同当A相控制绕组通电时转子受到反应转矩的作用使转子齿的轴线和定子AA′极下齿的轴线对齐因转子上共有40个齿其齿距角为定子每个极距所占的齿数为不是整数如图3-5所示因此当定子A相极下定转子齿对齐时定子B相极和C相极下的齿和转子齿依次有 13 齿距的错位即3°同样当A相断电B相控制绕组通电时反应转矩的作用下子按逆时针方向转过3°转子齿的轴线和定子B相极下齿的轴线对齐这时定子C相极和A相极下的齿和转子齿又依次错开 13 齿距依次类推若继续按单三拍的顺序通电转子就按逆时针方向一步一步地转动步距角为3°当然改变通电顺序即按A-C-B-A 电机按顺时针方向反转图3-5转子展开图 A相绕组通电若采用三相单双六拍的通电方式运行时和前面分析的道理完全一样步距角也减小一半为15°通过以上分析可知转子的齿数不能任意选取因为在同一相的几个磁极下定转子齿应同时对齐或同时错开才能使几个磁极的作用相加产生足够的反应转矩所以转子齿数应是定子磁极的偶数倍另外在不同相的磁极下定转子相对位置应依次错开 1m 齿距这样才能在连续改变通电状态下获得连续不断的运动否则当某一相控制绕组通电时转子齿都将处于磁路的磁阻最小的位置上各相绕组轮流通电时转子将一直处于静止状态电动机不能正常运行为此要求两相邻相磁极轴线之间转子的齿数应为整数加或减 1m 即3-1式中K 为正整数Zr 为转子的齿数2p 为一相绕组通电时在圆周上形成的磁极数图 3-5定转子展开图A相绕组通电如果以 N 表示步进电动机运行的拍数则转子经过 N 步将转过一个齿距每转一圈即360°机械角需要走NZr 步步距角为3-2N Cm式中C 为通电状态系数当采用单拍或双拍方式时C 1而采用单双拍方式时C 2由此可见增加拍数和转子的齿数可以减小步距角有利于提高控制精度增加电机的相数可以增加拍数也可以减小步距角但相数越多电源及电机的结构越复杂造价也越高反应式步进电动机一般做到六相个别的也有八相或更多相增加转子的齿数是减小步进电动机步距角的一个有效途径目前所使用的步进电动机转子的齿数一般很多对相同相数的步进电动机既可采用单拍方式也可采用单双拍方式所以同一台电机可有两个步距角如 3°15° 15°075° 12°06°等当通电脉冲的频率为时由于转子每经过 NZr 个脉冲旋转一周故步进电动机每分钟的转速为3-3式中的单位为 HZ可见反应式步进电动机的转速与拍数 N转子齿数 Zr 及脉冲的频率有关当转子齿数一定转速与输入脉冲的频率成正比改变脉冲的频率可以改变电机的转速34 其他型式的步进电动机com步进电动机图3-6是永磁式步进电动机的结构原理图定子为凸极式装有两相或多相绕组转子为凸极式星形磁钢其极对数与定子每相绕组的极对数相同图中定子为两相集中绕组AO BO 每相为两对极所以转子也是两对极即 p 2当定子绕组按 A-B –A - –B -A 的次序轮流通电时转子将按顺时针方向每次转过45°即步距角为45°永磁式步进电动机的步距角3-4用电弧度表示则有3-5式中p 为转子极对数图 3-6 永磁式步进电机由上可知永磁式步进电机要求电源供给正负脉冲否则不能运行这就使电源的线路复杂化了这个问题可通过在同一相的极上绕两套绕向相反的绕组电源只供给正脉冲的方法来解决这样做虽然增加了用铜量和电机尺寸但却简化了对电源的要求此外还有两相双四拍通电方式即AB-B –A - –A –B - –B A-AB永磁式步进电动机的特点是①大步距角例如②启动和运行频率较低通常为几十到几百赫兹但转速不一定低但它所需的③控制功率较小效率高④在断电情况下具有定位转矩⑤有强的内阻力矩主要用于新型自动化仪表com步进电动机混合式步进电动机也称为感应子式步进电动机这是一种十分流行的步进电动机它的定子铁心与反应式步进电动机相同也是两相集中绕组每项为两极对按A-B –A - –B -A次序轮流通以正负脉冲转子的结构与永久磁钢的电磁减速式同步电动机相同它既有反应式步进电动机小步距角的特点又有永磁式步进电动机的高效率绕组电感比较小的特点常常也作为低速同步电动机运行一两相混合式步进电动机的结构图3-7为两相混合式步进电动机的轴向剖视图定子的结构与反应式步进电动机基本相同沿着圆周有若干个凸出的磁极极面上有小齿极身上有控制绕组控制绕组的接线如图3-8所示转子由环形磁钢和两段铁芯组成环形磁钢在转子中部轴向充磁两段铁芯分别装在磁钢的两端转子铁芯上也有小齿两段铁芯上的小齿相互错开半个齿距定转子的齿距和齿宽相同齿数的配合与单段反应式步进电动机相同图3-7混合式步进电动机轴向剖视图图3-8混合式步进电动机轴向剖视图二两相混合式步进电动机的工作原理混合式步进电动机作用在气隙上的磁动势有两个一个是由永久磁钢产生的磁动势另一个是由控制绕组产生的磁动势这两个磁动势有时是相加的有时是相减的视控制绕组中电流方向而定这种步进电动机的特点是混入了永久磁钢的磁动势故称为混合式步进电动机1零电流时工作状态各相控制绕组中没有电流通过这时气隙中的磁动势仅由永久磁钢的磁动势决定如果电机的结构完全对称各个定子磁极下的气隙磁动势将完全相等电动机无电磁转矩因为永磁磁路是轴向的从转子B端到定子的B端轴向到定子的A端转子的A端经磁钢闭合在这个磁路上总的磁导与转子位置无关这一方面由于转子不论处于什么位置每一端的不同极下磁导有的大有的小但总和不变另一方面由于两段转子的齿错开了半个齿距所以即使在一个极的范围内看当B端磁导增大时A端必然减小也使总磁导在转子位置不同时保持不变。

基于stm32控制的步进电机程序代码

基于stm32控制的步进电机程序代码

基于stm32控制的步进电机程序代码本文将介绍如何使用STM32控制步进电机,并提供相应的程序代码供参考。

步进电机是一种常用的电动机,其运动是通过控制电流来实现的。

通过STM32微控制器,我们可以灵活地控制步进电机的转动速度、方向和步数。

步进电机简介步进电机是一种特殊的电动机,可以将固定的角度转动称为步进角。

它由多个电磁线圈和齿轮组成,通过不同的相序控制电流的通断,从而实现转动。

步进电机通常有两种工作方式:全步进和半步进。

全步进模式下,步进电机按照一定的相序依次通断电流,从而实现转动。

半步进模式下,步进电机可以在每个全步进之间以半个步进的方式运行。

全步进模式有较高的转动精度,半步进模式有更高的分辨率。

STM32控制步进电机STM32是意法半导体(STMicroelectronics)公司开发的一款高性能32位单片机。

它具有丰富的外设和强大的处理能力,适合于使用步进电机的应用。

步进电机可以通过动态控制电流和相序来实现精确的转动。

对于STM32来说,我们可以使用GPIO来控制步进电机的相序,通过PWM输出来控制步进电机的电流大小。

以下是一个实现步进电机控制的示例代码:#include "stm32f1xx.h"#include "stm32f1xx_nucleo.h"// 定义步进电机的相序uint8_t sequence[] = {0x0C, 0x06, 0x03, 0x09};// 定义当前相序的索引uint8_t sequence_index = 0;// 定义当前步进的方向uint8_t direction = 0;// 定义每个相序的持续时间(单位:毫秒)uint16_t sequence_delay = 10;// 初始化GPIO和PWMvoid init_GPIO_PWM() {// 初始化GPIO口GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);// 初始化PWMRCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_Period = 999;TIM_TimeBaseInitStruct.TIM_Prescaler = 0;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);TIM_OCInitTypeDef TIM_OCInitStruct;TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStruct.TIM_Pulse = 500;TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM1, &TIM_OCInitStruct);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_Cmd(TIM1, ENABLE);}// 控制步进电机的转动void step_motor_control() {// 设置当前相序GPIO_Write(GPIOA, sequence[sequence_index]);// 切换方向if (direction == 0) {sequence_index++;if (sequence_index >= 4) {sequence_index = 0;}} else {sequence_index--;if (sequence_index < 0) {sequence_index = 3;}}// 延时一段时间HAL_Delay(sequence_delay);}int main(void) {// 初始化GPIO和PWMinit_GPIO_PWM();while (1) {// 控制步进电机的转动step_motor_control();}}以上示例代码通过包含STM32 HAL库(HAL库是ST公司提供的一套可移植的硬件抽象层)来实现GPIO和PWM的初始化。

直流电机与步进电机区别(详细解说).

直流电机与步进电机区别(详细解说).

“细分驱动”概述
一、概念: 将“电机固有步距角”细分成若干小步的驱动方法,称 为细分驱动,细分是通过驱动器精确控制步进电机的相电流 实现的,与电机本身无关。其原理是,让定子通电相电流并 不一次升到位,而断电相电流并不一次降为0(绕组电流波形 不再是近似方波,而是N级近似阶梯波),则定子绕组电流所 产生的磁场合力,会使转子有N个新的平衡位置(形成N个步 距角)。 二、最新技术发展: 国内外对细分驱动技术的研究十分活跃,高性能的细分 驱动电路,可以细分到上千甚至任意细分。目前已经能够做 到通过复杂的计算使细分后的步距角均匀一致,大大提高了 步进电机的脉冲分辨率,减小或消除了震荡、噪声和转矩波 动,使步进电机更具有“类伺服”特性。
有两种方法解决这个问题:
• 一种方法就是增加步进电机的相数,减少转子在相序变 换时转过的角度;
• 另一种方法就是1975年美国学者T.R.Fredriksen提出步进 电机步距角细分控制方法。实践证明,步进电机细分驱动控 制技术可以减小步进电机的步距角,提高电机运行的平稳性, 增加控制的灵活性等。
步进电机的细分驱动控制原理

旋转方向控制电路由两个2选1多路选择器组成。 “START”键通过与门来控制PWM的输出,从而达到控 制电机的开关。
直流电机结构
直流电机的结构应由定子和转子两 大部分组成。直流电机运行时静止不动 的部分称为定子,定子的主要作用是产 生磁场,由主磁极、换向极、轴承和电 刷等组成。运行时转动的部分称为转子, 其主要作用是产生电磁转矩和感应电动 势,是直流电机进行能量转换的枢纽, 所以通常又称为电枢,由转轴、电枢铁 心、电枢绕组、换向器等组成。
步进电机的细分驱动控制原理

“细分驱动”概述
二、最新技术发展: 2. 真正的细分对驱动器要有相当高的技术要求和工艺要 求,成本亦会较高。国内有一些驱动器采用对电机相电流进 行“平滑”处理来取代细分,属于“假细分”,“平滑”并 不产生微步,会引起电机力矩的下降。真正的细分控制不但 不会引起电机力矩的下降,相反,力矩会有所增加。

基于ULN2003 控制步进电机正反转

基于ULN2003 控制步进电机正反转

基于ULN2003 控制步进电机正反转第24组电子设计报告组员:郝冠 111308309郭剑楠 111308308李爽 111308317一、功能说明本设计是基于STC89C52单片机和ULN2003 芯片能控制步进电机正反转的设计。

程序由我们自己完成的。

是由按键引发外部中断来控制步进电机输入信号端先后顺序,从而改变正反转。

功能通过按键输入外部中断信号,改变步进电机步进方向。

还可改进地方:用数码管显示当前步进电机旋转速度,再用按键来控制步进电机旋转速度。

二、原理图(1)52芯片引脚图(2)ULN2003芯片原理图三、程序源代码//本程序内容:使用外部中断控制步进电机的正传和反转// //注意外部中断必须用P3^2//#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar flag;sbit k1=P3^2;//步进电机数据口取名sbit A1=P3^4;sbit B1=P3^5;sbit C1=P3^6;sbit D1=P3^7;//步进电机1四相八拍所用数据#define POWER_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电#define POWER_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电#define POWER_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电#define POWER_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电#define POWER_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电#define POWER_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电#define POWER_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电#define POWER_DA1 {A1=1;B1=0;C1=0;D1=1;}//DA相通电,其他相断电#define POWER_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电void delay_ms(unsigned char t){uchar x,y;for(x=t;x>0;x--){for(y=114;y>0;y--) ;}}uchar speed; //定义速度全局变量,也是时间延迟变量uint i; //旋转一周时间,512一周void main(){EA=1; //全局中断开EX0=1; //外部中断0开IT0=1; //1表示边沿触发i=512;speed=6;POWER_OFFwhile(1){while(i--){if(flag==0){POWER_A1delay_ms(speed);POWER_AB1delay_ms(speed);POWER_B1delay_ms(speed);POWER_BC1delay_ms(speed);POWER_C1delay_ms(speed);POWER_CD1delay_ms(speed);POWER_D1delay_ms(speed);POWER_DA1delay_ms(speed);}else{POWER_DA1delay_ms(speed);POWER_D1delay_ms(speed);POWER_CD1delay_ms(speed);POWER_C1delay_ms(speed);POWER_BC1delay_ms(speed);POWER_B1delay_ms(speed);POWER_AB1delay_ms(speed);POWER_A1delay_ms(speed);}}}}void ex0(void) interrupt 0{if(k1==0){delay_ms(10);if(k1==0){flag=~flag;}}}四、设计总结本次设计完全是我们自己写的程序,有很多没有考虑到的地方,需要我们今后更加努力,改进程序,使功能更齐全,操作更简单。

28BYJ-48步进电机简介

28BYJ-48步进电机简介

28BYJ-48步进电机:步进电机是一种将电脉冲转化为角位移的执行机构。

通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。

当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。

每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。

当通电状态的改变完成一个循环时,转子转过一个齿距。

四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。

),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-。

),八拍(A-AB-B-BC-C-CD-D-DA-A。

)四相步进电机有两种运行方式,一、四相四拍;二、四相八拍。

要想搞清楚四相八拍运行方式下步进电机的转速如果计算,需要先清楚两个基本概念。

1、拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即A-AB-B-BC-C-CD-D-DA-A.2、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。

θ=360度(转子齿数J*运行拍数),以常规二、四相,转子齿为50齿电机为例。

四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。

这两个概念清楚后,我们再来计算转速,以基本步距角1.8°的步进电机为例(现在市场上常规的二、四相混合式步进电机基本步距角都是1.8°),四相八拍运行方式下,每接收一个脉冲信号,转过0.9°,如果每秒钟接收400个脉冲,那么转速为每秒400X0.9°=360°,相当与每秒钟转一圈,每分钟60转。

方案设计书并实现红外遥控步进电机单片机课程方案设计书

方案设计书并实现红外遥控步进电机单片机课程方案设计书

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:设计并实现红外遥控步进电机初始条件:(1)Proteus仿真软件或XL1000综合仿真实验仪一台;(2)课程设计辅导书:1.李群芳、张士军,单片微型计算机与接口技术,电子工业出版社,20082.张毅刚、彭喜元、董继成,单片机原理及应用,高等教育出版社,20043.赵晓安.,MCS-51单片机原理及应用,天津大学出版社,2001(3)先修课程:微机原理与接口技术、单片机原理。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)课程设计时间:1周;(2)本课程设计统一技术要求:按照要求对选定的设计题目进行分析,画出实现电路原理图,设计出各模块电路的功能,编写C51或汇编程序,上机调试、仿真,记录实验结果,对实验结果进行分析;(除了代码,运行结果可以打印,其他手写)(3)课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,并标明参考文献至少5篇;(4)写出本次课程设计的心得体会(至少500字)。

时间安排:课程设计时间为:6月26日至7月1 日, 7月2日上午答辩。

指导教师签名:年月日系主任(或责任教师)签名:目录1.设计原理及方法11.1 步进电机的工作原理11.2 红外遥控器的原理11.3 红外遥控步进电机的设计方法22.系统硬件线路设计22.1红外遥控及LED模块22.2步进脉冲产生模块:52 . 3硬件线路设计图73.程序框图84.资源分配表:95.源程序:107.心得及体会:218.参考文献:219.本科生课程设计成绩评定表221.设计原理及方法1.1 步进电机的工作原理步进电机是数字控制电机,它将电脉冲信号转化为角位移,实质上是一种数字/角度转换器。

当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角” ),它的旋转是以固定的角度一步一步运行的。

基于Vpython的步进电机的仿真教学

基于Vpython的步进电机的仿真教学

基于Vpython的步进电机的仿真教学摘要:在步进电机的实际教学中,学生们通常都是在教师的指导下进行理论的学习来获得抽象认识以及通过实际模型的拆解、认知与操作实践来获得感性认识。

然而,实际教学中,由于成本问题,很多实践环节实施起来较为困难且耗时较长。

本文采用近几年大热的跨平台编程语言python及在其基础上二次开发的Vpython来对教学用简单结构的步进电机进行3D动态建模,该模型可以变换角度,任意放大与缩小,使其内部结构与外部样式均可以详细观察与教学。

该电子模型可易传波建模过程简单易学,可扩充学生基础的几何知识,为解决教学过程中的经济与时间成本问题提供了一个思路,并在文末附上了源代码。

关键词:python;模拟;步进电机步进电机既是广大科学类、电子技术类专业所要学习的重要内容,又是现代工业中广泛应用的基本工具。

因此,其在各大高等院校的相关专业教学中都是处于核心地位。

而对于步进电机的教学,其难点之一就是如何更加形象的传达其原理[1]。

因此,建立一个尽可能贴近现实并且构建过程不过于复杂且体现其运作规律的3D模型势在必行。

为了达到此目标,经过多年的教学与对比,在对本文选用近几年比较热门的跨平台、多用途的编程语言python来对步进电机进行模拟仿真,以辅助教学。

1 步进电机原理简介步进电机是根据电磁脉冲信号来改变角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛[2]。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,即式(1),m代表定子转速,Z代表转子齿数,C通电方式。

它的旋转是以固定的角度一步一步运行的。

可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
E:\Altium Designer Workspace\已经完成\步进电机\仿真\步进电机\main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 #include "keyboard.h" #define OSC 12000000 void CheckKey(unsigned char key);//判判长按 void DisplayNum(unsigned int count);//每扫扫数数左左 unsigned long Round;//保保正每保保用用 unsigned char THR0,TLR0; unsigned char code LedChar[] = { 0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0xBF,/*-*///保保0~9,-,每扫扫真数数 }; unsigned char code BeatCode[] = {0x0E,0x0C,0x0D,0x09,0x0B,0x03,0x07,0x06};//定定步进电机每拍扫 unsigned long beats;//左左计每拍每 unsigned char ledBuff[] = {0xFF,0xFF,0xFF,0xFF};//保保但数数保每 unsigned char set = 0;//2为正每,1为用用 bit CLW = 0;//0为正正,1正正 bit RUN = 0;//0为暂为,1运执 bit Pause = 0;//暂暂 bit flag2ms = 0;//2毫毫毫毫 sbit Dig1 = P2^4;//每数从左到左1,2,3,4并 sbit Dig2 = P2^5; sbit Dig3 = P2^6; sbit Dig4 = P2^7; void ConfigTimer0(unsigned int ms)//设设左每设设每 { unsigned long tmp = ms; tmp = (tmp*OSC)/12/1000; tmp = 65536 - tmp; THR0 = (unsigned char)(tmp >> 8); TLR0 = (unsigned char)tmp; TMOD &= 0xF0;//左每设0,模模1 TMOD |= 0x01; ET0 = 1;//开启开判 TR0 = 1;//启启定启设0 TH0 = THR0;//给TH0,TL0初数 TL0 = TLR0; } void main() { unsigned char tmp; unsigned char index = 0;//保保保保每拍保保 unsigned char cindex = 0; unsigned char rindex = 6; ConfigTimer0(1); EA = 1;//开启开并开判 ledBuff[0] = LedChar[set]; DisplayNum(0); while(1) { KeyDrive();// if(flag2ms) { flag2ms = 0; if(beats != 0) { tmp = P2; tmp &= 0xF0; tmp |= BeatCode[index]; P2 = tmp;//正启步进电机 if(!CLW) { cindex++; cindex &= 0x07; index = cindex; } else { rindex--; rindex &= 0x07;
Page 3
E:\Altium Designer Workspace\已经完成\步进电机\仿真\步进电机\keyboard.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 #include "keyboard.h" unsigned char keySta[] = {1,1,1,1,1,1,1};//长按按按 unsigned int keyTime[] = {0,0}; unsigned char keyCnt[] = {0,0}; extern void CheckKey(unsigned char key); void ScanKey() { static unsigned char keyBuff[] = {0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F};//保保长按按按 unsigned char i; keyBuff[0] = (keyBuff[0] << 1)|Key0;//读取长按按按 keyBuff[1] = (keyBuff[1] << 1)|Key1;//读取长按按按 keyBuff[2] = (keyBuff[2] << 1)|Key2;//读取长按按按 keyBuff[3] = (keyBuff[3] << 1)|Key3;//读取长按按按 keyBuff[4] = (keyBuff[4] << 1)|Key4;//读取长按按按 keyBuff[5] = (keyBuff[5] << 1)|Key5;//读取长按按按 keyBuff[6] = (keyBuff[6] << 1)|Key6;//读取长按按按 for(i = 0;i < 7;i++) { if((keyBuff[i]&0x0F) == 0x0F)//判判长按判判判判判 { keySta[i] = 1; if(i == 2) { keyCnt[0] = 0; keyTime[0] = 0; } else if(i == 3) { keyCnt[1] = 0; keyTime[1] = 0; } } else if((keyBuff[i]&0x0F) == 0x00)//判判长按判判判长判 { keySta[i] = 0; if(i == 2) { keyCnt[0]++; if(keyCnt[0] >= 200) { keyCnt[0] = 0; keyTime[0]++;//为长长按为为加 } } else if(i == 3) { keyCnt[1]++; if(keyCnt[1] >= 200) { keyCnt[1] = 0; keyTime[1]++;//为长长按为为减 } } } } } void KeyDrive() { static unsigned char keyBack[] = {1,1,1,1,1,1,1};//保保保保保保长按 static unsigned int keyTim[] = {3,3};//第第第第第600毫毫毫长长为为,以保以200毫毫为为第第 unsigned char i; for(i = 0;i < 7;i++) { if((keyBack[i] != keySta[i]))//如如长按按按保保 { if(keySta[i] == 0)//如如判长判如如如长按 { CheckKey(i); } keyBack[i] = keySta[i]; } } if(keyTime[0] > 0)//长长加 { if(keyTime[0] > keyTim[0])
} void InterruptTimer0() interrupt 1 { static unsigned char cnt = 0; TH0 = THR0; TL0 = TLR0; if(RUN) { if(!Pause) cnt++; if(cnt > 20)//模模模模以20毫毫判启第如每拍,判不不不每拍,实实第第2毫毫 { cnt = 0; flag2ms = 1; } } else cnt = 0; ScanKey();//扫扫长按 LedScan();//扫扫每扫扫 }
Page 1
E:\Altium Designer Workspace\已经完成\步进电机\仿真\步进电机\main.c
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 index = rindex; } beats--; if(beats > 999) DisplayNum(999); else DisplayNum(beats); } else if(beats == 0) { RUN = 0; DisplayNum(beats); } } } } void DisplayNum(unsigned int count) { unsigned int tmp; unsigned char i,j; tmp = count;//左左每扫扫,并并如如并但并从左到左如如并并1~9保每,每扫扫判数 for(i = 3;i > 0;i--) { ledBuff[i] = LedChar[tmp%10]; tmp /= 10; } for(i = 1;i < 3;i++) { if(ledBuff[i] != 0xC0) break; } for(j = 1;j < i;j++) ledBuff[j] = 0xFF; } void CheckKey(unsigned char key)//判判长按 { if(RUN) { if((key != 5)&&(key !=6)) return; } if(key == 0)//设设判长用用设判长设每 { set++; if(set > 2) set = 1; ledBuff[0] = LedChar[set]; DisplayNum(Round); } if(set == 0) return; if(key == 1)//正正正 { CLW = !CLW; if(CLW) { ledBuff[0] = LedChar[10]; } else { ledBuff[0] = LedChar[CLW]; } DisplayNum(Round); } else if(key == 2)//加 { if(Round < 1000) Round++; DisplayNum(Round); } else if(key == 3)//减 { if(Round > 0) Round--; DisplayNum(Round); } else if(key == 4)//运执长按长判
相关文档
最新文档