Freelance Project Requests info@CodeDocu.de Software Development in C# WPF Asp.Net Core Vba Excel Word SQL-Server EF Linq, UWP Net
#

 

 

Only GPIO2 or GPIO4 is connected to the IN1 and Ground on GND of the optocoupler.

 

 

At the bottom of the Oszilloscop you can see the voltage-decoupled signal at the high-voltage voltage and MosFET circuits

 

The trick is to completely decouple the power supply for the MosFET and high voltage circuit and connect your own USB power supply

 

 

 

Test code for digital pulses to ESP32 WROOM 32, which can be remotely adjusted via a serial Bluetooth interface

 

//Steuerung in Mikrosekunden 0.1ms

 

#include "BluetoothSerial.h"

 

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)

#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it

#endif

 

BluetoothSerial SerialBT;  //Serial Bluetooth send and receive

const String sIDBluetooth = "ESP32 Impuls Steuerung";

 

//====< VARIABLES >====

//-< Setup: TM1638  >-

const uint8_t OFF = 0;

const uint8_t ON = 1;

 

//< Pulse >

long nHighCycles  = 100//*0,1 ms

long nLowCycles = 100;

long nImpulses = 1;

int nDeltaHIGH = 100;

int nDeltaLOW = 100;

int nDeltaImpulses = 1;

bool Run_Pulse_Block = false;

 

unsigned long time_Wait_OFF = 0;

const int TIME_OFF_MS = 1000;

 

//< GPIO >

int OUT_PIN = 2;

//</ GPIO >

 

//====</ VARIABLES >====




//=============< SETUP >============

