Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Arduino ESP32 Anwendung: Variable Puls-Ansteuerung eines MosFETs

15.04.2020 (👁6812)

Arduino ESP32 Code: Variable Pulse erstellen mit

20 Pulse mit der vielfachen Länge von 150ns Nanosekunden (minimale GPIO Zeit bei Arduino/ESP32)

Anwendung:

Wie man hier sieht, wird ein ESP32 zum Erzeugen von sehr schnellen Impulsen verwendet.

Die Ansteuerung dient einer MosFet Schaltung als Steuersignal.

Über die Pins 12 bis 34 auf der oberen Seite wird die Pulslänge von 150ns auf 1-9 fache Länge geweitet auf cirka 1660ns was einer Frequenz von 0,60 MHz entspricht oder 600 Kilohertz

 

 

Der Code wurde im Arduino-IDE geschrieben

ESP32 nodeMCU anschluß

Auf der Entwicklerplatine ESP32 nodeMCU

Werden links die Versogungsspannung 5 Volt Vss und GND für die I2C Schnittstelle des LCDs verwendet.

Rechts wird der rote Block an GPIO-IN-Pins wahlweise gegen 3,3 Volt (ganz rechts) gewählt

LCD Display

Als Anzeige dient eine 16x2 LCD Anzeige welche über einen I2C Bus-Leitung (Master-Slave) angesprochen wird

I2C-Schnittstelle

Auf der Rückseite der LCD Displays ist die Schnittstelle schon vorgelötet

Hier muss nur die SCL, SDA, 5V VSS und GND richtig zur ESP32 nodeMCU Platine gezogen werden

Beispiel-Code

Arduino

/*Variable Puls Output with LCD */

#include <LiquidCrystal_I2C.h>

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

//< Setup: LCD >

int lcdColumns = 16;

int lcdRows = 2;

//LCD Adress on 0x27

LiquidCrystal_I2C lcd(0x27lcdColumnslcdRows);  

//</ Setup: LCD >

//< GPIO >

int OUT_PIN = 15;

int IN1=12;

int IN2=14;

int IN3=27;

int IN4=26;

int IN5=25;

int IN6=33;

int IN7=32;

int IN8=35;

int IN9=34;

//</ GPIO >

int min_Pulswidth_ns=166;

String lcd_Text="";

int actInput=0;

int lastInput=-1;

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

void setup(){

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

  //< GPIO >

  pinMode(OUT_PIN, OUTPUT);

  pinMode(IN1, INPUT); 

  pinMode(IN2, INPUT); 

  pinMode(IN3, INPUT); 

  pinMode(IN4, INPUT); 

  pinMode(IN5, INPUT); 

  pinMode(IN6, INPUT); 

  pinMode(IN7, INPUT); 

  pinMode(IN8, INPUT); 

  pinMode(IN9, INPUT); 

  //</ GPIO >

  

  // initialize LCD

  lcd.init();

  // turn on LCD backlight                      

  lcd.backlight();

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

}



void loop(){

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

  //--< Read IN >--

  long nHighCyles=0;

  int valIN =0;

  actInput=0;

  valIN=digitalRead(IN1);

  if(valIN>0){actInput=1;}

  valIN=digitalRead(IN2);

  if(valIN>0){actInput=2;}

  valIN=digitalRead(IN3);

  if(valIN>0){actInput=3;}

  valIN=digitalRead(IN4);

  if(valIN>0){actInput=4;}

  valIN=digitalRead(IN5);

  if(valIN>0){actInput=5;}

  valIN=digitalRead(IN6);

  if(valIN>0){actInput=6;}

  valIN=digitalRead(IN7);

  if(valIN>0){actInput=7;}

  valIN=digitalRead(IN8);

  if(valIN>0){actInput=8;}

  valIN=digitalRead(IN9);

  if(valIN>0){actInput=9;}

  //--</ Read IN >--

  nHighCyles=actInput+1;

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

  //*Square Signal with n-times ON

  //*short Impuls 1-20 ON=> 100ns-2us

  //1 x GPIO-Updae-Cycle=166ns nanoseconds

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

  int nPulses =20;

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

  {

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

    for(long iHIGH=0;iHIGH<nHighCyles;iHIGH++)

    {

      digitalWrite(OUT_PIN, HIGH);   //PULS_ON

    }

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

    

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

    for(long iHIGH=0;iHIGH<nHighCyles;iHIGH++)

    {

      //< OFF >

      digitalWrite(OUT_PIN, LOW);    // PULS_OFF

      //</ OFF >

    }

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

  }

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

  //*Service-Works in long Off-time

  //*long time

  delayMicroseconds(100);              // wait for a second

  //--< OFF-Signal >--

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

  

  //< calculate >

  String lcd_Text0= "Pulswidth Frequency:";

  

  long nsPulswidth=0;

  nsPulswidth = nHighCyles * min_Pulswidth_ns;

  float frequency= float1000.0 / nsPulswidth );

  

  String lcd_Text1= String("") + String(nsPulswidth)  + " ns " + String(frequency) + " MHz" ;

  //</ calculate >

  

  //----< LCD Output >----

  if (actInput != lastInput)

  {

    //save lcd

    lastInput=actInput;

    

    //< display info on LCD >

    lcd.clear(); 

    int row0=0;

    int row1=1;

    int col0=0;

    int col1=0;

  

    

    lcd.setCursor(col0, row0);

    lcd.print(lcd_Text0);

    lcd.setCursor(col0,row1);

    lcd.print(lcd_Text1);

    //</ display info on LCD >

  }

  //----</ LCD Output >----

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

}