基于单片机控制步进电机报告
基于stm32单片机的步进电机实验报告

基于stm32单片机的步进电机实验报告步进电机是一种将电脑控制信号转换为机械运动的设备,常用于打印机、数码相机和汽车电子等领域。
本实验使用STM32单片机控制步进电机,主要目的是通过编程实现步进电机的旋转控制。
首先,我们需要了解步进电机的基本原理。
步进电机是一种能够按照一定步长精确旋转的电机。
它由定子和转子两部分组成,通过改变定子和转子的电流,使转子按照一定的角度进行旋转。
在本实验中,我们选择了一种四相八拍步进电机。
该电机有四个相位,即A、B、C、D相。
每个相位都有两个状态:正常(HIGH)和反向(LOW)。
通过改变相位的状态,可以控制步进电机的旋转。
我们使用STM32单片机作为控制器,通过编程实现对步进电机的控制。
首先,我们需要配置STM32的GPIO口为输出模式。
然后,编写程序通过改变GPIO口的状态来控制步进电机的旋转。
具体来说,我们将A、B、C、D相分别连接到STM32的四个GPIO口,设置为输出模式。
然后,通过改变GPIO口输出的电平状态,可以控制相位的状态。
为了方便控制,我们可以定义一个数组,将表示不同状态的四个元素存储起来。
通过循环控制数组中的元素,可以实现步进电机的旋转。
在实验中,我们通过实时改变数组中元素的值,可以实现不同的旋转效果。
例如,我们可以将数组逐个循环左移或右移,实现步进电机的正转或反转。
在实验过程中,我们可以观察步进电机的旋转情况,并根据需要对程序进行修改和优化。
可以通过改变步进电机的旋转速度或步进角度,来实现更加精确的控制。
总结起来,通过本次实验,我们了解了步进电机的基本原理,并通过STM32单片机控制步进电机的旋转。
通过编写程序改变GPIO口的状态,我们可以实现步进电机的正转、反转和精确控制。
这对于理解和应用步进电机技术具有重要意义。
单片机实验报告_步进电机