void setup() {

  //--------< setup() >--------

 

  //< GPIO >

  pinMode(0, OUTPUT);

  pinMode(1, OUTPUT);

  pinMode(2, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(5, OUTPUT);

  digitalWrite(OUT_PIN, LOW);    // PULS_OFF DEFAULT

  //</ GPIO >

 

  Serial.begin(115200);

  Serial.println("\nPulswith CoreFusion Raimund Popp Microseconds");

 

  SerialBT.begin(sIDBluetooth); //Bluetooth device name

  Serial.println("Bluetooth startet. Please Pair to " + sIDBluetooth);

 

  //--------</ setup() >--------

}

//=============</ SETUP >============






//=================< Main_Loop >================

void loop() {

  //--------< Main Loop() >--------

  String SetCommand = "";

  //digitalWrite(OUT_PIN, LOW);    // PULS_OFF DEFAULT

  GPIO.out_w1tc = 0b11111;

 

  //----< read Bluetooth >----

  //*der Befehl kommt direkt als Text seriel an

  String BTCommand = "";

 

  // get command from smartphone

  if (SerialBT.available()) {

    BTCommand = SerialBT.readString();

    BTCommand.replace("\n""");

    int BTLength = BTCommand.length();

    BTCommand = BTCommand.substring(0, BTLength - 1);

    SetCommand = BTCommand;

    //Serial.println("BTCommand=" + BTCommand + " L=" + String(BTLength));

  }

  //----</ read Bluetooth >----



  //-------< SetCommands >-------

  if (SetCommand != "" )  {

    //----< Command ist vorhanden >----

    Serial.println("SetCommand:" + String(SetCommand));

 

    //< HIGH >

    if (SetCommand == "HIGH_DOWN") {

      nHighCycles = nHighCycles - nDeltaHIGH;

      nLowCycles = nHighCycles;

    }

    else if (SetCommand == "HIGH_UP") {

      if (nHighCycles == 1 && nDeltaHIGH > 1)

      {

        nHighCycles = nDeltaHIGH;

      }

      else

      {

        nHighCycles = nHighCycles + nDeltaHIGH;

      }

      nLowCycles = nHighCycles;

    }

    else if (SetCommand == "HIGH_01") {

      nDeltaHIGH = 100;

    }

    else if (SetCommand == "HIGH_05") {

      nDeltaHIGH = 500;

    }

    else if (SetCommand == "HIGH_1") {

      nDeltaHIGH = 1000;

    }

    else if (SetCommand == "HIGH_10") {

      nDeltaHIGH = 10000;

    }

    else if (SetCommand == "HIGH_100") {

      nDeltaHIGH = 100000;

    }

 

    //</ HIGH >

 

    //< LOW >

    else if (SetCommand == "LOW_UP") {

      nLowCycles = nLowCycles + nDeltaLOW;

    }

    else if (SetCommand == "LOW_DOWN") {

      nLowCycles = nLowCycles - nDeltaLOW;

    }

    else if (SetCommand == "LOW_1") {

      nDeltaLOW = 1000;

    }

    else if (SetCommand == "LOW_10") {

      nDeltaLOW = 10000;

    }

    else if (SetCommand == "LOW_100") {

      nDeltaLOW = 100000;

    }

 

    //</ LOW >

 

    //< IMPULSES >

    if (SetCommand == "IMP_DOWN") {

      nImpulses = nImpulses - nDeltaImpulses;

    }

    else if (SetCommand == "IMP_UP") {

      if (nImpulses == 1 && nDeltaImpulses > 1)

      {

        nImpulses = nDeltaImpulses;

      }

      else

      {

        nImpulses = nImpulses + nDeltaImpulses;

      }

    }

    else if (SetCommand == "IMP_1") {

      nDeltaImpulses = 1;

    }

    else if (SetCommand == "IMP_10") {

      nDeltaImpulses = 10;

    }

    else if (SetCommand == "IMP_100") {

      nDeltaImpulses = 100;

    }

    //</ IMPULSES >

 

    else if (SetCommand == "START") {

      Serial.println("#START") ;

      Run_Pulse_Block = true;

    }

    //Serial.println("#HIGH=" + String(nHighCycles)+ " LOW=" + String(nLowCycles) + " DELTA=" + String(nDeltaHIGH) ) ;

 

    //< Korrektur >

    if (nHighCycles < 100) nHighCycles = 100;

    if (nLowCycles < 100) nLowCycles = 100;

    if (nImpulses < 1) nImpulses = 1;

    if (nDeltaHIGH < 1) nDeltaHIGH = 1;

    if (nDeltaLOW < 1) nDeltaLOW = 1;

    if (nDeltaImpulses < 1) nDeltaImpulses = 1;

    //< Korrektur >

 

    //----</ Command ist vorhanden >----

  }

  //-------</ SetCommands >-------




  //-------< Signal OUT >-------

  //*Square Signal with n-times ON MosFET

 

  //----< ON_PULSE_BLOCK >----

  while (Run_Pulse_Block == true//1-Loop or if-endif

  {

    //------< @While: Run_Pulse_Block >------

    //Serial.println("Start Puls_Block");

    //----< @Loop: nPulses >----

    int nPulses = nImpulses;

    for (int iPulse = 0; iPulse < nPulses; iPulse++)

    {

      //--< @loop: HIGH-Cycles >--

      //BitMask

      //0b11111=GPIO 0, 1, 2, 3, 4,

      //0b00100=GPIO2

      //0b10000=GPIO4

      GPIO.out_w1ts = 0b11111//*all GPIO 0 to 4

      //digitalWrite(OUT_PIN, HIGH);

      delayMicroseconds(nHighCycles); 

      //--</ @loop: HIGH-Cycles >--

 

      //--< @loop: LOW-Cycles >--

      //PIN GPIO0->OFF

      GPIO.out_w1tc = 0b11111;

      //digitalWrite(OUT_PIN, LOW);

      delayMicroseconds(nLowCycles); 

      //--</ @loop: LOW-Cycles >--

    }

    //----</ @Loop: nPulses >----

 

    Run_Pulse_Block = false;

    //Serial.println("End Puls_Block");

    //------</ @While: Run_Pulse_Block >------

  }

 

  //digitalWrite(OUT_PIN, LOW);

  GPIO.out_w1tc = 0b11111;

  //-------</ Signal OUT >--------



  //< calculate >

  

  double dblMsHIGH=double(nHighCycles)/1000;

  double dblMsLOW=double(nLowCycles)/1000;

  double dblMsDeltaHIGH=double(nDeltaHIGH)/1000;

  double dblMsDeltaLOW=double(nDeltaLOW)/1000;

  

  String sMsHIGH=String(dblMsHIGH,1);

  String sMsLOW=String(dblMsLOW,1);

  String sMsDeltaHIGH=String(dblMsDeltaHIGH,1);

  String sMsDeltaLOW=String(dblMsDeltaLOW,1);

  //</ calculate >

 

    

 

  //----< Output: BT+Serial >----

  if (SetCommand != "" )

  {

    Serial.println("nHighCycles=" + String(nHighCycles));

    

    String sText0 = "HIGH=" + sMsHIGH  + "ms" + " LOW=" + sMsLOW ;

    SerialBT.println(sText0);

    String sText1 =   "IMPULSE=" + String(nImpulses)  +  " dI=" + String(nDeltaImpulses) + " dH=" + sMsDeltaHIGH + " dL=" + sMsDeltaLOW;

    SerialBT.println(sText1);

  }

  //----< Output: BT+Serial >----



  //=============</ Main_Loop >============

 

}

 

 

Mobile
»
Set Google Home
»
Google Chrome: Delete all bookmarks
»
Delete cookies for a Web page
»
Google chrome: massive crashes and problems since 2016
»
Chrome Error: Service Unavailable - Zero size object #OK
»
Error: Service Unavailable - Zero size object
»
Google Chrome stürzt sehr oft ab
»
Google Chrome stürzt sehr oft ab
»
Beim Start synchronisiert Google den Chrome Browser

.

Contact for Jobs, Project Requests: raimund.popp@microsoft-programmierer.de