用CubeMX配置STM32输出互补PWM并设置死区时间

本文介绍如何使用CubeMX配置STM32H750芯片生成PWM信号,包括选择外部时钟源、设定定时器模式、配置预分频系数、占空比及死区时间等步骤,并演示了输出互补PWM信号的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为作者学习笔记
欢迎交流讨论,喜欢的话点个赞吧

欢迎去看我的主页: NicholasYe’s Hompage.


CubeMX初始配置

  • 以STM32H750芯片为例
  1. CubeMX选定对应芯片生成工程文档
  2. 设置RCC,选定为外部时钟(根据自己的开发板选择!外部时钟可以提供高速振源)
    选择外部晶源配置时钟
  3. 设置完初始的时钟后,我们选定一个定时器的一个通道,选定PWM Generation CHX CHXN(X为数字)模式,右侧的便会激活两个引脚。记住Clock Source要选择时钟源,不要点Disable,否则无法输出PWM波
    在这里插入图片描述
    这两个便是输出互补信号的两个引脚!!

在这里插入图片描述

  1. 设置预分频系数,占空比,死区时间
    Prescaler与Conter Period:初步分频(假设为x和y)具体分频可查看优快云
    Dead Time :死区时间(假设为z),则实际死区时间为z除以时钟APB2频率(可以在Clock Configuration中找到)
    Pulse:占空比

  2. 配置输出,输出代码
    需注意:目录必须全英文
    在这里插入图片描述
    在这里插入图片描述

  3. 编写代码
    在生成的代码主函数中编写代码,输出PWM波

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
		HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
  }
    /* USER CODE END 3 */

用示波器检测输出的PWM波

可以看到在死区部分两个电平的跳跃,输出的PWM还是很理想哒

在这里插入图片描述


请在转载文章过程中明确标注文章出处!尊重原创,尊重知识产权,谢谢!

### STM32CubeMX设置互补 PWM 输出死区时间的方法 在 STM32CubeMX 工具中配置互补 PWM 及其死区时间涉及多个步骤,具体操作如下: #### 定义定时器参数 选择合适的高级定时器(如 TIM1),该定时器支持互补 PWM 功能。对于不同型号的 STM32 微控制器,可用的高级定时器可能有所不同[^1]。 #### 配置时钟源 确保正确设置了系统的时钟树,选择了适当的外部或内部时钟作为定时器的时间基准。这一步骤至关重要,因为它决定了定时器的工作频率和精度[^3]。 #### 启用互补 PWM 模式 针对所选定时器,在 "Pinout & Configuration" 页面下找到对应的定时器外设,点击进入详细配置界面。在此处启用特定通道(例如 CH1 和 CH1N)用于生成互补 PWM 波形。注意,当选择了一个带有反相输出选项 (CHXN) 的通道后,会自动关联另一个同名带 N 的通道来形成互补对。 #### 设定死区时间 为了防止上下桥臂直通现象的发生,在同一时刻关闭两个相反方向工作的 MOSFET 是必要的。因此,在上述页面中的 Dead-Time Generator Settings 区域内调整相应的寄存器值以设定所需的死区宽度。通常情况下,可以通过 GUI 提供的滑动条直观地改变此数值;也可以通过手动输入具体的微秒数来进行精确控制[^4]。 ```c // 示例代码片段展示如何初始化启动具有死区功能的互补PWM void MX_TIM1_Init(void) { /* ...其他初始化代码... */ htim1.Instance = TIM1; htim1.Init.Prescaler = 80 - 1; // 假设系统主频为80MHz,则此处预分频系数使得计数频率达到1MHz htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 999; // 设置周期为1ms(假设需要1kHz的PWM频率) htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) { Error_Handler(); } sConfigOC.Channel = TIM_CHANNEL_1 | TIM_CHANNEL_1N; sConfigOC.Pulse = 500; // 初始占空比50% sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_SET; if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK || HAL_TIMEx_PWM_ConfigComplementaryChannel(&htim1, &sConfigOC, TIM_CHANNEL_1N) != HAL_OK) { Error_Handler(); } } /* 启动PWM输出 */ HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1N); /* 设置比较值从而调节占空比 */ __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, CompareValue); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值