STM32+L298N+PWM可调速小车(四驱)

STM32f1之L298N电机驱动+PWM调速(附主代码) 前言 今天这里主要是讲一下L298N电机驱动和PWM调速,之后再进行一番实际操作,那么废话不多说,直接进入主题。 一、L298N电机驱动主要介绍 主要I/O口 使能端ENA和ENB,控制输入端INA、INB、INC、IND,马达输出口OUT1、OUT2、OUT3、OUT4,5V输出(可以不接),还有一个板载5V电压,具体如下图所示: 二、控制实现功能 对于L298N模块,直接给12V输入,接上地,就可以给整个模块供电了,之后就是通过控制单片机(这里用的是STM32f1)给4个.. 阅读详情
AI摘要

该文详细介绍了如何使用STM32通过L298N电机驱动板控制四个直流电机的正反转与调速。文中提到了L298N的电源、控制和输出引脚功能,并阐述了STM32的PWM输出配置,特别是TIM3的初始化和GPIO设置。硬件连接部分展示了STM32F103ZET6开发板与L298N的接线细节。最后,提供了`timer.c`、`timer.h`、`MTR_GPIO.c`和`MTR_GPIO.h`的主要代码段,用于电机控制和PWM调速。

完整工程代码已放到百度网盘,链接如下:

链接:https://pan.baidu.com/s/16zcnfLt2iYlrDdN-N6tKbA 
提取码:dn54

一、L298N电机驱动板

在这里插入图片描述
电源引脚

VCC 外接直流电源引脚,电压范围在5~35V之间
GND GND是接地引脚,连接到电源负极
5V 驱动芯片内部逻辑供电引脚,如果安装了5V跳帽,则此引脚可输出5V电压,为微控板或其他电路提供电力供给,如果拔掉5V跳帽,则需要独立外接5V电源

控制引脚

  1. IN1 & IN2 电机驱动器A的输入引脚,控制电机A转动及旋转角度
    IN1输入高电平HIGH,IN2输入低电平LOW,对应电机A正转
    IN1输入低电平LOW,IN2输入高电平HIGH,对应电机A反转
    IN1、IN2同时输入高电平HIGH或低电平LOW,对应电机A停止转动
    调速就是改变IN1、IN2高电平的占空比(需拔掉ENA处跳帽)

  2. IN3 & IN4 电机驱动器B的输入引脚,控制电机B转动及旋转角度
    IN3输入高电平HIGH,IN4输入低电平LOW,对应电机B正转
    IN3输入低电平LOW,IN4输入高电平HIGH,对应电机B反转
    IN3、IN4同时输入高电平HIGH或低电平LOW,对应电机B停止转动
    调速就是改变IN3、IN4高电平的占空比(需拔掉ENB处跳帽)

输出引脚

  1. OUT1 & OUT2 电机驱动器A的输出引脚,接直流电机A或步进电机的A+和A-
  2. OUT3 & OUT3 电机驱动器B的输出引脚,接直流电机B或步进电机的B+和B-

调速控制引脚

  1. ENA 电机A调速开关引脚,拔掉跳帽,使用PWM对电机A调速,插上电机A高速运行
  2. ENB 电机B调速开关引脚,拔掉跳帽,使用PWM对电机B调速,插上电机B高速运行

OUT1、OUT2和OUT3、OUT4之间分别接两个直流电机Motor1、Motor2,IN1、IN2、IN3、IN4引脚从单片机接入控制电平,控制电机的正反转,ENA、ENB接控制使能端,控制电机调速,L298N控制逻辑关系图如下:
在这里插入图片描述


二、STM32的PWM输出

1、通用定时器(TIM2 ~ TIM5)
每个定时都有 4个独立通道作为输出
在这里插入图片描述
2、高级控制定时器(TIM1 & TIM8)
该款定时器可产生7路 PWM输出:
在这里插入图片描述
3.STM32F1的TIM3输出引脚
本文用到STM32F1的TIM3的通道1~4,下面对TIM3的引脚作简要介绍:
本实验选择没有重映像的四个引脚,即PA6、PA7、PB0、PB1(有无重映像会在TIM3初始化部分的代码有所体现)

