基于单片机的四相步进电机控制设计

发布者:SparklingMelody最新更新时间:2022-03-25 来源: eefocus关键字:单片机  四相  步进电机控制 手机看文章 扫描二维码
随时随地手机看文章

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计要求:

  • 采用定时中断方式控制步进机的转速,定时单位时长为10ms。

  • 速度设置在1/2/3/4四个档位,1档最快,依次递减,能够控制步进电机的停、转和方向,同时显示步进机的当前档位。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计思路:

  • 通过P1控制步进电机的转动,P1.0->a,P1.1->b,P1.2->c,P1.3->d,ULN2003A作为步进电机驱动

  • P2.0-P2.3对应数码管显示(使用7447芯片对应将BCD码转换成7端LED数码管),通过7447简单驱动数码管(P2只需要发送1/2/3/4即可)

  • 通过定时器计数,到达设定值时步进电机转动1/4圈,计数清零

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

元件清单:

  • AT89C51

  • BUTTON

  • MOTOR-STEPPER

  • RESPACK-8

  • 7SEG-COM-ANODE

  • ULN2003A

  • 7447

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实现代码:


#include

typedef unsigned char uchar;

uchar direction = 0;  //0为正转,1为反转

uchar onoff = 0; //关为0,开为1

uchar n = 0; //每次定时器中断触发时n++,当n==max时电机转动1/4

uchar max = 10;

uchar index = 0; //通过index指示电机转动,AB,BC,CD,DA

sbit LED = P3 ^ 7; //当n==max时LED闪烁提示

int main()

{

    /* LED */

    P2 = 0xff;

    /* 初始化中断 */

    EA = 1;

    EX0 = 1; //要用到的中断是两个外部中断和定时器中断0

    IT0 = 1;

    EX1 = 1;

    IT1 = 1;

    ET0 = 1;

    /* 定时器0 */

    TMOD = 0x01; //使用定时器0,方式1

    TH0 = (65536 - 10000) / 256; //12MHz晶振下,定时器为10ms触发中断,更方便观察转动情况

    TL0 = (65536 - 10000) % 256;

    TR0 = 1;

    while(1)

    {

        switch(P0)

        {

        case 0xfe: //11111110

            max = 1;

            P2 = 1;

            break;

        case 0xfd: //11111101

            max = 10;

            P2 = 2;

            break;

        case 0xfb: //11111011

            max = 50;

            P2 = 3;

            break;

        case 0xf7: //11110111

            max = 100;

            P2 = 4;

            break;

        }

    }

}

void Stop()interrupt 0

{

    onoff++;

    if (onoff > 1)

        onoff = 0;

}

void int1()interrupt 2

{

    direction++;

    if (direction > 1)

        direction = 0;

}

void delay50ms(void)

{

    unsigned char a, b;

    for(b = 173; b > 0; b--)

        for(a = 143; a > 0; a--);

}

void time()interrupt 1

{

    TH0 = (65536 - 10000) / 256;

    TL0 = (65536 - 10000) % 256;

    if (onoff == 1) //在开状态下

    {

        if (n == max) //设定档位速度,经过了max次中断后,步进电机转1/4圈

        {

            LED = 0; //每次n==max时LED闪烁

            delay50ms();

            LED = 1;

            if (direction == 0)

            {

                switch(index) //正转时以AB,BC,CD,DA顺序

                {

                case 0:P1 = 0x03;break; //00000011 AB高电平

                case 1:P1 = 0x06;break; //00000110 BC高电平

                case 2:P1 = 0x0c;break; //00001100 CD高电平

                case 3:P1 = 0x09;break; //00001001 DA高电平

                }

                index ++; 

                if (index == 4) //步进电机转完一圈时index清零

                    index = 0;

                n = 0; //到达max,n重置为0

            }

            if (direction == 1)

            {

                switch(index) //反转时以DA,CD,BC,AB顺序

                {

                case 0:P1 = 0x09;break;

                case 1:P1 = 0x0c;break;

                case 2:P1 = 0x06;break;

                case 3:P1 = 0x03;break;

                }

                index ++;

                if (index == 4)

                    index = 0;

                n = 0;

            }

            else n = 0;

        }

        n++; //n!=max时,n++

    }

    else n = 0; //在关状态下,n始终为0,无法触发电机转动

}


关键字:单片机  四相  步进电机控制 引用地址:基于单片机的四相步进电机控制设计

上一篇:基于单片机的电机转速测量系统设计
下一篇:基于单片机的简易计算器设计

推荐阅读最新更新时间:2024-11-03 10:10

