cubemx 高级TIM 互补PWM 带死区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xYlBJEk2-1649065763072)(TIM_PWM.assets/image-20220404172804930.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7iB1jsf-1649065763073)(TIM_PWM.assets/image-20220404172813991.png)]

定时器频率和PWM原理见PID详解3(摄像头循迹分析)_遗忘是原罪的博客-优快云博客_摄像头寻迹

APB2设置为72M,72M/(72*1000) = 72 * 1000000/72000 = 1000HZ = 1KHZ

  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
  HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
  HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);
  HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,CCR);

试验验证,可输出波形

示波器看死区成功

### 配置STM32F1 TIM1互补PWM #### 使用STM32CubeMX初始化项目 为了配置STM32F1系列微控制器中的TIM1以实现互补PWM输出,首先需要通过STM32CubeMX创建一个新的工程项目并选择合适的MCU型号。对于基于STM32F103C6T6的开发板而言,在启动STM32CubeMX之后应按照提示选取对应的芯片版本[^1]。 #### 设置时钟树结构 进入Clock Configuration选项卡调整系统与时钟频率参数,确保所选外设能够正常工作所需的时基精度。这一步骤至关重要因为定时器的操作依赖于准确的时间基准来生成期望波形[^2]。 #### 定义GPIO引脚分配 转到Pinout & Configuration界面指定用于输出PWM信号的具体管脚位置。通常情况下,TIM1_CH1N, TIM1_CH1会被映射至特定I/O端口作为互补通道A及其反相版;同样地,也可以为其他两个可能存在的通道B/C做相同处理。 #### 参数化高级控制寄存器 前往Configuration标签页下的TIM1节点展开Advanced Control子菜单项。这里可以设定死区时间Dead-Time Generator (DTG),极性Polarity以及IDLE状态等特性,这些设置有助于防止上下桥臂直通现象的发生从而保护功率器件的安全运行。 #### 启用DMA与中断服务程序(可选) 如果应用程序逻辑复杂度较高或者对实时性能有严格要求,则建议开启直接存储访问Direct Memory Access(DMA)传输机制以便更高效地管理数据交换过程。另外还可以注册相应的IRQ Handler用来响应外部事件触发的动作。 ```c // 初始化函数自动生成部分代码片段示意如下: void MX_TIM1_Init(void) { /* ... */ htim1.Instance = TIM1; htim1.Init.Prescaler = 83; // 根据实际需求计算预分频系数 htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 999; // 设定计数值上限即周期长度 htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; if (HAL_TIM_PWM_Init(&htim1) != HAL_OK){ Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 499; // 占空比初始值 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){ Error_Handler(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值