三、硬件连接

本设计用到两个L298N驱动板,四个小黄电机,一块STM32F103ZET6开发板
第一块L298N接左前电机和左后电机:
ENA—PA6,ENB—PA7
左前电机:IN1—PB7,IN2—PB6
左后电机:IN3—PB9,IN4—PB2

第二块L298N接右前电机和右后电机:
ENA—PB0,ENB—PB1
左前电机:IN1—PB13,IN2—PB12
左后电机:IN3—PB15,IN4—PB14

四、主要代码

timer.c

#include "timer.h"
#include "led.h"
#include "usart.h"

void TIM3_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 

	TIM_TimeBaseStructure.TIM_Period = arr; 
	TIM_TimeBaseStructure.TIM_Prescaler =psc;  
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); 
	TIM_Cmd(TIM3, ENABLE);  							 
}

//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数

void TIM3_PWM_Init(u16 arr,u16 psc)
{  
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); 
	
		//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //这句话是正点原子官方例程“PWM输出实验”中给的,目的是Timer3部分重映射,将TIM3_CH2->PB5。本实验不用重映像


//设置PA6和PA7为复用输出功能,输出TIM3 CH1和TIM3 CH2的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_6; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

//设置PB0和PB1为复用输出功能,输出TIM3 CH3和TIM3 CH4的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
//初始化TIM3	
	TIM_TimeBaseStructure.TIM_Period = arr;
	TIM_TimeBaseStructure.TIM_Prescaler =psc; 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
	
	//初始化TIM3 Channel 1 PWM	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC1Init(TIM3, &TIM_OCInitStructure);
	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
 
 	//初始化TIM3 Channel 2 PWM	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC2Init(TIM3, &TIM_OCInitStructure); 
	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 
 
  	//初始化TIM3 Channel 3 PWM	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC3Init(TIM3, &TIM_OCInitStructure);  
	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); 
 
   	//初始化TIM3 Channel 4 PWM	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC4Init(TIM3, &TIM_OCInitStructure); 
	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); 
	
	TIM_ARRPreloadConfig(TIM3,ENABLE);//使能自动重装载寄存器,arr的预装载
	TIM_Cmd(TIM3, ENABLE);//使能TIM3 
}

timer.h

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

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

MTR_GPIO.c(电机驱动部分)

#include "MTR_GPIO.h"

//刹车
void MTR_CarBrakeAll(void){
	MTR1_BRAKE;
	MTR2_BRAKE;
	MTR3_BRAKE;
	MTR4_BRAKE;
}

//右转
void MTR_CarRight(void){
	MTR1_CW;
	MTR2_CW;
	MTR3_CCW;
	MTR4_CCW;
}

//左转
void MTR_CarLeft(void){
	MTR1_CCW;
	MTR2_CCW;
	MTR3_CW;
	MTR4_CW;
}

//后退
void MTR_CarBack(void){
	MTR1_CCW;
	MTR2_CCW;
	MTR3_CCW;
	MTR4_CCW;
}

//前进 
void MTR_CarForward(void){
	MTR1_CW;
	MTR2_CW;
	MTR3_CW;
	MTR4_CW;
}

void MTR_GPIOInit(void){
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(MTR1_GPIO_CLK|MTR2_GPIO_CLK|MTR3_GPIO_CLK|MTR4_GPIO_CLK,ENABLE);
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;


	//电机1
	GPIO_InitStructure.GPIO_Pin = MTR1_GPIO_PIN;
	GPIO_Init(MTR1_GPIO_PORT, &GPIO_InitStructure);
	//电机2
	GPIO_InitStructure.GPIO_Pin = MTR2_GPIO_PIN;
	GPIO_Init(MTR2_GPIO_PORT, &GPIO_InitStructure);
	//电机3
	GPIO_InitStructure.GPIO_Pin = MTR3_GPIO_PIN;
	GPIO_Init(MTR3_GPIO_PORT, &GPIO_InitStructure);
	//电机4
	GPIO_InitStructure.GPIO_Pin = MTR4_GPIO_PIN;
	GPIO_Init(MTR4_GPIO_PORT, &GPIO_InitStructure);
}

