单片机课设步进电机控制正反转(单片机爱好者)

合集下载

单片机课程设计(论文)-开关控制步进电机正反转

单片机课程设计(论文)-开关控制步进电机正反转

绪论步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

在数控机床、医疗器械、仪器仪表、机器人以及其他自动设备中得到了广泛应用,我们使用的计算机外围的一些设备,如软驱、打印机、扫描仪等其运动部件的控制都采用了步进电机。

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

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

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

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

目录1 设计目的 (3)2 硬件电路设计及描述 (4)2.1确定元器件的型号及参数 (4)2.1.1 AT89C51 单片机 (4)2.1.2 ULN2003芯片 (6)2.2 步进电机 (7)2.2.1 永磁式步进电机 (7)2.2.2 步进电机原理以及原理图 (10)2.2.3 功能说明 (11)2.2.4步进电机的静态指标术语 (11)2.2.5 步进电机动态指标及术语: (12)3 程序设计 (13)3.1 编程 (13)3.2 流程图 (14)3.3 程序清单 (15)3.3.1 代码详解 (17)3.3.2 程序分析 (17)4 参考文献 (18)5 结束语 (19)1 设计目的步进电机若加入适当的脉冲信号时,转子则会以一定的步数转动。

如果加入连续的脉冲信号,步进电机就会连续转动,转动的角度与脉冲频率成正比,正、反转可由脉冲的顺序来控制。

本程序通过K1、K2和K3三个按钮开关控制步进电机转动和改变转向,电动机使用1-2相激磁,编程时采用制表的方法。

正转和反转的脉冲信号频率是相通的,但由于使用激磁方式不一样,反转使用了1-2相激磁法,故反转速度为正转的一半。

51单片机步进电机正反转停止实验[1]

51单片机步进电机正反转停止实验[1]

51单片机步进电机正反转停止实验 - C51源代码#include <reg51.h> //51芯片管脚定义头文件#include <intrins.h> //内部包含延时函数 _nop_();#define uchar unsigned char#define uint unsigned intuchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码sbit K1 = P3^2; //正转sbit K2 = P3^3; //反转sbit K3 = P3^4; //停止sbit BEEP = P3^6; //蜂鸣器/********************************************************//*/* 延时t毫秒/* 11.0592MHz时钟,延时约1ms/*/********************************************************/void delay(uint t){uint k;while(t--){for(k=0; k<125; k++){ }}}/**********************************************************/void delayB(uchar x) //x*0.14MS{uchar i;while(x--){for (i=0; i<13; i++){ }}}/**********************************************************/void beep(){uchar i;for (i=0;i<100;i++){delayB(4);BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器}/********************************************************//*/*步进电机正转/*/********************************************************/ void motor_ffw(){uchar i;uint j;for (j=0; j<8; j++) //转1*n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = FFW[i]; //取数据delay(2); //调节转速}}}/********************************************************/ /*/*步进电机反转/*/********************************************************/ void motor_rev(){uchar i;uint j;for (j=0; j<8; j++) //转1×n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = REV[i]; //取数据delay(2); //调节转速}}}/******************************************************** ** 主程序**********************************************************/ main(){uchar r,N=64; //N 步进电机运转圈数while(1){if(K1==0){beep();for(r=0;r<N;r++){motor_ffw(); //电机正转if(K3==0){beep();break;} //退出此循环程序}}else if(K2==0){beep();for(r=0;r<N;r++){motor_rev(); //电机反转if(K3==0){beep();break;} //退出此循环程序}}elseP1 = 0xf0;}}/********************************************************/按实验板上的K1按键步进电机正转按实验板上的K2按键步进电机反转按实验板上的K3按键步进电机停止。

单片机课程设计步进电机正反转

单片机课程设计步进电机正反转

单片机课程设计课题:单片机控制步进电机正反转设计系别:物理与电气工程学院专业:电气工程与其自动化姓名:陈玉琦(组长)学号:1411540指导老师:陈永超目录一.设计目的··4二.设计要求··4三.总体设计思路··4四.硬件设计··51 系统复位电路··52 系统时钟电路··63 系统电机与驱动部分··74 系统的显示电路··8五.软件设计··91 主程序的设计··92 显示子程序的设计··10六.整体电路图··14七.电路仿真··15八.设计总结··16附录··18参考文献··21步进电机正反转设计一、设计目的目的:系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力。

培养一定的自学能力和独立分析问题、解决问题的能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案;任务:完成所选题目的分析与设计,达到技术性能要求。

提交正式课程设计总结报告一份。

二、设计要求:1.具有速度和转向设定功能。

2.设置开始、停止以与正反转键。

3.转速以与转向由数码管显示。

三、总体设计思路方案与思路因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。

所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。

用软件控制单片机产生脉冲信号,通过单片机的P1口输出脉冲信号,因为所选电机是两相的,所以只需要P1口的低四位P1.0~P1.3分别接到电机的四根电线上。

可以通过调整输出脉冲的频率来调整电机的转速,通过改变输入脉冲的顺序来改变转动方向,P0口接LED数码管,可以显示当前的电机转速和转向,设置复位键可使正在转动的电机停止转动,大概可分为如下图所示的几部分。

单片机课程设计-单片机控制步进电机

单片机课程设计-单片机控制步进电机

单片机课程设计-单片机控制步进电机单片机课程设计单片机控制步进电机一、引言在现代自动化控制领域,步进电机以其精确的定位和可控的转动角度,成为了众多应用场景中的关键组件。

而单片机作为一种灵活、高效的控制核心,能够实现对步进电机的精确控制,为各种系统提供了可靠的动力支持。

本次课程设计旨在深入研究如何利用单片机来有效地控制步进电机,实现特定的运动需求。

二、步进电机的工作原理步进电机是一种将电脉冲信号转换为角位移或线位移的开环控制电机。

它由定子和转子组成,定子上有若干个磁极,磁极上绕有绕组。

当给绕组依次通电时,定子会产生磁场,吸引转子转动一定的角度。

通过控制通电的顺序和脉冲数量,可以精确地控制电机的转动角度和速度。

三、单片机控制步进电机的硬件设计(一)单片机的选择在本次设计中,我们选用了常见的_____单片机。

它具有丰富的引脚资源、较高的运算速度和稳定的性能,能够满足控制步进电机的需求。

(二)驱动电路为了驱动步进电机,需要使用专门的驱动芯片或驱动电路。

常见的驱动方式有全桥驱动和双全桥驱动。

我们采用了_____驱动芯片,通过单片机的引脚输出控制信号来控制驱动芯片的工作状态,从而实现对步进电机的驱动。

(三)接口电路将单片机的引脚与驱动电路进行连接,需要设计合理的接口电路。

接口电路要考虑信号的电平匹配、抗干扰等因素,以确保控制信号的稳定传输。

四、单片机控制步进电机的软件设计(一)控制算法在软件设计中,关键是确定控制步进电机的算法。

