STM32学习笔记-L298N驱动模块-电机

发布者:atech123最新更新时间:2021-01-05 来源: eefocus关键字:STM32  L298N驱动模块  电机 手机看文章 扫描二维码
随时随地手机看文章

新手上路,十几天的学习感觉弯路走了不少,所以打算把学习的知识记录下来,和大家分享,不要嫌弃我,我从非常新手的角度来写。

REFER[1]传送门。
12V电源、地线:12V电源接口接12V电池正线,负线接地,同时这个地还要接到单片机的地才行,关于这个12V电源,只要电压尽量不要高于16V不要低于8V就好啦。
5V输出:这是因为L298N模块里自带了稳压功能,可以供出5v电压,以后要是做车,单片机的供电选择可以选这个,但是对于初学者应该还没用到,暂且不理。
A通道使能(EN1):使能是什么……我刚开始学的时候也不懂,但是如果你学了点灯实验,就会知道要配置IO口,使能时钟什么的,这是使能的意思就是让它开启工作状态。这个使能接口是用来控制PWM输入的,如果你还不知道PWM到底是个什么东西,你就先把它理解成一个可以控制电机转速的东西。也就是说,如果单纯只想让电机转动起来,可以不用管这个EN1先,把那个帽子给它盖上,它就和5v接上了,也就是它不使能了。以后如果想用PWM来控制,那就把帽子拔了,把EN脚接到单片机的PWM输出口。
单片机IO口控制输入(IN1、IN2):这两个脚是接到单片机某两个IO口的,只要你分别给个高给个低电平,电机就可以转了。

所以,剩下的IN3、IN4、EN1、OUT1和OUT2都同理了咯。

3、软件实现

先给大家分享个关于Keil5的小技巧,在界面edit里找到configuration点击去
在这里插入图片描述
学习了点灯实验,就知道怎么配置引脚了,然后也知道怎么给引脚高低电平了,注意工程的创建,c文件和h文件都加上去

没有 PWM 控制.

// 先配置引脚

void Motor_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13;//端口配置

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //50M

  GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB 

  //暂时先把IO口拉低电平,也可以不拉

  GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13);

}

//在main函数里

void main(void)

{

Motor_Init();

while(1)

{

delay_ms(1000);

GPIO_ResetBits(GPIOB,GPIO_Pin_12);//正转

GPIO_SetBits(GPIOB,GPIO_Pin_13);

delay_ms(6000);

GPIO_ResetBits(GPIOB,GPIO_Pin_13);//反转

GPIO_SetBits(GPIOB,GPIO_Pin_12);

delay_ms(1000);

}

}


通过上面的代码就可以实现电机简单地转动了,还可以让电机左转右转,看你实现吧

这里的接线是PB12->IN1、PB13->IN2,EN1的帽子要盖上。


有 PWM 控制.


//定义电机,左电机为A(PB12,PB13,PA8),右电机为B(PB14,PB15,PA11)

//PB(12,13,14,15)接驱动模块IN脚,PA(8,11)接EN脚用来PWM输出

/在.c文件里

void Motor_Init(void)

{

RCC->APB2ENR|=1<<3;       //PORTB时钟使能 ,位2  

GPIOB->CRH&=0X0000FFFF;   //PORTB12 13 14 15推挽输出

GPIOB->CRH|=0X22220000;   //PORTB12 13 14 15推挽输出

}

void PWM_Init(u16 arr,u16 psc)

