【STM32】Hal库学习——PWM驱动电机

STM32 TB6612驱动的直流有刷减速电机 title: 减速直流有刷电机 date: 2020-05-20 19:45:11 tags: categories: STM32学习记录 电机的基本认识 这里呢,平衡小车最常用到的是直流编码有刷电机,直流的意思是使用直流电,给引脚通的是恒定电流;编码指的是电机自带编码盘,上面有两个相位正交的编码器,可以利用四倍频技术实现对电机位置和转速的精确追踪;有刷指的是电机内部自带换向器,电机转子每旋转180度,线圈中的电流即自动换向,不需要软件或者硬件驱动的控制。 这种电机通常有6个引脚:电源引脚:5V、GND. 阅读详情
AI摘要

本文记录了一位开发者使用STM32 HAL库配置PWM、定时器中断和编码器,实现四旋翼无人机电机控制的过程。详细介绍了如何设置芯片、时钟、串口、PWM、定时器中断以及编码器,同时分享了中断优先级配置和编码器速度计算的代码实现。作者强调了在使用HAL库时开启PWM的重要性,并分享了学习心得。

51我觉得我学得差不多了,虽然有一些通讯协议还没学,但是由于忙着团队的考核于是要开始弄四旋翼无人机,我打算用stm32的hal库来写。在此留下我的学习印记。

一。配置Hal库

这部分参考【STM32】HAL库 PWM控制电机转速与编码器读取(超详解)HAL库的学习 —— PWM的配置及控制

1.芯片选择

这里根据自己所用的芯片来进行选择,我用的是stm32f103c8t6

 2.设置RCC(系统时钟)

设置高速外部时钟HSE 选择外部时钟源

 3.串口配置

这里我配置的是USART1,异步收发,波特率默认:115200 Bit/s

4.PWM配置 

使用定时器1通道1和通道4(TIM1_CH1和TIM1_CH4),频率10KHz在这里插入图片描述

PWM频率计算公式 f = 定时器时钟频率 / [ (Period+1) *(Prescaler) ]= 72M / (7199+1) *1 = 10k HZ

占空比计算公式 = P = pulse/per *100%

程序里面可以通过调用函数__HAL_TIM_SET_COMPARE(); 来改变占空比,我们就是通过这一函数来控制电机转速。

这里的定时器TIM1时钟为72MHz(自己通过时钟树去配置APB1的时钟频率)

若想深入了解Hal库中PWM各选项的含义,可学习此文 STM32对HAL库的PWM控制

5、定时器中断配置


  使用定时器2(TIM2),周期设为10ms,即10ms进一次定时器中断

在这里插入图片描述

 打开更新定时器中断在这里插入图片描述

7、编码器配置


  STM32自带编码器配置,使用定时器4(TIM4_CH1和TIM4_CH2),打开更新定时器中断

在这里插入图片描述

7、中断优先级配置


  因为编码器中断要发生在定时10ms中断内,故编码器中断的抢占优先级要大于定时10ms在这里插入图片描述

8、配置时钟


  F1系列芯片系统时钟为72MHzs在这里插入图片描述

9、项目创建最后步骤

  • 设置项目名称
  • 选择所用IDE在这里插入图片描述

10、输出文件

  • ②处:复制所用文件的.c和.h
  • ③处:每个功能生产独立的.c和.h文件在这里插入图片描述

 11、创建工程文件


  点击GENERATE CODE 创建工程


到这里就完成工程配置了。

接下来就是我们代码部分了

代码部分

1、配置下载工具


  这里我们需要勾选上下载后直接运行,然后进行一次编译

STM32源代码

main.c中响应各部分加上

