STM32单片机驱动L298N

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

L298N的工作原理及电路接线以在之前一章博客中讲解完毕,讲解了三种接线方式的区别,及建议。https://blog.csdn.net/m0_59113542/article/details/121038048?spm=1001.2014.3001.5501

本文章主要讲解STM32的驱动程序

STM32单片机驱动L298N

 

一、L298N的逻辑控制

STM32单片机驱动L298N

 众所周知,L298N可以驱动两个电机,分别为通道A、通道B。

ENA是通道A的使能端,也就是通道A使能的跳线帽(跳线帽插着就是使能,大家不用管它);

IN1、IN2:逻辑输入引脚(板子上那四个排针就是,其中左侧两个为通道A的IN1、IN2;右侧的为通道B的,大家使用那个通道就用对应两个引脚控制),根据表格控制这两个引脚的高低电平就可控制电机正反转转;

二、注意事项

L298N可以使用我那篇文章介绍的三种方式,但其GND一定要与单片机的GND相连,确保共地,从而有参考电平。

三、STM32驱动程序

使用PWM占空比进行控制其转速,PA4→IN1、PA5→IN2的逻辑电平控制其正反转。

main.c文件

#include "delay.h"
#include "usart.h"
#include "timer.h"

 int main(void)
 {		
	delay_init();	                                     //延迟函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //中断优先级分组设置
	uart_init(115200);	                                 //串口初始化设置
 	
	TIM3_PWM_Init(450,7199);   //PWM输出初始化
   	while(1)
	{
	    //设置通道2的占空比实现PWM调速,这里是100,在0~450间,越小速度越快
 		TIM_SetCompare2(TIM3,100);
        GPIO_SetBits(GPIOA,GPIO_Pin_4); 
        GPIO_ResetBits(GPIOA,GPIO_Pin_5);  
		delay_ms(3000);
	    
	    TIM_SetCompare2(TIM3,100);
        GPIO_SetBits(GPIOA,GPIO_Pin_5); 
        GPIO_ResetBits(GPIOA,GPIO_Pin_4);
		delay_ms(3000);
	}	 
 }

time.c文件

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


//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);	//使能定时器3时钟
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIO外设时钟

 
    //初始化IOPA4
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOA,GPIO_Pin_4);       
	
	//初始化IOPA5
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_ResetBits(GPIOA,GPIO_Pin_5);      
    //初始化IOPA7
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&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 Channel2	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择PWM模式2
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //输出比较极性地
	TIM_OC2Init(TIM3, &TIM_OCInitStructure);  

	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能定时器3通道2预装载寄存器
 
	TIM_Cmd(TIM3, ENABLE);  //使能TIM3
}


time.h文件

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

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

以上是简单的代码实现,大家可以根据自己实际情况调整修改。

  欢迎大家指正交流,有空可以一起讨论代码啊。

制作不易,感谢大家支持,感谢!!!!!!

  --------------一个正在努力的人文章来源地址https://www.toymoban.com/news/detail-419957.html

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

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

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

相关文章

  • 【国名技术】N32G401单片机驱动配置(STM32系列适用)

    N32G401总体上和STM32F4系列差不多,无论是从芯片资源,还是各种寄存器,都有相通之处,所以N32G401的所有驱动,如果使用smt32的话也可以借鉴使用(修改函数名) 文章代码仅限于参考,如果直接CV是肯定用不了的,源代码链接在最后 PS:所有驱动基于N32G401F7S8-1,一共20个引脚,

    2024年01月19日
    浏览(38)
  • GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)

           不久前我们收到用户反馈问题中,多次反馈各种不同型号的屏幕驱动不起来,从0开始编写代码花费大量时间,也有不少初次学习驱动屏幕代码编写经验过少等问题,为此我们决定以文章的形式发布到CSDN来分享相应的一些经验以及收集整理好的资料,希望可以帮助用

    2024年01月25日
    浏览(39)
  • stm32F103单片机pwm控制伺服驱动器进而控制步进电机

    1.需要一台步进电机,私服驱动器,stm32单片机;先按照说明文档,连接好硬件相关线路,对应好sign+,sign-,puls+,puls-线路,其中sign只是个io口拉高拉低操作,puls是pwm波形输出口,虽然有两根线,但只是需要控制一个IO口输出波形即可; 采用主从模式,TIM1为主定时器,tim3未从定

    2024年02月04日
    浏览(49)
  • 单片机毕设 STM32音乐播放器设计与实现(原理图+源码+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月05日
    浏览(48)
  • 【单片机】STM32F103C8T6 最小系统板原理图

    STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,由STMicroelectronics(ST)公司生产。它是STMicroelectronics的STM32系列微控制器中的一员,被广泛应用于嵌入式系统和电子设备中。 STM32F103C8T6单片机的主要特点和资源包括: 内存资源: Flash存储器:64 KB SRAM(静态随机访问存储器

    2024年02月12日
    浏览(47)
  • 单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕

    说明:此篇为学习记录。可能存在错误或者不足。如有问题请指出。 主控芯片:STM32F411CEU6 主控开发板:WeAct STM32F411CEU6最小系统板 TFT-LCD屏幕:合宙1.8寸TFT-LCD,驱动为ST7735s MDK版本:5,32 HAL库版本:1.27.1 STM32CubeMX版本:6.7.0 ST7735s支持8080并口,3线和4线串行接口,模块的驱动方

    2024年02月03日
    浏览(57)
  • 基于STM32单片机直流电机控制加减速正反转系统proteus仿真原理图程序

    功能: 0.本项目采用STM32F103C8T6作为单片机系统的控制MCU 1.通过按键可以控制电机,正转、反转、加速、减速、停止。 2.总共六个功能按键可实现正转、反转、加速、减速、停止。 3.启停和正反转均有指示灯,测试采用的霍尔传感器方案 4.采用DC002作为电源接口可直接输入5V给

    2024年02月12日
    浏览(53)
  • 基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度

    wx供重浩:创享日记 对话框发送:单片机小车 免费获取完整无水印报告等 利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。 1.1智能

    2023年04月22日
    浏览(50)
  • 基于STM32F103ZET6单片机驱动SM16306SJ控制8个LED灯的系统设计

    1.设计要求:使用stm32f103zet6精英开发板  采用SM16306SJ驱动8个LED灯。 2.原理图 3.代码 4.实物效果图 备注:1 硬件上有一个LED灯坏了,所以才亮了7个LED灯            2 一个SM16306SJ最多可以驱动16个LED灯            3 SM16306SJ跟MBI5020程序通用

    2024年04月17日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包