美文网首页
ATMEGA328P使用内部8MRC振荡器(PWM控制) (20

ATMEGA328P使用内部8MRC振荡器(PWM控制) (20

作者: 沧海一声笑的DIY宇宙 | 来源:发表于2018-02-13 15:38 被阅读0次

    MWC飞控的油门等接收脚使用的是490Hz的PWM信号,用占空比来控制数值变化 - 个人感觉比较原始哈。arduio的analogWrite函数正好也是490Hz,所以MWC是用ardunio开发的么。

    我设计的蓝牙接收器使用了内置8MRC作为振荡器,所以analogWrite就不能直接使用了。为了减轻掉晶振的重量,导致一个本来不应该超过20行代码的程序,折腾了近1个月,我也是很拼的哈。

    从手册中找PWM,使用了Fast PWM,实现490Hz频率,代码如下:

    void setupPWM9() // OC1A

    {

      pinMode(9, OUTPUT);

      TCCR1A = 0;

      TCCR1B = 0;

      TCCR1B |= _BV(CS11) | _BV(CS10) | _BV(WGM12);

      TCCR1A |= _BV(COM1A1) | _BV(WGM10);

      OCR1A = 185;

    }

    void setupPWM56() // OC0B

    {

      pinMode(5, OUTPUT);

      pinMode(6, OUTPUT);

      TCCR0A = 0;

      TCCR0B = 0;

      TCCR0B |= _BV(CS01) | _BV(CS00);

      TCCR0A |= _BV(COM0A1) | _BV(COM0B1) |_BV(WGM01) | _BV(WGM00);

      OCR0B = 185; 

      OCR0A = 185;

    }

    void setupPWM3() // OC2B

    {

      pinMode(3, OUTPUT);

      TCCR2A = 0;

      TCCR2B = 0;

      TCCR2B |= _BV(CS22);

      TCCR2A |= _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);

      OCR2B = 185;

    }

    一共4个脚,对应YAW,THRO,PITCH,ROLL。至于3,5,6,9这几个脚完全是画图的时候随便选的。

    64分频,185的占空比差不多是MWC的初始值1500。

    公式如下 16M / 64 / 256≈ 976。

    相关文章

      网友评论

          本文标题:ATMEGA328P使用内部8MRC振荡器(PWM控制) (20

          本文链接:https://www.haomeiwen.com/subject/jshzzxtx.html