一、设计目标

设计程序实现按键控制步进电机启动、停机、正反转、加减速、转速及转向显示。

二、主要功能

功能1:步进电机的启动、重启、停机;

功能2:步进电机正反装;

功能3:静态数码管显示速度等级;

功能4:步进电机的加减速;

三、硬件部分

51单片机,导线,5161BS静态数码管,独立按键,四线双极性步进电机。

图1

图2

图3

图4

图5

图6

图1为单片机接线图;

图2为静态数码管的内部电路图;

图3为控制步进电机的部分的内部电路图;

图4为独立按键设置;

图5为四线双极性步进电机内部原理图;

图6为步进电机转动的原理图:

①A加正极,A-加负极,B加负极,B-加负极(电机状态,N极朝上)。

②A加负极,A-加负极,B加正极,B-加负极(电机状态,N极朝右,旋转90度)。

③A加负极,A-加正极,B加负极,B-加负极(电机状态,N极朝下)。

④A加负极,A-加负极,B加负极,B-加正极(电机状态,N极朝左)。

只要依次给相应引脚相应的电平就可以使得电机转动,转动的最小角度为90度。为了实现更加小角度的供电,本次设计中的供电顺序:A、AB、B、BA-、A-、A-B-、B-、B-A,转动的最小角度为45°。

四、程序框图

五、代码说明

代码由延时函数、按键扫描函数、模式判断函数、中断初始化函数、调速函数、主函数组成。

延时函数用于调节给电机供电的时间,从而实现调速。

按键扫描函数用来判断哪个键被按下,从而实现对应功能。

模式判断函数根据按键扫描的返回值执行相应功能。

中断初始化函数定义了两个中断。

调速函数通过两个中断函数实现电机转动的加减速。

主函数调用并执行子函数。

1.主函数

主函数声明两个中断函数,并进入子程序的循环,即先按键扫描,返回值再进入模式判断函数。

/****************************主函数**********************************/
void main(void)
{Int0Init();//声明加速的中断Int1Init();//声明减速的中断while(1){mode(key());//先按键扫描,后选择模式}
}

声明部分。定义顺时针和逆时针转动时供电的顺序,分别放到两个数组里;定义数码管显示的供电;定义全局变量V用来调节转速、全局变量D用来调节显示的速度档。

#include <REGX51.H>unsigned char SSZ[] = {0x08,0x0a,0x02,0x06,0x04,0x05,0x01,0x09};//顺时针数组
unsigned char NSZ[] = {0x09,0x01,0x05,0x04,0x06,0x02,0x0a,0x08};//逆时针数组
smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//用于显示档速
int V=500,D=1;//V在延时函数中,用于调速;D用来控制数码管显示的数字
int i=4;//先使电机处于停机状态
int n=0;//用于循环给电机通电

2.子函数1

延时函数用于调节给电机供电的时间,从而实现调速。

/***************************延时函数*******************************/
void delay(unsigned int t)//调节给电机供电的时间,从而调速
{while(t--);
}

3.子函数2

按键扫描函数用来判断哪个键被按下,从而实现对应功能。

/***************************按键扫描***************************************/
int key()
{if(P0_0==0) i=1;//顺时针if(P0_1==0) i=2;//逆时针if(P0_2==0) i=3;//启动/回到初速度if(P0_3==0) i=4;//停机return i;
}  

4.子函数3

模式判断函数根据按键扫描的返回值执行相应功能。停机即不给电机供电并使数码管显示0。启动会首先给全局变量V赋值500保证一定的延时,达到一定的转速,并且速度档先为1。正转使用顺时针数组内规则供电,反转使用逆时针数组内规则供电,并根据全局变量D的值显示速度档。