步进电机控制实验一、实验目的了解步进电机的工作原理,掌握它的转动控制方式和调速方法。
二、实验设备及器件IBM PC 机一台DP-51PROC 单片机综合仿真实验仪一台三、实验内容1. 编写程序,通过单片机的P1 口控制步进电机的控制端,使其按一定的控制方式进行转动。
2. 分别采用双四拍(AB→BC→CD→DA→AB)方式、单四拍(A→B→C→D→A)方式和单双八拍(A→AB→B→BC→C→CD→D→DA→A)方式编程,控制步进电机的转动方向和转速。
3. 观察不同控制方式下,步进电机转动时的振动情况和步进角的大小,比较这几种控制方式的优缺点。
四、实验要求学会步进电机的工作原理和控制方法,掌握一些简单的控制电路和基本的电机基础知识。
五、实验步骤1.安装C10 区JP6 接口上的短路帽,将C10 区BA、BB、BC、BD与A2 区的P10~P13对应相连。
2. 打开程序调试软件,下载运行编写好的软件程序,观察步进电机的转动情况。
3. 修改步进电机的控制程序,再次运行程序,比较它们的不同控制效果。
六、实验程序#include <reg51.h>sbit A1=P1^0; //定义步进电机连接端口sbit B1=P1^1;sbit C1=P1^2;sbit D1=P1^3;sbit K0=P2^0;//最慢sbit K1=P2^1;//sbit K2=P2^2;//sbit K3=P2^3;//最快sbit K4=P2^4;//单双八拍sbit K5=P2^5;//单四拍sbit K6=P2^6;//双四拍sbit K7=P2^7;//1正转0反转#define Coil_A1 {A1=0;B1=1;C1=1;D1=1;}//A相通电,其他相断电,低电平有效,若你的驱动电路是高电平有效则改为(1,0,0,0)#define Coil_B1 {A1=1;B1=0;C1=1;D1=1;}//B相通电,其他相断电#define Coil_C1 {A1=1;B1=1;C1=0;D1=1;}//C相通电,其他相断电#define Coil_D1 {A1=1;B1=1;C1=1;D1=0;}//D相通电,其他相断电#define Coil_AB1 {A1=0;B1=0;C1=1;D1=1;}//AB相#define Coil_BC1 {A1=1;B1=0;C1=0;D1=1;}//BC相#define Coil_CD1 {A1=1;B1=1;C1=0;D1=0;}//CD相#define Coil_DA1 {A1=0;B1=1;C1=1;D1=0;}//DA相#define Coil_OFF {A1=1;B1=1;C1=1;D1=1;}//全部断电unsigned char Speed;void DelayUs2x(unsigned char t){while(--t);}void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}//*******************************************************************************void danshuangbapai (unsigned char Sp) {Coil_A1DelayMs(Sp);Coil_AB1DelayMs(Sp);Coil_B1DelayMs(Sp);Coil_BC1DelayMs(Sp);Coil_C1DelayMs(Sp);Coil_CD1DelayMs(Sp);Coil_D1DelayMs(Sp);Coil_DA1DelayMs(Sp);}void danshuangbapaif (unsigned char Sp) {Coil_DA1DelayMs(Sp);Coil_D1DelayMs(Sp);Coil_CD1DelayMs(Sp);Coil_C1DelayMs(Sp);Coil_B1DelayMs(Sp);Coil_AB1DelayMs(Sp);Coil_A1DelayMs(Sp);}void dansipai (unsigned char Sp){Coil_A1DelayMs(Sp);Coil_B1DelayMs(Sp);Coil_C1DelayMs(Sp);Coil_D1DelayMs(Sp);}void dansipaif (unsigned char Sp){Coil_D1DelayMs(Sp);Coil_C1DelayMs(Sp);Coil_B1DelayMs(Sp);Coil_A1DelayMs(Sp);}void shuangsipai (unsigned char Sp){Coil_AB1DelayMs(Sp);Coil_BC1DelayMs(Sp);Coil_CD1DelayMs(Sp);Coil_DA1DelayMs(Sp);}void shuangsipaif (unsigned char Sp){Coil_DA1DelayMs(Sp);Coil_CD1DelayMs(Sp);Coil_BC1DelayMs(Sp);Coil_AB1DelayMs(Sp);}//***************************************************************************** **void main (void){while(1){if(K0==1) //最低速Speed=20;if(K1==1)Speed=15;if(K2==1)Speed=10;if(K3==1)//最高速Speed=5;if(K4==1&&K7==1)//单双八拍正danshuangbapai(Speed);if(K4==1&&K7==0)//单双八拍反danshuangbapaif(Speed);if(K5==1&&K7==1)//单四拍正dansipai(Speed);if(K5==1&&K7==0)//单四拍反dansipaif(Speed);if(K6==1&&K7==1)//双四拍正shuangsipai(Speed);if(K6==1&&K7==0)//双四拍反shuangsipaif(Speed);if((K3==0&&K2==0&&K1==0&&K1==0))Speed=0;}}七、实验结果如图所示接线,并且在完成程序的编译和烧录后,单片机上的步进电机开始转动,改变相应的延时和完成的方式,步进电机的转动情况会发生一定的改变,也可以通过P口将步进电机的输入反映到LED灯上,这样就可以观察步进电机的工作原理。
单片机步进电机控制实验报告

