Arduino 好盈电调 基本控制(PWM)

新手小白,寻找多个文档以及示例代码,都七七八八;最后碰见一个大致好使的,修改之后放上来

注意:在做测试的时候不要安装螺旋桨,否则会很危险!!!

int PWMPin = 2; //2~13
int PWMValue = 0; //0~1000


void PWM(int PWMPin, int PWMValue){  // 模拟PWM;频率100Hz
  PWMValue += 1000;
  digitalWrite(PWMPin, HIGH);
  delayMicroseconds(PWMValue);
  digitalWrite(PWMPin, LOW);
  delayMicroseconds(10000 - PWMValue);
}



void setup(){

  pinMode(PWMPin, OUTPUT);

  for(int i = 0; i <= 220; i++){  // 循环220次,时间两秒多;油门最大,模拟量程标定
    PWM(PWMPin, 1000);
  }

  for(int i = 0; i <= 110; i++){  // 循环110次,时间一秒多;油门最小
    PWM(PWMPin, 0);
  }

}



void loop(){

  PWM(PWMPin, 50);  // 设置油门大小0~1000
}

简单说明:
  • 好盈电调的油门控制使用PWM
  • 好盈电调的油门控制仅仅看PWM高电平的时间,1ms ~ 2ms对应油门0 ~ 100
  • 由上可知PWM频率最高500Hz,通常50 ~ 400Hz都没问题
  • 好盈电调有一个解锁的操作,就是说明书上写的,油门拉高2秒然后油门归零,程序要模拟这个过程才可以用
  • 为了油门控制更细腻,我使用的是0 ~ 1000来控制油门
附加1:
// 中断版本
#include "MsTimer2.h"

int R,PWMValue;

void setup()
{
  Serial.begin(9600);  //串口腾讯
  pinMode(4, OUTPUT);  //PWM引脚设置

  MsTimer2::set(15, Control);  //定时中断设置
  MsTimer2::start();

}

void loop(){
}

//定时中断回调函数
void Control(){
  R = analogRead(A0);  //电位器电压测量
  
  //最大为1000
  if (R > 1000){
    R = 1000;
    }
  
  //串口输出
  Serial.print("油门:");
  Serial.println(R);

  PWMValue = 1000 + R;  //计算置高时间;1000us为0
  
  //模拟PWM
  digitalWrite(4, HIGH);
  delayMicroseconds(PWMValue);
  digitalWrite(4, LOW);
  }

说明:A0接电位器;4接电调PWM。

附加2:
// 寄存器版本
void setup() {
  
  pinMode(9, OUTPUT);   // 电调信号线接9号引脚
  //设置相应寄存器 200Hz PWM
  TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11);
  TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS11);
  ICR1 = 10000;

}

void loop() {
  OCR1A = 2000;  // 初始值1ms
  delay(5000);
  OCR1A = 2500;  // 转动值1~2ms对应2000~4000
  delay(10000);

}



Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