51单片机实现步进电机控制
基于51单片机的步进电机控制
电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-。。。), 八拍(A-AB-B-BC-C-CD-D-DA-A。。。) 3、系统电路图
(1)接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容 0.1uF (2)接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用 12MHz), 还有辅助电容 20pF (3)接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析 复位工作原理 4、 接配置:EA(PIN31) (1)四个 8 位通用 I/O 端口,对应引脚 P0、P1、P2 和 P3; (2)两个 16 位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) (3)一个串行通信接口;(SCON,SBUF) (4)一个中断控制器;(IE,IP) 根据以上的方案比较与论证确定总体方案,确定硬件原理图。原理图如下:
1.3 步进电机的特点
1.精度高 一般的步进电机的精度为步进角的 3-5%,且不累积。可在宽 广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反 转控制及制动 等,这是步进电动机最突出的优点
2.过载性好——其转速不受负载大小的影响,不像普通电机,当负载加大 时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的 场合;
一、步进电机与驱动电路
1.1 什么是步进电机
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱 动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度 (及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目 的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调 速的目的。
单片机控制步进电机调速实验
51系列单片机控制步进电机调速实验实验目的及要求:1、熟悉步进电机的工作原理2、熟悉51系列单片机的工作原理及调试方法3、设计基于51系列单片机控制的步进电机调速原理图(要求实现电机的速度反馈测量,测量方式:数字测量)4、实现51系列单片机对步进电机的速度控制(步进电机由实验中心提供,具体型号42BYG )由按钮控制步进电机的启动与停止;实现加速、匀速、和减速控制。
速度设定由键盘设定,步进电机的反馈速度由LED数码管显示。
实验原理:步进电机控制原理一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。
步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。
因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。
步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。
由于输入的是脉冲信号,输出的角位移是断续的,所以又称为脉冲电动机。
随着数字控制系统的发展,步进电动机的应用将逐渐扩大。
步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
步进电机的驱动电路根据控制信号工作,控制信号可以由单片机产生。
电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开。
0、1/3て、2/3て,(相邻两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐,B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图:(图2所示)图1 是反应式步进电动机结构示意图,它的定子具有均匀分布的六个磁极,磁极上绕有绕组。
基于51单片机的步进电机调速系统(含完整代码)
课程设计报告设计题目:遥控小车——基于51单片机的步进电机调速系统学院:专业:班级:学号:姓名:电子邮件:时间:成绩:指导教师:华南农业大学理学院应用物理系课程设计(报告)任务书学生姓名指导教师职称学生学号专业电子信息科学与技术题目基于51单片机的步进电机调速系统(遥控小车)任务与要求1. 设计并制作电路,利用单片计控制步进电机运转。
2. 通过键盘可以不间断地设定改变电机的转速、转向。
3. 利用显示器实时显示转速等参数。
4. 扩展功能:可设定转动步数。
开始日期2014 年3 月完成日期2014 年3 月1引言步进电机是一种将电脉冲转化为角位移的执行机构。
目前,步进机已经广泛应用于领域,例如工业生产中的机械臂的控制,照明装置和监控摄像机转动等。
步进机在装置转动、精确位移方面有很重大的作用。
本系统是基于STC89C51 单片机的遥控小车。
采用STC89C51单片机作为控制核心,通过ULN2003A驱动步进机(28BYJ-48)转动,由按键和显示屏1602组成人机交互模块,同时通过315M无线发射和接收模块向单片机输入控制信号,将整个系统固定于简易小车上,最终实现小车测试和远程遥控功能。
基本达到预定的设计要求以及功能的扩展。
2系统的设计与理论分析2.1系统总体设计2.2理论分析本设计分为两种工作模式:测试模式、遥控模式。
在电路板上有一个带锁的开关进行设置。
测试模式工作时,通过控制小车上的按键进行加速、减速、反转、设置、步数增、步数减等按键,单片机扫描按键,通过软件控制液晶模块显示对应的转速、设置的速度和步数,同时控制步进机模块进行相应的转动。
步进机的是由ULN2003A达林顿管驱动,由单片机控制输入脉冲的频率来控制步进机的转速,单片机是通过程序查表对4个I/O口输出脉冲,本次设计采用的是两相四线减速步进机,步进角为5.625°,减速比为64:1,程序采用的是8拍查表,具有较好的扭矩。
遥控模式工作时,遥控部分五个按键分别输入前、后、左、右、暂停,单片机扫描按键,通过无线发射模块发射串行编码,小车的无线接收模块接收对应的编码,送至单片机进行解码,从而控制液晶模块的显示和步进机模块的工作,进而完成功能。
基于51单片机的步进电机控制系统设计与实现
步进电机工作原理
步进电机是一种基于磁场的控制系统,工作原理是当电流通过定子绕组时,会 产生一个磁场,该磁场会吸引转子铁芯到相应的位置,从而产生一定的角位移。 步进电机的角位移量与输入的脉冲数量成正比,因此,通过控制输入的脉冲数 量和频率,可以实现精确的角位移和速度控制。同时,步进电机具有较高的分 辨率和灵敏度,可以满足各种高精度应用场景的需求。
二、系统设计
1、硬件设计
本系统主要包括51单片机、步进电机、驱动器、按键和LED显示等部分。其中, 51单片机负责接收按键输入并控制步进电机的运动;步进电机用于驱动负载运 动;驱动器负责将51单片机的输出信号放大,以驱动步进电机。LED显示用于 显示当前步进电机的状态。
2、软件设计
软件部分主要包括按键处理、步进电机控制和LED显示等模块。按键处理模块 负责接收用户输入,并根据输入控制步进电机的运动;步进电机控制模块根据 按键输入和当前步进电机的状态,计算出步进电机下一步的运动状态;LED显 示模块则负责实时更新LED显示。
三、系统实现
1、按键输入的实现
为了实现按键输入,我们需要在主程序中定义按键处理函数。当按键被按下时, 函数将读取按键的值,并将其存储在全局变量中。这样,主程序可以根据按键 的值来控制步进电机的转动。
2、显示输出的实现
为了实现显示输出,我们需要使用单片机的输出口来控制显示模块的输入。在 中断服务程序中,我们根据设定的值来更新显示模块的输出,以反映步进电机 的实时转动状态。
基于单片机的步进电机控制系统需要硬件部分主要包括单片机、步进电机、驱 动器、按键和显示模块等。其中,单片机作为系统的核心,负责处理按键输入、 控制步进电机转动以及显示输出等功能。步进电机选用四相八拍步进电机,驱 动器选择适合该电机的驱动器,按键用于输入设定值,显示模块用于显示当前 步进电机的转动状态。
步进电机控制程序(c语言51单片机)
// pri_dj = Pme );
if( i == set_pwm_width ) { P1 = 0xff; i = 0; one _round_flg = 0; while ( !one_round_flg & key_puse );}
if(!key_puse) { delay(4ms); if(!key_puse) break; }
while ( key_puse & key_clear ); delay ( 8ms );
if ( !key_clear ) { round_num = 0; display(); }
if ( !key_puse ) break; }
while( !key_puse ); delay(8ms);
while( !key_puse ); }
set_display_num(); for(i = 0; i < LEDLen ; i ++){
P0 = 0xf0; P0 = P0 | LEDBuf[i] ; if(i==0) led_1000 = 0; //P0^4 if(i==1) led_100 = 0; //P0^5 if(i==2) led_10 = 0; //P0^6 if(i==3) led_1 = 0; //P0^7
delay ( 1ms ); tmp = (~(P2 | 0xF0)); P2 = 0x7F; // 0111 1111
delay ( 1ms ); tmp = (~(P2 | 0xF0)) * 10 + tmp; set_round_num = set_round_num + tmp * 100; set_round_num = set_round_num * Chilun_Num;
51单片机驱动步进电机__终极完整版
51单片机驱动步进电机__终极(完整版)在这里介绍一下用51单片机驱动步进电机的方法。
这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈360 度 , 需要 48 个脉冲完成!!!该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5:黄色、6:黑色。
采用51驱动ULN2003的方法进行驱动。
ULN2003的驱动直接用单片机系统的5V电压,可能力矩不是很大,大家可自行加大驱动电压到12V。
;************************************************ ******************************;************************* 步进电机的驱动*************************************** ; DESIGN BY BENLADN911 FOSC = 12MHz 2005.05.19;---------------------------------------------------------------------------------; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!!; 本步进电机步进角为 7.5度 . 一圈 360 度 , 需要48 个脉冲完成!!!;---------------------------------------------------------------------------------; A组线圈对应 P2.4; B组线圈对应 P2.5; C组线圈对应 P2.6; D组线圈对应 P2.7; 正转次序: AB组--BC组--CD组--DA组 (即一个脉冲,正转 7.5 度);----------------------------------------------------------------------------------;----------------------------正转-------------------------- ORG 0000H LJMP MAIN ORG 0100HMAIN:MOV R3,#144 正转 3 圈共 144 脉冲 START: MOVR0,#00H START1: MOV P2,#00H MOV A,R0MOV DPTR,#TABLE MOVC A,@A+DPTRJZ START 对 A 的判断,当 A = 0 时则转到 START MOV P2,ALCALL DELAY INC R0DJNZ R3,START1MOV P2,#00H LCALL DELAY1;-----------------------------反转------------------------MOV R3,#144 反转一圈共 144 个脉冲 START2:MOV P2,#00H MOV R0,#05 START3: MOV A,R0MOV DPTR,#TABLE MOVC A,@A+DPTR JZ START2 MOV P2,A CALL DELAY INC R0DJNZ R3,START3 MOV P2,#00HLCALL DELAY1 LJMP MAINDELAY: MOV R7,#40 步进电机的转速 M3: MOV R6,#248 DJNZ R6,$ DJNZ R7,M3RETDELAY1: MOV R4,#20 2S 延时子程序 DEL2: MOV R3,#200 DEL3: MOV R2,#250 DJNZ R2,$ DJNZ R3,DEL3 DJNZ R4,DEL2 RET TABLE:DB 30H,60H,0C0H,90H 正转表 DB 00 正转结束DB 30H,90H,0C0H,60H 反转表 DB 00 反转结束 END 51单片机控制四相步进电机拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为 360/(4×5)=18度。
51单片机驱动步进电机的方法
51单片机驱动步进电机的方法一、步进电机简介步进电机是一种将电脉冲转化为角位移的执行机构,广泛应用于各种自动化设备中。
其工作原理是,当一个脉冲信号输入时,电机转动一个步距角,从而实现电机的精确控制。
二、51单片机驱动步进电机的方法1、硬件连接需要将51单片机与步进电机连接起来。
通常,步进电机需要四个引脚,分别连接到单片机的四个GPIO引脚上。
同时,还需要连接一个驱动器来提高电机的驱动能力。
2、驱动程序编写接下来,需要编写驱动程序来控制步进电机的转动。
在51单片机中,可以使用定时器或延时函数来产生脉冲信号,然后通过GPIO引脚输出给电机。
同时,还需要设置电机的步距角和转向,以保证电机的精确控制。
3、示例程序以下是一个简单的示例程序,用于演示如何使用51单片机驱动步进电机:cinclude <reg52.h> //包含51单片机的头文件sbit motorPin1=P1^0; //定义连接到P1.0引脚的电机引脚sbit motorPin2=P1^1; //定义连接到P1.1引脚的电机引脚sbit motorPin3=P1^2; //定义连接到P1.2引脚的电机引脚sbit motorPin4=P1^3; //定义连接到P1.3引脚的电机引脚void delay(unsigned int time) //延时函数unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<1275;j++);void forward(unsigned int step) //正转函数motorPin1=0;motorPin2=0;motorPin3=0;motorPin4=0; //清零电机引脚delay(step); //延时一段时间motorPin1=1;motorPin3=1;motorPin2=0;motorPin4=0; //设置转向和步距角delay(step); //延时一段时间void backward(unsigned int step) //反转函数motorPin1=0;motorPin2=0;motorPin3=0;motorPin4=0; //清零电机引脚delay(step); //延时一段时间motorPin2=1;motorPin4=1;motorPin3=0;motorPin1=0; //设置转向和步距角delay(step); //延时一段时间void main() //主函数unsigned int step=1000; //设置步距角为1000微步forward(step); //正转一圈backward(step); //反转一圈while(1); //循环等待,保持电机转动状态在这个示例程序中,我们使用了四个GPIO引脚来控制步进电机的转动。
基于C51单片机步进电机综合控制实验
重庆工商大学计算机与信息工程学院学院《单片机原理及应用》课程实验报告实验名称:步进电机综合控制实验实验班级:2010级自动化专业班级:2010级自动化三班指导老师:文远熔组员:陶园2010133330 王路2010133344江洋2010133335陈娅2010133326张琴芳2010133317张丹2010133320(组长)一、摘要:本实验利用8051单片机达到控制步进电机的启动、停止、正转、反转、点动、转过指定角度、状态显示和数据指示的目的,使步进电机控制更加灵活。
步进电机驱动芯片采用ULN2003,ULN2003具有大电流、高电压,外电路简单等优点。
利用ZLG7290模块驱动LED数码管显示速度设定值。
通过这个单片机控制系统的设计来掌握步进电机的工作原理和驱动过程以及LED显示原理和ZLG7290模块的使用方法,用LED数码管显示实验要求的状态结果,设计电路的硬件接线图和实现上述要求的程序。
关键词:51单片机步进电机ZLG7290 ULN2003二、设计内容与要求:1、任务介绍:实现步进电机按规定的速度正转、反转,转过指定的角度,要有点动功能。
所有命令通过键盘输入,步进电机在运行过程中要有状态和数据指示。
2、每套设计文档应包括:系统原理说明、程序框图、电路原理图和程序清单。
三、实验器件介绍及原理:本实验采用单片机来控制步进电机,实现了软件与硬件相结合的控制方法。
在单片机环境下,用ULN2003驱动芯片驱动步进电机,用ZLG7290芯片作用下的按键控制步进电机的运行,从而达到实验要求。
其控制框图(图一)为:图一:控制框图1、系统硬件介绍1.1步进电机1.1.1相关的技术指标:a、相数:指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机,本实验用的是四相步进电机。
电机相数不同,其步距角也不同。
b、步距角:表示控制系统每发一个步进脉冲信号,电机所转动的角度。
本实验程序运行前要先测量步进电机的步距角。
用51单片机控制两相四线步进电机
用51单片机控制两相四线步进电机最近学习步进电机的驱动原理,照着教材自己实践了一下用ULN2003驱动28BYJ-48两相5线步进电机,可以正常转动。
手头有一个旧光驱,拆开发现里面有三个电机,其中有一个控制激光头寻迹的两相四线步进电机,我就用51的单片机让它也转起来。
一开始照葫芦画瓢用ULN2003驱动,结果发现无论如何也不行。
原来ULN2003基本没输出电流,只能驱动有公共端的两相五线、两相六线步进电机,不能驱动2相4线步进电机。
然后改用L293D驱动,可以转动。
通过按钮控制正反转时发现,按键释放后,电机迅速发热,烫手。
用万用表测量,发现电机A,A-或B,B-直接存在电位差!应该是按键释放时,IN1-IN4没有归零。
找到问题,就容易解决了。
修改程序,可以完美运行,键1按下正转,释放停下,键2按下反转,释放停下。
IN1-IN4分别接P1口的低四位。
工作方式选用8拍。
A 1 1 0 0 0 0 0 1A- 0 0 0 1 1 1 0 0B 0 1 1 1 0 0 0 0B- 0 0 0 0 0 1 1 1附上源程序,仅供参考。
#include#define uint unsigned int#define uchar unsigned charsbit K3=P2^5;sbit K4=P2^4;//k3正转。
k4反转。
释放停止uchar code step_table[]={0x8,0xa,0x2,0x6,0x4,0x5,0x1,0x9};void delay(unsigned int m){unsigned int i,j;for(i=m;i>0;i--)for(j=110;j>0;j--);}void xp()//x轴正转{while(!K3){uint i;for(i=0;i<8;i++){P1=step_table[ i];delay(10);}}P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。
基于51单片机的步进电机红外控制系统的设计
文章标题:基于51单片机的步进电机红外控制系统的设计引言在现代科技发展迅速的时代,控制系统已经被广泛应用于各个领域。
其中,基于51单片机的步进电机红外控制系统的设计,不仅在工业领域有着重要的作用,同时也在家电领域、智能家居等方面得到了广泛的应用。
本文将从步进电机控制系统的设计原理、红外控制的基本概念以及基于51单片机的系统设计方案等方面展开深入探讨。
一、步进电机控制系统的设计原理步进电机是一种将电脉冲信号转换为机械位移的执行元件,其控制系统设计原理是核心。
以步进电机为执行元件的控制系统通常包括电脉冲发生电路、电流驱动电路、位置控制逻辑电路以及接口电路等模块。
在系统设计中,需要考虑步进电机的类型、工作方式、转动角度以及控制精度等因素,以选择合适的控制方案和相关元器件。
针对步进电机的控制系统设计,首先需要从硬件电路和软件控制两个方面进行综合考虑。
硬件方面需要设计合适的脉冲发生电路和驱动电路,并根据具体场景考虑相关的接口电路,以实现步进电机的控制和驱动。
而软件控制方面,则需要编写相应的控制程序,使得系统能够根据具体的控制要求进行精准的控制和调节。
二、红外控制的基本概念红外控制是一种常见的无线遥控技术,通过使用红外线传输信号来实现对设备的控制。
通常包括红外发射器和红外接收器两个部分,发射器将控制信号转换成红外信号发送出去,接收器接收红外信号并将其转换成电信号进行处理。
在实际应用中,红外控制技术已经被广泛应用于各种家电遥控器、智能家居系统以及工业自动化领域。
红外控制的基本原理是在发射器和接收器之间通过红外线进行双向通信,通过调制解调的方式进行信号的传输和解析。
设计基于红外控制的步进电机系统需要考虑红外信号的发射和接收过程,以及相关的解析算法和信号处理。
信号的稳定性、抗干扰能力以及传输距离等也是需要考虑的重要因素。
三、基于51单片机的系统设计方案在步进电机红外控制系统的设计中,选择合适的控制芯片和处理器是至关重要的。
51单片机控制步进电机程序及硬件电路图
#include <AT89X51.h>static unsigned int count; //计数static int step_index; //步进索引数,值为0-7static bit turn; //步进电机转动方向static bit stop_flag; //步进电机停止标志static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快static int spcount; //步进电机转速参数计数void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒void gorun(); //步进电机控制步进函数void main(void){count = 0;step_index = 0;spcount = 0;stop_flag = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1; //允许CPU中断TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许TH0 = 0xFE;TL0 = 0x0C; //设定时每隔0.5ms中断一次TR0 = 1; //开始计数turn = 0;speedlevel = 2;delay(10000);speedlevel = 1;do{speedlevel = 2;delay(10000);speedlevel = 1;delay(10000);stop_flag=1;delay(10000);stop_flag=0;}while(1);}//定时器0中断处理void timeint(void) interrupt 1{TH0=0xFE;TL0=0x0C; //设定时每隔0.5ms中断一次count++;spcount--;if(spcount<=0){spcount = speedlevel;gorun();}}void delay(unsigned int endcount) {count=0;do{}while(count<endcount);}void gorun(){ if (stop_flag==1){P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;return;}switch(step_index){case 0: //0P1_0 = 1;P1_1 = 0;P1_2 = 0;P1_3 = 0; break; case 1: //0、1 P1_0 = 1;P1_1 = 1;P1_2 = 0;P1_3 = 0; break; case 2: //1P1_0 = 0;P1_1 = 1;P1_2 = 0;P1_3 = 0; break; case 3: //1、2 P1_0 = 0;P1_1 = 1;P1_2 = 1;P1_3 = 0;break; case 4: //2 P1_0 = 0;P1_1 = 0;P1_2 = 1;P1_3 = 0; break; case 5: //2、3 P1_0 = 0;P1_1 = 0;P1_2 = 1;P1_3 = 1; break; case 6: //3P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 1; break; case 7: //3、0 P1_0 = 1;P1_1 = 0;P1_2 = 0;P1_3 = 1;}if (turn==0){step_index++; if (step_index>7)step_index=0; }else{step_index--;if (step_index<0)step_index=7; }}。
51单片机控制的步进电机C语言程序
51单片机控制的步进电机C语言程序用的是L298驱动的和ULN2003一样,你把它换成2003就行拉#include <AT89X51.H>unsigned char codetable[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0x f3,0x00};unsigned char temp,temp_old;unsigned char key;unsigned char i,j,k,m,s;void delay(int i){for(m=i;m>0;m--)for(j=250;j>0;j--)for(k=10;k>0;k--);}void saomiao(){P3=0xff;P3_4=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=4;break;}temp=P3;temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}P3=0xff;P3_5=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=7;break;}temp=P3;temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}}void main(void){while(1){saomiao();if(key==1){ P1=0;P2=0;saomiao();}if(key==2){temp_old=key;for(s=0;s<8;s++){ P2=table[s];P1_4=0;delay(13);saomiao();if(key!=temp_old){P1_4=1;break;}}}if(key==3){temp_old=key;for(s=0;s<8;s++){ P2=table[s];P1_5=0;delay(5);saomiao();if(key!=temp_old){P1_5=1;break;}}}if(key==4){temp_old=key; for(s=0;s<8;s++){ P2=table[s];P1_6=0;delay(20);saomiao();if(key!=temp_old){P1_6=1;break;}}}if(key==5){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_7=0;delay(13);saomiao();if(key!=temp_old){P1_7=1;break;}}}if(key==6){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_5=0;delay(5);saomiao();if(key!=temp_old){P1_5=1;break;}}}if(key==7){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_6=0;delay(20);saomiao();if(key!=temp_old){P1_6=1;break;}}}}}C语言程序源代码#include <REGX51.H> // 51寄存器定义#include "intrins.h"#define control P1 //P1_0:A相,P1_1:B相,P1_2:C相,P1_3:D相#define discode P0 //显示代码控制端口#define uchar unsigned char //定义无符号型变量#define uint unsigned intsbit en_dm=P3^0; //显示代码锁存控制sbit en_wk=P3^1; //位控锁存控制uchar code corotation[4]= {0x03,0x06,0x0c,0x09};//电机正转uchar code rollback[4]={0x0c,0x06,0x03,0x09}; //电机反转uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示字段uint code Levspeed[5]={500,400,300,200,100};//电机速度等级uchar Hscan,speedcount;//Hscan行扫描,speedcount 速度等级计数uint uu; //频率计数uint step,setstep; //step:电机步伐计数,setstep:手动设置电机步伐uint speed=500; //电机初始速度uchar count;uchar flag[5];uchar butcount; //按键次数//****************************************//flag[0] 正转标志//flag[1] 反转标志//flag[2] 加速标志//flag[3] 减速标志//flag[4] 设置标志//****************************************Delay1mS(unsigned int tt) //延时1ms “Delay1mS”延时子程序,用循环语句延时。
毕业设计-基于C51单片机的步进电机控制系统设计
摘要本设计中首先介绍了步进电机的工作原理、控制特点和运行状态,然后给出了步进电机的单片机控制系统的总体设计方案。
在这个控制系统中,单片机选用AT89C51,其作为控制核心,担负着产生脉冲,发送、接受控制命令等任务;脉冲分配采用硬件方法,由8713接收到单片机的控制信号后产生相应的控制脉冲,避免了软件法在不停地产生脉冲时占用的时间;采用单电压驱动的方法驱动电机带动负载运行;利用键盘、显示专用芯片8279能够以较简单的硬件电路和较少的软件开销实现微型机与键盘和LED显示器接口。
本设计最后详细介绍了硬件部分和软件部分的实现方法。
关键词:单片机;步进电机;速度控制;ZLG7290;显示器AbstractThe design introduces the working principle of stepper motor, control features and operations, and then gives the stepper motor microcontroller control system design programs. In this control system, the SCM selecting AT89C51, the control center of the shoulder produces pulses, sending, receiving control commands and other tasks; pulse distribution method using hardware from the 8713 chip control signals received resulting from the corresponding control pulse, to avoid software method to generate pulses in constant time occupied; adopt a single voltage-driven approach drive motor to drive the load operation; use of keyboard, display 8279 can be dedicated to simple hardware and less software overhead to achieve keyboard and LED display interface. Finally introduce the hardware and software implementation methods in detail.Key words: SCM; stepper motor; speed control;ZLG7290;display;目录摘要 (I)Abstract .................................................... I I 第一章绪论. (1)1.1步进电机概述 (1)1.2课题研究的主要内容 (2)1.2.1研究内容 (2)1.2.2论文安排 (2)第二章步进电机控制系统设计方案 (3)2.1步进电机的系统 (3)2.2步进电机的失步现象 (5)2.3步进电机控制系统的组成 (6)2.4系统的控制过程 (7)第三章步进电机控制系统硬件部分 (9)3.1硬件电路图 (9)3.2采用51系列单片机AT89C51作为控制器 (10)3.2.1 AT89C51的主要性能 (10)3.2.2 AT89C51引脚功能说明 (10)3.3步进电机的驱动电路 (15)3.4 LED显示电路 (16)3.4.1 LED显示器的结构原理 (16)3.4.2 LED显示接口 (18)3.5可编程键盘/显示控制器ZLG7290电路工作原理 (19)3.5.1 ZLG7290概述 (19)3.5.2管脚、引线与功能 (21)3.5.3 ZLG7290键盘、显示接口电路设计 (24)3.6脉冲分配 (26)第四章步进电机控制系统软件部分 (30)4.1定时器中断服务 (30)4.1.1定时器初值 (30)4.1.2定时器中断服务子程序 (31)4.2 速度控制 (31)第五章总结 (35)致谢 (36)参考文献 (37)附录 (38)第一章绪论本章将简要介绍步进电机的发展过程、步进电机在日常生活中的广泛应用、步进电机作为数字控制电动机的主要特点以及本次研究的主要内容和论文安排。
51单片机控制步进电机
设计方案与原理1 设计方案设计一个51单片机四相步进电机控制系统要求系统具有如下功能:(1)由I/O口产生的时序方波作为电机控制信号;(2)信号经过驱动芯片驱动电机的运转;(3)电机的状态通过键盘控制,包括正转,反转,加速,减速,停止和单步运行。
2 设计原理步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。
步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4个方面。
从结构上看,步进电机分为三相、四相、五相等类型,本次设计的是四相电机。
四相步进电机的工作方式有单四拍、双四拍和单双八拍三种。
在本次设计中,我们使用的是四相单八拍的工作方式。
通过P1口给A,B,C,D四相依次输出高电平即可实现步进电机的旋转,通过控制两次输出的间隔,即可实现对步进电机的速度控制。
图 2.1 步进电机内部结构截图根据步进电机的相关相序表我们可以正常的控制电机的步进运行。
3 硬件设计根据设计要求和设计原理,我们可以绘制出基本的功能方框图,以便之后我们连接实际电路时的方便和可靠。
用键盘控制具体的功能模块,这样更能直观方便的控制整体的系统,使其达到我们预期的操作效果。
图3.1中简单描述了整个单片机系统的控制模式和控制流程,包括通过时钟电路和键盘电路,来控制ULN2003驱动电机动作。
图表图 3.1 硬件电路功能方框图4 电路原理图4.C程序代码#include <reg52.h>#define KeyPort P3#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P2^2;//定义锁存使能端口段锁存sbit LATCH2=P2^3;// 位锁存unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量sbit A1=P1^0; //定义步进电机连接端口sbit B1=P1^1;sbit C1=P1^2;sbit D1=P1^3;#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//DA相通电,其他相断电#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电unsigned char Speed=1;bit StopFlag;void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);unsigned char KeyScan(void);/*------------------------------------------------uS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t)while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------主函数------------------------------------------------*/ main(){unsigned int i=512;//旋转一周时间unsigned int n=0;unsigned char num,vo,v;Init_Timer0();Coil_OFF;while(1) //正向{num=KeyScan(); //循环调用按键扫描if(num==1)//第一个按键,速度等级增加{if(Speed<15)Speed=Speed+2;}if(num==2)//第二个按键,速度等级减小{if(Speed>1)Speed=Speed-2;}if(num==3)//第三个按键,电机停转{Coil_OFFStopFlag=1;}if(num==4)//第四个按键,电机启动{StopFlag=0;TR0=1;}if(num==5)//第五个按键,电机反转{TR0=0;TR1=1;}if(num==6)//第六个按键,电机正传{TR0=1;TR1=0;}vo=(0.25*(20-Speed)*64*32)/1000;v=60/vo;TempData[0]=dofly_DuanMa[v/10]; //分解显示信息,如要显示68,则68/10=6 68%10=8TempData[1]=dofly_DuanMa[v%10];}}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。
基于51单片机的步进电机控制系统设计与实现
基于51单片机的步进电机控制系统设计与实现步进电机控制系统是基于51单片机的一种控制系统,它主要用来控制步进电机的转动方向和转速等参数。
下面详细解释一下这个系统的设计和实现。
1. 系统硬件设计步进电机控制系统的硬件主要包括51单片机、驱动电路、步进电机和电源等部分。
其中,驱动电路是控制步进电机的关键,它通常采用L298N芯片或ULN2003芯片等常用的驱动模块。
在硬件设计方面,主要需要考虑以下几个方面:(1)步进电机的种类和规格,以便选择合适的驱动电路和电源。
(2)驱动电路的接线和参数设置,例如步进电机的相序、脉冲频率和电流大小等。
(3)电源的选取和参数设置,以满足系统的供电要求和安全性要求。
2. 系统软件设计步进电机控制系统的软件设计主要包括编写控制程序和调试程序。
其中,控制程序是用来实现步进电机的正转、反转、加速和减速等控制功能,而调试程序则用来检测系统的电路和程序的正确性和稳定性。
在软件设计方面,主要需要考虑以下几个方面:(1)确定控制程序的算法和流程,例如使用“循环控制法”或“PID控制法”等控制方法。
(2)选择编程语言和编译器,例如使用汇编语言或C语言等。
(3)编写具体的控制程序和调试程序,并进行测试和调试,以确保程序的正确性和稳定性。
3.系统实现步进电机控制系统的实现主要包括硬件组装和软件烧录两个部分。
在硬件组装方面,需要按照硬件设计图纸进行零部件的选取和电路的组装,同时进行电源和信号线的接入。
在软件烧录方面,需要使用专用的编程器将程序烧录到51单片机的芯片中,并进行相应的设置和校验。
总之,基于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++);}}。
STC增强型51单片机利用PWM脉冲控制4个57步进电机的编程方法
IAP15W4K58S4单片机利用PWM脉冲控制4个步进电机的编程方法最近购入一块IAP15W4K58S4(图1)的STC单片机的最小系统,然后用它控制步进电机,步进电机驱动器为基于TB6600的MicroStep Driver(图2)驱动器。
为了能控制该驱动器,利用现有的单片机系统控制驱动器。
连接电路原理图如图3所示,图中Vcc=5V.图1 IAP15W4K58S4单片机最小系统图2 步进电机驱动器使IAP15W4K58S4单片机能够控制步进电机,首先需要产生PWM脉冲,本例子产生频率为1KHz,占空比为50%的脉冲,P2.1、P2.2、P2.3、P3.7口输出4路PWM脉冲。
生产PWM脉冲,单片机涉及到的寄存器(不考虑PWM中断)有P_SW2(端口配置寄存器)、PWMCFG(PWM配置寄存器,初始电平高低)、PWMCKS(PWM时钟选择寄存器)、由PWMCH(高7位)和PWMCL(低8位)组成的15位PWM计数器、由PWM n T1H、PWM n T1L和PWM n T2H、PWM n T2L组成的PWM脉冲翻转计数器(其中PWM n T1H、PWM n T1L组成第一次翻转15位计数器,其中PWM n T2H、PWM n T2L组成第二次翻转15位计数器,n取值范围为2、3、4、5、6、7)、PWM n CR(PWM n的控制寄存器,设置输出管脚选择和中断使能控制,n取值范围为2、3、4、5、6、7)和PWMCR(PWM控制寄存器,用于开启各个端口和PWM模块开关,该寄存器最后设置)。
由于生成PWM,需将I/O 口配置为准双向口或强推挽模式,所以还需配置P m M0和P m M1寄存器,m取值范围为0~3。
以上寄存器各个位配置可参考该单片机的数据手册,本项目的例程参考STC官方例程基础进行修改,如后文所述。
IAP15W4K58S4单片机的特殊功能寄存器区中要使用扩展的特殊功能寄存器需要配置P_SW2的bit7位,将其(bit7)置1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要8051单片机控制步进电机进行简单的转速控制,包括启停变换转速控制等。
利用利用单片机实验箱以模拟电压提供电机转速设定值,使用并行模数转换芯片ADC0809 进行电压信号的采集和数据处理转换得到速度给定的数字量,通过单片机的P1 口控制步进电机的控制端,使其按一定的控制方式进行转动。
调节步进电机转速,使其与给定值相当,最后,利用ZLG7290模块驱动LED数码管显示速度设定值。
通过这个单片机控制系统的设计来掌握A/D转换的原理,了解步进电机的工作原理,掌握它的转速控制方式和调速方法,并且掌握LED显示原理和ZLG7290模块的使用方法,用LED数码管显示模数转换的结果,设计电路的硬件接线图和实现上述要求的程序。
最后实现通过改变模拟电压就可以改变步进电机的转速控制,并且在LED 数码管上显示步进电机的转速这一功能。
关键词:51单片机调速步进电机LED显示绪论在进行51单片机的学习和实验过程中曾利用51单片机对步进电机进行过简单的控制,包括利用单片机试验箱对步进电机进行转角控制,方向控制等。
即按照设定的转动角度步进电机进行动作,来实现步进电机的实时控制,通过设定的方向来实现步进电机的方向反转控制等,并利用利用ZLG7290模块驱动LED数码管显示步进电机的设定值与步进电机实际所转过过的角度,同时显示步进电机的旋转方向等。
这次所进行的步进电机转速控制系统是对步进电机的另一种控制,即实现步进电机的转速控制而不是单单的转动角度控制,并且是通过模拟量输入来时时的控制步进电机的转速。
并且通过数码管来显示出所设定的步进电机的转速。
第一章系统程序及分析1.1对步进电机控制系统的设计要求进行设计,主程序程序如下:#include<reg51.h>#include"VIIC_C51.h"#include"zlg7290.h"sbit PA=P1^0;sbit PB=P1^1;sbit PC=P1^2;sbit PD=P1^3;sbit SDA=P1^7;sbit SCL=P1^6;sbit RST=P1^4;sbit KEY_INT=P1^5;unsigned char xdata *port;unsigned char count,count1=0,c[3],n;/*****************ADC0809*******************************************/int1()interrupt 2{count=*port;*port=0;}/*******************************************************************//*****************延迟函数*****************************************/delay(unsigned int t){unsigned int i;for(i=0;i<t;i++){TMOD=0X11;TH0=-500/256;TL0=-500%256;TR0=1;while(TF0!=1);TF0=0;}}/*****************脉冲函数********************************************/ time1()interrupt 3{if(count==0X00)count1=4;TH1=-3*1000000/(256*count);TL1=-3*1000000%(256*count);switch(count1){ case 0:{PA=1;PB=1;PC=0;PD=0;}break;case 1:{PA=0;PB=1;PC=1;PD=0;}break;case 2:{PA=0;PB=0;PC=1;PD=1;}break;case 3:{PA=1;PB=0;PC=0;PD=1;}break;default:{PA=0;PB=0;PC=0;PD=0;}}count1++;if(count1>=4){count1=0;}}/************************主函数*******************************************/ main(){ RST=0;delay(1);RST=1;delay(10);port=0x7ff8;EA=1;ET1=1;ET0=1;TMOD=0X11;TH1=-100000/256;TL1=-100000%256;TR1=1;EX1=1;IT1=1;*port=0;while(1){c[0]=count/100;c[1]=count%100/10;c[2]=count%10;for(n=0;n<3;n++)ZLG7290_SendCmd(0x60+(2-n),c[n]);}}1.2程序分析:程序的开头包含了3个头文件,第一个头文件<reg51.h>中对所有的特殊功能寄存器进行了SFR定义,只要引用了<reg51.h> 就可以直接引用特殊功能寄存器名。
第二个头文件"VIIC_C51.h"是使用IIC 总线所要求的头文件,第三个头文件"zlg7290.h"是使用zlg7290驱动模块所要求的头文件。
单片机使用的是12兆晶振,它的P1.0~P1.3口是送出驱动步进电机的驱动信号,P1.4~P1.7口是设置zlg7290驱动模块所用到的端口。
函数int1()interrupt 2用到了外部中断1功能是时时对模拟信号进行转换,将模拟信号转换成0~255的数字信号。
当转换完成后进入该中断函数将转换结果送出。
与单片机的接线图如下所示:延迟函数delay(unsigned int t)利用定时器0进行单片机延时功能设计,实现tms 的有参延时函数功能。
脉冲函数time1()interrupt 3来实现驱动步进电机脉冲的发送工作。
其中count 是数模转换后的0~255的数字信号,需要将它转换成驱动步进电机的脉冲发送频率,即定时器的定时时间,从而满足步进电机的转速与所设定的转速相等。
单片机试验箱的步进电机按照双四拍:AB →BC →CD →DA →AB 控制,步进电机步距角18度,即18度/步,根据步进电机的结构特点及原理有步进电机的转速公式为:60360f n θ=,其中θ为步进电机的步距角,f 为电脉冲的频率。
( 其中设定转速值 count=n ,θ=18),从而有电脉冲的发送频率为f =3co u n t,脉冲函数定时器的定时时间为1f 由于单片机采用12兆晶振,故定时器需要记6103*co u n t个脉冲。
即TH1=-3*1000000/(256*count), TL1=-3*1000000%(256*count);主函数main()里进行了一些初始的设置,在while 循环里设置了显示程序,时时的显示步进电机的转速。
第二章设计时出现的问题及解决方案2.1 步进电机不能转动开始调试时发现程序运行时步进电机不能够转动,考虑到可能是脉冲没有发送出来,最后检查了一下脉冲发送函数,是脉冲发送循环不正确,错误的if语句导致脉冲循环不正确,错误的if语句是:if (count1>=3) {count1=0;},导致最后一个脉冲始终没有。
最后改成if(count1>=4) {count1=0;},实现了正确的脉冲发送顺序,步进电机顺利的旋转起来了。
2.2步进电机的转速不能正常停止经过初步的调试,步进电机已经能够按照模拟量的控制来实现步进电机的转速的控制,并且能够实现转速在数码管的时时显示转速,但是当给定步进电机的模拟量的给定值为0时步进电机不能够停止,还有微量的转速,经过解决发现是由于定时器TH1=-3*1000000/(256*count),TL1=-3*1000000%(256*count);有误差,这是由单片机的位数决定的,计算结果是有一定误差的。
为解决步进电机停止问题在脉冲发送函数中做了如下修改:具体的脉冲发送函数如下:time1()interrupt 3{if(count==0X00)count1=4;TH1=-3*1000000/(256*count);TL1=-3*1000000%(256*count);switch(count1){ case 0:{PA=1;PB=1;PC=0;PD=0;}break;case 1:{PA=0;PB=1;PC=1;PD=0;}break;case 2:{PA=0;PB=0;PC=1;PD=1;}break;case 3:{PA=1;PB=0;PC=0;PD=1;}break;default:{PA=0;PB=0;PC=0;PD=0;}}count1++;if(count1>=4)count1=0;}修改部分为:在函数里增加了if(count==0X00) count1=4;条语句,和在switch里增加了一条语句default:{PA=0;PB=0;PC=0;PD=0;},当给定模拟电压为0时,直接不发送脉冲,从而实现了步进电机的停止控制。
最后,对程序进行了一些小的调整,和完善成功的实现了全部的功能,顺利的完成了设计要求。