当前位置: 首页 > news >正文

stm32F407 硬件COM事件触发六步换相

上一节采用霍尔中断的方式进行六步换相,但是这样会导致定时器PWM通道配置的更改不会同时生效,因为我们在程序中是顺序执行更改配置的,因此配置的生效不会同时发生。

stm32提供了一种采用COM事件的方式,能够使定时器PWM通道的配置同时生效。

首先看一下stm32官方手册关于COM事件的描述:

这张图片说得很清楚,就是OCXM、CCXE、CCXNE这几个位可以进行预装载,那么我们看一下这几个位分别代表什么意思,首先是OCXM,这个位存在于捕获/比较模式寄存器1(TIMX_CCMR1)和捕获/比较模式寄存器2(TIMX_CCMR2)

我们以OC1M为例:

可以看到,OC1M其实就是输出比较1模式,包括冻结,翻转,强制模式、PWM1和PWM2模式。

CCXE与CCXNE则属于捕获/比较使能寄存器(TIMX_CCER),相关定义如下所示:

这两个位,其实就是通道的使能位。

然后COM事件可以由软件触发,软件触发就是自己写一段程序,开启COM事件。软件触发一般采用以下函数:

HAL_TIM_GenerateEvent(&htim1, TIM_EVENTSOURCE_COM);  //软件触发COM事件

这个函数的定义如下:

当然了,我们也可以采用硬件触发,也就是通过TRGI上升沿来生成COM事件。那TRGI怎么来呢?其实是采用一个定时器的TRGO作为另外一个定时器的TRGI。也就是主定时器产生一个触发给从定时器,这个触发就是TRGO。本文中TIM4是主定时器,TIM1是从定时器。

首先贴出stm32官方手册中关于霍尔传感器的配置过程以及COM时间生成的时序图:

在cubemx中将定时器TIM4配置成霍尔传感器接口时,TIM_CH1、TIM_CH2、TIM_CH3三个通道做异或操作。

TIM4的CCR1保存两个霍尔信号之间的捕获值,TIM4的CCR2则是另外配置,根据CCR2的值来生成OC2REF,然后触发COM事件。那么我们怎么配置CCR2呢,虽然可以手写CCR2的配置,但是既然有CubmeMx,那么stm32官方应该是可以允许我们直接配置的。

我们可以看到上文中的红线部分,“所编程的延迟过后”这句话,其实就是指的可以自定义更改的CCR2的值,CCR2是占空比,因此相当于延迟。在TIM4的配置界面,Commutation Delay就是CCR2的值。

在HAL_TIMEx_HallSensor_Init函数中,有一段语句就是用来配置通道2的。其中Commutation Delay就是Pulse也等于CCR2

如果在cubemx中允许COM事件中断,那我们可以在COM事件中断中进行换相处理。

需要注意的是,除了允许COM中断,还需要在程序中加入中断开启的语句,比如:

HAL_TIMEx_ConfigCommutationEvent_IT(&htim1,TIM_TS_ITR3,TIM_COMMUTATION_TRGI);

这里为什么ITR3,可以参考以下这个主从定时器的对应关系:

顺便将TIM1的配置也贴出来:

进行这些配置之后,将六步换相和霍尔检测放入COM中断中即可。需要注意的是在电机静止时,TIM4的计数器一直在计数,等待霍尔信号来,但是这个时候静止是没有霍尔信号的,这样会计数器溢出,使得CCR2与CNT的比较一直在进行,也就导致OCR2REF一直在产生,一直可以触发COM事件,从而导致换相出错,因此在使用硬件触发COM事件时,需要在程序里面加入堵转和电机停止的判断语句。

理论上,如果没有这种"错误",是需要在主程序加入软件触发COM事件来启动电机的,但是恰恰因为这种"错误"导致不需要再添加软件触发语句了,因为刚刚已经说了,电机静止时,会一直触发COM事件,进入COM中断,执行换相程序。

在实际中,硬件COM用得很少,因为刚刚这种问题,大部分采用的还是软件COM。

http://www.lryc.cn/news/611272.html

相关文章:

  • AI赋能复合材料与智能增材制造:前沿技术研修重磅
  • 智能融合:增材制造多物理场AI建模与工业应用实战
  • 【面向对象】面向对象七大原则
  • linux nfs+autofs
  • 注意点:Git 从安装到分支协作、冲突解决的完整步骤 ---待修改,没看这个步骤,需要重新整理步骤
  • ara::log::LogStream::WithTag的概念和使用案例
  • 跨域场景下的Iframe事件监听
  • Nature Neuroscience | 如何在大规模自动化MRI分析中规避伪影陷阱?
  • Android 开发中,HandlerThread、IntentService 和 AsyncTask区别对比
  • 性能测试终极指南:从指标到实战
  • 《传统企业如何借助数字化转型实现企业增长》
  • 机器学习通关秘籍|Day 03:决策树、随机森林与线性回归
  • 分布式微服务--Nacos持久化
  • Python-机器学习初识
  • 机器学习——集成学习(Ensemble Learning):随机森林(Random Forest),AdaBoost、Gradient Boosting,Stacking
  • 论文阅读笔记:《Curriculum Coarse-to-Fine Selection for High-IPC Dataset Distillation》
  • 2.4 组件通信
  • 高阶 RAG :技术体系串联与实际落地指南​
  • 计算机网络 第2章通信基础(竟成)
  • PYQT的QMessageBox使用示例
  • 深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理
  • 注意点:如何使用conda创建虚拟环境并使用虚拟环境以及当安装相关库时,如何指定安装到那个环境里面 ---待看
  • LINUX-进程管理及基础管理
  • Java开发时出现的问题---并发与资源管理深层问题
  • OpenSpeedy绿色免费版下载,提升下载速度,网盘下载速度等游戏变速工具
  • day25 进程
  • FastAPI快速入门P2:与SpringBoot比较
  • 【数据结构初阶】--排序(三):冒泡排序,快速排序
  • add_key系统调用及示例
  • 《C++》继承完全指南:从入门到精通