找回密码
 立即注册
×

00:00:00

您有一张0.1元限时体验卡,马上领取获得VIP尊享特权。

请教高速高级(HSPWM)模式下怎么实现(频率-占空比)调节相位差180度PWM信号

2024-4-6 23:53 来自 huiyong828 发布 @ 综合讨论

本帖最后由 huiyong828 于 2024-4-6 23:55 编辑

普通PWM模式下,可以正常输出波形
代码如下:
  1. void        PWMA_config(void)
  2. {
  3.         u8        ccer1;
  4.         u8        ccer2;
  5.         u8        ps;
  6.         u8        eno;

  7.         
  8.         P2M0 = 0xff; P2M1 = 0x00;
  9.         P3M0 = 0x40; P3M1 = 0x00;

  10.         P27 = 0;
  11.         P36 = 0;
  12.         
  13.         P_SW2 |= 0x80;                //SFR enable
  14.         PWMA_ENO    = 0;        // IO输出禁止
  15.         PWMA_IER    = 0;        // 禁止中断
  16.         PWMA_SR1    = 0;        // 清除状态
  17.         PWMA_SR2    = 0;        // 清除状态
  18.         PWMA_CR1    = 0;        // 清除控制寄存器
  19.         PWMA_CR2    = 0;        // 清除控制寄存器
  20.         ccer1 = 0;
  21.         ccer2 = 0;
  22.         ps    = 0;
  23.         eno   = 0;
  24.         PWMA_ISR_En = 0;

  25.         PWMA_PSCRH = 0;                        // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
  26.         PWMA_PSCRL = 5;                // 预分频, PWM时钟 = 12MHz/(11+1)=1MHz
  27.         PWMA_DTR   = 5;                        // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,
  28.                                                         //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
  29.         PWMA_ARRH    = (PWMA_PERIOD-1)/256;        // 自动重装载寄存器,  控制PWM周期
  30.         PWMA_ARRL    = (PWMA_PERIOD-1)%256;
  31.         PWMA_ISR_En |= 0x01;                // 使能更新中断

  32.         PWMA_CCMR1  = 0x68;                // 通道模式配置, PWM模式1, 预装载允许
  33.         PWMA_CCR1H  = pwma1/256;        // 比较值, 控制占空比(高电平时钟数)
  34.         PWMA_CCR1L  = pwma1%256;
  35.         ccer1 |= 0x0D;                        // 开启比较输出, 高电平有效    使能PWM1P  PWM1N
  36.         ps    |= 1;                                // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
  37.         eno   |= 0x03;                        // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
  38. //        PWMA_ISR_En |= 0x02;        // 使能中断

  39.         PWMA_CCMR2 = 0x40;                // 强制输出低
  40.         PWMA_CCR2H = PWMA_PHASE2/256;        // 匹配值
  41.         PWMA_CCR2L = PWMA_PHASE2%256;
  42.         ccer1 |= 0xD0;                        // 开启比较输出, 高电平有效                        使能PWM2P  PWM2N
  43.         ps    |= (1<<2);                // 选择IO, 0:选择P1.2 P1.3, 1:选择P2.2 P2.3, 2:选择P6.2 P6.3,
  44.         eno   |= 0x0C;                        // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
  45.         PWMA_ISR_En |= 0x04;        // 使能通道2匹配中断

  46.         PWMA_CCER1  = ccer1;        // 捕获/比较使能寄存器1
  47.         PWMA_CCER2  = ccer2;        // 捕获/比较使能寄存器2
  48.         PWMA_PS     = ps;      
复制代码

免责声明:

本平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;

热门标签 更多

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-14 19:15 , Processed in 0.066686 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

返回顶部