|
|
本帖最后由 skyou82 于 2015-9-29 16:16 编辑
最近在DIY4轴飞行器,我从Futaba接收器(遥控和接收,均非2.4G)引出4路PPM通道到 Mega2560的 2、3、20、21口,然后通过计算后赋值给PWM口的马达来控制转速。并通过 Serial 输出具体PWM数值,显示在串口监视器中。
现在我的问题是,即便我设置了每次loop延时20ms,但串口监视器中数据刷新的速度,目测至少有500~800ms的间隔,然后马达的动力输出也有很大的延迟!这样的延迟很难做到准确的操控,我贴上自己的代码,大家帮忙看看哪里不对。
本人Arduino 刚刚入门,请多多指教{:soso_e183:}
- ////- - - - My 4_Fly - - - -////
- const int mPin1 = 8; //电机1
- const int mPin2 = 9; //电机2
- const int mPin3 = 10; //电机3
- const int mPin4 = 11; //电机4
- int ch1; //接收机通道1
- int ch2; //接收机通道2
- int ch3; //接收机通道3
- int ch4; //接收机通道4
- ///////////////////////////////////
- void setup() {
-
- pinMode(2, INPUT);
- pinMode(3, INPUT);
- pinMode(20, INPUT);
- pinMode(21, INPUT);
-
- pinMode(mPin1, OUTPUT);
- pinMode(mPin2, OUTPUT);
- pinMode(mPin3, OUTPUT);
- pinMode(mPin4, OUTPUT);
-
- Serial.begin(9600);
- }
- ///////////////////////////////////
- void loop() {
-
- ch1 = pulseIn(2, HIGH); // 滚转
- ch2 = pulseIn(3, HIGH); // 俯仰
- ch3 = pulseIn(20, HIGH); // 油门
- ch4 = pulseIn(21, HIGH); // 航向
-
- int Thro = (ch3 - 900) / 3.2;
- int AeroFix = ((ch1 - 900) - 400 ) / 15;
- int RPM1 = Thro + AeroFix;
- int RPM2 = Thro - AeroFix;
-
- analogWrite(mPin1, RPM1);
- analogWrite(mPin2, RPM2);
-
- Serial.print(RPM1);
- Serial.print(" ");
- Serial.print(AeroFix);
- Serial.print(" ");
- Serial.println(RPM2);
- delay(20);
-
- }
复制代码 |
|