2.STM32F407的互补PWM输出带死区控制

在FOC中SVPWM的实现是少不了使用PWM的,这也是核心功能之一,而ST公司的CUBEMX的各个芯片包的PWM设置有诸多不同,高级定时器功能和通用定时器功能也有诸多不同,今天来简析F407的互补通道PWM的输出及死区控制。

说明:以下第一小节主要是讲原理部分,不感兴趣的同学可以直接调到第二节看它的配置和使用部分。但是还是建议看一下死区时间的计算部分!!!

一、原理介绍

说明:以上文字摘自正点原子。

一、功能:

1.利用定时器的TIM1的1~3通道输出70%占空比的PWM波,其互补通道输出30%占空比的PWM波。

2.刹车功能,当给刹车输入引脚(PB12)输入高电平时,进行刹车,即PWM停止输出。

3.使用LED0闪烁来指示程序运行。

二、创建和配置工程

   在上个例程中已经初步配置了工程,经过实验,LED和KEY即串口功能均可实现,该部分测试内容不再展示,可以看其他博主的博客。

1.配置TIM1时基等参数

上讲已经配置了TIM1的Counter Settings,

psc:168

arr:1000

Tout=168*1000/168M=1000us

所以一个完整的PWM波形频率为1Khz,与设定MOS管开关周期符合。

注意,我们这里选择4分频,也就是,在死区时间的计算里,我们的tDTS=168MHZ/4=23.8ns,假如说你选了2分频,

那么,你在计算死区时间时:tDTS=168/2M=11.9ns

同理,你选了不分频的话,

那么,你在计算死区时间时:tDTS=1/168M=5.95ns

 1)Break And Dead Time management-BRK Configuration

此项用于配置刹车输入,参数配置:

  •  BRK State 用于配置刹车状态,这里配置为 Enable,即打开刹车电平;
  •  BRK Polarity 用于配置刹车极性,这里配置为 High,即刹车电平为高;

2)Break And Dead Time management-Output Configuration

此项用于配置死区(停滞)时间

  • Automatic Output State 用于配置自动输出状态,这里选择使能 Enable,即将 TIMx_BDTR寄存器的 AOE 置 1,所以只要断路输入(BRK)为无效状态,使能主输出 MOE 位以后,OCx 和 OCxN 就有输出。
  • Off State Selection for Run Mode (OSSR)即运行模式下“关闭状态”选择,这里选 Disable,即关闭
  •  Off State Selection for ldle Mode (OSSl) 即空闲模式下“关闭状态”选择,这里选择 Disable,即关闭
  •  Lock Configuration,锁定设置选择 Off,即关闭
  • Dead Time 用于配置死区延时时间,这里配置死区发生器为十进制数的 100, 也就是本例程的 DTG[7:0]位的值设置为十进制 100,即二进制数 0110 0100。 DTG[7:5]=011,符合第一条式子: DT=DTG[7:0] * t dtg, 其中 t dtg = tDTS=168/4MHZ=23.8ns。 DT 是死区时间,可以得到 DT = 100*23.8ns =2380ns=2.38us。到后面下载验证小节,我们通过示波器验证一下这个死区时间计算的理论值和实际值是否一样。(这里看不懂的,请看一下前面那部分的死区时间计算)

3)PWM Generation Channel 1 and 1N

此项用于配置输出通道和它的互补通道。

  • Mode这一项就有这么多选项,和其他的定时器中的选项似乎差别很大,来简析一下他们的作用:

  • Pulse(16 bits value):用于配置通道 1 的占空比,这里配置为 300,上面我们的计数时常CRR设的是1000,则 30%的占空比,那么通道 1 对应的互补输出通道的占空比为 70%;(占空比=Pulse/CRR*100%)
  • Output compare preload :输出比较预加载项选择 Enable,即在定时器工作时是否能修改
    Pulse 的值,如果禁用此项,表示定时器工作时不能进行修改,只能等到更新事件到来的
    时候才能进行修改,所以这里选择使能。
  • Fast Mode :用于配置 PWM 脉冲快速模式,这里我们也不需要,可以不配置。
  • CHN Polarity: 用于配置互补输出通道电平极性,这里我们选择为 Low,即低电平有效;
  • CH Polarity:输出极性,这里我们选择 Low,即低电平有效;
  • CH Idle State :用于配置通道的空闲状态的电平,这里默认选择 Set 为低电平。
  • CHN Idle StateSet: 用于配置互补输出通道的空闲状态的电平,这里默认选择 Reset 为高电
    平。

接下来,我们来生成并修改代码,让这三个通道发出PWM波。

三、代码添加及修改

我们主要在tim.c文件中修改,在void MX_TIM1_Init(void)函数的后面加入以下函数,开启PWM的输出函数即可

  /* USER CODE BEGIN TIM1_Init 2 */
     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); /* 使能 主通道 输出 */
     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); /* 使能 主通道 输出 */
     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); /* 使能 主通道 输出 */

  
     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);/* 使能 互补通道 输出 */
     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);/* 使能 互补通道 输出 */
     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);/* 使能 互补通道 输出 */
  /* USER CODE END TIM1_Init 2 */

四、代码验证及实验现象分析

忧伤到下依次是   

PA8     ------> TIM1_CH1

PB13     ------> TIM1_CH1N

死区时间=2.5us,和我们的计算2.38us是差不多的。

我们还使能了刹车功能,因此将 PB12 引脚接入有效的高电平后,可以看到6路 PWM 都被禁止输出了,撤销 PB12 引脚接入的高电平后,可以看到两路 PWM 又自动恢复输出了,今天的实验完成。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值