[其他]

MM32 六步PWM输出

[复制链接]
884|4
手机看帖
扫描二维码
随时随地手机跟帖
flycamelaaa|  楼主 | 2021-4-12 16:46 | 显示全部楼层 |阅读模式
针对电动马达方案中需要使用到六步PWM输出功能,本篇**将向大家介绍如何使用MM32L0系列MCU实现六步PWM输出功能。

MM32高级控制定时器tiM1有互补输出的功能,我们便可以利用定时器 TIM1 来产生 3 对 6 路的互补 PWM 输出。MM32高级控制定时器TIM1产生六步PWM输出,用于驱动三相电机,对应着直流无刷电机的六步换相。

六步 PWM 产生:当在一个通道上应用了互补输出时, OCxM、CCxE 和 CCxNE位的预载位有效,这些预装载位被传送到影子寄存器,因此可以预先设置好下一步的配置,并在同一时间更改所有通道的配置。COM 事件可以通过硬件(在 TRGI的上升沿) 设置或者软件修改TIM1_EGR寄存器的 COM 位来产生。

当 COM 事件发生时会设置一个标志位(TIM1_SR 寄存器中的 COMIF 位),这时如果已设置了TIM1_DIER 寄存器的 COMIE 位,则产生一个中断;如果已设置了 TIMx_DIER寄存器的COMDE位,则产生一个DMA请求。

下图显示当发生 COM 事件时,三种不同配置下OCx和OCxN 输出。
                                              171507a4b0bnbb0zu5b9z0.jpg.thumb.jpg

在本次实验中主要教大家如何配置PWM的输出状态以及输出有效电平设置,在主函数的循环中更新PWM状态输出,将不使用中断方式,用户在实际电机配置程序中可以直接采用该配置方式移植到TIM1_BRK_UP_TRG_COM_IRQHandler函数中。

程序配置:
171507rh9mvnxfcv9e6cdc.jpg.thumb.jpg

1>   开启定时器TIM1的时钟
2>   初始化 TIM1,设置 TIM1 的 ARR 和 PSC,向上计数模式
3>   设置BDTR,使能刹车输入信号,高电平有效
4>   设置 TIM1_CH1/CH1N,TIM1_CH2/CH2N,TIM1_CH3/CH3N的 PWM 模式,PWM 模式2,使能 TIM1 的 CHx 输出
5>   使能TIM1_CR1的自动重装载预装载允许位
6>   使能定时器TIM1

171508hnl4kr5rrurbrrb3.jpg.thumb.jpg

main函数配置流程:
1>   systick延时函数初始化
2>   GPIO口配置,PA8/PB13,PA9/PB14,PA10/PB15,分别为TIM1的三组互补通道输出:CH1/CH1N,CH2/CH2N,CH3/CH3N,复用推挽输出,最大输出速度50MHz, 除此之外,还有一个引脚可以配置也可以不配置,那就是TIM1_BKIN对应的引脚PB12,TIM1_BKIN的功能是检测故障,如果当PB12检测到高电平(取决于刹车有效电平的设置)时,就表示检测到故障,然后它会自动关闭定时器。
3>   定时器TIM1初始化及输出配置
4>   PWM输出模式配置,在我配置的程序中大家可以看到对TIM1_CCMR1\TIM1_CCMR2\TIM1_CCER三个寄存器进行操作即可实现需要的功能

实验结果:
171508v1ccq25cz21cn66z.jpg.thumb.jpg

从逻辑分析仪抓的波形可以看到在6个通道中,如果一个通道处在PWM输出模式,另外的5个通道处在关闭状态,依次轮询该过程。

需要弄清楚我对上述三个寄存器做了什么操作需要参考UM_MM32L0xx文档的第13.4.7章节、13.4.8章节、13.4.9章节三个章节寄存器

171508sefr4atpqq31shgv.jpg.thumb.jpg

如上图所示:位3是输出比较1预装载使能位,TIMx_CCR1的预装载值在更新事件到来时加载到当前寄存器,该位需要置1,位6:4是PWM输出比较模式配置,如果CCMR1的输出比较1配置0x48表示强制为无效电平,0x58表示强制为有效电平,0x68表示PWM模式1。

定时器的配置模式如上所示,但是输出到GPIO口的电平状态还需要查表34,根据表中的定义配置所需要的电平状态。

171509jt9i85hhc95yyo8j.jpg.thumb.jpg

用户在配置电机所需要的PWM功能时,只需要根据对TIM1_CCMR1 \ TIM1_CCMR2 \ TIM1_CCER 三个寄存器进行操作,如果对寄存器的操作值不是很清楚,建议大家在调试模式下,直接通过修改该三个寄存器的值,然后查看对应的GPIO得状态变化,然后记录下来,在程序中将测试值写入到相对应的寄存器中,重新下载程序到MM32L0系列 MCU中观察对应的GPIO的电平状态。







使用特权

评论回复
jcky001| | 2021-4-12 16:57 | 显示全部楼层
讲解得很详细,感谢楼主分享

使用特权

评论回复
guijial511| | 2021-4-13 07:23 | 显示全部楼层
感谢楼主的讲解,学习了。

使用特权

评论回复
huquanz711| | 2021-4-15 07:41 | 显示全部楼层
讲的不错,学习了。

使用特权

评论回复
yangjiaxu| | 2021-5-20 22:16 | 显示全部楼层
挺好的 可惜MM32现在货源很缺

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

507

主题

1652

帖子

0

粉丝