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
»
Switch with ESP32 MosFET and high voltages with optocoupler
»
Solved: conversion from void to non-scalar type String requested bei String.replace und toLowerCase
»
Arduino Code: Declare an Enum Type, a Variable and Compare it
»
Connect ESP32 to Bluetooth, work and write and read commands
»
Solved: LCD shows strange signs on ESP32
»
Arduino : switch case

.

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