MTR_GPIO.h

#ifndef __MTR_GPIO_H
#define __MTR_GPIO_H

#include "stm32f10x.h"


#define MTR1_GPIO_PORT		GPIOB
#define MTR1_GPIO_CLK 	    RCC_APB2Periph_GPIOB
#define MTR1_GPIO_PIN		GPIO_Pin_6|GPIO_Pin_7
#define MTR1_CW				{GPIO_ResetBits(MTR1_GPIO_PORT,GPIO_Pin_6);GPIO_SetBits(MTR1_GPIO_PORT,GPIO_Pin_7);}
#define MTR1_CCW			{GPIO_SetBits(MTR1_GPIO_PORT,GPIO_Pin_6);GPIO_ResetBits(MTR1_GPIO_PORT,GPIO_Pin_7);}
#define MTR1_BRAKE			GPIO_ResetBits(MTR1_GPIO_PORT,MTR1_GPIO_PIN);

#define MTR2_GPIO_PORT    	GPIOB
#define MTR2_GPIO_CLK 	    RCC_APB2Periph_GPIOB
#define MTR2_GPIO_PIN		GPIO_Pin_2|GPIO_Pin_9
#define MTR2_CW				{GPIO_ResetBits(MTR2_GPIO_PORT,GPIO_Pin_2);GPIO_SetBits(MTR2_GPIO_PORT,GPIO_Pin_9);}
#define MTR2_CCW			{GPIO_SetBits(MTR2_GPIO_PORT,GPIO_Pin_2);GPIO_ResetBits(MTR2_GPIO_PORT,GPIO_Pin_9);}
#define MTR2_BRAKE			GPIO_ResetBits(MTR2_GPIO_PORT,MTR2_GPIO_PIN);

#define MTR3_GPIO_PORT    	GPIOB
#define MTR3_GPIO_CLK 	    RCC_APB2Periph_GPIOB
#define MTR3_GPIO_PIN		GPIO_Pin_12|GPIO_Pin_13
#define MTR3_CW				{GPIO_ResetBits(MTR3_GPIO_PORT,GPIO_Pin_12);GPIO_SetBits(MTR3_GPIO_PORT,GPIO_Pin_13);}
#define MTR3_CCW			{GPIO_SetBits(MTR3_GPIO_PORT,GPIO_Pin_12);GPIO_ResetBits(MTR3_GPIO_PORT,GPIO_Pin_13);}
#define MTR3_BRAKE			GPIO_ResetBits(MTR3_GPIO_PORT,MTR3_GPIO_PIN);

#define MTR4_GPIO_PORT    	GPIOB
#define MTR4_GPIO_CLK 	    RCC_APB2Periph_GPIOB
#define MTR4_GPIO_PIN		GPIO_Pin_14|GPIO_Pin_15
#define MTR4_CW				{GPIO_ResetBits(MTR4_GPIO_PORT,GPIO_Pin_14);GPIO_SetBits(MTR4_GPIO_PORT,GPIO_Pin_15);}
#define MTR4_CCW			{GPIO_SetBits(MTR4_GPIO_PORT,GPIO_Pin_14);GPIO_ResetBits(MTR4_GPIO_PORT,GPIO_Pin_15);}

#define MTR4_BRAKE			GPIO_ResetBits(MTR4_GPIO_PORT,MTR4_GPIO_PIN);

void MTR_CarBrakeAll(void);
void MTR_CarRight(void);
void MTR_CarLeft(void);
void MTR_CarBack(void);
void MTR_CarForward(void);
void MTR_GPIOInit(void);

#endif

main.c

#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "MTR_GPIO.h"

