找回密码
 立即注册
查看: 327|回复: 10

PWM硬件移相测试卡教程(四)组合PWM(180度移相互补输出)@STC8H2K12U系列

[复制链接]
  • TA的每日心情
    开心
    昨天 08:45
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6773
    QQ
    发表于 2024-4-16 11:27:28 | 显示全部楼层 |阅读模式
    书接上回:PWM硬件移相测试卡教程(三)不对称PWM(高速正交编码信号输出)
    @STC:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7790
    PWM硬件移相测试卡教程(四)组合PWM(180度移相互补输出
    @STC8H2K12U系列
    上一章节已经讲了移相PWM的不对称PWM,
    要知道这号称51单片机里全宇宙最强的PWM可不只有这一个功能,
    手册里展示的还有如下的应用
    截图202404160854149450.jpg
    当然其实还有很多应用,这里只是选取了两个典型的例子而已。

    一、组合PWM的导入
    两种PWM的主要区别如下

    不对称PWM
    组合PWM
    计数模式
    中央对齐模式
    边沿对齐/中央对齐模式
    输出方式
    一个周期内电平取反两次

    注:一次在上升计数,一次在下降计数

    一个周期内,两个PWM的“与”输出或者“或”输出(注:两个PWM必须一个为模式1,一个为模式2



    可以看到虽然他们总的来说区别就只有两点,但是组合PWM能带来的可能性其实多了不少,就比如说如下的波形
    截图202404160942581488.jpg

    在一个计数周期之内,我想要在两个端口上各自输出一个脉冲,但他们不能同时导通这时候该怎么办呢?
    方案1:普通PWM,一个PWM模式1,在计数开始的时候输出一个脉冲;一个PWM模式2,在计数结束的时候输出一个脉冲;
    截图202404160940223250.jpg

    如上图,通道1在计数0和1的时候发脉冲,通道2在计数14和15的时候发脉冲,这样是不是在计数周期14,15,0,1交界的地方就能生成这个PWM了

    方案2:不对称PWM,一个电平在上升沿快结束时打开,一个在上升沿刚开始时打开

    截图202404160944124909.jpg

    如上图,通道1在计数7和8的时候发脉冲,通道2在计数7和6的时候发脉冲,这样是不是在计数周期8-7交界的地方就能生成这个PWM了


    方案3:组合PWM,可以在任意时间点实现脉冲输出

    截图202404160945132698.jpg

    这个具体怎么生成的请看下文!

    综上所述,看官们乍一看可能要说:开什么玩笑,三个方式都能生成,这个组合PWM有什么好的!别急,上难度。如果我连续的两个脉冲之间要想要空一个计数周期呢?
    截图202404160949303215.jpg

    如上图,各位可以思考下,上面三种方式能不能生成这个。

    再比如我想生成下下面的这个波形呢(占空比0-50%之间,相位差180度)
    截图202404160958206840.jpg

    这个波形,组合PWM可以分分钟实现。

    二、组合PWM实现原理
    截图202404161007489063.jpg

    手册上关于这个模式是这么描述的,首先频率是ARR确定的(其实完整的应该是ARR,PSCR和计数模式一起决定的)这个和之前一样,
    其次就是端口的模式了,注意的是这里的端口必须是一个PWM模式1,另一个PWM模式2,也就是说端口只有一下四种可能
    可能1: 端口a(a=1/3/5)模式:组合PWM模式1;端口b(b=2/4/6)模式:PWM模式2;
    可能2: 端口a(a=1/3/5)模式:组合PWM模式2;端口b(b=2/4/6)模式:PWM模式1;


    可能3: 端口a(a=1/3/5)模式:PWM模式1;端口b(b=2/4/6)模式:组合PWM模式2;
    可能4: 端口a(a=1/3/5)模式:PWM模式2;端口b(b=2/4/6)模式:组合PWM模式1;

    截图202404161024484591.jpg

    然后再来过一下组合PWM输出的模式设置;

    直接来举例子讲解:

    2.0基准代码:先编写如下代码,先直接用PWM模式1和PWM模式2直接输出看下波形:
    1.     PWM1_Duty = 3;
    2.     PWM2_Duty = 12;
    3.    
    4.     PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    5.     PWMA_CCMR1X = 0x00;//通道1:PWM1模式
    6.     PWMA_CCMR1 = 0x60;
    7.     PWMA_CCMR2X = 0x00;//通道1:PWM2模式
    8.     PWMA_CCMR2 = 0x70;
    9.    
    10.     PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    11.     PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    12.     PWMA_ARRL = (u8)PWM_PERIOD;
    13.     PWMA_ENO = 0x00;
    14.     PWMA_ENO |= ENO1P; //使能输出
    15.     PWMA_ENO |= ENO2P; //使能输出
    16.    
    17.     PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位
    18.     PWMA_PS |= PWM1_1; //选择 PWM1_1 通道
    19.     PWMA_PS |= PWM2_1; //选择 PWM2_1 通道
    20.    
    21.     UpdatePwm();
    复制代码
    可以看到波形如下图所示:黄色是输出端口1,蓝色是输出端口2,两条竖着的白线表示一个周期
    截图202404161040441651.jpg


    2.1此时我们把2.0小结里的基准代码改为“端口a(a=1/3/5)模式:组合PWM模式1;端口b(b=2/4/6)模式:PWM模式2;”
    截图202404161044137860.jpg

    可以看到上图,原本周期开始的黄色线的高电平还在,但是周期结束的部分多了一段高电平,这个时间和原来的蓝色线的高电平时间一样!!这就是逻辑或输出!


    2.2此时我们把2.0小结里的基准代码改为“端口a(a=1/3/5)模式:PWM模式1;端口b(b=2/4/6)模式:组合PWM模式2;”
    截图202404161057382637.jpg

    可以看到这时候蓝色线变成了一条低电平的直线,因为在2.0章节的图里面,两个波形没有同时为高电平的部分,所以两个波形与运算一下就变0了,这就是逻辑与输出!


    2.3为了验证一下是不是真的与输出,我们把代码稍微修改下
    1.     PWM1_Duty = 3;
    2.     PWM2_Duty = 2;
    3.    
    4.     PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    5.     PWMA_CCMR1X = 0x00;//通道1:PWM1模式
    6.     PWMA_CCMR1 = 0x60;
    7.     PWMA_CCMR2X = 0x01;//通道1:组合PWM2模式
    8.     PWMA_CCMR2 = 0x50;
    9.    
    10.     PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    11.     PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    12.     PWMA_ARRL = (u8)PWM_PERIOD;
    13.     PWMA_ENO = 0x00;
    14.     PWMA_ENO |= ENO1P; //使能输出
    15.     PWMA_ENO |= ENO2P; //使能输出
    16.    
    17.     PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位
    18.     PWMA_PS |= PWM1_1; //选择 PWM1_1 通道
    19.     PWMA_PS |= PWM2_1; //选择 PWM2_1 通道
    20.    
    21.     UpdatePwm();   
    复制代码
    将CCR2的数值从12改成2,这样通道1和通道2就会有交点了,再来看看输出波形
    截图202404161102373336.jpg

    如上图,这样就可以看出他们确实是逻辑与的运算了

    三、实战:180度移相互补输出
    截图202404161116066131.jpg

    实际上想要移相其实很简单,第一路输出可以直接选择一个通道1的PWM模式1输出即可;第二路输出选择 通道3+通道4的组合PWM输出,如上图我设的通道3的组合PWM2模式,通道4的PWM1模式;上面CCR3就是通道3正常的PWM2模式的输出,CCR4就是通道4正常的PWM1模式的输出,将通道三改为组合PWM2模式的输出就会输出上面的OC3REF3的波形!再回头看CCR1的波形和OC3REFC的波形,是不是就是一个完美的移相波形了!!直接上代码:
    3.1配置代码
    1.     PWMA_PSCRH = 0x00;  //预分频器
    2.     PWMA_PSCRL = 0x00;
    3.     PWM_PERIOD = 1000;    //设置周期值
    4.    
    5.     PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    6.     PWMA_CCER2 = 0x00;
    7.     PWMA_CCMR1X = 0x00;//通道1:PWM1模式
    8.     PWMA_CCMR1 = 0x60;
    9.     PWMA_CCMR3X = 0x01;//通道3:组合PWM2模式
    10.     PWMA_CCMR3 = 0x50;
    11.     PWMA_CCMR4X = 0x00;//通道4:PWM1模式
    12.     PWMA_CCMR4 = 0x60;
    13.    
    14.     PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    15.     PWMA_CCER2 = 0x55;
    16.    
    17.     PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    18.     PWMA_ARRL = (u8)PWM_PERIOD;
    19.     PWMA_ENO = 0x00;
    20.     PWMA_ENO |= ENO1P; //使能输出
    复制代码
    因为端口1是pwm模式1,所以只要写一个寄存器就可,直接把输出计数写入即可。端口3用的组合输出,要设置两个CCR寄存器,一个只要设置计数周期的一般即可,另一个需要换算一下,计数周期的一半+输出计数即可

    3.3主函数里的改变PWM的代码
    1.             if( dir==0 )
    2.             {
    3.                 pul++;
    4.                 if( pul>=495 )
    5.                     dir =1;
    6.             }
    7.             else
    8.             {
    9.                 pul--;
    10.                 if( pul<=5 )
    11.                     dir =0;            
    12.             }
    13.             PWM_SET(pul);
    14.             Delay3ms();
    复制代码
    最后直接上视频!



    由于买不起四通道的示波器,只能接两个通道了,另外两个移相的引脚没接,大家有示波器的可以自己去接上试试!
    4.PWM组合输出.rar (47.43 KB, 下载次数: 18)


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:45
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6773
    QQ
     楼主| 发表于 2024-4-16 11:34:10 | 显示全部楼层

    插个广告,需要配套硬件测试的可以从如下链接购买(特价14.99):
    https://item.taobao.com/item.htm ... skuId=5287511585599
    截图202404161133161214.jpg
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9247

    回帖

    1万

    积分

    管理员

    积分
    13975
    发表于 2024-4-16 13:06:34 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 155 天

    [LV.7]常住居民III

    17

    主题

    370

    回帖

    1293

    积分

    荣誉版主

    积分
    1293
    发表于 2024-4-16 13:09:39 | 显示全部楼层
    手头有四通道的示波器,有空测试一下。先谢谢楼主。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-7 19:39
  • 签到天数: 2 天

    [LV.1]初来乍到

    4

    主题

    52

    回帖

    290

    积分

    中级会员

    积分
    290
    发表于 2024-4-22 11:19:17 | 显示全部楼层
    本帖最后由 深山老妖 于 2024-4-22 11:21 编辑

    能不能利用移相产生下面的这种波形?
    CH1和CH2的占空比为固定的50%(不需要死区控制,各自占50%就行),频率30-300K可调。
    CH3和CH1的相位相同,占空比可调(1%-50%),
    CH4和CH3的相位相同,占空比可调(1%-50%).
    171256oai203pd88d920qo.png

    点评

    当然可以,第一个pwm模式1,第二个pwm模式2,第三个pwm模式1,第四个组合pwm模式2  详情 回复 发表于 2024-4-22 11:44
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:45
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6773
    QQ
     楼主| 发表于 2024-4-22 11:44:22 | 显示全部楼层
    深山老妖 发表于 2024-4-22 11:19
    能不能利用移相产生下面的这种波形?
    CH1和CH2的占空比为固定的50%(不需要死区控制,各自占50%就行),频 ...

    当然可以,第一个pwm模式1,第二个pwm模式2,第三个pwm模式1,第四个组合pwm模式2
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-7 19:39
  • 签到天数: 2 天

    [LV.1]初来乍到

    4

    主题

    52

    回帖

    290

    积分

    中级会员

    积分
    290
    发表于 2024-4-22 13:56:16 | 显示全部楼层
    能不能出个例程?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-7 19:39
  • 签到天数: 2 天

    [LV.1]初来乍到

    4

    主题

    52

    回帖

    290

    积分

    中级会员

    积分
    290
    发表于 2024-4-22 13:56:28 | 显示全部楼层
    一直想要这种波形,找不到。

    点评

    PWM硬件移相测试卡教程(四)组合PWM补充(1个pwm实现180度移相输出+互补50%) https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7926 (出处: 国芯论坛-STC全球32位8051爱好者互助交流社区) 坛友要求,必须  详情 回复 发表于 2024-4-22 14:23
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:45
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6773
    QQ
     楼主| 发表于 2024-4-22 14:23:24 | 显示全部楼层
    深山老妖 发表于 2024-4-22 13:56
    一直想要这种波形,找不到。

    PWM硬件移相测试卡教程(四)组合PWM补充(1个pwm实现180度移相输出+互补50%)
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7926
    (出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)

    坛友要求,必须满足
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 60 天

    [LV.6]常住居民II

    4

    主题

    89

    回帖

    456

    积分

    中级会员

    积分
    456
    发表于 2024-4-22 20:03:56 | 显示全部楼层
     
    经常看看,偶尔玩玩——不过都是简单的,难的我也不会呀
     
    回复 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-4-30 17:59 , Processed in 0.096112 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表