[CIU32L051系列] PWM怎么用两个IO口输出PWM互补信号

[复制链接]
592|8
xydrj 发表于 2025-11-4 17:19 | 显示全部楼层 |阅读模式
CIU32L051x8的PWM怎么用两个IO口输出PWM互补信号
jalzhang 发表于 2025-11-6 16:09 | 显示全部楼层
只有高级定时器 TIM1 才带互补通道(CHx / CHxN);
必须同时使能主通道和互补通道的 GPIO 复用,并在 TIM1_BDTR 寄存器里打开主输出使能(MOE);
如果驱动半桥/全桥,还要在 BDTR 里写死区时间 DTG[7:0]。
下面给出最小步骤和寄存器写法(48 MHz 时钟、20 kHz 载波、1 µs 死区为例)。
一、管脚选择(任意封装都存在的 TIM1 互补对)
表格
复制
功能        复用 AF        推荐引脚*        说明
TIM1_CH1        AF2        PA8        主 PWM
TIM1_CH1N        AF2        PB13        互补 PWM
若封装没有 PB13,可换 CH2/CH3 的互补对,详见数据手册表 3-2。
二、寄存器配置流程(库函数/裸寄存器均可)
开时钟
RCC->APBENR2 |= RCC_APBENR2_TIM1EN;   // TIM1 时钟
RCC->AHBENR  |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;
GPIO 复用
// PA8 = TIM1_CH1
GPIOA->MODER   &= ~(3UL<<16);   // 清除
GPIOA->MODER   |=  (2UL<<16);   // AF
GPIOA->AFR[1]  |=  (2UL<<0);    // AF2

// PB13 = TIM1_CH1N
GPIOB->MODER   &= ~(3UL<<26);
GPIOB->MODER   |=  (2UL<<26);
GPIOB->AFR[1]  |=  (2UL<<20);   // AF2
时基(20 kHz)
TIM1->PSC = 47;                 // 48 MHz / (47+1) = 1 MHz
TIM1->ARR = 49;                 // 1 MHz / 50 = 20 kHz
PWM 模式
TIM1->CCMR1 &= ~TIM_CCMR1_OC1M;
TIM1->CCMR1 |=  (6UL<<4);       // PWM1 模式
TIM1->CCER  |=  TIM_CCER_CC1E   // 主输出使能
             |   TIM_CCER_CC1NE; // 互补输出使能
TIM1->CCR1 = 25;                // 50 % 占空比
死区与主输出
TIM1->BDTR |= (100<<0)          // DTG=100 → 1 µs @1 MHz 计数
            | TIM_BDTR_MOE;     // 主输出使能
启动
TIM1->CR1 |= TIM_CR1_CEN;
三、运行结果
PA8 与 PB13 同时输出 20 kHz、占空比 50 %、相位完全互补的两路 PWM,两路上升/下降沿之间自动插入 1 µs 死区时间,可直接驱动半桥高/低边 MOS 或 IGBT。
四、注意事项
若用不到“刹车”功能,把 TIM1_BKIN(PB12)配置为普通 GPIO 即可;
若需要中心对齐模式,把 CR1 的 CMS 位置 1;
互补通道只在高级定时器 TIM1 存在,通用定时器 TIM2~TIM5 无 CHxN 输出,无法实现硬件互补
闪烁阴影 发表于 2025-11-10 08:22 | 显示全部楼层
看下标准库文件,应该PWM可以直接配置成互补输出的!
迷雾隐者 发表于 2025-11-20 13:43 | 显示全部楼层
对于CIU32L051x8,你可以通过编程设置两个PWM通道的相位,使其输出互补信号
脑洞星球居民 发表于 2025-11-22 09:12 | 显示全部楼层
具体操作时,你需要查阅CIU32L051x8的数据手册,找到PWM模块的配置部分
逆鳞风暴 发表于 2025-11-23 10:31 | 显示全部楼层
CIU32L051x8的PWM模块支持互补输出,你可以通过配置PWM模块的相关寄存器来实现
旧时光放映机 发表于 2025-11-27 18:30 | 显示全部楼层
具体操作是,首先配置两个IO口为PWM功能,然后找到PWM控制寄存器,设置为互补输出模式
不想起床喵星人 发表于 2025-12-3 07:16 | 显示全部楼层
具体操作时,你需要查阅CIU32L051x8的数据手册,找到PWM模块的配置部分,设置两个IO口的PWM输出为互补模式
低语之树 发表于 2025-12-3 15:14 | 显示全部楼层
jalzhang 发表于 2025-11-6 16:09
只有高级定时器 TIM1 才带互补通道(CHx / CHxN);
必须同时使能主通道和互补通道的 GPIO 复用,并在 TIM1 ...

老哥用的是标准库么还是啥,写的很不错啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

30

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0