常见的控制算法有脉冲分配法和步距角细分法。

脉冲分配法是根据电机的相数和通电顺序,按照一定的时间间隔依次输出控制脉冲。

步距角细分法则是通过在相邻的两个通电状态之间插入中间状态,来减小步距角,提高电机的转动精度。

(二)程序流程首先,需要对单片机进行初始化设置,包括引脚配置、定时器设置等。

然后,根据用户的输入或预设的运动模式,计算出需要输出的脉冲数量和频率。

通过定时器中断来产生控制脉冲,并按照预定的顺序输出到驱动电路。

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。

所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图•注意:上图为共阳极接法,实际连接参考总体线路连接。

•驱动器信号端定义:PUL+:脉冲信号输入正。

( CP+ )PUL-:脉冲信号输入负。

( CP- )DIR+:电机正、反转控制正。

DIR-:电机正、反转控制负。

EN+:电机脱机控制正。

EN-:电机脱机控制负。

•电机绕组连接A+:连接电机绕组A+相。

A-:连接电机绕组A-相。

B+:连接电机绕组B+相。

B-:连接电机绕组B-相。

•电源连接VCC:电源正端“+”GND:电源负端“-”注意:DC直流范围:9-32V。

不可以超过此范围,否则会无法正常工作甚至损坏驱动器.•总体线路连接输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信号DIR+,DIR-③脱机信号EN+,EN-。

输入信号接口有两种接法,可根据需要采用共阳极接法或共阴极接法。

在这里我采用的是共阴极接法:分别将PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端);脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接入(不接也可,代码中未接,置空)。

按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。

注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路,以免损坏驱动器。

2、代码1.#include<reg51.h>2.#define MotorTabNum 53.unsigned char T0_NUM;4.sbit K1 = P3^5; // 启动5.sbit K2 = P3^4; // 反转6.sbit K3 = P3^3; // 加速7.sbit K4 = P3^2; // 减速8.sbit K5 = P3^1; //正反转9.10.sbit FX = P2^4; // 方向11.//sbit MotorEn = P2^5; // 使能12.sbit CLK = P2^6; // 脉冲13.14.inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};15.16.unsigned char g_MotorSt = 0; //17.unsigned char g_MotorDir = 0; //18.unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1};19.20.signed char g_MotorNum = 0;21.22.void delayms(xms);23.void mDelay(unsigned int DelayTime);24.void T0_Init();25.26.void KeyScan(void);27.28.29.30.void main(void)31.{32.T0_Init();33.// MotorEn = 0; //34.FX = 0;35.while(1)36.{37.KeyScan(); //38.}39.40.41.}42.43.void T0_Init()44.{45.TMOD = 0x01;46.TH0 = (65535-100)/256; // 1ms47.TL0 = (65535-100)%256;48.EA = 1;49.ET0 = 1;50.// TR0 = 1;51.52.}53.54.void T0_time() interrupt 155.{56.// TR0 = 0;57.TH0 = (65535-100)/256;58.TL0 = (65535-100)%256;59.T0_NUM++;60.if(T0_NUM >= MotorTab[g_MotorNum]) //61.{62.T0_NUM = 0;63.CLK=CLK^0x01; //64.}65.// TR0 = 1;66.}67.68.69.//--------------------------70.void KeyScan(void)71.{72.if(K1 == 0)73.{74.delayms(10);75.if(K1 == 0)76.{77.g_MotorSt = g_MotorSt ^ 0x01;78.// MotorEn ^= 1;79.TR0 = 1;80.FX ^= 0; //反转81.}82.}83.84.if(K2 == 0)85.{86.delayms(10); //正转87.if(K2 == 0)88.{89.g_MotorDir = g_MotorDir ^ 0x01;90.FX ^= 1; //加速91.}92.}93.94.if(K3 == 0) //95.{96.delayms(5); //加速97.if(K3 == 0)98.{99.g_MotorNum++;100.if(g_MotorNum > MotorTabNum) 101.g_MotorNum = MotorTabNum; 102.}103.}105.if(K4 == 0) //106.{107.delayms(5); // 减速108.if(K4 == 0)109.{110.g_MotorNum--;111.if(g_MotorNum < 0)112.g_MotorNum = 0;113.}114.}115.116.if(K5 == 0) //117.{118.delayms(10); // 正反转119.if(K5 == 0)120.{121.g_MotorSt = g_MotorSt ^ 0x01; 122.g_MotorDir = g_MotorDir ^ 0x01; 123.MotorEn ^= 1;124.TR0 = 1;125.while(1)126.{127.FX ^= 1; //128.delayms(90000);129.FX ^= 0; //130.delayms(90000);131.}132.}133.}135.136.void delayms(xms)//延时137.{138.unsigned int x,y;139.for(x=xms;x>0;x--)140.for(y=110;y>0;y--);141.}3、常见问题解答•控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口电路。

基于51单片机控制步进电机正反转

基于51单片机控制步进电机正反转

基于51单片机控制步进电机正反转此次采用uln2003模块来链接步进电机;## 步进电机工作原理步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。

每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。

步进电动机的结构形式和分类方法较多,一般按励磁方式分为磁阻式、永磁式和混磁式三种;按相数可分为单相、两相、三相和多相等形式。

因此我们可以控制单片机I/O口的电平来控制步进电机,此次设计中采用四相单拍工作方式,在这种工作方式下,A、B、C、D 三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。

因此这种通电方式叫做四相单四拍工作方式。

1.电机正转代码unsigned char code tableZ[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};2.电机反转代码unsigned char code tableF[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};代码如下#include <reg52.h>#define uint unsigned int #define uchar unsigned charunsigned char code tableZ[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};unsigned char code tableF[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//²½½øµç»úzhengvoid delay(unsigned int t);sbit S3=P3^4; //反转sbit S4=P3^5; //反停sbit S5=P3^6; // 正停//正转写入数据void motor_z() { unsigned char i,j; for (i=0; i<8; i++) { if(S5==0){break;} for(j=0;j<8;j++){ P1 = tableZ[i]&0x1f; delay(50); } } }//反转写入数据void motor_f(){ unsigned char i,j; for (i=0; i<8; i++) { if(S4==0){break;} for(j=0;j<8;j++){ P1 = tableF[i]&0x1f;delay(50); } }}void delay(unsigned int t)//延时函数{ unsigned int k; while(t--) { for(k=0; k<60; k++) { } }}void main(){while(1){motor_z();if(S3 == 0){motor_f();}}}•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•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 •1•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•33•34•35•36•37•38•39•40•41•42•43•44•45•46•47•48•49•50•51•52•53•54•55•56protel仿真图如下。

单片机课程设计-正反转可控的步进电机

单片机课程设计-正反转可控的步进电机

正反转可控的步进电机1 引言本课程设计目的是为了进一步掌握单片机系统,加强对系统设计和应用能力的培养而开设的综合设计训练环节。