//主函数改编自正点原子“PWM输出实验”,驱动四个电机输出PWM信号即电机转速可变
 int main(void)
 {		
 	u16 led0pwmval=0;
	u8 dir=1;	
	delay_init();	    	 	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 
	uart_init(115200);
 	TIM3_PWM_Init(899,0);	 //不分频,PWM频率=72000000/900=80Khz
   MTR_GPIOInit();	
	 while(1)
	{
 		delay_ms(10);	 
		if(dir)led0pwmval++;
		else led0pwmval--;
		MTR_CarForward();
 		if(led0pwmval>800)dir=0;
		if(led0pwmval==0)dir=1;										 
		TIM_SetCompare1(TIM3,led0pwmval);	
		TIM_SetCompare2(TIM3,led0pwmval);	
		TIM_SetCompare3(TIM3,led0pwmval);	
		TIM_SetCompare4(TIM3,led0pwmval);	
	}	 
 }


L298N介绍 及PWM调速原理 阅读详情

相关推荐

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

L298N模块驱动电机(实现pwm调速)

1.占空比是高电平所占周期时间与整个周期时间的比值。 2.脉宽调制(PWM)基本原理: 控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率...

visual_eagle的博客 5万+

四驱L298N驱动板使用方法

本文详细介绍了L298N双H桥电机驱动芯片的四驱应用方案。L298N工作电压5-35V,单路最大电流2A,支持PWM调速。通过组合2块L298N驱动板可实现四驱控制,文中提供了STM32硬件连接图示。控制逻辑包括方向控制(INx引脚电平组合)和速度控制(PWM信号)。同时给出了基于STM32 HAL库的完整代码实现,包含电机方向/速度控制函数及前进、后退、转向等动作函数,支持四驱车辆的基本运动控制。代码通过PWM调节电机转速,GPIO控制转向,并提供了初始化及停止功能。

Open 1320

L298n电机驱动+stm32+pwm

l298n使用方法

qq_64171874的博客 1万+

基于stm32开发的红外循迹小车

2.L298N电机驱动模块:分别是5V,12V,GND,可以通过外加电源给驱动模块供电,IN1,IN2,IN3,IN4,EN1,EN2,通过给IN口不同的电平,可以达到控制电机正反转,EN口为使能口,可以通过给EN口不同的PWM波,来达到控制小车速度,1.红外循迹模块:检测黑线的原理是向外发射红外线,当没有遇到黑线的时候,返回回来,之后返回高电平,当遇到黑线的时候,红外被吸收,返回高电平,读取相应IO口的电平就可以知道小车此时的大致位置;模块有四个输入接口,分别连接四个TT马达,驱动小车运动;

2301_81374681的博客 1万+

STM32控制L298N实现双电机PWM调速:项目实践

通过STM32控制L298N电机驱动模块,利用PWM技术实现双直流电机的精准调速,详细讲解硬件连接与代码实现,适用于智能小车等嵌入式项目应用。

weixin_35750483的博客 1285

从零构建智能小车:L298N与STM32 HAL库的协同设计哲学

本文详细介绍了如何利用L298N电机驱动模块与STM32 HAL库协同构建高性能智能小车。从硬件选型、PWM控制策略到模块化固件设计,全面解析系统架构与实现方法,重点探讨L298N与STM32的集成优化,为嵌入式机器人开发提供实用指南。

ll5678的博客 765

STM32驱动L298N实现智能小车前进后退:从零实现操作指南

详解如何使用STM32控制L298N电机驱动模块,实现智能小车的前进与后退功能,涵盖接线方法与代码编写要点,帮助开发者快速上手l298n电机驱动模块stm32组合应用。

weixin_42510201的博客 1092

基于STM32F1系列的蓝牙小车(可调速,调速使用PWM)

今天我们一起来学习如何制作基于STM32F1系列的蓝牙小车 需要硬件:STM32开发板,HC-05蓝牙模块,四个电机和L298N电机驱动模块 分别介绍: STM32F1系列开发板(我是用的是正点原子的mini开发板) STM32mini开发板 HC-05模块 大家在使用HC-05模块之前别忘了要配置AT指令,不然将无法进行串口通信 配置方法:1:配置AT指令 2:若1看不懂,可在这里查找...