/****************************模式判断**************************************/
void mode(int i)//由按键扫描返回值判断
{switch(i){
/****************停机****************/    case 4:P2=0X00;//不给电机供电P1=~smg[0];//数码管显示0break;
/****************启动/重启****************/ case 3:V=500;//启动的速度/初速度D=1;//速度1档,自动进入模式1
/****************模式1 正转****************/case 1:while(1){for(n=0;n<8;n++)//循环供电{P2=SSZ[n];//供电delay(V);//延时P1=~smg[D];//显示速度档}break;}  break;
/****************模式2 反转****************/case 2:while(1){for(n=0;n<8;n++)//循环供电{P2=NSZ[n];//供电delay(V);//延时P1=~smg[D];//显示速度档}break;}break;          }
}

5.子函数4

中断初始化函数定义两个外部中断从而实现控制电机的加速和减速。

/*************************中断初始化*****************************/
void Int0Init()//加速
{IT0=1;EX0=1;EA=1;
}void Int1Init()//减速
{IT1=1;EX1=1;EA=1;
}

6.子函数5

调速函数的实质是两个中断函数。如果对应按键按下,会使全局变量V加或减相应值实现转速的改变,同时全局变量D也会加或减1,从而改变数码管显示的速度档。

/*************************调速函数****************************/
void Int0() interrupt 0  //加速
{if(P3_2==0)//判断加速键是否被按下{delay(2000);//消抖if(P3_2==0)//消抖后再次判断{V=V-50;//延时时间减少,所以速度增加D=D+1;//速度档加1}}
}void Int1() interrupt 2     //减速
{if(P3_3==0)//判断减速键是否被按下{delay(2000);//消抖if(P3_3==0)//消抖后再次判断{V=V+50;//延时时间增加,所以速度减少D=D-1;//速度档减1}}
}

 六、结束语

    本函数实现了步进电机的基本控制,但是可拓展的地方还有很多,比如使用动态数码管显示,使用LCD1602液晶显示屏显示均可。还可以通过计算延时函数的长短,计算出电机转一圈的时间,从而计算转速。另外还可以使用计数器来计算电机1s内转了多少圈,也可以用来计算转速。留待后期开发,还有很多可以探索的功能。

七、演示视频

步进电机视频

八、源代码

#include <REGX51.H>unsigned char SSZ[] = {0x08,0x0a,0x02,0x06,0x04,0x05,0x01,0x09};//顺时针数组
unsigned char NSZ[] = {0x09,0x01,0x05,0x04,0x06,0x02,0x0a,0x08};//逆时针数组
smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//用于显示档速
int V=500,D=1;//V在延时函数中,用于调速;D用来控制数码管显示的数字
int i=4;//先使电机处于停机状态
int n=0;//用于循环给电机通电
/***************************延时函数*******************************/
void delay(unsigned int t)//调节给电机供电的时间,从而调速
{while(t--);
}
/***************************按键扫描***************************************/
int key()
{if(P0_0==0) i=1;//顺时针if(P0_1==0) i=2;//逆时针if(P0_2==0) i=3;//启动/回到初速度if(P0_3==0) i=4;//停机return i;
}
/****************************模式判断**************************************/
void mode(int i)//由按键扫描返回值判断
{switch(i){
/****************停机****************/    case 4:P2=0X00;//不给电机供电P1=~smg[0];//数码管显示0break;
/****************启动/重启****************/ case 3:V=500;//启动的速度/初速度D=1;//速度1档,自动进入模式1
/****************模式1 正转****************/case 1:while(1){for(n=0;n<8;n++)//循环供电{P2=SSZ[n];//供电delay(V);//延时P1=~smg[D];//显示速度档}break;}  break;
/****************模式2 反转****************/case 2:while(1){for(n=0;n<8;n++)//循环供电{P2=NSZ[n];//供电delay(V);//延时P1=~smg[D];//显示速度档}break;}break;          }
}
/*************************中断初始化*****************************/
void Int0Init()//加速
{IT0=1;EX0=1;EA=1;
}void Int1Init()//减速
{IT1=1;EX1=1;EA=1;
}
/*************************调速函数****************************/
void Int0() interrupt 0  //加速
{if(P3_2==0)//判断加速键是否被按下{delay(2000);//消抖if(P3_2==0)//消抖后再次判断{V=V-50;//延时时间减少,所以速度增加D=D+1;//速度档加1}}
}void Int1() interrupt 2     //减速
{if(P3_3==0)//判断减速键是否被按下{delay(2000);//消抖if(P3_3==0)//消抖后再次判断{V=V+50;//延时时间增加,所以速度减少D=D-1;//速度档减1}}
}
/****************************主函数**********************************/
void main(void)
{Int0Init();//声明加速的中断Int1Init();//声明减速的中断while(1){mode(key());//先按键扫描,后选择模式}
}

51单片机步进电机全套资料(启停+正反转+加减速+显示速度+中断)【源程序+流程图+接线图+视频+答辩报告】综合设计首选相关推荐

  1. K_A08_001 基于 STM32等单片机驱动L298N模块按键控制直流电机启停正反转加减速

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 L298N模块驱动时序 对应程序: ENA ENB输出PWM 四.部分代码说明 接线说明 1.STC89C52RC+L298N模 ...

  2. K_A08_004 基于 STM32等单片机驱动MX1919模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 1.MX1919模块驱动时序 2.对应程序: 3.PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MX1919 ...

  3. K_A08_003 基于 STM32等单片机驱动L9110模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 L9110模块驱动时序 对应程序: PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+L9110模块 2.STM ...

  4. K_A08_002 基于 STM32等单片机驱动MAX1508模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 3.驱动说明 MAX1508模块驱动时序 对应程序: PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MAX1508模块 2 ...

  5. K_A08_009 基于 STM32等单片机驱动TB6612模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 TB6612模块驱动说明 对应程序: ENA ENB输出PWM 四.部分代码说明 接线说明 1.STC89C52RC+TB661 ...

  6. K_A08_005 基于 STM32等单片机驱动XY-160D模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 四.部分代码说明 接线说明 1.STC89C52RC+XY-160D模块 2.STM32F103C8T6+XY-160D模块 五.基础知识学习与相关资料下载 六.视频 ...

  7. 89c52单片机控制两个步进电机正反转加减速(程序+仿真)

    89c52单片机控制两个步进电机正反转加减速(程序+仿真) 先上图: 源代码: /*********************************************************** ...

  8. blinker控制步进电机起保停,正反转,加减速(Arduino uno+esp8266+TB6600驱动器)

    blinker控制步进电机起保停,正反转,加减速(Arduino uno+esp8266+TB6600驱动器) 本文针对上一篇的<blinker控制步进电机起保停,正反转(Arduino uno ...

  9. 51单片机计算器(源程序+流程图+答辩报告+综合设计)

    由于本文较早,这里推荐一下近期刚优化的:[优化]51单片机计算器(LCD1602液晶显示)_Gxtoeilee的博客-CSDN博客 1 设计目标 设计可选模式的计算器 2 主要功能 功能一:可选两种计 ...

最新文章

  1. Android应用程序安装过程源代码分析(1)
  2. 【BZOJ4458】GTY的OJ
  3. 小米12系列首发!高通骁龙898有望11月30日亮相
  4. verilog中的initial块、always块详细解释
  5. ASCII码常用范围
  6. 越狱团队否认收钱并中止与太极合作
  7. 2022海亮SC游记
  8. zoj 2839 Find the Sequences(数学题)
  9. python使用to_csv(mode=‘a‘)追加数据/(mode=‘w‘)覆盖文件数据
  10. 工商银行总行营业厅管理软件设置视频教程
  11. 计算机横向查找,Excel查找引用函数:HLOOKUP查找首行并显示指定的值-excel技巧-电脑技巧收藏家...
  12. google protobuf 在线工具
  13. 用Python编写代码来理解赢得《英雄联盟》游戏的胜利的最重要因素
  14. 记u盘内文件变为.lnk处理方法
  15. c语言如何解超越方程
  16. SAP官网学习教程(2)创建HANA数据库
  17. 1+X Web前端证书中级备考攻略
  18. CDH数仓项目(一) —— CDH安装部署搭建详细流程
  19. 机器学习笔记 - Traffic-Net训练交通拥堵程度
  20. 前端实现文本框在光标后插入图片

热门文章

  1. AI迷路了怎么办?Facebook正在训练AI学会问路
  2. JAVA SOCKET 服务端/客户端可随时从任意一方发消息的例子
  3. MySQL数据库(一)
  4. 韦东山C语言加强课,截图+代码+学习笔记【2000字】【原创】
  5. python英文字符频率统计_python统计英文首字母出现的次数
  6. 五毒月到底有多毒?节制嗜欲、男女禁忌不可不知
  7. 普通用户使用sudo命令,获得管理员权限
  8. 大数据技术---Spark
  9. vivado的vio怎么使用_Vivado中vio的使用
  10. 网球线的几个常见问题