/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "math.h"
/* USER CODE END Includes */
/* USER CODE BEGIN PV */
unsigned int MotorSpeed;  // 电机当前速度数值,从编码器中获取
int MotorOutput;		  // 电机输出
/* USER CODE END PV */
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *p)
{
	while(!(USART1->SR & (1<<7)));    //检查SR标志位是否清零
	USART1->DR = ch;                  //将内容赋给DR位输出
	
	return ch;
}
/* USER CODE END 0 */
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);	    // TIM1_CH1(pwm)
  HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_1); // 开启编码器A
  HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_2); // 开启编码器B	
  HAL_TIM_Base_Start_IT(&htim2);                // 使能定时器2中断
  /* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static unsigned char i = 0;
    if (htim == (&htim2))
    {
        //1.获取电机速度
        MotorSpeed = (short)(__HAL_TIM_GET_COUNTER(&htim4)/18);   
        // TIM4计数器获得电机脉冲,该电机在10ms采样的脉冲/18则为实际转速的rpm
        __HAL_TIM_SET_COUNTER(&htim4,0);  // 计数器清零
        
      
        //2.将占空比导入至电机控制函数
        MotorOutput=3600; // 3600即为50%的占空比
        __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, MotorOutput);
        MotorOutput=MotorOutput*100/7200; 
        // 占空比(按最高100%计算,串口打印)
        i++;
        if(i>100)
        {
          // 打印定时器4的计数值,short(-32768——32767)
          printf("Encoder = %d moto = %d \r\n",MotorSpeed,MotorOutput);	
          i=0;
        }
    }
}
/* USER CODE END 4 */


学习心得:记得先开HAL_TIM_PWM_Start这个函数,要不然输出不了pwm波

STM32HAL库学习之路(五):PWM呼吸灯 我使用的是定时器3进行pwm呼吸灯调试 一、pwm所用到的hal库函数 __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)//pwm占空比设置 HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);//pwm使能函数 HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef * 阅读详情

相关推荐

STM32_HAL_TIM_PWM

TM32微控制器中的定时器(TIM)被广泛用于产生脉冲宽度调制(PWM)信号。PWM是一种在模拟电路中广泛使用的技术,用于控制电路的功率输出。通过PWM信号,可以非常精确地控制电机速度、LED亮度、加热器温度等。

qq_59527512的博客 1986

HAL定时器&PWM&PWM捕获应用编程

定时器是用来定时的机器,是存在于STM32单片机中的一个外设。STM32总共有8个定时器,分别是2个高级定时器(TIM1、TIM8),4个通用定时器(TIM2、TIM3、TIM4、TIM5)和2个基本定时器(TIM5、TIM6),如下图所示:这三种定时器的区别如下:​​ 即:高级定时器具有捕获/比较通道和互补输出,通用定时器只有捕获/比较通道,基本定时器没有以上两者。PWM(脉冲宽度调制),它是一种利用微处理器的数字输出来对模拟电路进行控制的技术,也可以理解为是对模拟信号电平进行数字编码的方法。

LX567567的博客 2177

STM32Cube HAL库——利用PWM控制电机转动(TB6612、L298N)

本博客讲解了电机驱动原理和使用STM32Cube来编程控制电机的转动的过程。

weixin_52916289的博客 1万+

零基础入门STM32编程(九)——定时器PWM呼吸灯(CUBEMX)

一 前言 前面章节我们学了如何使用定时器中断点灯,原理为定时器计数达到1s时产生中断,此时单片机调用中断服务函数,执行中断服务函数中的代码。本节我们通过定时器的PWM功能实现呼吸灯的功能。 二 定时器PWM功能 2.1 端口复用 定时器的PWM功能可通过单片机的指定引脚输出脉冲宽度调制(PWM),因此涉及了一个重要的名词——端口复用,如下图所示,给出了TIM2的复用功能重印射。图中可知,单片机的PB3引脚除了可作为通用输入输出引脚功能外,还可以作为定时器TIM2的通道2的输出引脚,这就是端口复用功能

oHaoEr的博客 5260

STM32HAL库RS485-ModBus协议控制伺服电机

一个月前,接手了一个学长的毕设小车,小车采用rs485通信的modbus协议驱动轮毂电机,与往常我学习的pwm控制电机方法大相径庭,在这里以这篇博客记录下该学习过程。

weixin_51002159的博客 1万+

STM32基于hal库的智能小车(1)

以前做了一个红外遥控、避障和寻线的小车,用的是固件库,现在流行hal库,于是在这新冠也不能出门之际,重新用hal库做一个,并准备用上PWM来调节速度,并用wifi遥控,本人新手,有好的方法和错误的望指点!谢谢! **材料:**小车自己安装,STM32核心板,两个l298n电机驱动模块(“5v输出可不接”我将它用来给单片机供电,通道使能后期用PWM控制来调节速度,暂时直接使能就好),其他需要用的后期...

