精华内容
下载资源
问答
  • l298n驱动步进电机
    2022-05-26 19:17:38

    1.1 步进电机相关概念

    相数:产生不同对极N、S磁场的激磁线圈对数,常用 m 表示。例如:二相四线电机,就有两对极N、S磁场的激磁线圈,四个线圈。上图可知,A+,A- 是连通的,B+ 和B- 是连通的,分别记为A组、B组。在不知道电机接线图的情况下可以用万用表测试,即相互连通的为一组。

    拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA。

    步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数J运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50 × 4 50\times 450×4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50 × 8 50\times 850×8)=0.9度(俗称半步)。

    定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)。

    静转矩:电机在额定静态电作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积(几何尺寸)的标准,与驱动电压及驱动电源等无关。

    #include "sys.h"
    #ifndef _L298N_H
    #define _L298N_H
    
    #define IN1 PBout(12)
    #define IN2 PBout(13)
    #define IN3 PBout(14)
    #define IN4 PBout(15)
    #define ENA GPIO_Pin_7 //TIM3通道2,PWM通道
    #define ENB GPIO_Pin_6 //TIM3通道1
    #define ENAZERO  GPIOA->BSRR&=~(1<<6)
    #define ENBZERO  GPIOA->BSRR&=~(1<<7)
    #define ENASTART GPIOA->BSRR|=(1<<6)
    #define ENBSTART GPIOA->BSRR|=(1<<7)
    #define MOTOR_STEP_COUNT   400
    void Static_init();
    void Motor_en_init(int arr,int psc);
    void Motor_speed_adjust(TIM_TypeDef* TIMx,int arr,float Dutycycle); //调节函数只针对通道一
    void Stop1(void );
    void Stop2(void );
    void Stop_all(void );
    void ZRotate1();
    void ZRotate2();
    void  Z_Rotate_all();
    void FRotate1();
    void FZRotate2();
    void  F_Rotate_all();
    void SetMotor(unsigned char InputData);
    void Control_4();
    void Control_dou4();
    void Control_8();
     #endif
    
    


    L298N源文件

    #include "stm32f10x.h"
    #include "pwm.h"
    #include "L298N.h"
    #include "delay.h"
     void Static_init()//全部默认为0
     {
    		ENAZERO;//A电机停转
    		ENAZERO;//B电机停转
     GPIO_InitTypeDef GPIO_InitStructure;
    	 RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB,ENABLE);//使能,开启GPIOB的外设时钟
    	 //IN1
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;			
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
    	GPIO_Init(GPIOB, &GPIO_InitStructure);					 
    	GPIO_ResetBits(GPIOB,GPIO_Pin_12);	
    	 //IN2
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 				
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 
    	GPIO_Init(GPIOB, &GPIO_InitStructure);				
    	GPIO_ResetBits(GPIOB,GPIO_Pin_13);				
     //IN3
    	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;				 
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 
    	GPIO_Init(GPIOB, &GPIO_InitStructure);					 
    	GPIO_ResetBits(GPIOB,GPIO_Pin_14);
    	 //IN4
    	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;				
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 
    	GPIO_Init(GPIOB, &GPIO_InitStructure);					 
    	GPIO_ResetBits(GPIOB,GPIO_Pin_15);	
    		
     }
     void Motor_en_init(int arr,int psc)
     {
    	 RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);//使能,开启GPIOC的外设时钟
         ENASTART,ENBSTART;
    	 TIM3_PWM_Init(arr,psc);//100HZ
    //	 TIM_Cmd(TIM3, ENABLE);
    
     }
     //调节函数只针对通道一
     void Motor_speed_adjust(TIM_TypeDef* TIMx,int arr,float Dutycycle)
     {
     //Set_Pwm2_Dutycycle( TIM3,10000,0.5);
    	 Set_Pwm2_Dutycycle( TIMx,arr,Dutycycle);
     }
     //以下函数默认电机使能,针对直流电机而言
     //一电机停止
     void Stop1( )
     {
         IN1=0;
    	 IN2=0;
    	 
     }
     //二电机停止
    void Stop2( )
     {
         IN3=0;
    	 IN4=0;
     } 
     void Stop_all()
     {
    	 
         IN1=0;
    	 IN2=0;
    	 IN3=0;
    	 IN4=0;
    	 
     }
     void ZRotate1()
     {
         IN1=0;
    	 IN2 =1;
    	 
     }
     void ZRotate2()
     {
         IN3=0;
    	 IN4=1;
     }
     //全部正转
     void  Z_Rotate_all()
     {
         IN1=0;
    	 IN2 =1;
    	 IN3=0;
    	 IN4=1;
    	 //...
     
     }
     //反转
     void FRotate1()
     {
         IN1=1;
    	 IN2 =0;
    	 
     }
     void FZRotate2()
     {
         IN3=1;
    	 IN4=0;
     }
     //全部反转
     void  F_Rotate_all()
     {
         IN1=1;
    	 IN2 =0;
    	 IN3=1;
    	 IN4=0;
    	 
     }
      //单四拍控制通电方式
     void Control_4()
     {
     
     IN1=1,IN2=0,IN3=0,IN4=0;
    		delay_ms(1);
    	 IN1=0,IN2=0,IN3=1,IN4=0;
    		delay_ms(1);
    	 IN1=0,IN2=1,IN3=0,IN4=0;
    		delay_ms(1);
    	 IN1=0,IN2=0,IN3=0,IN4=1;
    		delay_ms(1);
     }
     
     //双四拍控制通电方式
     void Control_dou4()
     {
     
     IN1=1,IN2=0,IN3=1,IN4=0;
    		delay_ms(1);
    	 IN1=0,IN2=1,IN3=1,IN4=0;
    		delay_ms(1);
    	 IN1=0,IN2=1,IN3=0,IN4=1;
    		delay_ms(1);
    	 IN1=1,IN2=0,IN3=0,IN4=1;
    		delay_ms(1);
     }
     //单八拍控制通电方式,一拍0.9度
     void Control_8()
     {
     IN1=1,IN2=0,IN3=0,IN4=0;
    		delay_ms(1);
    		IN1=1,IN2=0,IN3=1,IN4=0;
    		delay_ms(1);
    		IN1=0,IN2=0,IN3=1,IN4=0;
    		delay_ms(1);
    		IN1=0,IN2=1,IN3=1,IN4=0;
    		delay_ms(1);
    		IN1=0,IN2=1,IN3=0,IN4=0;
    		delay_ms(1);
    		IN1=0,IN2=1,IN3=0,IN4=1;
    		delay_ms(1);
    		IN1=0,IN2=0,IN3=0,IN4=1;
    		delay_ms(1);
    		IN1=1,IN2=0,IN3=0,IN4=1;
    		delay_ms(1);
     
     }
     
     
     u16  nCurrentMotorStepCount=0;
    void SetMotor(unsigned char InputData)
    { 
        if(InputData&0x01)
        {      
    		IN4=1;
    		
        }
        else
        {
    		IN4=0;
        }
     
        if(InputData&0x02)
        {
    		IN2=1;
        }
        else
        {
    		IN2=0;
        }
     
        if(InputData&0x04)
        {
    		IN3=1;
        }
        else
        {
    		IN3=0;
        }
     
        if(InputData&0x08)
        {
        
    		IN1=1;
        }
        else
        {
    		IN1=0;
        }
    }
    // unsigned char PhaseCW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//顺时针旋转相序表
    // unsigned char PhaseCCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//逆时针旋转相序表
    //void TIM3_IRQHandler(void)
    //{
    //    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//是更新中断
    //    {        
    //        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIM3更新中断标志    
    //  
    //        nCurrentMotorStepCount++;
    //                
    //        if(nCurrentMotorStepCount <= MOTOR_STEP_COUNT)
    //        {
    //            SetMotor(PhaseCW[nCurrentMotorStepCount%8]);
    //            //SetMotor(PhaseCCW[nCurrentMotorStepCount%8]);           
    //        }
    //               
    //        if(nCurrentMotorStepCount >= MOTOR_STEP_COUNT)
    //        {
    //            TIM_Cmd(TIM3, DISABLE);    //关闭TIM3
    //            
    //            ENAZERO; //只有转的时候使能,否则持续供电,芯片和电机过热。
    //            ENBZERO ;
    //            nCurrentMotorStepCount = 0;
    //        }
    //    }     
    //}
    // 
     
    #include "L298N.h"
    #include "hbpwmdsq.h"
    #include "sys.h"
    int main ()
    {
    //	USART1_Init(115200);
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    	delay_init();
    	SystemInit();
    	RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);//使能,开启GPIOC的外设时钟
    	Static_init();
    	Motor_en_init(1800,71);	//1.8ms,一拍
    	while(1)
    	{
    	    TIM_SetCompare1(TIM3,900);
    		TIM_SetCompare2(TIM3,900);
    
    	}
    }

    更多相关内容
  • L298n驱动步进电机

    2018-05-31 14:55:06
    告别细分器,使用L298N驱动步进电机,资源为51单片机程序,同时有硬件连接示意图,和步进电机工作原理视频
  • 文章目录步进电机特点:步进电机相关概念:相关问题:L298N主要参数说明L298N原理图应用实例驱动步进电机实现代码1. 驱动步进电机的引脚初始化2. 两相电机驱动代码,包括正转和反转3. 主函数中调用说明主函数代码...

    喜欢请关注微信公众号:嵌入式从0到1

    在这里插入图片描述

    公众号内容面向在校大学生、电子爱好者、嵌入式工程师;

    涉及电子制作、模块使用、单片机技术、物联网相关知识分享;

    软硬件全栈工程师,玩模块,学硬件,带你从0走到1


    展开全文
  • 51单片机+L298N控制步进电机S曲线加减速测试.rar,51单片机+L298N控制步进电机S曲线加减速测试.mp4
  • 步进电机驱动参数详细 电机型号说明 驱动步骤
  • LM298N二相四线步进电机驱动程序
  • 别人总结的资料,总结的比较详细,包含电机驱动电路原理...电机转速控制电路(PWM信号),主要采用L298N,通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,现分享出来供大家学习使用。
  • L298N 驱动步进电机

    2011-09-03 10:03:41
    本文档叙述了步进电机驱动原理。驱动电路连接图。
  • L298N 实现对步进电机的控制 51源码
  • L298N的详细资料驱动直流电机和步进电机(最全版)大总结 L298N的详细资料驱动直流电机和步进电机(最全版)大总结
  • 问题由来 在综合实例 利用ZigBee模块实现智能家居的远程语音控制 中,用到了步进电机,有的网友问我,应该买一个什么样的步进电机呢?...28BYJ-48步进电机L298N驱动芯片的接法 改进综合实例中步进电机的驱动

    问题由来

    在综合实例 利用ZigBee模块实现智能家居的远程语音控制 中,用到了步进电机,有的网友问我,应该买一个什么样的步进电机呢?

    其实底板上的L298N电路是一个步进电机驱动的通用电路,不一定要买跟我一模一样的步进电机。

    我们随便选择一个步进电机都是可以的,为了控制方便,我们这里选择一个常见的5V的步进电机:28BYJ-48

    内部拆解图:

    正是因为内部有这么多齿轮,所以此步进电机为一个减速电机。

    解决问题

    • 28BYJ-48步进电机与L298N驱动芯片的接法

    • 改进综合实例中步进电机的驱动方式

    程序源码及结果展示

    步进电机的驱动方法,详见如下视频教程:

    本文测试工程源码的获取方式在上面展示视频中获取。

    欢迎关注小哈哥的视频号,更多精彩敬请期待。

    开发环境与工具

    • Keil 5
    • 主芯片为STM32F103RET6
    • 电路使用的是202008综合实例的底板
    • 下载工具为JLINK
    • PC为Win10
    • 步进电机的型号为:28BYJ-48

    主要技术参数

    步进电机28BYJ-48为5线4相八拍电机,额定电压有5V,还有6V、12V、24V的。

    其中:
    28:步进电机的直径为28mm
    48:表示四相八拍

    电机的减速比:1/64
    步距角:5.625°/64=0.08789度(因为减速比是1/64)

    所以对于此步进电机,4096个脉冲转一圈(64×64)。

    驱动方法

    此步进电机一共有5根线,红色是公共端,接5V电源,4橙(A),3黄(B),2粉(C),1蓝(D)。

    步进电机要想转动,必须加驱动,步进电机的驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止。
    加上适当的脉冲信号,步进电机就会以一定的角度转动,转动的速度和脉冲的频率成正比。

    八拍步进电机控制时序为:A-AB-B-BC-C-CD-D-DA-A … ,一拍转一个步距角,如此反复。

    对应各个线的高低电平如下所示:

    十六进制
    10000x08
    11000x0C
    01000x04
    01100x06
    00100x02
    00110x03
    00010x01
    10010x09

    由上我们可以定义旋转相序:

    uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时针旋转相序表
    uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正时针旋转相序表
    

    原理图

    橙、黄、粉、蓝四根线分别与 StepMotor_OUT1、 StepMotor_OUT2、 StepMotor_OUT3、 StepMotor_OUT4 相连,通过改变StepMotor_IN1~StepMotor_IN4 引脚的高低电平,StepMotor_OUT1~StepMotor_OUT4 对应输出同向高低电平。

    因为步进电机上为XH2.54-5P的胶壳插头,而底板是XH2.54-6P的胶壳直针座,所以我们要对其进行一下改造。

    因为步进电机的红线需要连接5V,即VCC连接5V,L298N的VS也需要连接5V,所以我们要将板子上的JP8三个引脚短接到一起。

    改造后的结果展示如下:

    代码实现

    定时器初始化

    随便选择STM32的一个定时器即可,我们这里以定时器3为例:

    //定时器3初始化
    //arr:定时重装值
    //psc:分频值
    void TIM3_Init(uint16_t arr, uint16_t psc)
    {
    	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    	NVIC_InitTypeDef NVIC_InitStructure;
    	
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	//开启TIM3时钟
    	
    	//定时器3配置,重载值、分频值、分频系数、计数模式
    	TIM_TimeBaseStructure.TIM_Period = arr;
    	TIM_TimeBaseStructure.TIM_Prescaler = psc;
    	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    	
    	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); 	//允许定时更新中断
    	
    	//中断配置
    	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_Init(&NVIC_InitStructure);
    	
    	TIM_Cmd(TIM3, ENABLE); 	//使能定时器3
    }
    

    main函数中,调用上面的函数对定时器进行初始化:

    TIM3_Init(19,7199);	      //2ms中断
    TIM3_Set(0);                //定时器初始状态为关闭状态
    

    定时器中断处理函数

    定时器3每2ms执行一次中断服务函数,在中断服务函数中,改变L298N四个输入引脚的状态,完成步进电机的一拍,如果想要让28BYJ-48型步进电机旋转一圈,需要执行下面中断服务函数64*64次,即步进电机运转64*64拍。

    //定时器3中断服务程序		    
    void TIM3_IRQHandler(void)
    {
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//是更新中断
        {	 			   
            TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIM3更新中断标志    
    		
            nCurrentMotorStepCount++;
                    
            if(nCurrentMotorStepCount <= MOTOR_STEP_COUNT)
            {
                SetMotor(PhaseCW[nCurrentMotorStepCount%8]);
                //SetMotor(PhaseCCW[nCurrentMotorStepCount%8]);           
            }
                   
            if(nCurrentMotorStepCount >= MOTOR_STEP_COUNT)
            {
                TIM_Cmd(TIM3, DISABLE);    //关闭TIM3
                
                L298N_12ENA = 0;	//只有转的时候使能,否则持续供电,芯片和电机过热。
                L298N_34ENA = 0;
                nCurrentMotorStepCount = 0;
            }
        }	    
    }
    

    当步进电机行进了预定拍数之后,关闭定时器,并将L298N芯片的两个使能引脚置为低电平,步进电机将停止运动。

    步进电机行进一拍

    每一拍中我们都需要改变一次L298N四个输出引脚的状态,即需要改变L298N的四个输入引脚状态,下面封装了一拍状态下,对与L298N芯片相连的STM32的四个引脚进行赋值的函数:

    void SetMotor(unsigned char InputData)
    {	
        if(InputData&0x01)
        {
            GPIO_SetBits(GPIOC,GPIO_Pin_13);
        }
        else
        {
            GPIO_ResetBits(GPIOC,GPIO_Pin_13);
        }
    	
        if(InputData&0x02)
        {
            GPIO_SetBits(GPIOC,GPIO_Pin_1);
        }
        else
        {
            GPIO_ResetBits(GPIOC,GPIO_Pin_1);
        }
    	
        if(InputData&0x04)
        {
            GPIO_SetBits(GPIOC,GPIO_Pin_2);
        }
        else
        {
            GPIO_ResetBits(GPIOC,GPIO_Pin_2);
        }
    	
        if(InputData&0x08)
        {
            GPIO_SetBits(GPIOA,GPIO_Pin_0);
        }
        else
        {
            GPIO_ResetBits(GPIOA,GPIO_Pin_0);
        }
    }
    

    使能步进电机启动

    要想步进电机启动,我们只需要开启定时器,并将L298N芯片的两个使能引脚置为高电平,步进电机将开始运动。

    TIM3_Set(1);
    nCurrentMotorStepCount = 0;
    L298N_12ENA = 1;
    L298N_34ENA = 1;
    

    推荐阅读:

    让步进电机动起来

    Altium Designer如何将核心板转为封装库

    STM32开发环境搭建全过程分享

    PCB设计开发环境搭建——AD14安装全过程

    一文让你了解PCB打样及SMT全流程

    【综合实例开源】利用ZigBee模块实现智能家居的远程语音控制

    展开全文
  • 使用Arduino和L298N对光驱拆下来的两项四线步进电机进行控制 当按下开关时,激光头开始工作,步进电机正转两秒反转两秒,依次反复 当关闭开关时,激光头停止工作,步进电机停止转动 以上需求并非符合实际项目场景,...

    使用Arduino+L298N控制光驱两项四线步进电机

    一、所需配件

    1. Arduino 开发板 x1

      image-20220120143349053

    2. L298N步进电机驱动模块 x2

      image-20220120143448412

    3. 5V电源模块 x1

    4. 12V电源 x2

    5. 杜邦线(公对母) x15

      image-20220120143635712

    6. 其他铜导线 x10

      点击查看图片来源

    7. 红波按钮 x1

      image-20220120143911285

    8. 光驱步进电机 x2

      image-20220120144103514

    9. 激光头 x1

      image-20220120144213022


    二、步进电机与L298N接线说明

    1. 电机按下图摆放,4根线依次命名1、2、3、4

      image-20220120150035612

    2. L298N模块按下图摆放,电机的1、2、3、4分别与L298N的1、2、3、4相对应

      image-20220120150736521


    三、L298N与Arduino开发板接线说明

    1. 将第一块L298N的IN1~IN4分别连接Arduino的2、3、4、5,如下图:

      image-20220120155212507

      image-20220120154944310

    2. 第二块L298N同理,IN1~IN4分别连接Arduino的6、7、8、9,如下图:

      image-20220120155516596


    四、激光头与Arduino接线说明

    1. 激光头有三根线,分别标号1、2、3,其中1为电源正极,2为电源负极,3为信号控制,如图:

      image-20220120155910363

    2. 将1电源正极接入Arduino的5V,2接Arduino的GND,3接Arduino的10,如图:

      image-20220120160240093


    五、红波按钮与Arduino接线说明

    1. 红波按钮未到,暂未调试……
    2. 将普通开关的其中一条线接入Arduino12号引脚,另一根线与GND相连

    六、控制代码

    已烧制,运维人员无需关心

    int IN1 = 2; //定义L298N-1控制引脚
    int IN2 = 3;
    int IN3 = 4;
    int IN4 = 5;
    
    int IN5 = 6; //定义L298N-2控制引脚
    int IN6 = 7;
    int IN7 = 8;
    int IN8 = 9;
    int switchPin = 12;   // 开关引脚
    int ledPin = 10;      // 激光灯引脚
    int waitTime = 40;    // 电机转动速度
    int moveLen = 10;     // 移动长度
    int ledLight = 255;   // 激光头亮度值 0~255
    void setup() {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
      
      pinMode(IN5, OUTPUT);
      pinMode(IN6, OUTPUT);
      pinMode(IN7, OUTPUT);
      pinMode(IN8, OUTPUT);
      pinMode(switchPin, INPUT_PULLUP);  //使用该内部上拉电阻
      Serial.begin(9600); 
    }
    
    void loop() {
       int switchStatus = digitalRead(switchPin);
       if (switchStatus == LOW) {
         // 开关被按下,激光灯亮起,电机正转然后反转,激光灯熄灭
         analogWrite(ledPin, ledLight);
         for(int i = 0; i < moveLen; i++) {
            go(); 
         }
         for(int i = 0; i < moveLen; i++) {
            back(); 
         }
         analogWrite(ledPin, 0);
       }
       
    }
    
    void go() {
       digitalWrite(IN2, HIGH);
       delay(waitTime);
       cleanOne();
       digitalWrite(IN4, HIGH);
       delay(waitTime);
       cleanOne();
       digitalWrite(IN1, HIGH);
       delay(waitTime);
       cleanOne();
       digitalWrite(IN3, HIGH);
       delay(waitTime);
       cleanOne();  
    
       // 控制第二个电机
       digitalWrite(IN6, HIGH);
       delay(waitTime);
       cleanTwo();
       digitalWrite(IN8, HIGH);
       delay(waitTime);
       cleanTwo();
       digitalWrite(IN5, HIGH);
       delay(waitTime);
       cleanTwo();
       digitalWrite(IN7, HIGH);
       delay(waitTime);
       cleanTwo(); 
    }
    
    
    void back() {
       digitalWrite(IN3, HIGH);
       delay(waitTime);
       cleanOne();  
       digitalWrite(IN1, HIGH);
       delay(waitTime);
       cleanOne();
       digitalWrite(IN4, HIGH);
       delay(waitTime);
       cleanOne();
       digitalWrite(IN2, HIGH);
       delay(waitTime);
       cleanOne();
    
       // 控制第二个电机
       digitalWrite(IN7, HIGH);
       delay(waitTime);
       cleanTwo();  
       digitalWrite(IN5, HIGH);
       delay(waitTime);
       cleanTwo();
       digitalWrite(IN8, HIGH);
       delay(waitTime);
       cleanTwo();
       digitalWrite(IN6, HIGH);
       delay(waitTime);
       cleanTwo();
    }
    
    void cleanOne() {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
    }
    
    void cleanTwo() {
      digitalWrite(IN5, LOW);
      digitalWrite(IN6, LOW);
      digitalWrite(IN7, LOW);
      digitalWrite(IN8, LOW);
    }
    

    七、运行效果

    预览效果


    八、实物图

    image-20220120163514979

    展开全文
  • L298N直流步进电机驱动步进电机程序 用L298N驱动步进电机的程序,做成循迹精准小车的必备材料
  • Arduino L298N模块驱动有刷直流电机或 步进电机 L298N模块介绍 L298N 是一种双H桥电机驱动芯片. L298N电机驱动模块是一款接受高电压的电机驱动器,可驱动直流电机和步进电机. 接口说明 VCC:模块供电需12V. GND:...
  • 用msp430f5529驱动l298n,当l298n的使能端两端跳线帽没拔的时候没异常,但是拔掉后接单片机IO口用pwm调速会发出蜂鸣器的声音。求指导。对这方面一点都不明白
  • 大总结L298N的详细资料驱动直流电机和步进电机..pdf大总结L298N的详细资料驱动直流电机和步进电机..pdf大总结L298N的详细资料驱动直流电机和步进电机..pdf大总结L298N的详细资料驱动直流电机和步进电机..pdf大总结L...
  • L297A+L298N组合驱动步进电机控制板ALTIUM设计硬件原理图+PCB+文档资料, 硬件采用2层板设计,大小为70*41mm,包括完整的原理图和PCB文件,可以做为你的学习设计参考。
  • 使用Arduino MKR和L298N H桥驱动NEMA 17步进器。
  • 如图所示是某宝上最基础版本的L298N模块,可以驱动两路直流电机,或者一个二相四线步进电机,本文只介绍接步进电机的用法。 2、 参数说明 逻辑电压:5V-7V 逻辑电流:0-36mA 电机供电电压:5-35V,如果使用5V降压...
  • 概述如果您还记得以前的Raspberry Pi教程,我们已经...我已经讨论了步进电机步进电机的类型电动机,步进电动机的内部结构以及如何设计步进电动机在使用ARDUINO 项目的步进电机控制中进行滚动循环。因此,我建议您...
  • 在本文中,您将学习如何使用L298N电动机驱动器控制步进电动机。 该驱动板通常用于控制直流电动机,但它还是控制步进电动机的廉价替代品! 它可以控制大多数步进电机(例如NEMA 17)的速度和旋转方向。 我提供了接线...
  • 步进电机L298N驱动程式,带按键调速地, 程式语言:at89c51汇编
  • 雕爷学编程,Arduino动手做,开源硬件,创客传感器,L298N电机驱动
  • L298N直流电机步进电机两用驱动
  • STM32f1之L298N电机驱动+PWM调速(附主代码)

    万次阅读 多人点赞 2021-07-25 21:19:57
    今天这里主要是讲一下L298N电机驱动和PWM调速,之后再进行一番实际操作,那么废话不多说,直接进入主题。 一、L298N电机驱动主要介绍 主要I/O口 使能端ENA和ENB,控制输入端INA、INB、INC、IND,马达输出口OUT1...
  • STM32CubeMX——霍尔编码器、L298N驱动电机

    千次阅读 多人点赞 2022-05-05 10:18:07
    B站-视频讲解:l298n电机驱动模块 电机正反转 电机调速 L298N是 ST 公司生产的一种高电压、大电流电机驱动芯片。该芯片采用 15 脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可...
  • 树莓派+ L298N 控制二相四线步进电机

    千次阅读 2021-09-22 16:14:44
    树莓派+ L298N 控制二相四线步进电机 1 步进电机 步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,...
  • L298N 电机驱动板 - 详细介绍

    万次阅读 多人点赞 2021-01-30 12:10:45
    Semiconductor)集团旗下量产的一种双路全桥式电机驱动芯片,拥有工作电压高、输出电流大、驱动能力强、发热量低、抗干扰能力强等特点,通常用来驱动继电器、螺线管、电磁阀、直流电机以及步进电机。 什么是L298N?...
  • L298N 驱动电机与单片机的线路连接图

    万次阅读 多人点赞 2020-08-04 21:53:44
    L298N 驱动电机与单片机的线路连接图 1 当用单片机5V电源给L298N供电驱动5V的小马达时,驱动模块的12V和5V都接单片机的5V,GND一定得接单片机的GND。第一排6个排针接单片机的IO口就可以了。其中IN1到IN4为马达逻辑...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,207
精华内容 482
关键字:

l298n驱动步进电机