Arduino 好盈电调基本控制(PWM)
·
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);
}
更多推荐
已为社区贡献1条内容
所有评论(0)