找回密码
 立即注册
查看: 131|回复: 6

PWM硬件移相测试卡教程(三)不对称PWM(高速正交编码信号输出)@STC

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

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

    积分
    6773
    QQ
    发表于 2024-4-15 15:38:23 | 显示全部楼层 |阅读模式
    本帖最后由 电子DIY小家 于 2024-4-15 15:50 编辑

    前言:
        众所周知,STC早早的就出了带硬件移相的PWM,但是好多人还不理解这个硬件移相PWM有什么作用,这篇帖子带大家仔细研究下这个硬件移相PWM的一部分——不对称PWM。

    一、普通PWM模式
        常见的PWM模式如下图所示,通过一个ARR寄存器设定最大计数值(向上计数模式),CNT表示当前的计数,当计数超过ARR的时候被清0,当CNT数值小于当前通道的CCRx的时候输出低电平,反之输出高电平,这个是常规的PWM模式2(不开启极性反相的时候!)。
    截图202404151305039049.jpg

    再来看下手册这部分,可以看到PWM模式1其实就是PWM模式2的反过来的波形
    截图202404151309596247.jpg
    当然上面的都是边沿计数,还有一种中心对齐的计数
    截图202404151314072179.jpg

    但是这种模式就是只能生成中心对称的波形,如果单纯的只想做几路不同占空比输出的波形,那确实没一点问题。可以思考下,像上面的几种模式,总的规划出来就分为四大类:
    1.前面高电平后面低电平
    2.前面低电平后面高电平
    3.两边低电平中间高电平
    4.两边高电平中间低电平
    上面1和2是同一种计数方式,3和4是一种计数方式,同一时间只能选择一种计数方式。但是这时候,我们如果想要生成一个如下图的正交编码信号的PWM波形改如何实现的?
    截图202404151527264419.jpg



    二、不对称互补PWM
        按照我个人的理解,不对称PWM的本质就是起始和结束电平不受约束,按照手册的说法他必须使用中心对齐计数模式,开始电平是可以在上升计数段里任意定义,结束电平实在下降计数段里任意定义的。在下面的图里,一个红色线和一个绿色线为一个中心计数模式的一个周期(从0计数到最大值arr再到0的过程),开始电平可以在红线里的任意位置,结束电平可以是绿线的任意位置,这样是不是就很好分配了。
    截图202404151346186216.jpg

    再画个简单的示意图:
    截图202404151353024479.jpg

    假设红色的是整个计数周期,将他对半的分为绿-橙区域和橙-蓝区域,开始的电平可以在这个绿-橙区域任意位置,结束电平也可以定义在这个橙-蓝区域的任意位置,此时你想要这个波形横移多少位置不就是分分钟的了。

    当然在开始之前我们还需要了解一些基本知识:
    截图202404151356163740.jpg

    手册上关于这个模式的描述就这么一页,我给他归纳总结了一下:
    1.需要在中心对齐计数模式下使用
    2.必须手动设置为不对称模式才能使用这个输出(切记这个寄存器的位置不连续,要重点注意
    3.两个通道才能组合成为一个完整的不对称输出通道,且通道1(又名OC1REFC或OC2REFC)由CCR1和CCR2控制,通道2(又名OC3REFC或OC4REFC)由CCR3和CCR4控制。
    4.1P端口设置为不对称输出时起始电平时间点为CCR1,结束时间点为CCR2;  2P端口设置为不对称输出时起始电平时间点为CCR2,结束时间点为CCR1;
    5.别的配置都可以参考普通PWM的配置
    6.一个通道会占用两个端口的CCR寄存器,其中一个作为不对称输出的时候,另一个还可以作为普通的pwm模式输出。

    三、寄存器描述
    1.设置为中心对齐计数
    截图202404151403257704.jpg


    2.手动使能不对称模式
    截图202404151406145077.jpg

    这里尤其要注意OCxM[bit2:0]在CCMx寄存器,但是最高位OCxM[bit3]在CCMxX寄存器(小写的x表示哪个端口);

    3.通道比较数值设置
    截图202404151408322450.jpg


    四、代码实战
    首先我们可以看下来验证一下第二章里的第四点4.1P端口设置为不对称输出时起始电平时间点为CCR1,结束时间点为CCR2;  2P端口设置为不对称输出时起始电平时间点为CCR2,结束时间点为CCR1)是什么意思:
    1)首先配置1P端口为不对称PWM模式2输出,2P端口PWM模式2输出
    1.     PWM1_Duty = 3;
    2.     PWM2_Duty = 5;
    3.     PWMA_PSCRH = 0;
    4.     PWMA_PSCRL = 255;
    5.    
    6.     PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    7.     PWMA_CCER2 = 0x00;
    8.     PWMA_CCMR1X = 0x01;//端口1:不对称PWM2模式
    9.     PWMA_CCMR1 = 0x70;
    10.     PWMA_CCMR2X = 0x00;//端口2:PWM2模式
    11.     PWMA_CCMR2 = 0x70;
    12.     PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    13.     PWMA_CCER2 = 0x55;
    14.     PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    15.     PWMA_ARRL = (u8)PWM_PERIOD;
    16.     PWMA_ENO = 0x00;
    17.     PWMA_ENO |= ENO1P; //使能输出
    18.     PWMA_ENO |= ENO2P; //使能输出
    19.     PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位
    20.     PWMA_PS |= PWM1_0; //选择 PWM1_0 通道
    21.     PWMA_PS |= PWM2_0; //选择 PWM2_0 通道
    复制代码
    截图202404151417484776.jpg

    效果图如上,黄色线条为1P端口,即不对称PWM2模式。蓝色线条为2P端口,即PWM2模式。下载选项和使用的硬件如下图所示
    截图202404151419172198.jpg 截图202404151419544566.jpg

    1.首先PWM频率 = 时钟/(分频+1)/ARR/2 = 24M / 256/8/2 ≈ 5.86Khz,和示波器测的的频率基本一致
    2.按照我们的分析,实际上端口1应该在上升计数为3的时候变成高电平,下降计数为5的时候变为低电平,占空比为50%。端口2应该在上升计数为5的时候变成高电平,下降计数为5的时候变为低电平,例如下图所示,可以看到最终测量到的结果和这个一致,可见这个分析是正确的。
    截图202404151424182613.jpg


    2)首先配置1P端口为不对称PWM模式2输出,2P端口PWM模式2输出

    1.     PWM1_Duty = 3;
    2.     PWM2_Duty = 5;
    3.     PWMA_PSCRH = 0;
    4.     PWMA_PSCRL = 255;
    5.    
    6.     PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    7.     PWMA_CCER2 = 0x00;
    8.     PWMA_CCMR1X = 0x00;//端口1:称PWM2模式
    9.     PWMA_CCMR1 = 0x70;
    10.     PWMA_CCMR2X = 0x01;//端口2:不对PWM2模式
    11.     PWMA_CCMR2 = 0x70;
    12.     PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    13.     PWMA_CCER2 = 0x55;
    14.     PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    15.     PWMA_ARRL = (u8)PWM_PERIOD;
    16.     PWMA_ENO = 0x00;
    17.     PWMA_ENO |= ENO1P; //使能输出
    18.     PWMA_ENO |= ENO2P; //使能输出
    19.     PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位
    20.     PWMA_PS |= PWM1_0; //选择 PWM1_0 通道
    21.     PWMA_PS |= PWM2_0; //选择 PWM2_0 通道
    复制代码

    截图202404151436011936.jpg

    我们下载进去实测一下:
    截图202404151436465269.jpg

    可以看到这个波形就是我们预期的波形

    3)最后我们来实现一下正交编码信号的波形。
    通道1使用PWM2不对称模式,通道3使用不对称PWM2模式
    1.     PWM1_Duty = 0;
    2.     PWM2_Duty = 8;
    3.     PWM3_Duty = 4;
    4.     PWM4_Duty = 4;
    5.     PWMA_PSCRH = 0;
    6.     PWMA_PSCRL = 255;
    7.    
    8.     PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    9.     PWMA_CCER2 = 0x00;
    10.     PWMA_CCMR1X = 0x01;//通道1:PWM2不对称模式
    11.     PWMA_CCMR1 = 0x70;
    12.     PWMA_CCMR2X = 0x00;//通道2:PWM2模式,极性反转
    13.     PWMA_CCMR2 = 0x70;   
    14.     PWMA_CCMR3X = 0x01;//通道3:不对称PWM2模式
    15.     PWMA_CCMR3 = 0x70;
    16.     PWMA_CCMR4X = 0x00;//通道4:PWM2模式
    17.     PWMA_CCMR4 = 0x70;
    18.     PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    19.     PWMA_CCER2 = 0x55;
    20.     PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    21.     PWMA_ARRL = (u8)PWM_PERIOD;
    22.     PWMA_ENO = 0x00;
    23.     PWMA_ENO |= ENO1P; //使能输出
    24.     PWMA_ENO |= ENO3P; //使能输出
    25.     PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位
    26.     PWMA_PS |= PWM1_0; //选择 PWM1_0 通道
    27.     PWMA_PS |= PWM2_0; //选择 PWM2_0 通道
    28.     PWMA_PS |= PWM3_0; //选择 PWM3_0 通道
    29.     PWMA_PS |= PWM4_0; //选择 PWM4_0 通道
    复制代码
    最后下载到单片机看下最终的波形效果。
    截图202404151531554745.jpg

    之所以这里要用硬件,就是频率可以很快,且不需要进中断即可实现。(代码里为了方便测量将PSC分频寄存器配置了255,实际上这个改为0,即不分频速度分分钟能到Mhz级别,效果如下)
    截图202404151537549085.jpg



    PWM不对称输出.rar (44.46 KB, 下载次数: 8)


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-17 10:13
  • 签到天数: 31 天

    [LV.5]常住居民I

    2

    主题

    16

    回帖

    386

    积分

    中级会员

    积分
    386
    发表于 2024-4-15 15:45:43 | 显示全部楼层
    回复 送花

    使用道具 举报

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

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

    积分
    6773
    QQ
     楼主| 发表于 2024-4-15 15:54:05 | 显示全部楼层
    下一章节预告:
    组合PWM实现任意相位差的PWM

    截图202404152017426510.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

    积分
    6773
    QQ
     楼主| 发表于 2024-4-16 11:29:02 | 显示全部楼层
    PWM硬件移相测试卡教程(四)组合PWM(180度移相互补输出)@STC8H2K12U系列
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7805
    (出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)



    PWM硬件移相测试卡教程(四)组合PWM(180度移相互补输出)@STC8H2K12U系列
    PWM硬件移相测试卡教程(四)组合PWM(180度移相互补输出)@STC8H2K12U系列 - 工控板,PLC,STC8/STC32实现 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    PWM硬件移相测试卡教程(三)不对称PWM(高速正交编码信号输出)@STC
    PWM硬件移相测试卡教程(三)不对称PWM(高速正交编码信号输出)@STC - 工控板,PLC,STC8/STC32实现 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    PWM硬件移相测试卡教程(二)贪吃蛇@STC8H2K12U系列
    PWM硬件移相测试卡教程(二)贪吃蛇@STC8H2K12U系列 - 工控板,PLC,STC8/STC32实现 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    PWM硬件移相测试卡教程(一)按键点灯测试@STC8H2K12U系列
    PWM硬件移相测试卡教程(一)按键点灯测试@STC8H2K12U系列 - 工控板,PLC,STC8/STC32实现 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

    积分
    6773
    QQ
     楼主| 发表于 2024-4-16 11:34:53 | 显示全部楼层
    本帖最后由 电子DIY小家 于 2024-4-16 15:01 编辑

    截图202404161134509994.jpg
    插个广告,需要配套硬件测试的可以从如下链接购买(特价14.99):
    https://item.taobao.com/item.htm?abbucket=15&id=771684829461&skuId=5287511585599&spm=a230r.7195193.1997079397.8.6bc635d6bTmrCs

    点评

    连接要重新贴下  详情 回复 发表于 2024-4-16 13:12
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9248

    回帖

    1万

    积分

    管理员

    积分
    13977
    发表于 2024-4-16 13:12:01 | 显示全部楼层
    电子DIY小家 发表于 2024-4-16 11:34
    插个广告,需要配套硬件测试的可以从如下链接购买(特价14.99):
    https://item.taobao.com/item.htm ...  ...

    连接要重新贴下

    点评

    收到,感谢姚总  详情 回复 发表于 2024-4-16 15:01
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

    积分
    6773
    QQ
     楼主| 发表于 2024-4-16 15:01:47 | 显示全部楼层

    收到,感谢姚总
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-30 20:03 , Processed in 0.072768 second(s), 58 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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