单片机步进电机控制实验报告单片机步进电机控制实验报告引言:步进电机是一种常用的电动机,具有结构简单、体积小、转速稳定等优点,广泛应用于工业自动化、机械设备等领域。
本实验旨在通过单片机控制步进电机,实现电机的正转、反转、加速、减速等功能。
通过实验,深入了解步进电机的工作原理和控制方法,提高对单片机的编程能力。
一、实验目的本实验的主要目的是掌握步进电机的工作原理,了解单片机控制步进电机的方法和步骤,并通过实验验证控制效果。
二、实验器材1. 步进电机:XX型号,XXV,XXA2. 单片机开发板:XX型号3. 驱动电路:包括电源、驱动芯片等三、实验原理步进电机是一种特殊的电动机,其转子通过电磁螺线管的工作原理实现转动。
步进电机的转子分为若干个极对,每个极对上都有一个螺线管,通过对这些螺线管施加电流,可以使转子转动。
单片机通过控制螺线管的电流,实现步进电机的控制。
四、实验步骤1. 连接电路:根据实验器材提供的电路图,将步进电机与单片机开发板相连接。
2. 编写程序:使用C语言编写单片机控制步进电机的程序。
程序中需要包括电机正转、反转、加速、减速等功能的实现。
3. 上传程序:将编写好的程序通过编程器上传到单片机开发板上。
4. 实验验证:通过按下开发板上的按键,观察步进电机的运动情况,验证程序的正确性。
五、实验结果与分析经过实验验证,编写的程序能够准确控制步进电机的运动。
按下不同的按键,电机可以实现正转、反转、加速、减速等功能。
通过调整程序中的参数,可以实现不同速度的控制效果。
实验结果表明,单片机控制步进电机具有较高的精确性和可靠性。
六、实验总结通过本次实验,我深入了解了步进电机的工作原理和控制方法,掌握了单片机控制步进电机的编程技巧。
实验中遇到了一些问题,如电路连接不正确、程序逻辑错误等,但通过仔细分析和排除,最终解决了这些问题。
通过实验,我不仅提高了对步进电机的理论认识,还锻炼了自己的动手实践能力和问题解决能力。
步进电控制实验报告

一、实验目的1. 理解步进电机的工作原理及其应用领域。
2. 掌握单片机控制步进电机的技术方法。
3. 熟悉步进电机的驱动电路设计。
4. 通过实验验证步进电机控制系统的性能。
二、实验原理步进电机是一种将电脉冲信号转换为角位移的电机,具有精度高、响应快、控制简单等优点。
其工作原理是:当输入一定频率的脉冲信号时,步进电机按照一定的步距角转动。
步进电机的步距角与线圈匝数、绕组方式有关。
本实验采用单片机控制步进电机,通过编写程序实现步进电机的正转、反转、停止、转速调节等功能。
三、实验设备1. 单片机实验平台:包括51单片机、电源、按键、数码管等。
2. 步进电机驱动模块:用于驱动步进电机,包括驱动电路和步进电机本体。
3. 实验指导书。
四、实验步骤1. 搭建实验电路(1)连接单片机实验平台,包括电源、按键、数码管等。
(2)连接步进电机驱动模块,包括电源、控制线、步进电机本体等。
(3)检查电路连接是否正确,确保无误。
2. 编写控制程序(1)初始化单片机相关端口,包括P1口、定时器等。
(2)编写步进电机控制函数,包括正转、反转、停止、转速调节等功能。
(3)编写主函数,根据按键输入实现步进电机的控制。
3. 下载程序(1)将编写好的程序下载到单片机实验平台。
(2)检查程序是否下载成功。
4. 测试实验(1)观察数码管显示的转速挡次和转动方向。
(2)通过按键控制步进电机的正转、反转、停止和转速调节。
(3)观察步进电机的转动情况,验证控制程序的正确性。
五、实验结果与分析1. 实验结果(1)通过按键控制步进电机的正转、反转、停止和转速调节。
(2)数码管显示转速挡次和转动方向。
(3)步进电机按照设定的方向和转速转动。
2. 实验分析(1)通过实验验证了单片机控制步进电机的可行性。
(2)实验结果表明,控制程序能够实现步进电机的正转、反转、停止和转速调节等功能。
(3)实验过程中,需要对步进电机驱动模块进行合理设计,以确保步进电机的稳定运行。
单片机步进电机控制实训报告

