使用到的各元件:

1、12V电源一个

2、单片机:STM32F103C8T6

3、直流电机4个

4、电机驱动模块:L298N

5、降压模块两个

6:杜邦线若干

对于直流电机的转动控制如下表

两边电平 00 10 01
电机状态 停止 正转 反转

注意,两边电平不能同时为1。

显然,转动控制是非常简单的,关键在于怎么控制电机的转速,这就需要使用PWM波来进行控制

PWM波

  • 在PWM输出模式下,除了CNT(计数器当前值)、ARR(自动重装载值)之外,还多了一个值CCRx(捕获/比较寄存器值)。
  • 当CNT小于CCRx时,TIMx_CHx通道输出低电平;
  • 当CNT等于或大于CCRx时,TIMx_CHx通道输出高电平。
  • 在一个周期内:

    • 定时器从0开始向上计数
    • 0-t1段:定时器计数器TIMx_CNT值小于CCRx值,输出低电平
    • t1-t2段:定时器计数器TIMx_CNT值大于CCRx值,输出高电平
    • 当TIMx_CNT值达到ARR时,定时器溢出,重新向上计数...循环此过程
    • 一个PWM周期完成

TIMx_ARR寄存器确定PWM频率,TIMx_CCRx寄存器确定占空比

PWM的频率计算方法如下:

单位:HZ

arr :计数器值

psc :预分频值

PWM占空比及其计算方法:

概念:高电平占总时间长度

公式:

配置理念:若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。 而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较寄存器TIMx_CCR的值A时,输出高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输出低电平(或高电平)。 如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR的值A乘以触发脉冲的时钟周期,即输出PWM的占空比为A/(N+1)。

简而言之:修改CCR1可以修改占空比,修改arr可以修改频率

接下来介绍通过CubeMX实现PWM波输出的方法:

由于需要双路输出,设定PB8,PA10分别通过TIM4-CH3,TIM1-CH3进行PWM输出

同时PA4,5,6,7输出来控制电机转动

开启RCC的HSE

调节TIM1,4,开启响应通道的PWM产生,PSC设置为84-1,ARR设置为1000-1

开启TIM2,3中断,并在中断中调整下自己需要的优先级

时钟勾选HSE,改到最大

Project Manager中该勾的勾,没什么好说的,生成函数

生成函数之后在while前开中断、开PWM

HAL_TIM_Base_Start_IT(&htim2);//开启TIM2定时器中断
HAL_TIM_Base_Start_IT(&htim3);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);//开启PWM波
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);//开启PWM波

主函数前中断回调函数调整占空比

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//回调函数
{if(htim==&htim2){__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,CRR);//(修改CCR值,改变占空比)}if(htim==&htim3){__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_3,CRR);//(修改CCR值,改变占空比)                                                                                        }
}

main函数中调整电平控制电机转动

     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);

PWM波就写好了,只要改变CRR,就可以改变占空比来实现电机调速。

L298N的接口

通道A和通道B跳线帽拔掉,靠下端的接口接PWM输入,输出A,B分别接两个电机的正负极。

逻辑输入接4个电机控制端。

(学习)基于STM32的PWM控制直流电机转速(CubeMX+HAL库)相关推荐

  1. 【在线仿真】Arduino UNO PWM 控制直流电机转速

    [在线仿真]Arduino UNO PWM 控制直流电机转速 在线仿真 接线说明 通过三极管来驱动直流电机电池正极接电机的一端,电机的另一端接到NPN三极管的集电极,三极管的基极接Arduino 11 ...

  2. 树莓派用c语言pwm控制电机,树莓派学习笔记之PWM控制直流电机转速

    树莓派控制PWM控制电机转速 一.硬件 树莓派 12V直流电机 L298N电机驱动器 220V转12V变压器 二.连线 树莓派与L298N需要共地 L298N驱动模块 树莓派接线 三.树莓派pytho ...

  3. 基于STM32移植U8g2图形库——OLED显示(HAL库)

    前言:本文主要内容为将优秀的图形库U8g2移植到STM32单片机上,用于OLED显示精美UI.其实,目前GitHub上有需要优秀的开源GUI库,但是大部分的GUI解决方案并不适合0.96 OLED(1 ...

  4. pwm控制直流电机转速流程图_直流电机的PWM速度控制程序

    * =======直流电机的PWM速度控制程序======== */ /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ #include #include #define ucha ...

  5. pwm控制直流电机转速流程图_Arduino:直流电机PWM调速

    PWM直流电机调速(代码): int i=0; void Forward(); void Back(); void Turn_left(); void Turn_right(); void Speed ...

  6. pwm控制直流电机转速流程图_PWM直流电机转速控制器电路图

    本例电路由LM324和MOS管组成,通过改变输出方波的占空比,使得负载上的平均接通时间从0到100%变化,以达到调整速度的目的. 电路图讲解: 电路中由LM324组成了四个不同的功能模块: 一是由U1 ...

  7. 基于STM32的ESP8266获取天气数据(HAL库)

    一.介绍 进入主题,下图正是购买的esp8266模块 对于esp01,引脚图如下 二.刷固件 在使用AT指令时,有时候会无法进入AT模式,也就是在串口发送指令,无应答.除了检查引脚和TTL模块是否接错 ...

  8. 基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

    基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0031 ...

  9. 基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)、基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享

    设计思路: 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理.产生方法以及如何通过软件编 ...

最新文章

  1. C/C++编程的一些技巧
  2. java把二维转换为一维_在R语言中什么函数可以将二维数组转换成一维数组
  3. mysql中varchar的存储_mysql的varchar可以存储多少个汉字
  4. opencv 模板匹配(cvMatchTemplate)
  5. CSS之Multi-columns的跨列
  6. ue4集合类型_UE4-Sockets
  7. 查看linux系统软件各种版本环境
  8. android多个网络请求如何依次执行,Android 并发和串行网络请求
  9. 【转】WPF 窗体淡入淡出动画
  10. OPCServer:使用Matrikon OPC Server Simulation
  11. TypeScript系列教程--初探TypeScript
  12. HTTP错误代码大全,http网站状态码各代表了什么?
  13. 读取照片的Exif信息
  14. Paper Notes: Cross-Domain Image Translation Based on GAN
  15. SAN光纤交换机常用命令整理(转)
  16. php导出word样式控制,php导出word文档样式以及word文档分页
  17. 华师大计算机专业怎么样,2019年二本科班上岸华东师范大学计算机学硕,初试387分排名第四初复试经验分享!...
  18. 为什么我朋友的移动手机打不开我的网站却能打开www.ip138.com?
  19. 高仿Android网易云音乐OkHttp+Retrofit+RxJava+Glide+MVC+MVVM
  20. 华为否认Mate40升级鸿蒙传闻,华为鸿蒙系统什么时候上市?华为否认Mate40升级鸿蒙传闻...

热门文章

  1. 一文解读身份实名认证API有啥用?
  2. Ajax技术 实例篇
  3. 《李元芳履职记》读书笔记二 IT技术管理的沟通与团队建设
  4. 辽西发展连连看:辽西城市群空间布局“蓝本”解读
  5. 微信小程序评价功能实现
  6. 监控工具——Metrics 快速入门
  7. 工程项目经理部组织经验谈(转)
  8. PLC中ST编程的单按钮启停
  9. 计算机信息系统安全保护等级划分准则
  10. TypeScript 工具类型 Partial