文章目录

  • 前言
  • 一、L298N电机驱动模块
    • 1、 使用介绍
    • 2、注意事项
  • 二、32单片机源码
    • main.c文件
    • timer.c文件
    • timer.h文件
  • 三、接线
  • 总结

前言

暑假由于要参加一些创新比赛,所以学习了如何利用stm32单片机实现直流电机PWM调速,这篇博客记录了博主在实现直流电机PWM调速过程中32单片机源码以及遇到的一些问题。以下是本篇文章正文内容:

一、L298N电机驱动模块

1、 使用介绍

当驱动电压(板子背面标识为12V输入,实际可以接受的输入范围是7-12V)为7V-12V的时候,即12V电机驱动端子接通驱动电源时,插上跳线帽使用板载的78M05供给芯片的逻辑电源,指示灯亮,可以不用再外接逻辑电源;当使用板载5V供电之后,接口中的+5V供电端子不要输入电压,但是可以引出5V电压供外部使用。

当驱动电压高于12V,小于等于24V 时,比如要驱动额定电压为18V的电机。首先必须拔除板载5V输出使能的跳线帽,指示灯熄灭,不使用板载的78M05供给芯片的逻辑电源,然后在5V输出端口外部接入5V电压对L298N内部逻辑电路供电。

5V使能即一个电平为5V的控制信号,当此信号输入有效时,且电机驱动模块中电源供电正常时,电机驱动模块输出电流。否则即使电源供电正常,电机上也无电流。

L298N使能端(高电平有效,常态下用跳线帽接于VCC),可通过这两个端口实现PWM调速( 使用PWM调速时取下跳线帽)。ENA和ENB接上PWM信号,IN1、IN2、IN3、IN4正常接上高低电平使电机正转、反转或停转。

2、注意事项

L298N供电的5V如果是用另外电源供电的话,( 即不是和的电源共用),那么需要将单片机的GND和模块上的GND连接在只有这样单片机上过来的逻辑信号才有个参考0点。板载5V稳压芯片的输入引脚和电机供电驱动接线端子导通的。(这点很重要,博主因为这一点走了不少弯路)。

二、32单片机源码

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(999,0);   //PWM输出初始化while(1){//以90%的速度正转TIM_SetCompare2(TIM3,900);GPIO_SetBits(GPIOA,GPIO_Pin_4); GPIO_ResetBits(GPIOA,GPIO_Pin_5);  delay_ms(3000);//以60%的速度反转TIM_SetCompare2(TIM3,600);GPIO_SetBits(GPIOA,GPIO_Pin_5); GPIO_ResetBits(GPIOA,GPIO_Pin_4);delay_ms(3000);}   }

timer.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外设时钟//初始化IOPA4GPIO_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);       //初始化IOPA5GPIO_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);      //初始化IOPA7GPIO_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);//初始化TIM3TIM_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模式2TIM_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
}

timer.h文件

#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"void TIM3_PWM_Init(u16 arr,u16 psc);
#endif

完整工程源码.

三、接线


IN3–PA5
IN4–PA4
ENB–PA7
L298N与32单片机共地(很重要)

总结

感谢各位的支持,有什么问题欢迎到评论区提问!