单片机步进电机控制实训报告一、引言随着工业自动化技术的不断发展,步进电机作为一种能够将电脉冲转化为机械转动的装置,在各种自动化控制系统中得到了广泛的应用。
而单片机作为现代电子计算机技术的重要分支,具有体积小、价格低、抗干扰能力强等特点,被广泛应用于各类电机的控制中。
本次实训旨在通过单片机实现对步进电机的控制,加深对步进电机和单片机理论知识的理解,提高实际操作技能。
二、实验目标本次实训的目标是通过单片机控制步进电机,实现电机的正转、反转、停转等操作。
同时,通过对电机的控制,进一步了解步进电机的特性和工作原理。
三、实验原理步进电机是一种将电脉冲转化为机械转动的装置。
当给步进电机施加一个电脉冲信号时,电机就会转动一个固定的角度,这个角度通常称为“步进角”。
通过控制电脉冲的数量和频率,可以实现对电机的速度和位置的控制。
而单片机的GPIO口可以输出高低电平信号,通过控制输出信号的频率和占空比,可以实现对步进电机的控制。
四、实验步骤1、准备器材:单片机开发板、步进电机、杜邦线、面包板、焊锡等。
2、连接电路:将步进电机连接到单片机开发板上,使用杜邦线连接电源和信号接口。
3、编写程序:使用C语言编写程序,通过单片机控制GPIO口输出电脉冲信号,控制步进电机的转动。
4、调试程序:在调试过程中,需要不断调整程序中的参数,观察电机的反应,直到达到预期效果。
5、测试结果:完成程序调试后,进行实际测试,观察步进电机是否能够实现正转、反转、停转等操作。
五、实验结果及分析通过本次实训,我们成功地实现了通过单片机控制步进电机的正转、反转、停转等操作。
在实验过程中,我们发现步进电机的转速和方向可以通过改变单片机输出信号的频率和占空比来控制。
我们还发现步进电机具有较高的精度和稳定性,适用于需要精确控制的位置和速度控制系统。
六、结论与展望通过本次实训,我们深入了解了步进电机的工作原理和单片机的应用。
实践证明,单片机控制步进电机是一种高效、精确、可靠的方法。
步进电机单片机实习报告

步进电机单片机实习报告一、实习目的本次实习旨在将所学理论知识与实际操作相结合,深入理解步进电机的工作原理和单片机控制技术。
通过实习,锻炼自己的动手能力,提高自己在电机控制领域的实践经验,为将来的学习和工作打下坚实的基础。
二、实习内容1. 步进电机的基本原理及其特性步进电机是一种将电脉冲信号转换为机械角位移的电机。
每接收到一个脉冲信号,步进电机就转动一个固定的角度(步距角)。
步进电机的转速、停止位置取决于脉冲信号的频率和脉冲数,而与负载无关。
通过控制脉冲个数,可以实现对步进电机角位移的精确控制;通过控制脉冲频率,可以实现对电机转速和加速度的控制。
2. 单片机控制步进电机的基本原理及方法单片机控制步进电机主要通过单片机发出的脉冲信号来驱动步进电机。
单片机根据程序的指令,控制步进电机的转向、速度和步数。
通过改变单片机发出的脉冲信号的频率和脉冲数,可以实现对步进电机运动状态的精确控制。
3. 实习过程(1)搭建步进电机和单片机的控制系统硬件平台,包括步进电机驱动器、电源、控制电路等。
(2)编写单片机控制程序,实现对步进电机的转向、速度和步数的控制。
(3)通过实验验证程序的正确性,并对程序进行优化和改进。
三、实习心得与体会本次实习使我深入理解了步进电机的工作原理和单片机控制技术,提高了自己在电机控制领域的实践经验。
在实习过程中,我学会了如何搭建步进电机和单片机的控制系统硬件平台,掌握了编写单片机控制程序的基本方法。
同时,通过实验验证程序的正确性,我对步进电机的控制有了更深刻的认识。
此外,实习过程中我意识到理论知识与实际操作的重要性。
在实际操作中,我发现理论知识能够为解决问题提供指导,而实际操作则能够加深对理论知识的理解。
在未来的学习中,我将更加注重理论知识的学习,努力提高自己的实践能力。
四、总结通过本次实习,我对步进电机和单片机控制技术有了更深入的了解,收获颇丰。
在今后的学习和工作中,我将继续努力提高自己在电机控制领域的实践经验,为实现理论知识与实际操作的有机结合而努力。
控制步进电机实验报告(3篇)

