Condensador variable alta tensión HF

Para recuperar una vieja afición y poner en uso en equipo de radioaficionado, que no disfruto desde hace demasiados años, me he planteado realizar una antena para bandas de HF de espacio reducido. Hay una bastante interesante pero que requiere de componentes especiales, la antena ‘ Loop Magnetica‘ o ‘Magnetic Loop Antenna‘.

Revisión: Este diseño ha quedado descartado para su uso debido en la antena debido a que las “loop magnética” requiere unas resistencias casi nulas de contacto y este condensador tiene un cursor que hace que baje su rendimiento. El condensador no pierde su utilidad por ello, pasará a ser parte de un acoplador de antena de hilo largo. Para la antena se diseñará un condensador tipo ‘mariposa’ que no requiere contactos con un cursor.

Este tipo de antenas requiere un condensador variable que soporte altas tensiones, del orden de miles de voltios, que se producirán entre las placas del mismo. Existe la opción de comprar unos magníficos condensadores de vacío que son ideales para este uso pero que cuestan entre 200 y 300 €, con lo que había una motivación superior para intentar realizar el proyecto.

Viendo algunos tutoriales por internet pensé en cortar yo mismo las placas de aluminio partiendo de chapas compradas en alguna tienda de bricolaje. También vi la posibilidad de pedir por Internet las placas cortadas e empresas especializadas, pero por casualidades de la vida encontré una empresa local que trabaja mecanización y corte y que me suministraba placas cortadas según un fichero CAD a un precio mucho más que aceptable (aprox. 50€ por material para dos condensadores de diferente tamaño) y el trato ha sido fabuloso para la importancia nula de mi pedido en su ‘agenda’. Se trata de ‘Anfilaser’ , en Aznalcóllar (Sevilla).

Con estas placas, varillas roscadas, tuercas a montones, arandelas, una ‘tabla’ de cocina para soporte y algún pequeño material me puse a fabricar el condensador.

Ya solo quedaban los detalles de barras y piezas de soporte para crear un bloque, así como mejorar los contactos eléctricos, para ello hacía falta aumentar la superficie de contacto y asegurarlo cuando el eje central gire, para ello recurrí a una chapa de bronce para uso en electrónica y a un viejo condensadores ajustable.

Ya fijadas todas las partes y con la misma operación en la otra cara, tenemos que tener en cuenta como mover las placas con el eje de control, dado que el movimiento de estas placas será remoto es necesario disponer de un motor que realice esta función y que además esté aislado del condensador debido a las tensiones que operará, para ello realizamos un acoplamiento con piezas de un scanner viejo , un motor paso a paso y un trozo de tubo de PVC con cortes en espiral para compensar posibles desajustes de giro:

Para controlar el motor paso a paso de forma remota y no recurriendo al típico cable, se ha realizado un circuito basado en dos componentes muy económicos (de origen chino), un microcontrolador con capacidad WiFi y una controlador de motor paso a paso, de esta forma, el sistema solo requiere que le llegue la alimentación de 12 V.

Efectuado el montaje, el condensador presenta una capacidad variable que va de los 20 a los 190 pF.

Los módulos son el famoso ESP8286 y el DRV8825, a los que solo he tenido que añadir un regulador de tensión y algún condensador, nada más:

Con esto ya solo queda escribir el código que permita convertir al microcontrolador en un servidor Web conectado a mi red WiFi y que me permita mediante una página ajustar el condensador en la posición deseada desde un móvil o un ordenador.

 

Podría también gustarte...

