ATMEGA328P使用内部8MRC振荡器(PWM控制) (2015-08-09 23:05:49)

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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容