第1篇一、实验目的1. 理解步进电机的工作原理及控制方法。
2. 掌握单片机与步进电机驱动模块的接口连接方法。
3. 学习使用C语言编写程序,实现对步进电机的正反转、转速和定位控制。
4. 通过实验,加深对单片机控制系统的理解。
二、实验原理步进电机是一种将电脉冲信号转换为角位移或线位移的电机,其特点是控制精度高、响应速度快、定位准确。
步进电机控制实验主要涉及以下几个方面:1. 步进电机驱动模块:常用的驱动模块有ULN2003、A4988等,它们可以将单片机的数字信号转换为步进电机的控制信号。
2. 单片机:单片机是整个控制系统的核心,负责接收按键输入、处理数据、控制步进电机驱动模块等。
3. 步进电机:步进电机分为单相、双相和三相等类型,本实验使用的是双相四线步进电机。
三、实验设备1. 单片机开发板:例如STC89C52、STM32等。
2. 步进电机驱动模块:例如ULN2003、A4988等。
3. 双相四线步进电机。
4. 按键。
5. 数码管。
6. 电阻、电容等元件。
7. 电源。
四、实验步骤1. 硬件连接(1)将步进电机驱动模块的输入端(IN1、IN2、IN3、IN4)分别连接到单片机的P1.0、P1.1、P1.2、P1.3口。
(2)将按键的输入端连接到单片机的P3.0口。
(3)将数码管的段选端连接到单片机的P2口。
(4)将步进电机驱动模块的电源端连接到电源。
(5)将步进电机连接到驱动模块的输出端。
2. 编写程序(1)初始化单片机I/O端口,设置P1口为输出端口,P3.0口为输入端口,P2口为输出端口。
(2)编写按键扫描函数,用于读取按键状态。
(3)编写步进电机控制函数,实现正反转、转速和定位控制。
(4)编写主函数,实现以下功能:a. 初始化数码管显示;b. 读取按键状态;c. 根据按键状态调用步进电机控制函数;d. 更新数码管显示。
3. 调试程序(1)将程序烧写到单片机中;(2)打开电源,观察数码管显示和步进电机运行状态;(3)根据需要调整程序,实现不同的控制效果。
单片机步进电机实验报告