{  

MiniBalance_Motor_Init();  //初始化电机控制所需IO

RCC->APB2ENR|=1<<11;       //使能TIM1时钟    

RCC->APB2ENR|=1<<2;        //PORTA时钟使能     

GPIOA->CRH&=0XFFFF0FF0;    //PORTA8 11复用输出

GPIOA->CRH|=0X0000B00B;    //PORTA8 11复用输出

TIM1->ARR=arr;             //设定计数器自动重装值 

TIM1->PSC=psc;             //预分频器不分频

TIM1->CCMR2|=6<<12;        //CH4 PWM1模式

TIM1->CCMR1|=6<<4;         //CH1 PWM1模式    7<<4是PWM2模式

TIM1->CCMR2|=1<<11;        //CH4预装载使能  

TIM1->CCMR1|=1<<3;         //CH1预装载使能   

TIM1->CCER|=1<<12;         //CH4输出使能    

TIM1->CCER|=1<<0;          //CH1输出使能

TIM1->BDTR |= 1<<15;       //TIM1必须要这句话才能输出PWM,MOE主输出使能

TIM1->CR1=0x8000;          //ARPE使能 

TIM1->CR1|=0x01;           //使能定时器1   

}



/在.h文件里

#ifndef __MOTOR_H

#define __MOTOR_H

#include  

#define AIN1   PBout(12)

#define AIN2   PBout(13)

#define BIN1   PBout(14)

#define BIN2   PBout(15)

#define PWMA   TIM1->CCR1  //赋值给PWMA就可以直接修改寄存器,发出不同PWM了

#define PWMB   TIM1->CCR4  


void MiniBalance_PWM_Init(u16 arr,u16 psc);

void MiniBalance_Motor_Init(void);

#endif



//在main函数里

void main(void)

{

Motor_Init();

PWM_Init(7199,0);

while(1)

{

IN1=1;IN2=0;//左电机

IN3=1;IN4=0;//右电机

PWMA=4000;PWMB=4000;//直接操作寄存器,改变PWM

}

}


记得,如果使用PWM了,就要把EN的帽子拔了。可以是库函数版也可以用寄存器版,我比较喜欢寄存器点,很直接。


**对了,还要注意这个PWM值不能为负值。**到这里,电机可以动了,随你发挥吧。


关键字:STM32  L298N驱动模块  电机 引用地址:STM32学习笔记-L298N驱动模块-电机

上一篇:STM32学习笔记(1):GPIO口的使用
下一篇:瞄准LPWAN市场,STM32进军无线领域

推荐阅读最新更新时间:2024-11-12 22:22

