尊敬的各位大侠、专家、高手:
我打算采用ArduinoMega2560板子采集4路PWM输入,然后再由arduino混合生成6路PWM波,驱动舵机。
4路采用外部中断,然而,在串口监视上显示四路的值有4-6us的抖动,输出的舵机也随之有抖动。
请问各位尊敬的大侠、专家、高手改如何解决?不胜感激。
ARDUINO 采集代码
int pwm1 = 21;
int pwm2 = 20;
int pwm3 = 19;
int pwm4 = 18;
unsigned long rc1_PulseStartTicks,rc2_PulseStartTicks, rc3_PulseStartTicks, rc4_PulseStartTicks;
volatile int rc1_val, rc2_val, rc3_val, rc4_val;
void setup() {
Serial.begin(11500);
pinMode(pwm1, INPUT);
pinMode(pwm2, INPUT);
pinMode(pwm3, INPUT);
pinMode(pwm4, INPUT);
attachInterrupt(2, rc1, CHANGE);
attachInterrupt(3, rc2, CHANGE);
attachInterrupt(4, rc3, CHANGE);
attachInterrupt(5, rc4, CHANGE);
}
void rc1()
{
if (digitalRead( pwm1 ) == HIGH)
rc1_PulseStartTicks = micros(); // store the current micros() value
else
rc1_val = micros() - rc1_PulseStartTicks;
}
void rc2()
{
if (digitalRead( pwm2 ) == HIGH)
rc2_PulseStartTicks = micros();
else
rc2_val = micros() - rc2_PulseStartTicks;
}
void rc3()
{
if (digitalRead( pwm3 ) == HIGH)
rc3_PulseStartTicks = micros();
else
rc3_val = micros() - rc3_PulseStartTicks;
}
void rc4()
{
if (digitalRead( pwm4 ) == HIGH)
rc4_PulseStartTicks = micros();
else
rc4_val = micros() - rc4_PulseStartTicks;
}
void loop() {
Serial.print("channel 1:");
Serial.print(rc1_val);
Serial.print(" ");
Serial.print(" channel 2:");
Serial.print(rc2_val);
Serial.print(" ");
Serial.print(" channel 3:");
Serial.print(rc3_val);
Serial.print(" ");
Serial.print(" channel 4:");
Serial.println(rc4_val);
}
|