单片机步进电机实验报告单片机步进电机实验报告引言:步进电机是一种常见的电机类型,具有精准控制和高效能的特点,广泛应用于各种领域。
本实验旨在通过单片机控制步进电机的转动,探索步进电机的原理和应用。
一、实验目的本实验的目的是通过单片机控制步进电机的转动,深入了解步进电机的工作原理和控制方法。
二、实验原理步进电机是一种按照一定的步进角度进行转动的电机。
它通过电磁场的变化来驱动转子转动,具有高精度和高可靠性。
步进电机的原理主要包括两种类型:磁场定向型和磁场消除型。
在本实验中,我们将重点研究磁场定向型步进电机。
三、实验器材本实验所需的器材包括:步进电机、单片机开发板、电源、电路连接线等。
四、实验步骤1. 连接电路:将步进电机的相线分别连接到单片机开发板的输出引脚上,同时将电源连接到步进电机的电源输入端。
2. 编写程序:使用C语言编写单片机控制步进电机的程序,通过控制输出引脚的电平变化来实现步进电机的转动。
3. 烧录程序:将编写好的程序烧录到单片机开发板上。
4. 调试程序:通过调试程序,观察步进电机的转动情况,并进行必要的调整和优化。
5. 实验记录:记录步进电机的转动角度、转速、电流等相关数据,并进行分析和总结。
五、实验结果与分析通过实验,我们成功地实现了单片机对步进电机的控制。
通过调整程序中输出引脚的电平变化,我们可以控制步进电机的转动方向和速度。
在实验过程中,我们观察到步进电机的转动角度与输入信号的脉冲数目成正比,这与步进电机的工作原理相符。
六、实验总结本实验通过单片机控制步进电机的转动,加深了对步进电机的理解和应用。
步进电机作为一种精密控制设备,具有广泛的应用前景。
通过学习和实践,我们不仅掌握了步进电机的原理和控制方法,还培养了动手实践和解决问题的能力。
七、实验心得通过本次实验,我深刻认识到步进电机在自动化控制领域的重要性。
步进电机具有精确控制和高效能的特点,广泛应用于机械、电子、仪器仪表等领域。
在实验过程中,我不仅学到了理论知识,还通过实践掌握了步进电机的控制方法和调试技巧。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子赛培训课作品设计报告题目:单片机控制步进电机:班别:学号:序号:完成时间:2012-5-17华南理工大学学院电子信息工程学院目录引言 (1)一、系统方案的选择和论证 (1)二、总体设计 (2)三、单元电路设计 (3)四、整体测试 (4)五、结论 (5)六、总结 (6)七、参考文献 (6)单片机控制步进电机摘要:本设计采用一块AT89C52单片机对一个四相步进电机进行控制,使步进电机在安全温度按输入的步数和转动的方向进行运行。
控制电机转动的方法采用四相八拍控制法。
本设计采用矩阵键盘实现步进电机不同转动步数的输入以及转向的控制,还有对键盘实现锁键和开锁的作用。
用DS18B20代替电机的测温系统,实现超温报警和停机的功能。
引言随着数字化技术发展,数字控制技术得到了广泛而深入的应用。
步进电机是一种将数字信号直接转换成角位移或线位移的控制驱动元件, 具有快速起动和停止的特点。
因为步进电动机组成的控制系统结构简单,价格低廉,性能上能满足工业控制的基本要求,所以广泛地应用于手工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,投影仪、数码摄像机、大型望远镜、卫星天线定位系统、医疗器件以及各种可控机械工具等等。
设计容:采用单片机控制一个三相单三拍的步进电机工作。
要实现的功能:一、步进电机的旋转方向由正反转控制信号控制;二、步进电机的步数由键盘输入,可输入的步数分别为3、6、9、12、15、18、21、24和27步,且键盘具有键盘锁功能,当键盘上锁时,步进电机不接受输入步数,也不会运转。
只有当键盘锁打开并输入步数时,步进电机才开始工作;三、电机运转的时候有正转和反转指示灯指示;四、电机在运转过程中,如果过热,则电机停止运转,同时红色指示灯亮,同时警报响。
本次设计的意义:1) 了解51系列单片机及外围相关芯片、电路的工作原理和接口技术,学会进行控制系统软件程序设计。
2) 编制程序完成步进电机速度、方向、及旋转角度的控制。
3) 设计相关的硬件电路,软硬调试实现步进电机速度、方向、及旋转角度的控制,分析结果。
4) 学会运用“自动控制原理”、“现代控制理论”和“计算机控制技术”所学理论知识进行控制器的设计和计算机控制的算法实现。
为今后毕业设计、将来工作做必要的知识储备。
一、系统方案选择和论证本设计由于需要实现9个不同步数的输入以及其它功能的输入,所以可以采用独立键盘和矩阵键盘,实现步进电机的步数由键盘输入且键盘具有键盘锁功能。
考虑到单片机的端口数量有限和编程和方便性,最后决定采用矩阵键盘。
在步进电机方面由于此次设计的软件采用proteus,在此软件中只有一个四相步进电机的模型,然后考虑到步进电机控制方法的难易度最后决定采用四相八拍控制法,由于单片机不能直接驱动步进电机,所以P2口在输出后接入ULN2803,ULN2803输出后接电机,通过此芯片放大控制电压。
在测温方面一开始打算用一个温度传感器开关去实时监测电机的温度,当温度过高的时候就断开开关;但考虑到系统的可操作性、准确性、编程的难易度及仿真软件的限制,最后决定采用DS18B20代替电机的测温系统,实现电机在运转过程中,如果过热,则电机停止运转,同时红色指示灯亮,同时警报响。
在转向方面用不同颜色的LED灯指示正转和反转。
当电机温度超过安全温度时,报警灯会闪烁和报警铃会鸣响,并让电机停止运转同时锁住键盘。
基于单片机和proteus的步进电机控制电路的基本组成如图2-1所示。
图2-1二、总体设计图2-2三、单元电路设计1、电机工作状态指示模块如图3-1所示图3-1功能:指示单片机目前的工作状态,当电机的温度超出安全温度的时候,报警灯闪的同时,报警器也会响。
2、单片机驱动电机模块(如图3-2)图3-2功能:单片机输出的程序通过ULN2803电机驱动器给步进电机一个脉冲信号,使步进电机实现按输入步数正转与反转。
3、电机温度监测模块(如图3-3)图3-3功能:实时监测电机的温度,当电机超过安全温度时,单片机会发出警报并停止电机工作。
4、键盘输入模块(如图3-4)图3-4功能:通过预设使每一个键盘具有一个特定的功能,从而实现按设计要求控制电机的需求。
四、整体测试1、安全温度下电机正转(如图4-1)图4-1此时电机正转,正转指示灯亮,功能正常实现。
2、安全温度下电机反转(如图4-2)图4-2此时电机反转,反转指示灯亮,功能正常实现。
3、超出安全温度时电机停止工作并报警(如图5-1)图5-1此电机温度超出安全温度50,报警灯闪烁,报警器鸣响,键盘锁住禁止输入。
同时指示停机前电机转动的方向。
功能正常。
4、当键盘锁住时键盘无法使用刚开机时,为防止出现事故,整个功能键盘是锁住的,只有解锁后才能对电机进行控制,在运行过程当中,当键盘锁住后,将保持停机前的状态,并禁止对电机进行操作。
其它功能还是正常运行。
结论是正常。
五、结论经测试,整体电路工作正常,实现了要求的所有功能。
由于延时的原因,有些功能会出现一定的误差,比如:有时按下键去的时候电机会没有反应,因为程序还没有执行到这里。
本设计有多个不足之处,比如:电机在没有走完输入的步数之前是不能对电机进行其它的控制,就算此时电机已经超出了安全温度也不能及时的报警和停机。
由于延时的效果,使得电机在执行输入的相应的步数的时候会出现一点偏差,但是走的总步数是没有错的。
对此,我提出改进方案为,用定时器中断方式,每隔一断时间去检查,看电机是否已超出安全温度,这样就能及时的停机。
我还会增加一个紧急停机按钮,使得现场出现紧急情况的时候能实现紧急停机。
我还会再增加一个加速控制钮和一个减速控制钮,使电机在连续转动时能平稳的运行以及起步和停机。
对电路进行调整后,如果可以的话,还可以加上可视功能,显示电机现在走了几步,目前的温度如何。
六、总结在此次设计中,由于是第一次接触步进电机,出于对步进电机的不了解,就在用多少拍控制电机方面我参考了网上不少资料以及不少相关的书籍,最后确定用八拍控制法最合适,四相八拍控制法被普遍认为是比较好用的一种控制方法。
刚开始不知道电机在转动的时候会有惯性效应,即如果在上一个脉冲控制下没有完全走完,但是下个脉冲已经过来了,这就会产生堵转和失步现象。
所以在执行程序的时候要增加一点延时。
在做足了所有的准备后,电机还是不能正确的转动,我曾经一步把注意力放在程序上,但是后来在参考一本资料的时候偶然发现其电机的接线图有所不同,这让我开始注意到,也许硬件电路的设计出了问题,果然在后来对硬件电路进行调整后,实现了预定的功能。
在实现了电机能合理的转动的情况下,我就把温度监测部分加进来。
但这不是简简单单的增加一个子函数的问题,它关系到整个程序的运行,使得整个程序都要做出相应的调整,这真的是牵一发而动全身。
同样一个变量我放在主函数里比较大小与放在子函数里比较都会有不一样的效果,一个能正确实现相应的功能,而另一个却不会。
这也让我在编程方面积累了一点经验。
当测温这一块加进来后,由于程序增加了不少,而且里面还有相当一部分的延时语句,所以,单片机对键盘的扫描就不再那么及时了,这就出现了有时按下键去却没反应的现象。
这是我以后要改进的地方。
七、参考文献【图书文献】[1]、作者:高洪志,《MCS-51单片机原理及应用技术教程》,,人民邮电,2009年4月出版,第314~316页。
[2]、作者:丁向荣,《STC系列增强型8051单片机》,,电子工业,2011年1月出版,第289~290页。
[3]、作者:周润景,《单片机电路设计、分析与制作》,,机械工业,210年8月出版,第16~25页。
【网络文献】[1]、wenku.baidu./view/c5f8513331126edb6f1a10f4.html,2010-12-15, 基于单片机的步进电机控制系统(汇编及C语言程序各一个)[2]、wenku.baidu./view/5a3aa642a8956bec0975e3c1.html,2010-10-07,基于单片机控制的步进电机___毕业论文附程序:#include<reg52.h>#include<intrins.h> //包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned intucharbeheavecount[]={0x00,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};ucharopbeheavecount[]={0x00,0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //ucharbeheavecount[]={0x00,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; uchar step,temp,lock,lock2,i,o,time,flag;sbit DQ=P3^3;sbit wrong=P0^3;sbit warning=P0^2;void keyscan();void delay(uint z);void beheave(uchar x);void Write(uchar dat);uchar Read();void Init();void delayms(uint i);void tempereture();void main(){step=lock=lock2=0;i=1;o=0x00;P0=0x00;P2=0xff;P0=0x02;wrong=0;while(1){warning=0;tempereture();if(flag==1){warning=0;keyscan();if(step==30) //锁键{step=0;lock=0;}if(step==31) //解锁{lock=1;step=0;}if(step==32&&o==0x00) //换正向{step=0;P0=0x02;lock=0;i=9-i;i++;if(i>8)i=1;i++;if(i>8)i=1;}if(step==32&&o==0xff) //换反向{step=0;P0=0x01;lock=0;i=9-i;i++;if(i>8)i=1;i++;if(i>8)i=1;}}if(flag==0){warning=1;delay(200);wrong=~wrong;lock=0;}if(lock&&step>0)beheave(step);}}void keyscan() //键盘处理函数{P1=0xfe;temp=P1;temp=temp&0xf0;while(temp!=0xf0) //消除抖动{delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;switch(temp) //判断按下哪个键{case 0xee:step=3;break;case 0xde:step=6;break;case 0xbe:step=9;break;case 0x7e:step=12;break;}while(temp!=0xf0) //判断键是否已回位{temp=P1;temp=temp&0xf0;}//lock=1;}}P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;switch(temp){case 0xed:step=15;break;case 0xdd:step=18;break;case 0xbd:step=21;break;case 0x7d:step=24;break;}while(temp!=0xf0) //判断键是否已回位{temp=P1;temp=temp&0xf0;}//lock=1;}}P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;switch(temp){case 0xeb:step=27;break;case 0xdb:step=30;lock2=0;break;case 0xbb:step=0;lock2=1;break;case 0x7b:step=32;o=~o;break;}while(temp!=0xf0) //判断键是否已回位{temp=P1;temp=temp&0xf0;}//lock=1;}}if(lock2==0)lock=0;else if(lock2==1)lock=1;}void beheave(uchar x) //电机转动处理函数{uint y=0; //定义一个记录赋值次数的变量if(o==0xff){do{P2=opbeheavecount[i];if(i==8)i=1;elsei++;y++;delay(600);}while(y<x);}if(o==0x00){do{P2=beheavecount[i];if(i==8)i=1;elsei++;y++;delay(600);}while(y<x);}lock=0;step=0;}void Init(void)//初始化{//unsigned char flag=0;DQ = 0; //单片机将DQ拉低delayms(100); //精确延时大于480us小于960usDQ = 1; //拉高总线delayms(30);//flag=DQ; //稍做延时后如果flag=0则初始化成功flag=1则初始化失败//delay(20);}uchar Read(void)//读字节{uchar a=0;uchar dat = 0;for (a=8;a>0;a--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delayms(5);}return(dat);}void Write(uchar dat)//写字节{uchar a=0;for (a=8; a>0; a--){DQ = 0;DQ = dat&0x01;delayms(5);DQ = 1;dat>>=1;}}void tempereture(){unsigned char tl=0,th=0;unsigned char TN,TD;Init();Write(0xCC); // 跳过读序号列号的操作Write(0x44); // 启动温度转换delay(100);Init();Write(0xCC); //跳过读序号列号的操作Write(0xBE); //读取温度寄存器等delay(100);tl=Read(); //读取温度值低位th=Read(); //读取温度值高位if((th&0xf8)!=0x00)//判断高五位得到温度正负标志{tl=~tl; //取反th=~th; //取反time=tl+1; //低位加1tl=time;if(time>255) th++; //如果低8位大于255,向高8位进1TN=th*16+tl/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16//这样得出的是温度的整数部分,小数部分被丢弃了TD=(tl%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整,}TN=th*16+tl/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16//这样得出的是温度的整数部分,小数部分被丢弃了TD=(tl%16)*10/16;time=TN+TD;if(time>=50){warning=1;flag=0;}else{warning=0;flag=1;}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void delayms(uint a) //如果i是unsigend char类型,则会出现错误结果{while(a--);}。