二相四线步进电机的单片机源程序 用L298N模块驱动

发布者:chinapxf最新更新时间:2019-11-30 来源: 51hei关键字:二相四线步进电机  单片机  L298N模块驱动 手机看文章 扫描二维码
随时随地手机看文章

在网上找了很久资料,都没有直接的源代码去驱动二相四线步进电机。本人编写了一些基本的代码,再加上L298N模块,就可以轻松驱动啦。
0.png0.png0.png0.png 

单片机源程序如下:

#include "reg52.h"


//电机IO

#define GPIO_MOTOR P1

//sbit F1 = P1^0;

//sbit F2 = P1^1;

//sbit F3 = P1^2;

//sbit F4 = P1^3;

//按键IO


sbit K1=P3^0;

sbit K2=P3^1;

sbit K3=P3^2;

sbit K4=P3^3;


                                                                                                                                                                    

sbit a0=P1^0;                          

sbit a1=P1^1;            

sbit b0=P1^3; 

sbit b1=P1^4;


void right(unsigned int y);

void left(unsigned int x); 

void Delay(unsigned int t);

unsigned char Direction,Speed;

void motor();

/*******************************************************************************

* 函 数 名         : main

* 函数功能                   : 主函数

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/


void main(void) 

        unsigned char i;        

   Speed=10;


  while(1)

        {

                         

          if(K1==0)                //检测按键K1是否按下

                {

                        Delay(50);        //消除抖动

                        if(K1==0)

                        {

                                Direction=1;

                        }

                        while((i<200)&&(K1==0))         //检测按键是否松开

                        {

                                Delay(50);

                                i++;

                        }

                        i=0;

                }



                if(K2==0)                //检测按键K1是否按下

                {

                        Delay(50);        //消除抖动

                        if(K2==0)

                        {

                                Direction=2;

                        }

                        while((i<200)&&(K2==0))         //检测按键是否松开

                        {

                                Delay(50);

                                i++;

                        }

                        i=0;

                }        




                 if(K3==0)                //检测按键K1是否按下

                {

                        Delay(100);        //消除抖动

                        if(K3==0)

                        {

                                Speed--;

                                if(Speed<=3)

                                Speed=4;

                        }

                        while((i<200)&&(K2==0))         //检测按键是否松开

                        {

                                Delay(1);

                                i++;

                        }

                        i=0;

                }

         

                if(K4==0)                //检测按键K1是否按下

                {

                        Delay(100);        //消除抖动

                        if(K4==0)

                        {

                                Speed++;

                        }

                        while((i<200)&&(K4==0))         //检测按键是否松开

                        {

                                Delay(100);

                                i++;

                        }

                        i=0;

                }        


          motor();

  


        }

}






void motor()

{


if(Direction==1) 

        {

        a0=0;

        a1=1;

        b0=1;

        b1=1;

        Delay(Speed);

        a0=1;

        a1=0;

        b0=1;

        b1=1;

        Delay(Speed);

        a0=1;

        a1=1;

        b0=0;

        b1=1;

        Delay(Speed);

        a0=1;

        a1=1;

        b0=1;

        b1=0;

        Delay(Speed);

        }



if(Direction==2) 

                 

        {

        a0=1;

        a1=1;

        b0=1;

        b1=0;

        Delay(Speed);

        a0=1;

        a1=1;

        b0=0;

        b1=1;

        Delay(Speed);

        a0=1;

        a1=0;

        b0=1;

        b1=1;

        Delay(Speed);

        a0=0;

        a1=1;

        b0=1;

        b1=1;

        Delay(Speed);

        }



}


                                                                                                                                                                          

[1] [2]
关键字:二相四线步进电机  单片机  L298N模块驱动 引用地址:二相四线步进电机的单片机源程序 用L298N模块驱动

上一篇:基于51单片机的温度采集系统(Labview做上位机)
下一篇:LCD12864中文液晶屏显示

推荐阅读最新更新时间:2024-11-09 13:11

奥迪电机驱动器(MCU)系统框图、芯片、功能拆解
新能源 电机驱动器 ( MCU )系统框图, 芯片 ,功能 拆解 E-tron的逆变器的电压覆盖范围为150V-460V,10 秒持续的最大 电流 为 530A,持续电流最大为 260A,功率密度为30kVA/L,和 特斯拉 的不同,采用了三个 IGBT 功率模块 。 电机控制 器的系统框图更新如下: 注意,图片中其他运放和 电源 , 通信 芯片等非E-tron所用,仅做示意 控制板上,E-tron采用了1片 Altera 的MAXII系列的 CPLD 芯片,1片旋变解码芯片,1片 英飞凌 的TriCore AURIX 32位 DSP 芯片,1片 BOSCH 的 电源管理 芯片; 附一张FOC的控制图,更好理
[汽车电子]
奥迪电机<font color='red'>驱动</font>器(<font color='red'>MCU</font>)系统框图、芯片、功能拆解
如何设计一个基于STC89C52单片机的恒温箱温控系统
一、系统方案设计 本系统是基于经典C51系列单片机的应用开发,集环境温度的信号采集、数据的处理及温度的保持控制等等为一体的数字控制系统。同时,该系统设计有友好的人机交互界面以及简易的设置按键。 系统由如下功能模块组成:MCU模块,显示模块。电源模块,按键设置模块,温度采集模块。 冷却模块以及加热模块。系统方案框图如图1所示。 图1 系统方案框 二、元器件选择 本设计的MCU采用STC89C52单片机;考虑到节省器件使用的需要。温度传感器则采用单总线制的数字温度传感器DSl8820,无需接A,D转换器,采样值可直接送单片机处理,简易方便;系统采用普通单刀继电器HK4100F作为控制开关;两个水泥电阻(10W,10Ω)串联
[单片机]
如何设计一个基于STC89C52<font color='red'>单片机</font>的恒温箱温控系统
基于51单片机的蓝牙台灯设计
功能如下: 1、通过按键调节灯的亮度(1-10档位); 2、通过蓝牙远程控制灯的亮度和开关; 3、感应,根据附近是否有人自动进行开关灯。 部分程序: #include #include #include sys_define.h #include pwm.h #include uart.h uchar Lamp_OnOff = 1; //台灯开关标志位 uchar Reaction_OnOff = 0; //人体感应开关标志位 sbit Key2 = P2^6; sbit Key4 = P2^5; sbit Key5 = P2^4; sbit Key6 = P2^3; sbit Reaction = P2^7; v
[单片机]
基于51<font color='red'>单片机</font>的蓝牙台灯设计
MCU复位和程序启动那些事
MCU通常会在工作之前,先经历复位和启动的一个过程,在用户使用过程中往往在这个阶段的工作不是那么的清楚,这里我们就这一话题进行一个讨论。 一.MCU的复位问题 图1 16bit MCU和dsPIC33复位源的种类 一般来说,16位MCU包括dsPIC33的复位源主要包含以上7种,他们都可以对器件产生复位的作用,但是细节有所不同。 图2 复位系统框图 从复位系统框图上看,BOR和POR二者是和VDD电源有关的两种,看门狗和外部复位引脚复位也是比较常见的复位类型。 图3 复位寄存器RCON 复位寄存器RCON包含了复位相关的状态,当发生复位时RCON这个寄存器就会更新,以便表征是哪一个复位
[单片机]
IAR单片机编程软件建立stm32工程的方法解析
Keil和IAR单片机编程软件,是当前流通度庞大的两款单片机编程软件。而对于单片机编程软件的使用,各自存在一定区别。本文中,将为大家讲解IAR单片机编程软件建立stm32工程的详细方法,希望大家通过本文能够有所收获哦。 版本1: stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: 1、在常用的文件夹下新建立一个文件夹,根据个人喜好,分别建立如下几个文件夹,用于分别存放固件库中的文件和用户自己的文件。 2、将固件库E:STM32stm32固件库3.5STM32F10x_StdPeriph
[单片机]
IAR<font color='red'>单片机</font>编程软件建立stm32工程的方法解析
基于AT89C51单片机和地感线圈实现动态车辆检测器的设计
1 引言 随着经济的发展,不停车收费系统(ETC)已在我国悄然兴起。不停车收费系统主要是由通讯、监控、收费三大系统组成。整个系统可靠运行的一个重要环节就是车辆检测器。在不停车收费系统中它是检测驶向通讯区域的车辆并命令天线进行通信的传感器,具有进入检测、车速检测、车型判别等功能;它是检测出离开通信区域的车辆、根据ETC车道控制器的判断控制栏杆、路侧显示器的传感器,具有进入检测功能;它具有检测车辆通过,控制清除针对该车辆的路侧显示器的显示内容以及控制针对后续车辆的显示的功能,并命令栏杆关闭的功能。 考虑到性能、价格、技术复杂性、可靠性、维护要求、适用范围等因素,我们这种车辆检测器是基于地感线圈原理研制的。 2 动态车辆检测器设计
[单片机]
基于AT89C51<font color='red'>单片机</font>和地感线圈实现动态车辆检测器的设计
华大电子MCU CIU32L061x8存储器(Flash)
5.3.5 User flash 区擦除操作 User flash 区支持以下擦除方式: l 页擦除(512 字节) l 块擦除(16KB) l 批量擦除(128KB) Flash 存储器在执行擦除操作时,不能同时进行读取操作,需要等待存储器完成 擦除操作后,读取操作才能正常进行,擦除完成后的 Flash 数据为全 1。 5.3.5.1 User flash 区页擦除步骤 对 User flash 区进行页擦除操作(512 字节),可遵循以下步骤: 1) 检查 Flash 状态寄存器(FLASH_SR)中的 BSY 标志,以确认当前没有正在执行的 Flash 操作; 2) 检查 FLASH_SR 寄存器,确认错误标志均已清除; 3
[单片机]
深入解析汽车MCU的软件架构
电动汽车(EV)正在成为首选的交通方式,为传统内燃机汽车提供了一种可持续发展的环保型替代方案。在电动汽车复杂的生态系统中,众多电子控制单元(ECU)在确保其高效运行方面发挥着至关重要的作用。电机控制单元(MCU)就是这样一个 ECU,它是电机性能背后的大脑。在这篇综合文章中,我们将探索电机控制单元的世界,研究它们的功能、组件以及影响汽车 MCU 领域的最新趋势。 了解电动汽车使用的电机 在深入研究电动汽车电机控制单元的复杂性之前,有必要了解电动汽车常用的各种电机类型。最常见的两种类型是无刷直流(BLDC)电机和永磁同步(PMS)电机。 无刷直流电机又称电子换向电机,无需电刷和换向器,从而提高了效率,减少了维护。从本质上讲,它的
[嵌入式]
深入解析汽车<font color='red'>MCU</font>的软件架构
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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