电机的前沿应用
摘要:它诞生到现在已经有两百多年的历史,一个被人类玩了两百多年的 家伙 ,如今已成长为人类社会的顶梁柱! 电机从它诞生的那一刻起,一直是人类的宠儿。以前是巨匠们天天在精心地打磨它,现在更多的是工程师们想方设法地去精准控制它。 伺服电机成就了机器人 看过《我的机器人女友》的人都为影片中那个长相完美、身材火辣、智商也堪比人类的机器人女友所折服。其实在剥离机器人华丽的外表后,里面就是一大堆的电机与传感器,这种机器人的流畅动作也就是通过使用伺服电动机和微型计算机的控制技术来实现的。 这一方面要归功于微电子技术、功率电子技术,尤其是计算技术得到了飞速发展,另一方面是由于伺服电机制造技术进一步成熟的成果 日本有个叫 村田顽童 的
[工业控制]
<font color='red'>电机</font>的前沿应用
IR推出650V器件以扩充超高速沟道IGBT系列
适合工业用电机、焊接、太阳能、感应加热和不间断电源应用。 2014年10月21日,北京——全球功率半导体和管理方案领导厂商 – 国际整流器公司 (International Rectifier,简称IR) 推出多款坚固可靠的650V IRGP47xx器件,藉以扩充绝缘栅双极晶体管 (IGBT) 系列。新产品旨在为多种快速开关应用作出优化,包括光伏逆变器、焊接设备、工业用电机、感应加热和不间断电源等应用。 全新的IRGP47xx系列IGBT提供从15A到90A的电流范围,并采用沟道纤薄晶圆技术降低导通损耗和开关损耗,以提升系统效率。这些产品可作为分立式器件或与软恢复低Qrr二极管一起封装,能够为8KHz到30K
[模拟电子]
IR推出650V器件以扩充超高速沟道IGBT系列
STM32串口通信printf重定向方法
在源程序中加入如下代码,包含“stdio.h”。 默认使用USART1,确认串口已经初始化成功、 #pragma import(__use_no_semihosting) _sys_exit(int x) { x = x; } struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is r
[单片机]
STM32定时器触发ADC
以STM32 ADC的常规通道为例(注入通道类似): 如图,STM32 ADC的常规通道可以由以上6个信号触发任何一个,我们以使用TIM2_CH2触发ADC1,独立模式,每次仅测一条通道,则ADC的配置如下:(以下代码使用STM32固件库V3.5) void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; //关闭通道扫描模式 ADC_InitStructure.
[单片机]
<font color='red'>STM32</font>定时器触发ADC
STM32 串口ISP下载方式解读
Flash_Loader_Demonstrator下载工具的安装 1.硬件的连接和设置 串口ISP下载方式(对应开发板BOOT0为1、2引脚,BOOT1为2、3引脚) STM32下载程序的方法,与51单片机差不多,一般有三种方法:MDK编译器附带的烧写、串口ISP烧写、J-FLASH 方式烧写。 当然,不同的下载方式对应STM32启动方式也不同,如下图是STM32三种启动方式: ● 第一种启动方式是最常用的 用户FLASH 启动,STM32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!!! ● 第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),建议使用这种
[单片机]
<font color='red'>STM32</font> 串口ISP下载方式解读
基于模型的设计简化嵌入式电机控制系统开发
作者:Dara O Sullivan、Jens Sorensen、Aengus Murray,ADI公司 本文描述了围绕基于ARM 的嵌入式电机控制处理器构建的基于模型设计(MBD)平台的详细情况。 随后,本文提供最初部署的基本永磁同步电机(PMSM)控制算法示例,并介绍了方便的功能扩展,以包含自动化系统的多轴位置控制。 长期以来,系统和电路建模一直是电机控制系统设计的重要方面。 采用MBD方法后,电气、机械和系统级模型用于在构建和测试物理硬件前评估设计概念。 MathWorks最新的仿真工具可以对完整的嵌入式控制系统进行建模,包括电气电路和机械系统领域。 同时,嵌入式编码工具从控制系统模型生成C语言代码,将
[工业控制]
STM32的GPIO输入输出模式配置
最近在看数据手册的时候,发现STM32的GPIO输入输出模式的配置种类有8种之多(输入和输入各4种): (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输入 (3)GPIO_Mode_IPD下拉输入 (4)GPIO_Mode_IPU上拉输入 (5)GPIO_Mode_Out_OD开漏输出 (6)GPIO_Mode_Out_PP推挽输出 (7)GPIO_Mode_AF_OD复用开漏输出 (8)GPIO_Mode_AF_PP复用推挽输出 我们平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但对于各种模式下IO口的内部电路和典型应用,STM32的数据手册中也未曾做过详细的说明和归纳
[单片机]
变频器3相220v输出可接380电机
变频器是一种将交流电能转换为可调频率的交流电能的装置,广泛应用于工业自动化、电力系统等领域。在实际应用中,我们经常会遇到这样的问题:变频器3相220V输出能否接380V电机?本文将从变频器的工作原理、电机的类型、接线方式、功率匹配等方面进行详细分。 一、变频器的工作原理 变频器的基本组成 变频器主要由整流器、中间电路、逆变器和控制器四部分组成。整流器将交流电能转换为直流电能,中间电路储存和平滑直流电能,逆变器将直流电能转换为可调频率的交流电能,控制器则根据输入信号调节逆变器的输出频率,从而实现对电机的调速控制。 变频器的调速原理 变频器的调速原理是通过改变输出频率来实现的。在电机的额定频率下,电机的转速与频率成正比。当
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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