16 Respuestas

  1. Giovanni dice:

    Buen dia un saludo.Necesito contactarte, estoy en Venezuela, es para construir un condensador variable y necesito favor me orientes. Saludos

  2. Pedro dice:

    Hola.
    Me gustaría ver el código para implementarlo en un sistema parecido que tengo en marcha.
    Saludos

    • gasensio dice:

      /*
      * ESP8266 NodeMCU AJAX
      * Updates and Gets data from webpage without page refresh
      */
      #include
      #include
      #include
      #include “index.h” //Our HTML webpage contents with javascripts

      #define IZQ LOW // Mirando desde el condensador, sentido de giro
      #define DCHA HIGH

      //SSID and Password of your WiFi router
      const char* ssid = “Micronica”; // your connection name
      const char* password = “123345678!”; // your connection password
      IPAddress ip(192,168,0,73);
      IPAddress gateway(192,168,0,1);
      IPAddress subnet(255,255,255,0);
      ESP8266WebServer server(80); //Server on port 80

      int dir_motor = 2; // D4 de nodemcu – DIR
      int step_motor = 14; // D5 de nodemcu – STEP
      int ena_motor = 12; // Inhabilitar corriente motor – Alto – Disable
      int pos_inicio = 13; // D7 de nodemcu – Fin carrera
      unsigned int ciclo = 0; // Límite para cada test de arco.
      unsigned int Pasos = 0; // Medir tamaño de arco en pasos
      int PosAct = 0;
      unsigned int error = 0;

      void paso(){
      digitalWrite(step_motor, HIGH);
      delay(10);
      digitalWrite(step_motor, LOW);
      delay(10);
      ESP.wdtFeed(); // Patear al perro
      }

      //————————————–//
      // Buscar posición de inicio del motor //
      //————————————–//
      bool busca_inicio(){
      ciclo=0;
      // Si está en inicio, detector de posición, salir de ahí
      if(digitalRead(pos_inicio)==LOW){ // Sacar el motor de la zona de Inicio
      digitalWrite(dir_motor, IZQ); // Dirección izquierda
      while( (digitalRead(pos_inicio)==LOW) and (ciclo < 100)){ paso(); // Dir XX ciclo++; } if(ciclo>99){ error = 1;} // No ha salido de la sombra o hay problema eléctrico.
      }
      //———————————————————————————-
      // Buscar posición de Inicio para calcular pasos totales
      ciclo=0;
      digitalWrite(dir_motor, DCHA); // Dirección derecha para buscar inicio
      while( (digitalRead(pos_inicio)==HIGH) and (ciclo < 4000)){ paso(); ciclo++; } // --------------------------------------------------------------------------------- Serial.print("a Inic:"); Serial.println(ciclo); // Si la vuelta a inicio es mayor de ??? dar error if(ciclo > 3999){ error = error|2;}
      // Buscar el giro completo hasta encontrar tope
      ciclo=4;
      digitalWrite(dir_motor, IZQ); // Dirección izquierda
      paso(); // Para sacarlo de la sombra
      paso();
      paso();
      paso();
      while( (digitalRead(pos_inicio)==HIGH) and (ciclo < 4000)){ paso(); ciclo++; } Serial.print("Pasos ciclo:"); Serial.println(ciclo); if(ciclo > 3999){ error = error|4;}
      // Volver a inicio sabiendo cuantos pasos hay que retorceder
      digitalWrite(dir_motor, DCHA); // Dirección derecha buscando inicio
      if(error==0){
      for (int i=ciclo; i>0; i–){
      paso();
      }
      }
      Serial.print(“Error:”);
      Serial.println(error);
      Pasos=ciclo/2;
      Serial.print(“Pasos:”);
      Serial.println(Pasos);
      // Si hay error devolver false
      if(error > 0){ return false; } else { return true;}
      }
      //————————————–//

      //===============================================================
      // This routine is executed when you open its IP in browser
      //===============================================================
      void handleRoot() {
      String s = MAIN_page; //Read HTML contents
      server.send(200, “text/html”, s); //Send web page
      }

      void readCAP() {
      int a = PosAct;
      String capValue = String(a);
      server.send(200, “text/plane”, capValue); //Send CAP value only to client ajax request
      }

      // Manejar la peticion de nuevo estado del capacitor sobre
      void handleCAP() {
      String capState = “OFF”;
      String t_state = server.arg(“CAPstate”); //Refer xhttp.open(“GET”, “setCAP?CAPstate=”+cap, true);
      Serial.println(t_state);
      if(t_state == “Max”){
      digitalWrite(dir_motor, DCHA);
      while(PosAct > 0){
      paso();
      PosAct–;
      }
      delay(100);
      }
      if(t_state == “Min”){
      digitalWrite(dir_motor, IZQ);
      while(PosAct < Pasos){ paso(); PosAct++; } delay(100); } if(t_state == "10"){ digitalWrite(dir_motor, DCHA); if(PosAct>5){
      paso();
      paso();
      paso();
      paso();
      paso();
      PosAct=PosAct-5;
      delay(100);
      }
      }
      if(t_state == “1”){
      digitalWrite(dir_motor, DCHA);
      if(PosAct>0){
      paso();
      PosAct–;
      delay(100);
      }
      }
      server.send(200, “text/plane”, capState); //Send web page
      }
      //==============================================================
      // SETUP
      //==============================================================
      void setup(void){
      // Mi SetUp
      // preparing GPIOs
      pinMode(dir_motor, OUTPUT);
      digitalWrite(dir_motor, LOW);
      pinMode(step_motor, OUTPUT);
      digitalWrite(step_motor, LOW);
      pinMode(ena_motor, OUTPUT);
      digitalWrite(ena_motor, LOW);
      // Entrada fin carrera
      pinMode(pos_inicio, INPUT);
      // digitalWrite(pos_inicio, LOW);
      delay(1000);
      Serial.begin(115200);
      Serial.println(“”);
      WiFi.mode(WIFI_STA);
      WiFi.hostname(“LoopAnt”); // DHCP Hostname (useful for finding device for static lease)
      WiFi.config(ip, gateway, subnet); // (DNS not required)
      WiFi.begin(ssid, password);

      // Wait for connection
      while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(“.”);
      }
      Serial.println(“”);
      Serial.print(“Connected to “);
      Serial.println(ssid);
      Serial.print(“IP address: “);
      Serial.println(WiFi.localIP());
      // Hasta aquí WiFi Start
      //– Perro guardian
      ESP.wdtDisable();
      ESP.wdtEnable(WDTO_8S);
      // Posicionar motor
      busca_inicio();
      // Web Server
      server.on(“/”, handleRoot);
      server.on(“/setCAP”, handleCAP);
      server.on(“/readCAP”, readCAP);
      server.begin(); //Start server
      Serial.println(“HTTP server started”);
      }

      //==============================================================
      // LOOP
      //==============================================================
      void loop(void){
      server.handleClient(); //Handle client requests
      }

      Este código no está muy depurado aún pero yo no tengo problema en usarlo para posicionar el condensador, a continuación te incluyo el código de la página:

      const char MAIN_page[] PROGMEM = R”=====(


      Magnetic Loop EA7EQQ






      CAP Value is : 0
      STP State is : NA



      )=====”;

      Espero que te sea útil.

  3. Hola , he hablado con Anfilaser y me piden el archivo Cad para poder hacer las piezas.
    Podrias fecilitarmelo.
    Gracias

  4. Miguel Fernández. EA7KPK dice:

    Buenas, me podrías facilitar el fichero CAD para las piezas. Muchas gracias. 73

  5. Victor LU9TAQ dice:

    Hola gasensio. El mismo pedido que los colegas anteriores. Podras enviar al correo los planos CAD? desde ya, muchas gracias . Saludos

  6. Murilo Almeida Py8ML dice:

    Boa noite. Seria possível enviar o código fonte (arduino) e arquivo CAD para confecção de peças e montagem do controlador? Me ajudaria muito! Obrigado

    • gasensio dice:

      Aquí está:

      /*
      * ESP8266 NodeMCU AJAX
      * Updates and Gets data from webpage without page refresh
      */
      #include
      #include
      #include
      #include “index.h” //Our HTML webpage contents with javascripts

      #define IZQ LOW // Mirando desde el condensador, sentido de giro
      #define DCHA HIGH

      //SSID and Password of your WiFi router
      const char* ssid = “Micronica”; // your connection name
      const char* password = “123345678!”; // your connection password
      IPAddress ip(192,168,0,73);
      IPAddress gateway(192,168,0,1);
      IPAddress subnet(255,255,255,0);
      ESP8266WebServer server(80); //Server on port 80

      int dir_motor = 2; // D4 de nodemcu – DIR
      int step_motor = 14; // D5 de nodemcu – STEP
      int ena_motor = 12; // Inhabilitar corriente motor – Alto – Disable
      int pos_inicio = 13; // D7 de nodemcu – Fin carrera
      unsigned int ciclo = 0; // Límite para cada test de arco.
      unsigned int Pasos = 0; // Medir tamaño de arco en pasos
      int PosAct = 0;
      unsigned int error = 0;

      void paso(){
      digitalWrite(step_motor, HIGH);
      delay(10);
      digitalWrite(step_motor, LOW);
      delay(10);
      ESP.wdtFeed(); // Patear al perro
      }

      //————————————–//
      // Buscar posición de inicio del motor //
      //————————————–//
      bool busca_inicio(){
      ciclo=0;
      // Si está en inicio, detector de posición, salir de ahí
      if(digitalRead(pos_inicio)==LOW){ // Sacar el motor de la zona de Inicio
      digitalWrite(dir_motor, IZQ); // Dirección izquierda
      while( (digitalRead(pos_inicio)==LOW) and (ciclo 99){ error = 1;} // No ha salido de la sombra o hay problema eléctrico.
      }
      //———————————————————————————-
      // Buscar posición de Inicio para calcular pasos totales
      ciclo=0;
      digitalWrite(dir_motor, DCHA); // Dirección derecha para buscar inicio
      while( (digitalRead(pos_inicio)==HIGH) and (ciclo 3999){ error = error|2;}
      // Buscar el giro completo hasta encontrar tope
      ciclo=4;
      digitalWrite(dir_motor, IZQ); // Dirección izquierda
      paso(); // Para sacarlo de la sombra
      paso();
      paso();
      paso();
      while( (digitalRead(pos_inicio)==HIGH) and (ciclo 3999){ error = error|4;}
      // Volver a inicio sabiendo cuantos pasos hay que retorceder
      digitalWrite(dir_motor, DCHA); // Dirección derecha buscando inicio
      if(error==0){
      for (int i=ciclo; i>0; i–){
      paso();
      }
      }
      Serial.print(“Error:”);
      Serial.println(error);
      Pasos=ciclo/2;
      Serial.print(“Pasos:”);
      Serial.println(Pasos);
      // Si hay error devolver false
      if(error > 0){ return false; } else { return true;}
      }
      //————————————–//

      //===============================================================
      // This routine is executed when you open its IP in browser
      //===============================================================
      void handleRoot() {
      String s = MAIN_page; //Read HTML contents
      server.send(200, “text/html”, s); //Send web page
      }

      void readCAP() {
      int a = PosAct;
      String capValue = String(a);
      server.send(200, “text/plane”, capValue); //Send CAP value only to client ajax request
      }

      // Manejar la peticion de nuevo estado del capacitor sobre
      void handleCAP() {
      String capState = “OFF”;
      String t_state = server.arg(“CAPstate”); //Refer xhttp.open(“GET”, “setCAP?CAPstate=”+cap, true);
      Serial.println(t_state);
      if(t_state == “Max”){
      digitalWrite(dir_motor, DCHA);
      while(PosAct > 0){
      paso();
      PosAct–;
      }
      delay(100);
      }
      if(t_state == “Min”){
      digitalWrite(dir_motor, IZQ);
      while(PosAct 5){
      paso();
      paso();
      paso();
      paso();
      paso();
      PosAct=PosAct-5;
      delay(100);
      }
      }
      if(t_state == “1”){
      digitalWrite(dir_motor, DCHA);
      if(PosAct>0){
      paso();
      PosAct–;
      delay(100);
      }
      }
      server.send(200, “text/plane”, capState); //Send web page
      }
      //==============================================================
      // SETUP
      //==============================================================
      void setup(void){
      // Mi SetUp
      // preparing GPIOs
      pinMode(dir_motor, OUTPUT);
      digitalWrite(dir_motor, LOW);
      pinMode(step_motor, OUTPUT);
      digitalWrite(step_motor, LOW);
      pinMode(ena_motor, OUTPUT);
      digitalWrite(ena_motor, LOW);
      // Entrada fin carrera
      pinMode(pos_inicio, INPUT);
      // digitalWrite(pos_inicio, LOW);
      delay(1000);
      Serial.begin(115200);
      Serial.println(“”);
      WiFi.mode(WIFI_STA);
      WiFi.hostname(“LoopAnt”); // DHCP Hostname (useful for finding device for static lease)
      WiFi.config(ip, gateway, subnet); // (DNS not required)
      WiFi.begin(ssid, password);

      // Wait for connection
      while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(“.”);
      }
      Serial.println(“”);
      Serial.print(“Connected to “);
      Serial.println(ssid);
      Serial.print(“IP address: “);
      Serial.println(WiFi.localIP());
      // Hasta aquí WiFi Start
      //– Perro guardian
      ESP.wdtDisable();
      ESP.wdtEnable(WDTO_8S);
      // Posicionar motor
      busca_inicio();
      // Web Server
      server.on(“/”, handleRoot);
      server.on(“/setCAP”, handleCAP);
      server.on(“/readCAP”, readCAP);
      server.begin(); //Start server
      Serial.println(“HTTP server started”);
      }

      //==============================================================
      // LOOP
      //==============================================================
      void loop(void){
      server.handleClient(); //Handle client requests
      }

    • gasensio dice:

      Enviado por email.

  7. Daniel Campos dice:

    Hola! Te agradeceria facilitar el archivo CAD de las placas

  8. Jose dice:

    Hola buenas,me podrías mandar el archivo CAD del condensador,gracias

Responder a gasensio Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *