¿Es este un caso de interferencia PWM?

Tengo un controlador electrónico de velocidad (ESC) que se controla con modulación de ancho de pulso (PWM) desde un Arduino.

Cuando acerco la mano a los cables, la señal se vuelve loca hasta que retiro las manos. Busqué pantalones cortos pero no encontré ninguno. No tengo un osciloscopio o eso me daría mi respuesta.

¿Que esta pasando aqui?

También hice este video para ayudar a explicar la situación .

Esquema aproximado

esquemático

EDITAR

Agregar código de trabajo Arduino para futuros visitantes

#include <SoftwareServo.h> // Download from http://playground.arduino.cc/ComponentLib/Servo

SoftwareServo myservo;  // create servo object to control a servo

//int potpin = 0;  // analog pin used to connect the potentiometer
int PIN = 2;
int val;    // variable to read the value from the analog pin

void setup()
{
  Serial.begin(115200);
  myservo.attach(PIN);  // attaches the servo on pin 2 to the servo object
}

void loop()
{
  char r = Serial.read();
  String inStr = String(r);
  if(r > -1) {
    Serial.print("serial in: ");
    Serial.println(inStr);
  }

  if(r <= -1) {
    // void
  } else if(inStr == "h") { // high
    Serial.println("HIGH");
    digitalWrite(PIN, HIGH);
  } else if(inStr == "m") { // medium
    Serial.println("medium");
    myservo.write(90);
  } else if (inStr == "l") { // low
    Serial.println("LOW");
    digitalWrite(PIN, LOW);
  } else if (inStr.toInt() >= 0 && inStr.toInt() <= 9) {
    int val = inStr.toInt() * 20;
    Serial.println(val);
    myservo.write(val);
  }
  
//  float t = millis() / 100;
//  val = sin(t / 10) * 1000;//analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
//  //  if(val < 0) val *= -1;
//  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
//  val = millis() / 100;
//  myservo.write(val);                  // sets the servo position according to the scaled value
//  Serial.println(val);
//  delay(15);                           // waits for the servo to get there

  SoftwareServo::refresh();
}
¿Tienes esquemas?
Debes agregar tus esquemas. Suena como un nodo capacitivo al que te estás acoplando. Por ejemplo, la puerta de un mosfet no accionado.
Hay un botón de esquema en la barra de herramientas del editor. Muestre dónde está conectado el GND de la batería al Arduino GND y si la Mac está conectada a la red eléctrica o no. (Eso puede dar una conexión a tierra a través del cable USB).
@transistor Gracias por esa información. Soy nuevo en esquemas, así que dibujaré lo que pueda.
No sabía cómo hacer los emparejamientos en la herramienta de esquemas, así que lo dibujé.
¿Qué señal se vuelve loca? No puedo ver ninguna conexión a tierra en ese esquema, ni conexiones de alimentación al Arduino, a menos que esté alimentado por USB.
La señal PWM se vuelve loca. Puedes verlo mejor en el video de youtube que publiqué. ESC se alimenta de lipo (el cable rojo es +) y Arduino obtiene energía de USB
Pero, ¿hay una conexión a tierra entre el Arduino y el ESC?
¿Tierra como en el cable de tierra o en la tierra del chasis? Hay cables POS y GND del ESC conectados a la batería. El cable de señal tiene 5V POS, GND, SIG pero solo la señal está conectada al arduino.
No estoy seguro de entender. "... El cable de señal tiene 5V POS, GND, SIG pero solo la señal está conectada al arduino". Eso suena como tres señales en una señal. ¿Quiere decir que solo hay un cable PWM entre el ESC y el Arduino? Su dibujo hace que parezca que falta un cable a tierra (solo un cable entre el ESC y el Arduino), y si es así, me sorprende que funcione.
@Mark, sí, el único cable pwm es del ESC al arduino, ya que el ESC obtiene energía de la batería lipo. Normalmente, el ESC recibe una señal analógica, pero la envío pwm, lo que funciona, pero recibo algunas interferencias tontas.
También le estás enviando mucho ruido si no conectas un cable entre la tierra del Arduino y la tierra del ESC. Su dedo simplemente está amplificando el ruido.
@Mark: no se trata realmente de enviar "ruido", sino de que, sin una referencia a tierra, la señal PWM se acopla de manera capacitiva débil en el control de velocidad. Por supuesto, se requiere una señal a tierra para una operación confiable.
@Chris Stratton: por supuesto que tiene razón, pero claramente el ruido es su problema, como lo demuestra su dedo. De lo contrario, el acoplamiento capacitivo débil sería adecuado. Está en el entorno y el acoplamiento capacitivo no es suficiente para derivarlo a tierra. Necesita un cable de tierra.
Podemos estar de acuerdo en la necesidad de una conexión a tierra, pero parece que no comprende tanto el tema del ruido como la forma en que a veces se transmite la señal.
No, lo siento, Chris. Después de hacer esto durante cuarenta años, entiendo el ruido. Claro, estoy simplificando demasiado, pero estoy seguro de que cuando pone su "mano cerca de los cables, la señal se vuelve loca", que verías el acoplamiento de ruido de 60 Hz (Ok, tal vez te opongas a que use el término " ruido" en esta situación, que así sea) de la línea de CA, si tuviera un osciloscopio. Pero para el ESC, la señal parecerá ruido.
@Mark Hice más pruebas y descubrí que si obtengo energía del arduino obtengo este comportamiento inestable. Sin embargo, si obtengo la energía del ESC, entonces todo funciona como se esperaba. Tiene sentido que el suelo esté conectado a donde va la señal, que debe haber sido la razón por la que hizo su pregunta original. Si tiene tiempo para publicar una respuesta, me gustaría que obtenga el crédito, si no tiene tiempo, pondré una nota diciendo que conduce a la solución.

Respuestas (1)

Esta respuesta se originó a partir de un comentario de @Mark

Este es un groundproblema.

Aunque el ESC funcionará sin un groundArduino, para hacer el signalestablo necesitaba acompañar el signalcable del Arduino con un groundcable del Arduino.

Según mi ejemplo, tomé el desconectado ground del ESC y lo conecté al GND del Arduino.