weixin_43808047的博客 8711

L298N驱动直流电机PWM调速在智能小车中的实现

深入解析L298N驱动直流电机在智能小车中的PWM调速实现,通过硬件连接与代码控制结合,精准调节电机转速,提升小车运动性能,是l298n驱动直流电机应用场景中的经典方案。

weixin_42596214的博客 765

L298N四驱小车驱动详解:接线、PWM调速与程序实现

电机驱动是智能小车控制的核心环节,其原理基于H桥电路与PWM调速技术。H桥通过控制四个开关管的通断组合,实现电机的正反转与刹车,而PWM占空比则调节电机平均电压,从而精确控制转速。在Arduino、STM32等主流开发平台上,借助L298N这类双H桥驱动芯片,可以方便地实现四驱小车的运动逻辑。实际工程中,四驱方案通常采用两路并联或双芯片叠加,涉及电源共地、引脚映射、差速转向及PWM补偿等关键问题。本文从H桥与PWM的基础原理出发,结合四驱小车接线布局、程序框架及调试经验,系统梳理了L298N驱动四电机的完整

weixin_29181861的博客 90

STM32蓝牙小车以及PWM调速

STM32蓝牙遥控小车 基于STM32F103系列的蓝牙控制小车以及PWM调速 HC-06蓝牙模块 使用蓝牙模块前,需要先对其进行一些设置: 使用USB转TTL模块将蓝牙模块连接到电脑,蓝牙RX连接USB-TTL的TX;蓝牙TX接UCB-TTLRX;VCC接5V,GND接GND。这样就可以使用串口与蓝牙进行通讯,通过串口发送AT指令对蓝牙进行一些设置。 打开串口调试软件,蓝牙模块默认的波特率为9600,在串口助手中将波特率设置为9600,其他几项默认就可以。 打开串口,发送“AT”,如果蓝牙没有问题,应该

weixin_49483496的博客 6960

STM32基于hal库的智能小车(2)红外循迹

STM32基于hal库的智能小车(2)红外循迹,接着上一实验,添加4个引脚,接入红外循迹模块,这为程序代码,清晰易懂,看清楚管脚,根据自己的配置就可以了

STM32PWM调速小车速度(全网最强)

stm32 PWM 小车驱动 直流电机

m0_61925899的博客 9444

ClaudeCode 通过 CC Switch 配置 Ollama 本地大模型

本文介绍了如何让Claude Code使用本地免费模型qwen3.5:9b而无需Anthropic API Key的方法。主要内容包括:1)安装Claude Code、CC Switch代理工具和Ollama本地模型运行时;2)配置环境变量和设置文件将请求转发到本地服务;3)详细说明了系统架构和工作原理,展示请求如何从Claude Code经CC Switch代理到Ollama本地模型。该方案通过代理拦截和转发机制,实现了使用免费开源模型替代官方API的功能。

稚枭天卓 3221

c语言串口编程详解

串口: 一种异步通信接口,通常用于低速数据传输。RS-232: 最常见的串口标准,定义了电气特性、连接器和信号线。UART: 通用异步收发传输器,是实现串口通信的硬件模块。通过以上内容,你应能够理解并实现C语言在Windows和Linux平台上的串口编程。希望这本手册能帮助你在实际项目中顺利进行串口通信开发。如果有任何疑问或需要进一步的帮助,请随时提问。

jkzyx123的博客 2224

【STM32】STM32F103C8T6+L298N通过PWM控制直流电机转速

STM32F103C8T6+L298N+直流电机通过引脚输出PWM信号对电机进行调速

qq_52785580的博客 4万+

手把手教你用PLECS仿真BUCK数字电源(含DSP代码实现)

本文详细介绍了如何利用PLECS仿真软件与Visual Studio 2022搭建高保真数字电源开发环境,手把手指导从BUCK电路建模、编写硬件感知的C控制算法到参数调优的全过程。重点阐述了通过DLL接口实现软件在环仿真,模拟DSP的ADC/PWM时序,并将验证后的代码无缝迁移至TI C2000系列DSP,构建从仿真到固件的完整数字电源开发闭环,显著提升开发效率与一次成功率。