sea1216的博客 5306

STM32实战总结:HAL之高级定时器

STM32实战总结:HAL之高级定时器

qq_28576837的博客 6677

STM32_HAL库—PWM输出

(一)CubeMX设置: 1. 晶振配置(72M) 2. PWM引脚参数配置

2万+

【STM32学习记录06】PWM驱动LED呼吸灯&PWM驱动直流电机

本次内容之后将会转为使用HAL库开发。

guilin 782

基于STM32与L298N的智能车电机控制HAL库项目实战

从STM32内核剖析,到L298N驱动实现,再到PWM调速与传感融合,这一整套流程走下来,你会发现:智能车不是一个零件拼凑出来的玩具,而是一个高度协同的嵌入式系统工程。每一个细节——时钟配置、GPIO模式、散热设计、滤波算法——都在默默影响着最终的表现。而掌握这些知识的意义,远不止做出一辆能跑的小车,更是为你打开通往机器人、自动化、边缘智能的大门🚪。下次当你看到一台无人配送车安静驶过,不妨想想:它的“心脏”里,也许正运行着类似的代码。而你,已经站在了起点之上🌟。💻🔧🚗。

weixin_35516624的博客 709

STM32+HAL直流电机PID控制:从PWM到增量式算法,让转速稳如磐石

直流电机闭环控制是嵌入式开发中最常见的工程场景之一,其核心在于用STM32输出PWM波驱动电机,并通过编码器反馈实际转速,构成速度闭环系统。PID控制算法作为工业自动化中最经典的控制策略,通过比例、积分、微分三个环节的协同,实现目标转速的精确追踪。其中增量式PID输出单步增量,天然规避积分饱和风险,更适合STM32这类数字控制器实时处理。在实际工程中,PWM频率设定、编码器四倍频换算、方向一致性校验都会直接影响系统稳定性。本文基于STM32+HAL库,介绍了从CubeMX定时器配置、TB6612驱动电路,到

weixin_28256233的博客 268

基于STM32的L298N电机驱动详解:从原理到代码实现

STM32单片机通过L298N模块驱动直流电机,是嵌入式开发的经典实践项目。L298N作为双H桥驱动芯片,可将STM32的3.3V逻辑信号转换为电机所需的5-12V高功率输出,并通过PWM(脉宽调制)实现精准调速。STM32的GPIO控制H桥方向(正转/反转/制动),配合定时器生成PWM调节转速,广泛应用于智能小车、机械臂等场景。项目涵盖GPIO配置、PWM原理、电机驱动电路设计等核心知识,是学习嵌入式控制与硬件交互的入门必修课。

云轩阁 5432

AquaCrop-OSPy学习笔记02:模型输入设置

AquaCrop-OSPy的输入设置

EWBA_GIS_RS_ER的博客 3692

基于STM32-HAL库的直流电机控制

个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-26.html 本项目使用CubeMX初始化项目,使用HAL库编写程序,使用STM32F407的TIM2,TIM3控制四个直流电机,从而实现小车八个方向的运动. 概念 直流电机 输出或输入为直流电能的旋转电机,称为直流电机,它是能实现直流电能和机...

陈建驱的博客 1万+

Ubuntu22环境下Xinference与RAGFLOW集成:构建高效rerank模型服务【实战指南】

本文详细介绍了在Ubuntu22.04系统上,通过部署Xinference模型推理服务来加载bge-reranker-base等rerank模型,并将其与RAGFLOW框架集成的完整实战指南。该方案实现了模型服务的解耦与灵活管理,有效提升RAG系统的检索精度与答案相关性,并提供了从环境配置、服务启动、网络连接到性能调优及常见问题排查的全流程解决方案。

pluto的博客 499

KT148A语音芯片SOP外挂功放芯片8002D的说明_V1

KT148A语音芯片内置8欧姆0.5W的功放,所以一般的应用场景,播放一些提示音音量是足够的。但是有的需求还需要驱动更大的扬声器,实现更大的播放音量,这里我们给出解决方案。KT148A+HAA8002D的组合

qyvhome的博客 2145

STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机

TB6612FNG芯片驱动GB37-520电机(HAL库)