stm32单片机+驱动L298N控制直流电机调速相关推荐

  1. Arduino驱动L298N控制直流电机的正反转和调速

    Arduino驱动L298N控制直流电机的正反转和调速 一.前言 二.产品参数 三.驱动直流电机 三.接线图 四.程序 五.实验结果 总结 一.前言 本模块使用ST公司的L298N作为主驱动芯片,具有 ...

  2. 51单片机—使用PWM对直流电机调速

    文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...

  3. 基于PWM控制直流电机调速的设计

    实验现象:通过S2,S3按键,增加/减小PWM,控制LED灯组的亮灭,同时当高于或低于PWM时,蜂鸣器将工作. #include <reg52.h> #define uchar unsig ...

  4. 机电传动控制——直流电机调速仿真实验

    1.直流电机模型 2.PID调节参数的作用: 1.比例系数Kp的作用是加快系统的响应速度,提高系统的调节精度. 2.积分作用系数Ki的作用是消除系统的稳态误差. 3.微分系数Kd的作用是改善系统的动态 ...

  5. 【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)

    [毕业设计]2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT) 文章目录 [毕业设计]2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT) 资料下 ...

  6. K_A08_001 基于 STM32等单片机驱动L298N模块按键控制直流电机启停正反转加减速

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 L298N模块驱动时序 对应程序: ENA ENB输出PWM 四.部分代码说明 接线说明 1.STC89C52RC+L298N模 ...

  7. 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速-萌新入门

    ** 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速 ** 分享一个萌新入门小工程 一.原件连接: 第一种直接用51开发板 第二种用最小单元加unl2003驱动 二.开发板电路 ...

  8. 基于51单片机的L298N直流电机调速系统Proteus仿真程序

    基于51单片机的L298N直流电机调速系统Proteus仿真程序 本此设计选择STC89C52单片机作为主控芯片,选取带有光电编码器的直流电机作为被控对象,利用单片机的T0定时器产生PWM信号并送到直 ...

  9. 【C51单片机学习笔记----DS18B20温度传感器LCD1602液晶屏直流电机调速与呼吸灯AD模数转换红外外部中断】

    文章目录 一.DS18B20温度传感器 1.DS18B20温度传感器连接原理图 2.DS18B20温度传感器单总线通信时序 3.DS18B20温度传感器代码模块 二.LCD1602液晶屏 1.LCD1 ...

  10. 直流电机调速伺服控制(最优控制)

    直流电机调速伺服控制 实验内容: 基于pid的直流电机调速伺服控制 基于模糊控制的直流电机调速伺服控制 基于bp神经网络的直流电机调速伺服控制 题目介绍: 直流电机等效电路图 其中控制量是直流电机的驱 ...

最新文章

  1. Python自动化运维——系统性能信息模块
  2. 关于SSH的分工(网友讨论集合贴)
  3. 数钱数到手抽筋html5,经典说说心情短语 数钱数到手抽筋
  4. swoole 热重启
  5. Eclipse查看对应windowsbuilder+GEF+EMF版本
  6. 图像数字水印技术研究及matlab实现,基于MATLAB的数字水印技术研究
  7. 【工控老马】基于PLC的花样喷泉设计原理详解
  8. 近200篇机器学习深度学习资料分享(含各种文档,视频,源码等)
  9. uva 10099 The Tourist Guide nyoj 1019 亲戚来了【单个路线最大流【最短路算法】】
  10. 刘文智《产品经理深入浅出》培训课程笔记
  11. 现代笑话二则2 木子家创作
  12. java super extend 区别_Java泛型中extends和super的区别
  13. ubuntu16.04 64位和hi3519SDK安装记录
  14. aws eks_在带aws eks的kubernetes上部署带舵的破折号
  15. 2014中国CRM与商业IT展览会(上交会专题)
  16. 将用好路缘石成型机做好公路项目的经验分享开来
  17. 多线程【全面学习 图文精讲】
  18. 分子生物学 第二章 遗传物质
  19. js 实现pc端鼠标拖动触发横向滚动条的滚动(隐藏的滚动条)
  20. 云应用程序架构:阿里云国际版服务器托管注意事项

热门文章

  1. 【数据结构 严蔚敏版】 链表基本操作
  2. 制作一个简单HTML中华传统文化网页(HTML+CSS)
  3. 解决被卡巴斯基提示说KEY被列为黑名单
  4. 播放器市场瞧一瞧: 暴风影音和豪杰解霸前身后世
  5. NeatUpload——支持大文件上传的控件
  6. html5实现直接下载文件
  7. 1计算机组成及作用是什么,如何理解计算机组成和计算机体系结构?
  8. C++实现播放音频文件
  9. 正则修饰符、用敏感词库替换
  10. 反编译工具ILSpy下载