【C语言】51单片机四线双极性步进电机启动、停机、正反转、加减速(中断实现)数码管显示速度

您所在的位置:网站首页 lcd1602供电 【C语言】51单片机四线双极性步进电机启动、停机、正反转、加减速(中断实现)数码管显示速度

【C语言】51单片机四线双极性步进电机启动、停机、正反转、加减速(中断实现)数码管显示速度

2023-04-02 02:10| 来源: 网络整理| 查看: 265

一、设计目标

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

二、主要功能

    功能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 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];//数码管显示0 break; /****************启动/重启****************/ case 3: V=500;//启动的速度/初速度 D=1;//速度1档,自动进入模式1 /****************模式1 正转****************/ case 1: while(1) { for(n=0;n


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3