查看: 637|回复: 3

[经验] 相位校准PWM模式PWM调制

[复制链接]
  • TA的每日心情
    慵懒
    2019-8-4 10:18
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2019-4-19 22:38 | 显示全部楼层 |阅读模式
    本帖最后由 Alan_Green 于 2019-4-22 22:49 编辑

        调制两路 PWM 用于两组管子轮流导通的场合,频率31.3kHz,占空比5% 到 45%。使用了定时器2,PWM输出为 Pin_13:OC2A,以及Pin_3:OC2B
        为了避免两个管子同时导通,占空比要小于50%;为了避免运行异常,定时器工作频率较高时(全频),占空比不能设置过小,建议计数值不小于5,本例设置计数限制在 0x0A ~ 0x73 之间,实测占空比 5% 到 45% 。。调用 PWM_set() 完成配置后,只需在 PWM_write() 里写入数值就可以控制占空比;修改PWM_write()里的 if 判断条件可以改变占空比限制。

    include <avr/io.h>

    include <avr/interrupt.h>

    byte PWM_daul = 0X08;  //全局变量,设置PWM占空比;赋值范围:0x0A ~ 0x73,占空比 5% 到 45%;

    void setup()
    {
    PWM_set();            //初始化PWM,配置定时器2;频率31.3kHz,OC2A与OC2B相差半个PWM周期;
    }

    void loop()
    {
    //增加占空比,然后减小占空比//
    for(byte i=0; i < 0x90; i++)
    {
    PWM_write(PWM_daul ++);        // 写 PWM_daul 就可以控制占空比,范围
    delay(40);
    }

    for(byte i=0; i < 0x90; i++)
    {
    PWM_write(PWM_daul --);
    delay(40);
    }

    }

    //**初始化 PWM 配置***//
    void PWM_set()
    {
    pinMode(11, OUTPUT);      //OC2A 第一路PWM
    pinMode(3, OUTPUT);        //OC2B 第二路PWM

    // ****配置定时器2*****//
    cli();                                     // 配置时关全局中断,避免配置被意外打断。
    TCCR2A = B10110001;       //10表示OC2A脚上升匹配清零;11为OC2B上升匹配置位;0001 相位矫正PWM 模式;
    OCR2A = 0x05;                   //设初始值,输出比较寄存器A  <<<<<<<<<-----
    OCR2B = 0xFE - OCR2A;    //设初始值,输出比较寄存器B  <<<<<<<<<-----
    TIMSK2 = B00000000;       //定时器2中断允许,   2:OCIE2B;1:OCIE2A;0;TOIE2;
    TCCR2B = B00000001;       //设置分频,  01不分频,10 为8分频,11 为32分频;
    sei();                                    // enable global interrupts:
    }

    //*写 PWM 占空比***//
    byte PWM_write(byte z)
    {
    if((z > 0x0A) && (z < 0x73))  //判断占空比 5% 到 45%范围内才允许写入。
    {
    OCR2A = z;
    OCR2B = 0xFE - z;     //用 0xFF 两路占空比不同步,会相差一个计数(0.5%)
    // return 0x00;           //利用返回值可以判断是否超范围。
    }
    //else return 0x01;
    }

  • TA的每日心情
    慵懒
    2019-8-4 10:18
  • 签到天数: 14 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-4-20 14:27 | 显示全部楼层
    波形效果视频  https://www.bilibili.com/video/av49848317
  • TA的每日心情
    慵懒
    2019-8-4 10:18
  • 签到天数: 14 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-4-26 00:14 | 显示全部楼层
    寄存机就那几个,根据需要配置。
    1556208743(1).png
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【Arduino】108种传感器模块系列实验(55)---DHT11温湿度传感器
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【Arduino】168种传感器系列实验(149)--AS608光学指纹识别模块
    【Arduino】168种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    黑乌鸦的Arduino兵器库-----DFPlayer MiNi mp3音乐模块
    黑乌鸦的Arduino兵器库---
    嗯 这是一个系列后期会罗列几乎所有的常见基础模块的demo所以 大家的回复将是我最大
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表