基于ATtiny85微控制器制作一款四通道温度计
本文主要介绍了一款基于ATtiny85微控制器的四通道温度计,该温度计可以同时监测四个温度传感器的温度,并且实时在小型128x32 OLED液晶屏上进行显示。 该温度计可以用于任何需要监控多个温度点的应用中,例如控制温室、检查功率放大器中的输出晶体管、监控超频游戏PC中的关键点、监控Raspberry Pi上的芯片,或者检查家里各个房间的温度。 以下示例是使用四通道温度计监视A类功率放大器功率晶体管的温度: 简介 这款四通道温度计采用了ATtiny85微控制器来读取四个DS18B20或MAX31820温度传感器的数据,使用1-Wire协议,并在小型OLED液晶屏上显示温度。 我选择了一个128x32
[单片机]
基于ATtiny85<font color='red'>微控制器</font>制作一款四通道温度计
DIY 6位数显频率计
1.实验任务   利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHz的信号频率进行准确计数,计数误差不超过±1HZ。 2.电路原理图               图4.31.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 (2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 (3).把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的W
[单片机]
DIY 6位数显频率计
飞思卡尔单片机DZ60---时钟初始化
/* Derivative peripheral declarations */ #include derivative.h /* Definitions and function prototypes */ #include DZ60_init.h //FEI切换到PEE模式,外部晶振=4MHZ,总线频率=8MHZ( 中文手册,P144页) /* External crystal oscillator = 4MHz */ /* FOR PEE mode: Bus_Clock = (1/2)* /(Bus_div) = 8MHz */ #define BUS_DIV 0 /* Bus di
[单片机]
基于PIC16F628单片机的便携式电子秤
引 言 目前,台式电子秤在商业贸易中的使用已相当普遍,但存在较大的局限性:体积大、成本高、需要工频交流电源供应、携带不便、应用场所受到制约。现有的便携秤为杆秤或以弹簧、拉伸变形来实现计量的弹簧秤,居民用户使用的基本是杆秤。弹簧盘秤制造工艺要求较高,弹簧的疲劳问题无法彻底解决,一旦超过弹簧弹性限度,弹簧秤就会产生很大误差,以至损坏,影响到称重的准确性和可靠性,只是一种暂时的代用品,也被列入逐渐取消的行列。多年来,人们一直期待测量准确、携带方便、价格低廉的便携式电子秤(袖珍电子秤)投放市场。 基于电子秤的现状,本项目拟研究一种用单片机控制的高精度智能电子秤设计方案。这种高精度智能电子秤体积小、计量准确、携带方便,集质量称量功能与价
[单片机]
单片机资料上拉电阻的应用
如果是驱动led,那么用1K左右的就行了。如果希望亮度大一些,电阻可减小,最小不要小于200欧姆,否则电流太大;如果希望亮度小 一些,电阻可增大,增加到多少呢,主要看亮度情况,以亮度合适为准,一般来说超过3K以上时,亮度就很弱了,但是对于超高亮度的LED,有时 候电阻为10K时觉得亮度还能够用。我通常就用1k的。 对于驱动光耦合器,如果是高电位有效,即耦合器输入端接端口和地之间,那么和LED的情况是一样的;如果是低电位有效,即耦合器输入端接端 口和VCC之间,那么除了要串接一个1 4.7k之间的电阻以外,同时上拉电阻的阻值就可以用的特别大,用100k 500K之间的都行,当然用 10K的也可以,但是考虑到省电问题,没有必
[单片机]
NEC电子12款内置USB2.0的32位全闪存MCU
近日, NEC 电子完成了 12 款集成 “USB 2.0” 通信功能的 32 位全闪存微控制器的开发,并于即日起开始发售样品。   新产品中使用的 CPU 内核为 NEC 电子的 32 位 CPU 核 “V850ES” ,并集成了 USB2.0 通讯功能,其主要特征包括: ( 1 )集成了主机控制及外设功能控制两种功能,无须使用外接 USB 芯片,就能搭建 USB 连接的系统; ( 2 )最高工作频率为 48MHz ,约为现有 V850ES 核产品的 1.5 倍,可实现 98MIPS 的高性能; ( 3 )可同时提供搭建 USB 系统所需的各种驱动软件; ( 4 )内置有电机控制定时器、实时定
[新品]
单片机模拟2262软件编码
  1 概述   在应用遥控编、解码芯片时,要求一对芯片的地址完全一致,因此当一个遥控芯片控制多个解码芯片时,需要与地址端连接的多个开关同时辅助动作,以改变地址,使之与解码芯片的地址完全一致,达到遥控的目的。   若用微控制器取代编码芯片,就可以使多个开关动作改变输出波形的功能由软件完成,同时,在空闲时让微控制器工作在掉电模式,这样不但操作简便而且节省了能源。   为此,我们设计了用廉价单片机AT89C2051代替遥控编码芯片PT2262来实现编码功能的电路,用软件模拟了遥控编码功能。   2 PT2262的工作原理   2.1 管脚功能   PT2262的各管脚功能如表1所示。      2.2 位脉冲宽
[单片机]
用<font color='red'>单片机</font>模拟2262软件编码
【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(3)使用 Embedded Builder 开发 GD32
3.1 安装 JAVA 环境 Embedded Builder 是一款基于 Eclipse 和 Java 平台的软件,需要安装 java 环境,在 Oracle 官网下载 https://www.oracle.com/java/technologies/downloads/, 以 jdk-8u152-windows-x64.exe 为例,下载后管理员身份打开并安装,记住安装路径,如“D:Program FilesJavajdk1.8.0_351”。 编辑系统变量,将 Java 环境添加到系统环境中。首先在系统变量中添加JAVA_HOME 这个变量。 编辑系统变量中的 Path 变量,单击新建,添加如下两个变量。 在系统
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】一、GD32 <font color='red'>MCU</font> 开发环境搭建(3)使用 Embedded Builder 开发 GD32
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved