STM32之L298N控制130电机+PWM调速

这篇具有很好参考价值的文章主要介绍了STM32之L298N控制130电机+PWM调速。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,接线:

左右两边的OUT0~OUT4接130电机两端;

中间蓝色端口接电源,注意:两个电源口和一个接地口都要接上!!!!!!!!

偏左一些的排针用杜邦线接上io口,如果需要PWM控速的话,ENA和ENB的跳线帽需要拔掉,

然后用两根杜邦线分别连到一个io口,给高电平使能,如果是低电平则电机制动。

同时,IN1~IN4连接到pwm对应的GPIO口。

这样,接线部分基本完成。

具体可参考这位博主,

(63条消息) L298N 驱动电机与单片机的线路连接图_l298n驱动接线方法图_高佬君的博客-CSDN博客

二,编程序

1.首先给对应的GPIO口初始化,给用到的GPIO口设置推挽输出

L298N.c

#include "L298N.h"
void L298_Init(){
	GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);	    //使能PG端口时钟
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;	            //IN1->PB4,IN2->PB5推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);	  	       //初始化GPIO
	GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5); 			 //PB4,PB5 输出低 
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;	            //IN3->PB1,IN4->PB0推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);
	
	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_6;            //ENA->PB0,ENB->PB6,推挽输出
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
	
  GPIO_Init(GPIOB, &GPIO_InitStructure);	 
}

L298N.h

#ifndef __L298N_H__
#define __L298N_H__
#include "sys.h"
#define IN1 PBout(4)
#define IN2 PBout(5)
#define IN3 PBout(0)
#define IN4 PBout(1)
#define ENA1 PBout(2)
#define ENA2 PBout(6)
void L298_Init();
#endif

2.定时器初始化,设置对应的PWM

这里选用通用定时器TIM3的通道1~4;

首先,初始化TIM3,然后,设置端口重映射,并设置PWM输出的GPIO口为推挽复用输出!(切记)

而后,设置PWM参数,使能自动重装载寄存器,arr的预装载,选择通道,使能定时器,完成。

代码如下:PWM.c

#include "PWM.h"

void TIM3_PWM_Init(u16 arr,u16 psc){
	GPIO_InitTypeDef gpio;
	TIM_TimeBaseInitTypeDef time;
	TIM_OCInitTypeDef time_oc;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
	
	//GPIO_PinRemapConfig();
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
	
	gpio.GPIO_Mode=GPIO_Mode_AF_PP;
	gpio.GPIO_Pin=GPIO_Pin_5;
	gpio.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&gpio);
	
	gpio.GPIO_Mode=GPIO_Mode_AF_PP;
	gpio.GPIO_Pin=GPIO_Pin_1;
	gpio.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&gpio);
	
	time.TIM_Period=arr;
	time.TIM_Prescaler=psc;
	time.TIM_ClockDivision=0;
	time.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM3,&time);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM1;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	
  TIM_OC1Init(TIM3,&time_oc);
	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM1;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC2Init(TIM3,&time_oc);
	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM2;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC3Init(TIM3,&time_oc);
	TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	time_oc.TIM_OCMode=TIM_OCMode_PWM2;
	time_oc.TIM_OutputState=TIM_OutputState_Enable;
	time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC4Init(TIM3,&time_oc);
	TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	TIM_ARRPreloadConfig(TIM3,ENABLE);//使能自动重装载寄存器,arr的预装载
	TIM_Cmd(TIM3,ENABLE);
	
	
	
}

pwm.h

#ifndef __PWM_H__
#define __PWM_H__
#include "sys.h"

void TIM3_PWM_Init(u16 arr,u16 psc);
#endif

main.c文章来源地址https://www.toymoban.com/news/detail-761425.html

#include "stm32f10x.h"
#include "L298N.h"
#include "key.h"
#include "uart.h"
/************************************************
 ALIENTEK 精英STM32F103开发板实验0
 工程模板
 注意,这是手册中的新建工程章节使用的main文件 
 技术支持:www.openedv.com
 淘宝店铺:http://eboard.taobao.com 
 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
 广州市星翼电子科技有限公司  
 作者:正点原子 @ALIENTEK
************************************************/


 int main(void)
 {	
	u16 led0pwmval=0;
	u8 dir=1;
	 
  L298_Init();
	TIM3_PWM_Init(450,7199);
	 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	Uart_Init(115200);
	Key_Init();
	 
	delay_init(); //延时函数初始化 
	 //设置 NVIC 中断分组 2
	ENA1=1;
	ENA2=1;
	//Ind=0;
	TIM_SetCompare2(TIM3,100);//设置通道2的占空比实现PWM调速,这里是100,在0~450间,越小速度越快
//	TIM_SetCompare1(TIM3,400);//设置通道1的占空比实现PWM调速
//	TIM_SetCompare3(TIM3,400);
	TIM_SetCompare4(TIM3,100);
	//Ina=1;
	//IN1=1;
//	IN4=1;

  while(1)
	{
	  
		printf("%d\r\n", Get_Key(Key_Scan(0)) );
		
		delay_ms(1000);
	}
 }

到了这里,关于STM32之L298N控制130电机+PWM调速的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文搞懂如何使用STM32驱动直流电机(普通PWM输出和L298N、高级定时器输出带死区双通道互补PWM和IR2110S及自举电路、H桥电路和电机正反转)

    笔者从开始接触嵌入式单片机开始,就和驱动电机相伴而走。从最开始的直接买L298N驱动模块直接驱动直流电机,到现在自己设计PCB电路板驱动直流电机,可以说是和电机驱动共同成长了。现在笔者将这一过程的收获记录下来,希望对大家有所帮助。 不用详细了解L298N芯片和

    2024年02月02日
    浏览(36)
  • 直流减速编码电机的使用(STM32f103c8t6)L298N电机驱动模块

    直接减速电机就是在直流电机上加上霍尔编码器,霍尔编码器可用于电机转动的测速,A、B相会产生相位相差90°的方波信号。stm32可以使用硬件资源或者软件模拟来捕获编码器信号。这里我介绍的是stm32自带的编码器模式来使用直流减速电机。 以下是直流减速电机的商品图 ​

    2024年02月13日
    浏览(52)
  • L298N驱动俩路电机按键控制正反转

    一个L298N是带有俩路驱动电路的,就是可以驱动俩个电机同时去转动,在硬件部分因为以前弄小车的时候已经组装好了,一路驱动去控制俩个电机,俩路驱动就是控制四个电机,做的是四轮四驱的小车,嫌麻烦就没有去拆改装了。 博主主页里面有介绍过L298N的使用了,为了避

    2024年02月03日
    浏览(26)
  • ESP32设备驱动-直流电机与L298N电机驱动器

    在本文中,我们将介绍如何使用ESP32通过L298N电机驱动器驱动直流电机。 L298N 电机驱动器模块非常易于与微控制器一起使用,而且相对便宜。 它被广泛用于控制机器人,因为我们可以一次连接多达四个电机,但如果我们还想控制速度和方向,那么它允许连接两个电机。 因此,

    2024年02月13日
    浏览(37)
  • STM32外设系列—L298N

    🎀 文章作者:二土电子 🌸 关注文末公众号获取其他资料和工程文件! 🐸 期待大家一起学习交流! L298N是SGS公司生产的一款通用的电机驱动模块。其内部包含4路逻辑驱动电路,有两个H桥的高电压大电流全桥驱动器,接收TTL逻辑电平信号,一个模块可同时驱动两个直流电机

    2024年02月11日
    浏览(37)
  • STM32单片机驱动L298N

    L298N的工作原理及电路接线以在之前一章博客中讲解完毕,讲解了三种接线方式的区别,及建议。https://blog.csdn.net/m0_59113542/article/details/121038048?spm=1001.2014.3001.5501 本文章主要讲解STM32的驱动程序    众所周知,L298N可以驱动两个电机,分别为通道A、通道B。 ENA是通道A的使能端,

    2023年04月21日
    浏览(32)
  • L298N电机驱动板的使用说明

    目录 一、为什么要用L298N驱动板来驱动电机 二、L298N引脚功能图 三、供电方式 1、接入5V电源 2、接入7~12V电源 3、接入大于12V电源 四、L298N的驱动方式 你可能有这个疑惑,电机是4-6V供电的,单片机的输出也是5V输出,为什么不直接用单片机来供电驱动电机呢?这是因为单片机

    2024年02月02日
    浏览(26)
  • L298N双路电机驱动模块使用指南

    哦吼,这个模块上手很快!!! L298N,是一款接受高电压的电机驱动器,直流电机和步进电机都可以驱动。一片驱动芯片可同时控制两个直流减速电机做不同动作,在6V到46V的电压范围内,提供2安培的电流,并且具有过热自断和反馈检测功能,可对电机进行直接控制,通过主

    2024年02月07日
    浏览(34)
  • L298N 直流电机驱动模块与 Arduino

    原文地址 L298N 电机驱动器可以控制两个直流电机的速度和旋转方向。 此外,它还可以控制双极步进电机,例如NEMA 17。如果您想了解更多信息,请查看本教程。 L298N电机驱动器和Arduino控制步进电机:Control Stepper Motor with L298N Motor Driver Arduino (lastminuteengineers.com) 只有当我们可以

    2024年02月02日
    浏览(37)
  • l298n电机驱动模块驱动直流电机(佛科院——深夜学习)

    目录 一、为什么不能直接用单片机IO口驱动电机,要用电机驱动模块? 二、使用步骤: 1.L298n各引脚作用: 2.推荐的供电方式: 3.推荐的控制方式: 由于单片机内部结构原因,其等效内阻极大, 导致输出电流极小,尽管I0口输出高电平为5V,但输出功率极小,无法满足直接电机

    2023年04月23日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包