本系统用51单片机和ULN2003A电机驱动芯片并加入控制按钮来实现步进电机的正、反转控制。

2 设计方案及原理步进电机可以对旋转角度和转动速度进行高精度的控制。

作为控制执行部件,广泛应用于自动控制和精密仪器等领域。

例如在仪器仪表、机床设备以及计算机的外围设备中(如打印机和绘图仪),常有对精确的、可控制的回转源的需要。

在这种情况下,使用步进电机最为理想。

2.1 步进电机控制步进电机两个相邻磁极之间的夹角为60°,线圈绕过相对的两个磁极构成一相。

此外各磁极上还有5个分布均匀的锯形小齿。

电机转子上没有绕组。

当某相绕组通电时,响应的两个磁极就分别形成N-S极,产生磁场,并与转子形成磁路。

如果这是定子的小齿与转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子齿与定子齿对齐,从而使步进电机向前“走”一步。

如果通过单片机按顺序给绕组施加有序的脉冲电流,就可以控制电机的转动,从而进行了数字到角度的转换。

转动的角度大小与施加的脉冲数成正比,转动的速度与脉冲频率成正比,而转动方向则与脉冲的顺序有关。

2.2 步进电机驱动方式步进电机常用的驱动方式是全电压驱动,即在电机移步与锁步时都加载额定电压。

为防止电机过流及改善驱动特性需加限流电阻。

由于步进电机锁步时,限流电阻要消耗掉大量的功率。

因此,限流电阻要有较大功率容量,并且开关管也要有较高的负载能力。

步进电机也可以使用软件方法,即使用单片机实现,这样不但简化了电路,同时降低了成本。

使用单片机以软件方式驱动步进电机,不但可以通过编程方法在一定范围之内自由的设定步进电机的转速,往返转动的角度以及转动次数等;还可以方便灵活的控制步进电机的运行状态,以满足不同用户的需求。

因此常把单片机步进电机控制电路称之为可编程步进电机控制驱动器。

最新单片机课程设计步进电机启动停止正反转

最新单片机课程设计步进电机启动停止正反转

单片机课程设计步进电机启动停止正反转单片机课程设计报告步进电机控制设计姓名:黄盛海 201030480108詹志勋 201030480125郑榕生 201030480128 班级: 10车辆工程1班指导老师:李震姜晟日期: 2012.6.18~6.20 华南农业大学工程学院摘要:步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,它的的驱动电路根据控制信号工作,控制信号由单片机产生。

本次课程设计主要采用AT89S52芯片,用汇编语言编写出电机的正转、反转、加速、减速、停止程序,通过单片机、电机的驱动芯片ULN2003以及相应的按键实现以上功能,并且步进电机的工作状态要用相应的发光二极管显示出来。

控制系统主要由硬件设计和软件设计两部分组成。

其中,硬件设计包括单片机的最小系统模块、电源模块、控制模块、步进电机ULN2003A驱动模块、彩灯显示模块5个功能模块的设计。

并且通过仿真控制系统对硬件、软件进行了调试和改善,实现了上述功能。

本系统具有智能性、实用性及可靠性的特点。

关键词:步进电机单片机电脉冲驱动系统汇编语言目录1、课程设计目的及要求 (4)2、整体系统分析 (4)3、硬件系统分析 (6)4、软件系统分析 (10)5、调试结果 (10)6、结论 (11)7、参考文献 (12)附一:源程序 (12)1. 课程设计目的及要求1.1 课程设计目的①增进对单片机的感性认识,加深对单片机理论方面的理解;②掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O口、A/D转换等;③了解和掌握单片机应用系统的软硬件设计过程及实现方法。

1.2 课程设计要求①设计一个步进电机控制器,要求用多个按键控制电机的启动/停止、加速、减速、反转等控制功能;②用彩灯显示电机的转动状态,如加速就控制彩灯快速闪烁,减速则控制彩灯慢速闪烁等。

2. 整体系统分析2.1步进电机控制工作原理步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。

单片机课程设计单片机控制步进电机

单片机课程设计单片机控制步进电机

单片机课程设计单片机控制步进电机单片机课程设计:单片机控制步进电机单片机(Microcontroller)是一种集成了中央处理器、存储器和输入/输出接口的微型计算机。

而步进电机(Stepper Motor)是一种将电脉冲信号转换为机械角位移的电磁设备。

在单片机课程设计中,控制步进电机是一项常见的任务。

本文将介绍如何使用单片机来控制步进电机,并展示一个基于单片机的课程设计实例。

一、步进电机的原理及特点步进电机是一种将电脉冲信号转换为机械位移的设备,其主要特点包括精密定位、易控制、低成本、没有超额负荷等。

步进电机通常由定子和转子组成,定子上的绕组通电产生磁场,而通过改变绕组通电的顺序和时序,可以实现步进电机的运动控制。

二、单片机控制步进电机的原理为了实现对步进电机的控制,我们需要使用单片机来产生相应的控制信号。

步进电机通常由一个驱动器和若干相继续组成。

单片机通过发出适当的信号给驱动器,进而控制电机的运动。

具体而言,单片机需要控制步进电机的相序、步数和速度。

1. 步进电机的相序控制步进电机的相序控制是通过依次激活不同相继的绕组,实现转子的转动。

单片机通过输出对应的高低电平信号给驱动器,从而控制绕组的激活顺序。

常见的步进电机驱动方式包括全步进和半步进。

2. 步进电机的步数控制步进电机的步数控制是通过控制单片机输出的脉冲数,来实现电机的旋转角度。

根据电机的分辨率和精度需求,我们可以设定单片机输出的脉冲数,从而控制电机的步进角度。

3. 步进电机的速度控制步进电机的速度控制是通过调节单片机输出脉冲信号的频率来实现的。

频率越高,电机转动的速度越快;频率越低,则电机转动的速度越慢。

单片机可以通过定时器等方式产生相应的脉冲频率来控制步进电机的转速。

三、基于单片机的步进电机控制课程设计实例下面将展示一个基于单片机的步进电机控制课程设计实例,该设计基于C语言编程,使用Keil软件进行开发。

设计要求:设计一个步进电机控制系统,使步进电机以设定的转速顺时针旋转一定圈数,并能逆时针旋转一定圈数。

单片机控制步进电机正反转

