STM32f1之L298N电机驱动+PWM调速(附主代码)
前言
今天这里主要是讲一下L298N电机驱动和PWM调速,之后再进行一番实际操作,那么废话不多说,直接进入主题。
一、L298N电机驱动主要介绍
主要I/O口
使能端ENA和ENB,控制输入端INA、INB、INC、IND,马达输出口OUT1、OUT2、OUT3、OUT4,5V输出(可以不接),还有一个板载5V电压,具体如下图所示:
二、控制实现功能
对于L298N模块,直接给12V输入,接上地,就可以给整个模块供电了,之后就是通过控制单片机(这里用的是STM32f1)给4个输入端(INA、INB、INC、IND)控制输入高低电平了
注意:ENA和ENB一般情况下会有两个跳线帽连着,这是直接连上高电平,只有给高电平,这才能让四个输入端(INA、INB、INC、IND)口去控制四个输出(OUT1、OUT2、OUT3、OUT4)进而直流电机状态。特别注意GND是电源和单片机一起共地!
下面为真值表:
三、PWM调速实现
这里就不再是把ENA、ENB再接上高电平了,这个时候就要把跳线帽拔掉了,在通过定时器来控制实现PWM调速,具体先上代码:
#include "timer.h"#define Ina PGout(2)
#define Inb PGout(3)
#define Inc PGout(4)
#define Ind PGout(5)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_GPIOG,ENABLE); 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通道2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//TIM3通道1GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_ResetBits(GPIOG,GPIO_Pin_2); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_ResetBits(GPIOG,GPIO_Pin_3); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_ResetBits(GPIOG,GPIO_Pin_4); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_ResetBits(GPIOG,GPIO_Pin_5); 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_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_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_Cmd(TIM3, ENABLE); }
上面这段代码主要是定时器TIM3的初始化以及四个输入端的初始化,至于那个预分配系数psc和自动重装值arr可以自己设定,这里我设定的是arr=450,psc=7199;大家可以自己调试,这里不细讲。
然后把PA6,PA7分别连接到ENA和ENB上,设置好arr和psc,最后通过TIM_SetComparex函数设置占空比即可实现PWM调速功能
四、整体关键代码和马达连接图
剩下一下重要代码如下:
void qianjin(void)
{TIM_SetCompare2(TIM3,100);//设置通道2的占空比实现PWM调速,这里是100,在0~450间,越小速度越快TIM_SetCompare1(TIM3,100);//设置通道1的占空比实现PWM调速Ina=1;Inb=0;Inc=1;Ind=0;
}
void houtui(void)
{TIM_SetCompare2(TIM3,100);TIM_SetCompare1(TIM3,100);Ina=0;Inb=1;Inc=0;Ind=1;
}
void zuozhuan(void)
{TIM_SetCompare2(TIM3,100);TIM_SetCompare1(TIM3,100);Ina=0;Inb=0;Inc=1;Ind=0;
}
void youzhuan(void)
{TIM_SetCompare2(TIM3,100);TIM_SetCompare1(TIM3,100);Ina=1;Inb=0;Inc=0;Ind=0;
}
void stop(void)
{TIM_SetCompare2(TIM3,100);TIM_SetCompare1(TIM3,100);Ina=0;Inb=0;Inc=0;Ind=0;
}
主函数:
int main(void){ vu8 key=0;delay_init(); // LED_Init(); //KEY_Init(); //TIM3_PWM_Init(450,7199);while(1){key=KEY_Scan(0); //通过按键简单实现if(key){ switch(key){ case WKUP_PRES: LED0=0;qianjin();break; case KEY1_PRES: // qianjin();delay_ms(5000);delay_ms(5000);delay_ms(5000);houtui();delay_ms(5000);delay_ms(5000);delay_ms(5000);break;case KEY0_PRES: LED0=1;stop();break;}}else delay_ms(10); }
}
以上是简单的代码实现,大家可以根据自己实际情况调整修改
下面是实物连接图:
这里用另一个L298N来连接,原理一样的,我另外那个红色版的螺丝不好拧,就暂且用这个,这里我用这个电机驱动4个马达,特别注意单片机和电机上的GND是连在一起的!
那个连接单片机的图片就不发了,具体按上述代码操作,不明白的地方可以留言或者哪里写的不对欢迎指正,谢谢!
题外话:
挺喜欢彭于晏说的一句话:“我就是没有才华,所以才用命去拼!”
学习32之路固然辛苦,但要是坚持下来了,那不是很酷?哈哈哈
STM32f1之L298N电机驱动+PWM调速(附主代码)相关推荐
- 基于MSP430f5529 编码电机测速 接收脉冲数 PWM调速 CCS编译器 代码分析
前言:2022年TI杯大学生电子设计竞赛,小车跟随行驶系统(C题)要求:设计一套小车跟随行驶系统,采用TI的MCU,由一辆领头小车和一辆跟随小车组成,要求小车具有循迹功能,且速度在0.3~1m/s可调 ...
- 基于stm32与l298n的直流电机pwm调速(二)
在上一博文中说了直流电机驱动板的电路原理,现在具体说一下直流电机的调速原理以及代码实现,亲测调速有效. 首先说一下接线,l298n可以控制两路直流电机,在这里仅测试一路,看一下l298n的控制逻辑以及 ...
- [问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题
[问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题 参考文章: (1)[问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题 (2)ht ...
- 51单片机的直流电机PWM调速控制系统(附Proteus仿真+C程序等全套资料)
设计思路 直流电机PWM控制系统的主要功能包括:很实现对直流电机的加速.减速以及电机的正转.反转和急停,并且可以调整电机的转速,能够方便的实现电机的智能控制. 主体电路:即直流电机PWM控制模块.这部 ...
- STM32蓝牙小车以及PWM调速
STM32蓝牙遥控小车 基于STM32F103系列的蓝牙控制小车以及PWM调速 代码下载 HC-06蓝牙模块 使用蓝牙模块前,需要先对其进行一些设置: 使用USB转TTL模块将蓝牙模块连接到电脑,蓝牙 ...
- pwmc语言调速程序_51单片机的直流电机PWM调速系统设计,正转反转,加减速,急停等,仿真和代码...
设计思路 直流电机PWM控制系统的主要功能包括:实现对直流电机的加速.减速以及电机的正转.反转和急停,并且可以调整电机的转速,能够方便的实现电机的智能控制. 主体电路:即直流电机PWM控制模块.这部分 ...
- pwm调速流程图小车_PWM调速+循迹__智能小车程序
//T0 产生双路 PWM 信号, L298N 为直流电机调速, 接 L298N 时相应的管脚上最好接上 10K 的上拉电阻. /* 晶振采用 12M, 产生的 PWM 的频率约为 100Hz */ ...
- 51 PWM调速蓝牙小车
文章目录 前言 一.硬件配置 二.相关接线 1.L298N驱动模块 2.HC-05蓝牙模块 3.接线图解 三.PWM调速 四.完整代码 总结 前言 当你看到无人机升天.平衡车的落地以及超声波避障等技术 ...
- PIC16 F887 单片机 直流电机PWM调速 PID调速 PID算法
直流电机PWM调速:使用将直流电机转速转换为脉冲频率,测量出电机的转速,与写入到单片机的EEPROM里的脉冲设定值进行比较产生偏差,若偏差为正值则电机减速,偏差为负值则加速,并在LCD上显示电机的转速 ...
最新文章
- 如何用Python快速抓取Google搜索?
- 回调函数的意义以及python实现
- 2017计算机应用+简答,2017计算机应用基础试题及答案
- origin数据平滑_研发工程师必备:20条实用origin技能,让作图效率飞起来
- html图片往左,如何用js把一张图片由右向左展开?
- 苹果电脑基本设置+Linux 命令+Android 实战集锦
- 使用faker生成测试数据
- 爪哇国新游记之二十八----从url指定的地址下载文件到本地
- ssh图示+hibernate图示
- R语言介绍(R包与帮助文档)
- HTML5CSS3网页设计仿微信通讯录页
- GitHub的简介翻译(草稿)
- C语言绘图示例-繁花图案
- Python:for...in range() 、 for...in enumerate() 、for...in() 、for...in zip()的用法
- 怎样判断一个exe可执行程序是32位的还是64位的
- 【FPGA知识点】八段共阳极数码管编码表
- C++——求平均数、求和函数
- 如何做成功的项目经理
- MPAndroidChart使用(个人笔记)
- Linux 上生成 SSL 证书
热门文章
- 算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题
- java正则表达式验证标点符号
- web网页制作期末大作业——蓝色的异清轩个人博客(6页) 个人博客模板源码异清轩博客
- 10019---CSS Grouping Selectors(分组和嵌套)
- 文档管理利器--云脉文档自动分类快速检索
- 自定义UpsertStreamTableSink
- Android 设置边距总结
- IT运维如何应对SOX挑战?
- 架构师速成4.4-我该学什么语言
- 声声慢 - 程序人生(程序员生活的真实写照)