oo7890的博客 395

L298n电机驱动详细介绍(stm32循迹小车中L298n的用法)

首先,这篇博客是帮助解答stm32小车详细制作中一些人问我关于L298n的一些问题。 L298n是非常常见并且常用的一个模块,也是成为电子爱好者必学的一个器件,接下来我给大家详细的介绍一下。 下面一段对照上图进行理解 1.12v供电:此出是要输入12v,给L298n模块供电,一般用于连接12v电池的正级。2.5V供电:此处会输出5v电压,一般用于连接stm32中的vcc引脚,给单片机供电,有些时候用的是核心板,并且要给循迹供电,引脚不够用,不妨加一块面包板过渡。3.供电GND:此处是要接12V电池的负极,另

wzy的博客 3万+

Excel VBA | 一键批量生成对账单

根据对账单总表一键批量生成N家独立的客户对账单。

Microgoblins的博客 6984

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2023 FasterNet 高效快速的部分卷积块

本文记录的是基于FasterNet的YOLOv11轻量化改进方法研究。FasterNet的网络结构借鉴 CNN 的设计理念,通过提出的PConv减少推理时的计算和内存成本,同时减少通道数并增加部分比例,降低延迟,并通过后续的PWConv来弥补特征信息可能缺失的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和六种模型,以满足不同的需求。

Limiiiing的博客 2030

STM32循迹PWM调速及阿克曼舵机转向

1,准备 红外循迹模块,L298N电机驱动模块,STM32C8T6最小系统,SG90舵机,KEIL5 2,涉及的理论知识 (1)红外循迹模块 一般就是数字红外输出和模拟红外输出,两种都可以,最终都是检测红外光返回是否符合要求。比如数字红外,当检测到黑线时,大部分红外光被吸收,红外模块引脚输出高电平1,当无黑线时,红外模块引脚输出低电平0。 (2)L298N驱动模块 这WE...

qq_41050642的博客 1万+

基于Simulink的基于MPC的实时ZMP约束步态优化仿真

本文完成了基于Simulink的MPC实时ZMP约束步态优化仿真,实现了:✅ 建立3D-LIPM预测模型✅ 设计带ZMP可行域约束的MPC优化器✅ 实现闭环实时求解与扰动抑制✅ 验证强鲁棒性与安全性✅ 为人形机器人野外行走、人机交互提供先进控制方案。

xiaoheshang_123的博客 86

51 PWM调速蓝牙小车

51蓝牙遥控小车,并且加入了PWM调速,实现遥控的同时,给遥控者很好的体验感,调速的实现,让小车转向更加的平稳,同时也为正在开发小车的学者们的小车车体提供了一个很好的安全保障。

m0_71824978的博客 3070

告别调参难!YOLO超参数优化指南(网格搜索+贝叶斯优化实战)

YOLO超参数优化的本质,不是“试遍所有参数”,而是“用工具化方法,在场景约束内找到最优平衡”——网格搜索稳、贝叶斯优化快,两者结合(先粗搜再精调)是工业场景的最优解。先定范围:基于工业场景(小目标/边缘设备/多类别)缩小参数搜索范围,避免无效探索。先调核心:优先优化数据增强、学习率、输入尺寸,这些参数对精度影响最大。工具赋能:用网格搜索+贝叶斯优化替代人工试错,再用TensorBoard监控,让调参“有据可依”。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 698

STM32CubeMX之DAC产成正弦波

“在之前的文章中曾经介绍过用TIM产生PWM做DAC用,STM32定时器输出PWM做DAC。部分型号的STM32单片机内部有专用的DAC,本篇文章将介绍如何用内部DAC+DMA产生正弦波...

zhang062061的专栏 1513
上一篇: 基于PS2手柄的Arduino遥控小车
下一篇: Pytorch-GPU版本详细安装教程——以YOLOv5为例
晓shuo
晓shuo 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄6年 4万+粉丝 113原创
评论 47
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值