weixin_43002939的博客 1万+

Anthropic发布10款金融AI智能体模板深度解析:重构华尔街工作范式

摘要:2026年5月,Anthropic发布10款金融AI智能体模板,标志着AI从辅助工具升级为"虚拟同事"。这些智能体深度集成到Word、Excel等办公软件中,覆盖投行、商行、资管三大场景的核心工作流,预计可提升效率35-85%。技术架构基于Claude3.5Sonnet模型,具备200K上下文窗口和95%+的财务图表解析准确率,并与彭博等金融数据源直连。发布引发传统金融数据服务商股价下跌,摩根大通等机构则视其为成本优化工具。落地需分四阶段推进,关键在于数据治理和复合型人才培养。未来

yyq916的博客 633

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

通过CubeMX生成PWM波输出来控制电机转速

qq_57707070的博客 1万+

别再死记硬背MAML原理了!用PyTorch手撸一个Omniglot小样本分类器(附完整代码)

本文详细介绍了如何使用PyTorch实现MAML(模型无关的元学习)算法,构建一个Omniglot小样本分类器。通过实战代码演示,帮助读者理解MAML的双层优化原理,并提供了完整的训练循环、网络架构设计及调试技巧,适合想要掌握元学习技术的开发者。

weixin_29191669的博客 131

[工作流节点24] 外部用户审批的实现方式:让客户、供应商也能参与流程决策

摘要: 明道云支持通过三种方式实现外部用户审批:1)外部表单审批(推荐方案),通过公开表单让外部用户提交审批意见并自动触发流程;2)链接参数审批,通过含参数的URL实现一键确认;3)API/Webhook审批,适用于系统集成场景。三种方案均无需外部用户登录,支持记录操作日志和安全审计。典型应用包括客户确认报价、供应商发货确认等,实现内外流程无缝衔接。建议根据业务复杂度选择:无代码需求用外部表单,轻量审批用链接参数,系统对接用Webhook。

每日出拳老爷子的博客 345

STM32驱动步进电机(HAL库)

STM32F4系列配置HAL库驱动步进电机!

m0_68300139的博客 6538

Claude Desktop新功能:让非技术人士也能自主编程

摘要: Anthropic近日在Claude桌面应用中集成了Claude Code功能,显著降低了非技术用户的使用门槛。Claude Code作为代理式编程工具,支持多任务并行处理、Git隔离和可视化会话管理,无需命令行操作即可实现代码调试、重构等复杂任务。新增的“计划模式”通过先分析后执行的流程,确保安全性,使产品经理、数据分析师等非开发者也能参与技术工作。这一更新标志着AI技术正打破专业壁垒,让领域专家无需编码背景即可利用高级工具,推动技术民主化。

独立开发,substack顶级编辑 1537

STM32 HAL 驱动有刷直流电机和无刷直流电机

STM32 HAL 驱动有刷直流电机和无刷直流电机 (有刷)直流电机和无刷直流电机的机电结构不同,(有刷)直流电机通过两根线供电,由这两根线的电压方向控制电机轴转动的方向,调节额定范围内的电压可控制转动的速度,在驱动电压一定的条件下就存在对应的最大速度,还可以通过在电压线上提供PWM波形调节速度,采用PWM波形会比恒定电压供电时速度降低,因此恒定电压驱动时也叫做全速。 无刷直流电机则由驱动器向其输出相位驱动信号,并接收霍尔反馈信号,不断调整相位驱动信号输出,进行驱动控制。对于驱动器而言,其控制无刷直流电机

Pegasus的软件博客 7815

基于Python实现学习进度跟踪系统

{{ task }}: {{ "%.1f"|format(hours) }}小时

寒寒豆豆软件公司的博客 195

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【STM32】cubeMX配置HAL库驱动L298N控制直流有刷电机

L298N是常用来驱动小型直流有刷电机(两个)和步进电机(一个)的电机驱动板,其电路原理就是两个H桥电路,控制原理是使用PWM来实现对直流电机的调速,因此需要先补充一下对PWM的知识,可以跳转到以下链接。

科昂的博客 9892

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 无人机学习之路——材料准备
下一篇: 【烧录问题】flymcu下载出现从08000000开始运行失败
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值