单片机控制步进电机正反转
其实本题目要求是要转180°,所以才一步一步走的,如果只是一直转则只需把电机驱动函数改为:
void Motor()
{
unsigned char i;
for(i=0;i<8;i++)
{
GPIO_MOTOR = FFW[i];
Delay(Speed);//调节转速
}
}
当然,这种控制个人觉得是不太精确的,如果只是让一个轴转动180度,则用步进电机外接减速箱,然后接一轴,让电机转一圈,轴转10度或20度,则控制会更精准。
unsigned char code FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转顺序
unsigned char Direction;
void Delay(unsigned int t);
void Motor();
void main()
Delay(10);
GPIO_MOTOR = FFZ[3];
Delay(10);
GPIO_MOTOR = FFZ[4];
Delay(10);
GPIO_MOTOR = FFZ[5];
Delay(10);
GPIO_MOTOR = FFZ[6];
Delay(15);
GPIO_MOTOR = FFZ[7];
{
unsigned char i;
while(1)
{
if(K1==0)//检测按键K1是否按下
{
Delay(10);//消除抖动
if(K1==0)
{
Direction=1;}while((i<200)&&(K1==0))//检测按键是否松开

51单片机实现三相六拍的步进电机控制(正反转、加减速、挡位显示)

51单片机实现三相六拍的步进电机控制(正反转、加减速、挡位显示)

51单片机实现三相六拍的步进电机控制(正反转、加减速、挡位显示)自己写的,不规范还望包含,keil和protues文件单片机源程序如下:1.#include <reg52.h>2.3.#define uchar unsigned char4.#define uint unsigned int5.uint speed = 100; //初始转速6.uint max = 200; //最慢转速7.uint min = 20; //最快转速8.9.sbit swich = P2^0; //总开关10.sbit dir = P2^1; //电机旋转方向11.sbit le1=P2^6;12.sbit le2=P2^7;13.sbit speedadd=P3^2;14.sbit speedsub=P3^3;15.16.unsigned char uca_MotorStep[]={0x01,0x03,0x02,0x06, 0x04,0x0C,0x08,0x09}; //励磁电流数组。

17.18.19.uchar leddata[]={20.21.0x3F, //"0"22.0x06, //"1"23.0x5B, //"2"24.0x4F, //"3"25.0x66, //"4"26.0x6D, //"5"27.0x7D, //"6"28.0x07, //"7"29.0x7F, //"8"30.0x6F, //"9"31.0x40, //"-"32.0x00, //熄灭33.};34.35.36.void delay1ms(void) //误差 0us37.{38.unsigned char a,b,c;39.for(c=1;c>0;c--)40.for(b=142;b>0;b--)41.for(a=2;a>0;a--);42.}43.44.void delay(uint x ) //多功能毫秒延时45.{46.uint i;47.for(i=0;i<x;i++)48.{49.delay1ms();50.}51.}52.53.54.55.void display(void)56.{57.if(swich==1)58.{59.P0= leddata[11];60.delay(1);61.le2=1;62.le1=1;63.delay(1);64.le2=0;65.le1=0;66.67.}68.else69.{70.if(dir==1)71.{72.P0= leddata[11];73.delay(1);74.le2=1;75.delay(1);76.le2=0;77.}78.else79.{80.P0 =leddata[10];81.delay(1);82.le2=1;83.delay(1);84.le2=0;85.}86.87.P0=leddata[9-(speed-20)/20];88.delay(30);89.le1=1;90.delay(5);91.le1=0;92.93.}94.}95.96.97.void Init_INT0()98.{99.EX0=1; //开启外部中断 0100.IT0=1; //设置成低电平触发,1为下降沿触发101.EX1=1; //开启外部中断 1102.IT1=1; //设置成低电平触发,1为下降沿触发103.EA=1; //开启总中断104.}105.106.void Interrupt0_handler() interrupt 0107.{108.EA=0; //首先关闭总中断,以消除按键出现的抖动所产生的干扰109.delay(20); //同样是为了消除抖动而产生新的中断110.if(speed>min)111.{speed=speed-20;} //限制最快转速112.else113.{speed=min;}114.while(speedadd==0);115.EA=1; //恢复中断116.}117.118.119.void Interrupt1_handler() interrupt 2120.{121.EA=0; //首先关闭总中断,以消除按键出现的抖动所产生的干扰122.delay(20); //同样是为了消除抖动而产生新的中断123.if(speed<max)124.{speed=speed+20;}125.else126.{speed=max;} //限制最慢转速127.while(speedsub==0);128.EA=1; //恢复中断130.131.void main()132.{133.int i; //初始化134.dir=1;135.le1=0;136.le2=0;137.138.139.start:140.if(swich==0)141.{Init_INT0();} //总开关开启,初始化中断,开始转动142.else143.{display(); goto start; }144.145.146.if(dir==1)147.seq:148.{149.while(1)150.{151.display();152.for (i=0; i<8; i++)153.{154.P1 = uca_MotorStep[i]; //取数据155.delay(speed); //调节转速156.}157.if(dir==0) //是否换向159.delay(5); // 换向延时160.goto oppo; //换向161.}162.if(swich==1) //总开关运行中关闭163.goto start; //等待开启164.165.}166.167.}168.else169.oppo:。

单片机tb6600驱动步进电机正反转加减速应用案例

单片机tb6600驱动步进电机正反转加减速应用案例

单片机tb6600驱动步进电机正反转加减速应用案例TB6600是一款常见的步进电机驱动器,可以用来驱动步进电机进行正反转以及加减速。

以下是一个简单的应用案例,以单片机控制TB6600驱动步进电机为例,实现正反转和加减速。

硬件连接1. 单片机(如Arduino)连接到TB6600的信号输入端(A、B、C、D)。

2. 单片机连接到TB6600的使能端(Enable)。

3. 单片机连接到步进电机。

代码实现以下是一个简单的Arduino代码示例,用于控制步进电机正反转和加减速:```cppinclude <>// 定义步进电机参数const int motorPin1 = 2; // A端const int motorPin2 = 3; // B端const int motorPin3 = 4; // C端const int motorPin4 = 5; // D端const int enablePin = 6; // 使能端// 初始化步进电机对象Stepper stepper(200, motorPin1, motorPin2, motorPin3, motorPin4);void setup() {// 初始化串口通信(9600);}void loop() {// 正转加速到最大速度,然后减速到停止(5); // 设置初始速度为5步/秒(100); // 正转100步delay(500); // 等待500毫秒(减速时间)(200); // 设置最大速度为200步/秒(100); // 正转100步delay(500); // 等待500毫秒(减速时间)(5); // 设置速度为5步/秒(100); // 正转100步,然后停止delay(500); // 等待500毫秒(停止时间)// 反转加速到最大速度,然后减速到停止(5); // 设置初始速度为5步/秒(-100); // 反转100步delay(500); // 等待500毫秒(减速时间)(200); // 设置最大速度为200步/秒(-100); // 反转100步delay(500); // 等待500毫秒(减速时间)(5); // 设置速度为5步/秒(-100); // 反转100步,然后停止delay(500); // 等待500毫秒(停止时间)}```在这个例子中,我们使用了Arduino的`Stepper`库来控制步进电机。

单片机课设步进电机控制正反转

单片机课设步进电机控制正反转

单片机课程设计报告设计题目:步进电机控制系统学院自动化与信息工程学院专业电气工程及其自动化班级姓名学号指导教师王水鱼2010 年秋季学期平时(10%)任务完成(30%)答辩(30%)课设报告(30%)总评成绩目录1.设计目的 (2)2.设计的主要内容和要求 (2)3.题目及要求功能分析 (2)4.设计方案 (5)4.1 整体方案 (5)4.2 具体方案 (5)5.硬件电路的设计 (6)5.1 硬件线路 (6)5.2 工作原理 (7)5.3 操作时序 (8)6. 软件设计 (8)6.1 软件结构 (8)6.2 程序流程 (9)6.3 源程序清单 (9)7. 系统仿真 (9)8. 使用说明 (10)9. 设计总结 (10)参考文献 (11)附录 (12)步进电机的控制1.设计目的(1)熟悉单片机编程原理。

(2)熟练掌握51单片机的控制电路和最小系统。

(3)单片机基本应用系统的设计方法。

2.设计的主要内容和要求(1)查阅资料,了解步进电机的工作原理。

(2)通过单片机给参数控制电机的转动。

(3)通过按钮控制启停及反转。

(4)其他功能。

3.题目及要求功能分析步进电机:步进电机是一种将电脉冲转化为角位移的执行机构。

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

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

步进电机可以作为一种控制用的特种电机,利用其精度高等特点,广泛应用于各种工业控制系统中。

三相单、双六拍步进电机的结构和工作原理:三相单、双六拍步进电机通电方式:这种方式的通电顺序是:U-U V-V-VW-W-WU-U或为U-UW-W-WV-V-VU-U。

按前一种顺序通电,即先接通U相定子绕组;接着是U、V两相定子绕组同时通电;断开U相,使V相绕组单独通电;再使V、W两相定子绕组同时通电;W 相单独通电;W、U两相同时通电,并依次循环。

单片机课程设计报告 电机正反转

单片机课程设计报告  电机正反转

C51课程设计报告设计课题:正反转可控的直流电动机设计要求:按下K1时可使直流电动机正转,按下K2时可使直流电动机反转,按下K3按钮时停止,在进行相应的操作时,对应LED 将被点亮。

设计目的:通过这次课程设计,进一步巩固我们对单片机编程的掌握,自己学会调试;同时向老师反映我们学习中不足的地方经过调试,最终得到如下程序:#include<reg51.h>sbit K1=P3^0; //正转开关sbit K2=P3^1; //反转开关sbit K3=P3^2; //停止开关sbit P1_0=P1^0;sbit P1_1=P1^1;sbit D1=P0^0;sbit D2=P0^1;sbit D3=P0^2; //端口位定义void main(){P1_0=0; P1_1=0; D3=0;while(1){if(K1==0) //按下正转按钮K1{while(K1==0); //等待K1按下结束,即断开K1P1_1=0; P1_0=1; //禁止反转,启动正转D2=1;D3=1; D1=0; //关闭反转指示灯D2与停止指示灯D3,点亮正转指示灯D1}else if(K2==0) //按下反转按钮K2{while(K2==0); //等待K2按下结束,即断开K2P1_0=0;P1_1=1; //禁止正转,开始反转D1=1;D3=1;D2=0; //关闭穤正转指示灯D1与停止指示灯D3,点亮反转指示灯D2}else if(K3==0) //按下停止按钮K3{while(K3==0); //等待K3按下结束,即断开K3P1_0=0; P1_1=0; //停止正转与反转D1=1; D2=1; //关闭正转与反转指示灯D1与D2D3=0; //点亮停止指示灯D3}}附图学习心得与体会:这次课程设计让我们进一步掌握了单片机编程,并且对以前所学的知识再进行熟识与整理。

这个程序的编写还很顺利,关键在于直流电动机控制电路的搭建,(如上图所示);当A点为低电平时,Q3,Q2截止,Q7,Q1导通,电机左端呈现高电平;当B点为高电平时,Q8,Q4截止,Q6,Q5导通,电机右端呈现低电平,因此当A为0,B为1时,电机正转。

51单片机控制步进电机的转动,加减速,停止,反转

51单片机控制步进电机的转动,加减速,停止,反转

51单片机控制步进电机的转动,加减速,停止,反转#includesbit inc=P3^2;sbit dec=P3^3;sbit zhzhd=P3^6;sbit fazhd=P3^7;bit flag=1;unsigned char t=0x00; //表正反速度void delay(unsigned int t);void motor_ffw();unsigned char code led7code[]={0x81,0xe7,0x92,0xc2,0xe4,0xc8,0x88,0xe3,0x00,0xc0};unsigned int num=0;unsigned char code FFW[8]={0x40,0x60,0x20,0x30,0x10,0x18,0x08,0x48}; unsigned char code FFZ[8]={0x48,0x08,0x18,0x10,0x30,0x20,0x60,0x40}; //反转void main(){EA=1;IT0=1;EX0=1;IT1=1;EX1=1;TMOD=0x06;TL0=0xff;TH0=0xff;TR0=1;ET0=1;P3=0x3f;P0=led7code[num%10];while(1){motor_ffw();}}void motor_ffw() /* 步进电机驱动*/ // {unsigned char i;int j;while(1){for(j=0;j<12;j++) //12个周期转一圈{ for (i=0; i<8; i++) //一个周期转30度{if(flag==1)P2 = FFW[i]; //取数据elseP2 = FFZ[i];delay(t); //t调节转速}}}}void int0(void) interrupt 0{EX0=0;delay(10);if(inc==0){num++;P0=led7code[num%10];if(num%10!=0&&flag){zhzhd=0;fazhd=1;} else if (num%10==0){zhzhd=0;fazhd=0;} else {zhzhd=1;fazhd=0;}switch(num%10){case 0:t=0x00;break;case 1:t=0x12;break;case 2:t=0x11;break;case 3:t=0x10;break;case 4:t=0x09;break;case 5:t=0x08;break;case 6:t=0x07;break;case 7:t=0x06;break;case 8:t=0x05;break;case 9:t=0x04;break;}}while(!inc);EX0=1;}void int1(void) interrupt 2{EX1=0;delay(10);if(dec==0){num--;if(num==65535)num=65529;P0=led7code[num%10];if(num%10!=0&&flag){zhzhd=0;fazhd=1;} else if (num%10==0){zhzhd=0;fazhd=0;} else {zhzhd=1;fazhd=0;}if(num==65535)num=65529;switch(num%10){case 0:t=0x00;break;case 1:t=0x12;break;case 2:t=0x11;break;case 3:t=0x10;break;case 4:t=0x09;break;case 5:t=0x08;break;case 6:t=0x07;break;case 7:t=0x06;break;case 8:t=0x05;break;case 9:t=0x04;break;}}while(!dec);EX1=1;}void huanx(void) interrupt 1{ET0=0;TR0=0;delay(10);if(P3^4==0){if(flag==1) {flag = 0;zhzhd=1;delay(500);fazhd=0;} else {flag = 1;fazhd=1;delay(500);zhzhd=0;}}while(!(P3^4));ET0=1;TR0=1;}// 延时程序void delay(unsigned int t){unsigned int k;while(t--){for(k=0; k<80; k++);}}。

单片机控制步进电机的正反转

单片机控制步进电机的正反转

单片机控制步进电机的正反转单片机控制步进电机的正反转最近好长一段时间没有来51hei单片机网了,接近考试的日子越来越近,开始把时间转到考试的准备上了,这两天回过头来想想,应该有快半个月对单片机的学习没有什么进展了,不过我一直坚信,单片机学习的路上,只要你肯坚持,只要你肯吃苦、肯付出,再难的关也不是问题,当然,最近也深深地体会到,学习单片机如果有一个好的老师作为指导,那学起来就不用那么费劲了,不过也没有关系,很多东西,条件不好的时候,就需要自己去改变,去想想其它的法子。

这两天开始研究单片机与步进电机的控制问题,感觉真的很好玩,步进电机在工业的很多地方都有很大的应用,比如流水线的运转,智能小车,系统定位都有很大的用处。

也是一个核心的技术。

步进电机的控制主要是由单片机IO口高低电平的控制以及输出脉冲来控制其转速,达到了一种数模转换的效果。

让单片机以并行二进制数转换成并行脉冲序列,并实现方向控制。

只要是脉冲在步进电机允许的范围之内,每个脉冲将使步进电机转动一个固定的步距角度,根据步距角的大小及实际走的步数,只要知道初始位置,便可以根据计算知道其最终位置了。

步进电机转动时的驱动的电流比较大,所以在使用单片机控制的时候,要在中间加一个放大电路,或者加上一些常用的放大电流的芯片,比如人们很经常用的一个芯片ULM2003.只有这样才能够使步进电机转动,不然会因为电流太小而实现不了效果。

下面把实际效果拿出来分享下:程序如下:#include <reg52.h>#define uchar unsigned char#define uint unsigned intuchar num[]={0x01,0x02,0x04,0x08};void delay(uint z){uint a;for(a=0;a<z;a++);}void main(){uchar i;uint j;for(j=0;j<2045;j++){{ P1=num[i];delay(1200);i++;if(i==4)i=0; }}while(1);}其中,z控制转速,j控制转的圈数,由计算和调试得出当j=2045时,步进电机走的圈数为1圈,这样,我们要步进电机走多少圈时,可以在里面嵌套一个程序,达到我们要电机转多少圈的目的。

基于单片机原理的步进电机的正反转程设计报告

基于单片机原理的步进电机的正反转程设计报告

基于单片机原理的步进电机的正反转程设计报告步进电机是一种电动机,能够精确地控制旋转角度和位置,广泛应用于工业和自动化控制系统中。

本篇报告将介绍基于单片机原理的步进电机的正反转程设计。

步进电机是一种特殊的电动机,每次输入一个脉冲信号,电机就会转动一个固定的角度,称为步距角。

步进电机的控制原理是通过改变相序对电机进行控制,根据不同的相序,电机可以实现正转或反转。

步进电机的正反转程设计涉及到两个方面,一是电机的控制电路,二是单片机的编程控制。

首先,电机的控制电路是步进电机正反转程设计的关键。

常见的控制电路有两种:全桥驱动电路和双H桥驱动电路。

全桥驱动电路由四个开关管组成,通过对不同开关管的开关控制,可以激活不同的相序,实现电机的正反转。

双H桥驱动电路由两个H桥组成,通过对H桥的开关控制,可以激活不同的相序,实现电机的正反转。

根据实际需求和控制方式选择适合的电机控制电路。

其次,单片机的编程控制是步进电机正反转程设计的关键。

单片机可以通过输出脉冲信号控制电机的正反转和转动速度。

编程时需要设置好脉冲信号的频率和方向,可以通过调节脉冲信号的频率来控制电机的转动速度,通过改变脉冲信号的方向来控制电机的正反转。

在步进电机的正反转程设计中,还可以考虑加入其他功能,如限位检测、位置控制等。

限位检测可以通过加入限位开关来实现,当电机转动到限位位置时,限位开关会触发信号,单片机可以根据信号做出相应的处理。

位置控制可以通过加入编码器等位置传感器来实现,单片机可以根据传感器反馈的信号准确控制电机的位置。

最后,步进电机的正反转程设计需要进行实际的调试和测试。

在实际调试和测试中,需要根据预设的参数和要求,进行电机的正反转程测试和性能评估。

根据实际测试结果,可以对设计进行优化和改进,以达到更好的性能和可靠性。

总之,基于单片机原理的步进电机的正反转程设计是一个复杂而关键的任务,需要综合考虑电机控制电路和单片机编程控制两个方面。

在设计过程中,需要理解步进电机的工作原理和控制原理,结合实际需求和要求进行设计和调试,最终实现电机的可靠正反转程控制。

基于单片机ATS控制步进电机正反转

基于单片机ATS控制步进电机正反转

基于单片机A T S控制步进电机正反转The latest revision on November 22, 2020目录步进电机 (7)附件A 源程序 .......................................... (12)附件B 仿真结果 (15)致谢 (18)摘要能够实现步进电机控制的方式有多种,可以采用前期的模拟电路、数字电路或模拟与数字电路相结合的方式。

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测日新月异更新。

本文介绍一种用AT89S52作为核心部件进行逻辑控制及信号产生的单片机技术和汇编语言编程设计的步进电机控制系统,步进电机背景与现状、硬件设计、软件设计及其仿真都做了详细的介绍,使我们不仅对步进电机的原理有了深入的了解,也对单片机的设计研发过程有了更加深刻的体会。

本控制系统采用单片机控制,通过人为按动开关实现步进电机的开关,复位。

该系统还增加了步进电机的加速及减速功能。

具有灵活方便、适用范围广的特点,基本能够满足实践需求。

关键词: AT89S52 步进电机 ULN2003第一章系统分析框图设计根据系统要求画出基于AT89S52单片机的控制步进电机的控制框图如图2-1所示。

图2-1基于AT89C52单片机的控制步进电机的控制框图系统主要包括单片机、复位电路、晶振电路、按键电路、步进电机及驱动电路几部分。

晶振电路AT89C52单片机有一个用于构成内部振荡器的反相放大器,XTAL1 和XTAL2 分别是放大器的输入、输出端。

石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。

晶振模块自带振荡器、提供低阻方波输出,并且能够在一定条件下保证运行。

最常用的两种类型是晶振模块和集成RC振荡器(硅振荡器)。

晶振模块提供与分立晶振相同的精度。

硅振荡器的精度要比分立RC振荡器高,多数情况下能够提供与陶瓷谐振槽路相当的精度。

图2-2为晶振电路。

图2-2 晶振电路第二章系统设计硬件连接图根据图2-1,可以设计出单片机控制步进电机的硬件电路图,如图3-1所示。

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

单片机课程设计报告设计题目:步进电机控制系统学院机械工程学院专业机械设计制造及其自动化班级姓名学号指导教师湖北工业大学2010 年秋季学期目录1.设计目的 (2)2.设计的主要内容和要求 (2)3.题目及要求功能分析 (2)4.设计方案 (5)4.1 整体方案 (5)4.2 具体方案 (5)5.硬件电路的设计 (6)5.1 硬件线路 (6)5.2 工作原理 (7)5.3 操作时序 (8)6. 软件设计 (8)6.1 软件结构 (8)6.2 程序流程 (9)6.3 源程序清单 (9)7. 系统仿真 (9)8. 使用说明 (10)9. 设计总结 (10)参考文献 (11)附录 (12)步进电机的控制1.设计目的(1)熟悉单片机编程原理。

(2)熟练掌握51单片机的控制电路和最小系统。

(3)单片机基本应用系统的设计方法。

2.设计的主要内容和要求(1)查阅资料,了解步进电机的工作原理。

(2)通过单片机给参数控制电机的转动。

(3)通过按钮控制启停及反转。

(4)其他功能。

3.题目及要求功能分析步进电机:步进电机是一种将电脉冲转化为角位移的执行机构。

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

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

步进电机可以作为一种控制用的特种电机,利用其精度高等特点,广泛应用于各种工业控制系统中。

三相单、双六拍步进电机的结构和工作原理:三相单、双六拍步进电机通电方式:这种方式的通电顺序是:U-U V-V-VW-W-WU-U或为U-UW-W-WV-V-VU-U。

按前一种顺序通电,即先接通U相定子绕组;接着是U、V两相定子绕组同时通电;断开U相,使V相绕组单独通电;再使V、W两相定子绕组同时通电;W 相单独通电;W、U两相同时通电,并依次循环。

这种工作方式下,定子三相绕组需经过六次切换才能完成一个循环,故称为“六拍”,而“单、双六拍”则是因为单相绕组与两相绕组交替接通的通电方式。

步进电机的驱动电源步进电机应由专用的驱动电源来供电,由驱动电源和步进电机组成一套伺服装置来驱动负载工作。

步进电机的驱动电源,主要包括边频信号源、脉冲分配器和脉冲放大器等三个部分,如图1-4所示。

边频信号源是一个频率从几十赫兹到几千赫兹的可连续变化的信号发生器。

变频信号员可以采用多种线路。

最常见的有多谐振荡器和单结晶体管构成的驰张振荡器两种。

它们都是通过调节电阻和电容的大小来改变电容充放电的时间常数,以达到选取脉冲信号频率的目的。

脉冲分配器是由门电路和双稳态处发起组成的逻辑电路,它根据指令把脉冲信号按一定的逻辑关系加到放大器上,使步进电机按一定的运行方式运转。

步进电机的钉子绕组可以是任意相数,常有三相制,四相制,五相制,六相制4种。

根据转子结构不同,步进电机分为3种:反应式步进电机(VR)、永磁式步进电机(PM)和混合式步进电机(HB)。

其中反应式步进电机结构最为简单,应用最广泛。

绕组通电方式通常有单排方式、双拍方式和单双拍方式3种。

通过软件编程,用单片实现步进电机控制的脉冲分配;实现步进电机的正常工作。

根据题目要求,开机后,电机不转,按下前进,后退,左转,右转任意一按钮,电机按设置的方式转动,当按下停止按钮后,电机停止转动。

电机的不同转速通过设置延时时间常数来确定。

延时时间常数越小电机转速越快.反之越快。

4. 设计方案4.1 整体方案本系统主要是由AT89C51,步进电机控制器ULN2004,步进电机,通过单片机编程,实现步进电机控制的脉冲分配,使电机实现正转,反转以及停止等功能。

4.2具体实现方案根据系统要求画出单片机控制步进电机的控制框图,见下图(1)。

系统包括单片机、按键和步进电机。

(1)单片机控制步进电机的控制框图开始通电后,步进电机停止转动,单片机分别接有按钮开关K1,K2,K3,K4用来控制步进电机的不同转向,不同转速,当按下K1后,电机正转;当按下K2后,电机反转,当按下K3,电机停转。

为实现电机加速,减速,给电机设置不同延时时间常数,根据时间常数的不同,电机转速不同,延时时间常数越大,电机转速越慢,延时时间常数越小,电机转速越快。

5.硬件电路的设计5.1 硬件线路根据系统框图,可以设计出单片机控制步进电机的硬件电路图,电路图见附录图(2),图(3),图(4)为提高部分电5.2工作原理:单片机的选择,单片机的种类较多,选择时应根据控制系统的程序和数据量的大小来确定。

由于本系统控制简单,程序和数据量都不大,因此我们选用89C51单片机,89C51晶振频率采用12MHZ。

外接晶体引脚XTAL1和XTAL2①XTAL1:接外部晶体的一个引脚.在单片机内部,它是构成片内振荡器的反相放大器的输入端.当采用外部振荡器时,该引脚接受振荡器的信号,即把此信号直接接到内部时钟发生器的输入端.②XTAL2:接外部晶体的另一个引脚.在单片机内部,它是上述振荡器的反相放大器的输出端.采用外部振荡器时,此引脚应悬浮不连接.③单片机外接电路时钟产生产生和复位电路片内电路与片外器件就构成一个时钟产生电路,CPU的所有操作均在时钟脉冲同步下进行。

片内振荡器的振荡频率非常接近晶振频率,一般多在1.2MHz~12MHz之间选取。

C1、C2是反馈电容,其值在5pF~30pF之间选取,典型值为30pF。

本电路选用的电容为30pF,晶振频率为12MHz。

这样就确定了单片机的4个周期分别是:振荡周期=1/12sμ;机器周期(SM)=sμ1;指令周期=sμ41。

~晶振电路如下图所示。

按键采用5个功能,前进,后退,左转,右转按键分别接在单片机的P2.0至P2.4引脚上,用来控制步进电机的转向,作为控制信号的输入端键,按下不同键,电机按要求实现正转反转。

提高电路图,则用8个按键,K1至K6为设置电机的不同转速,K7和K8为电机的正转和反转。

驱动电路,单片机的输出电流太小,不能直接接与步进电机相连,需要增加驱动电路。

对于小直流0.5A的步进电机,可采用ULN2003类的驱动IC。

ULN2003的技术参数如下所示最大输出电压:50V。

最大连续输出电流:0.5A。

最大连续输入电流:25mA。

功率:1W。

如下图(4)为ULN2003系列驱动器的引脚图,左边1-7为输入端,接单片机P1口的输出端,引脚8接地;左侧10-16引脚为输出端,接步进电机,引脚9接电源5V,该驱动器可提供最高0.5A的电流。

正转采用1相激磁方式,反转采用一到俩相激磁方式。

5.3 操作时序按电路图再Proteus中连接号电路图,检查无误后导入程序,编译连接后进行仿真。

按不同的键实现不同的功能。

从而控制电机正转,反转,停止以及电机以不同的速度转动。

6. 软件设计6.1 软件结构对单片机的P2口设置堆栈,开始时步进电机停转,按键进行扫描,判断是否有按键按下,由于按键的时间特性,程序中加入了消抖程序,当判断按键按下时消除按键的抖动,按下不通的键跳至不同的转动模块,调用转动程序,转动程序通过查表实现,当执行完之后继续扫描看是否有按键按下,没有则继续当前循环,有则跳至相应的模块。

6.2 程序流程图附录(二)6.3 源程序清单程序采用ASM51汇编语言编写。

附录(三)7. 系统仿真连接好电路后,对程序进行装载编译连接后,仿真。

结果:按下前进按钮电机1正转,电机2反转按下后退按钮电机1反转,电机2正转按下左转按钮电机1正转,电机2正转按下右转按钮电机1反转,电机2反转注:步进电机控制模拟小车的轮子转动模型。

提高要求:按下K7,按下K1时电机正转且转速较快,当按下K1至K6不同键时,电机的转速不同,越来越慢。

按下K8,按下K1时电机正转且转速较快,当按下K1至K6不同键时,电机的转速不同,越来越慢。

8. 使用说明步进电机控制模拟小车使用说明,系统上有5个按键,每个按键都有不同的功能:按下前进按钮,电机1正转,电机2反转,小车前进按下后退按钮,电机1反转,电机2正转,小车后退按下左转按钮,电机1正转,电机2正转,小车左转按下右转按钮,电机1反转,电机2反转,小车后退9. 设计总结体会一周的课设很快的就结束了,本次课设主要以单片机为基础,用单片机来控制电机的转动,熟悉单片机的一般搭建电路,了解一般电子电路与单片机构成简单系统及简单编程的方法。

熟练掌握了KeilC51集成开发环境的使用方法,进一步加深对单片机常用指令的理解与运用。

能够较熟练的运用protues绘制电路原理图以及进行仿真。

以及keilc51和protues的联合调试。

在课设过程中,使我得到了一次用专业知识、专业技能分析和解决问题、全面系统的锻炼。

使我在单片机的基本原理、单片机应用系统开发过程,以及常用编程设计思路技巧的掌握方面有了很大的提高。

同时在老师的悉心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,单片机领域对我今后进一步学习计算机方面的知识有极大的帮助,使我们积累实际电子制作经验,达到学以致用的目的,真正的吧理论和实践结合起来,让我们进一步体验到实践的重要性。

对我们以后的工作有很大的帮,同时锻炼了我们团队合做精。

同时非常感谢老师的细心指导,当我们遇到困难时,能及时给予我们帮助。

参考文献:[1]潘晓宁,朱耀东。

单片机程序设计实践教程[2]刘海宽,包建华。

单片机实验与实训教程[3]杨居义,马宁。

单片机原理与工程应用[4]胡健,刘玉宾。

单片机原理及接口技术实践教程[5]韩志军,刘新民。

单片机系统设计与应用实例[6]朱博,马鸣鹤。

单片机应用技术教程(3)程序流程图附录(二)硬件原理图(2)基本电路图(3)基本电路图(4)提高电路图附录(三)源程序QJ EQU P2.0 ; 前进HT EQU P2.1 ; 后退LZ EQU P2.2 ; 左转RZ EQU P2.3 ; 右转TZ EQU P2.4 ; 停止OUT EQU P1 ;p1口输出;-----------------------------------------------------ORG 40HSTOPS1: ORL OUT,#0FFH ;步进电机停转LOOP: JNB QJ,ZZ1 ;判断是否按下前进按钮JNB HT,FZ1JNB LZ,LZ1JNB RZ,RZ1JNB TZ,STOPSJMP LOOP ;循环;----------------------------------------------ZZUAN: MOV R0,#00H ; 前进-----》1正转,2反转;制表初值ZZUAN1: MOV A,R0MOV DPTR,#TAB ;表指针MOVC A,@A+DPTR ;取表代码JZ ZZUAN ;是否取到结束码?MOV OUT,A ;从P1输出,前进JNB HT,FZ1JNB LZ,LZ1JNB RZ,RZ1JNB TZ,STOPSCALL DELAY ;步进电机转速INC R0 ;取下一个码JMP ZZUAN1;-------------------------------------------------FZUAN: MOV R0,#05H ; 后退-----》2正转,1反转FZUAN1: MOV A,R0MOV DPTR,#TABMOVC A,@A+DPTRJZ FZUAN;CPL AMOV OUT,AJNB QJ,ZZ1JNB LZ,LZ1JNB RZ,RZ1JNB TZ,STOPSCALL DELAYJMP FZUAN1;----------------------------------------------------ZZ1: CALL DELAY ;键盘去干扰;按前进按钮消除抖动JNB QJ,$ ;放开了前进按钮吗?CALL DELAY ;放开消除抖动JMP ZZUAN ;步进电机正转FZ1: CALL DELAYJNB HT,$CALL DELAYJMP FZUANLZ1: CALL DELAYJNB LZ,$CALL DELAYJMP LZUANRZ1: CALL DELAYJNB RZ,$CALL DELAYAJMP RZUANSTOPS: CALL DELAYJNB TZ,$CALL DELAYJMP STOPS1;-------------------------------------------------------LZUAN: MOV R0,#0AH ;左转-----》1,2正转LZUAN1: MOV A,R0MOV DPTR,#TABMOVC A,@A+DPTRJZ LZUAN;CPL AMOV OUT,AJNB QJ,ZZ1JNB HT,FZ1JNB RZ,RZ1JNB TZ,STOPSCALL DELAYINC R0JMP LZUAN1;-------------------------------------------------------RZUAN: MOV R0,#0fH ;右转---》1,2反转RZUAN1: MOV A,R0MOV DPTR,#TABMOVC A,@A+DPTRJZ RZUAN;CPL AMOV OUT,AJNB QJ,ZZ1JNB HT,FZ1JNB LZ,LZ1JNB TZ,STOPSCALL DELAYINC R0JMP RZUAN1;-------------------------------------------------DELAY: MOV R1,#255 ;延时D1: MOV R2,#255DJNZ R2,$DJNZ R1,D1RET;DelayS: MOV R5,#0AH;L1: MOV R6,#0FFH;Delay0: MOV R7,#0FFH;Delay1: DJNZ R7,Delay1; DJNZ R6,Delay0;DJNZ R5,L1;RET;-----------------------------------------------------TAB: DB 33H,96H,0CCH,69H,00H ;正转码DB 33H,69H,0CCH,96H,00H ;反转码DB 33H,66H,0CCH,99H,00H ;左转码DB 33H,99H,0CCH,66H,00H ;右转码END;。

相关文档
最新文档