- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: Ultraschallwandler ansteuern

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Anzeige

    Praxistest und DIY Projekte
    und wenn man wie im wiki-bild reflexiv misst, könnte man sogar beide verfahren machen, aber bei dem aufbau ist der messhub mikrig, lieber direkt in strömungsrichtung messen oder im spitzen winkel
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  2. #12

    1MHz mit Arduino: So gehts!

    Hallo Hans,
    per Ultraschall ist das Laufzeitverfahren das einzig Mögliche. Das hast Du schon richtig gewählt.
    @Alle Anderen
    Doppler ist quatsch, denn es wird ja kein Schall vom Partikel zum einleitenden Transceiver zurück reflektiert. Doppler geht nur, wenn Sender und Empfänger am selben Ort lokalisiert ist und das zu messende Partikel sich (idealen Fall) im Längsabstand dazu bewegt. Im Laufzeitdifferenzverfahren, mit in Strömungsrichtung versetzten Transceivern, tritt der Dopplereffekt natürlich auch ein. Dummerweise aber spiegelbildlich. Denn die Frequenzverschiebung bei Schalleinleitung des Senders hebt sich spiegelbildlich bei der Ausleitung in den Empfänger wieder auf.

    Und jetzt konstruktiv weiter...
    Die Frequenzerzeugung sollte mit einem Arduino gut gehen. Der normale UNO, oder Nano mit 16MHz Takt hat 3 Timer, wobei Timer0 für einfaches Timing mittels millis() usw. verwendet wird. Timer1 (16Bit) und 2 (8Bit) stehen zur freien Verfügung. Und ein MHz steht im geradzahligen Verhältnis zu 16MHz. Ich würde Timer1 im CTC Verfahren verwenden, weil Timer1 zusätzlich über ein Input Capture Register verfügt. Grundsätzlich, während ein Timer hochzählt, zählt er von BOTTOM (=0) entweder bis zu MAX (0xFF bei 8Bit und 0xFFFF bei 16Bit), läuft über und beginnt von vorne. Es sei denn, es gibt einen Vergleich mit einem Registerwert kleiner als TOP. Dieser Wert nennt sich dann MAX. Bei Timer1 eignen sich dazu 3 Register: OCR1A, OCR1B und ICR1. Wobei OCR1A und OCR1B jeweils den Ausgangspins OC1A = D9 und OC1B = D10 zugeordnet sind. In den Registern TCCR1A und TCCR1B (Datsheet) befinden sich mehrer WGM- und COM-Bits .


    1. Interrupts ausschalten: cli();
    2. Register zurücksetzen: TCCR1A = 0;m TCCR1B = 0; TIMSK1 = 0;
    3. Prescaler mittels CS10 Bit auf 1 setzen, damit im 16MHz (62,5ns) Takt gezählt wird. 8 x 62,5ns = 500ns = 1 eine Halbwelle von 1MHz.
      TCCR1B |= (1<<CS10);
    4. Mit den WGMs bestimmst Du den Timermode (Hier 4 oder 12) und welches Register für TOP herangezogen wird (Hier OCR1A, oder ICR1).
      TCCR1B |= (1 << WGM12); // Mode 4 = CTC => OCR1A sets TOP
    5. Verhalten des Ausgangspins auf toggle setzen
      TCCR1A |= (1 << COM1A0); //Toggle OC1A
    6. Counter Zählregister auf 0 setzen.
      TCNT1 = 0;
    7. OCR1A auf TOP setzen
      OCR1A = 7; //0-7 = 8 Takte => 1MHz
    8. Interrupts scharf schalten
      sei()


    Anschließend kommt aus Pin D9 des Arduino 1MHz, egal was in Deinem Hauptprogramm läuft. Gehe mal auf die Webseiten von Nick Gammon. Da gibts viele gute Beispiele.

    Hab den Code getestet.
    ---
    Eine Frage, was kostet der Ultraschalltransceiver? Und welche Bezugsquelle und Lieferzeit?
    Und vlt noch, hast Du ein Datenblatt mit der Sendeschalleistung und welche Spannung (VSS) er sehen will?
    Es gibt diese Bridge-Motor-Driver ICs ULN...irgendwas. Die können größere Spannungen bis über 100kHz treiben. Ob 1MHz geht, weiß ich nicht.

    Viel Grüße und Erfolg bei der Umsetzung, Rainer

    Code:
    //############ Code Begin ##############
    //Timer1. Variable Square-Wave-Generator
    //Objective: Use CTC Mode. OCR1A sets TOP
    
    uint16_t TOP = 7;
    
    void setup() {
      Serial.begin(115200);
      pinMode(9, OUTPUT);//Signal output
      //pinMode(10, OUTPUT);
      cli();
      TCCR1A = 0; //Reset the register
      TCCR1A |= (1 << COM1A0); //Toggle OC1A
    
      TCCR1B = 0; //Reset the register
      TCCR1B |= (1 << CS10); // Prescaler = 1
      TCCR1B |= (1 << WGM12); // Mode 4 = CTC => OCR1A sets TOP
    
      TCNT1 = 0;
    
      OCR1A = TOP;//Set output Compare Register. OCR1A defines TOP;
    
      sei();
      Serial.println("1MHz Beep running...");
    }
    
    void loop() {
      
    }
    //############ Code End ##############

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Ultraschallwandler
    Von HansP im Forum Sensoren / Sensorik
    Antworten: 13
    Letzter Beitrag: 10.03.2019, 16:00
  2. Hitzeresistente Ultraschallwandler
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 02.05.2017, 09:40
  3. VFD ansteuern
    Von Janigut im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 22.11.2010, 20:35
  4. Suche Ersatzschaltbild für Ultraschallwandler
    Von H.A.R.R.Y. im Forum Sensoren / Sensorik
    Antworten: 53
    Letzter Beitrag: 03.12.2007, 13:18
  5. LCD ansteuern
    Von Z80 im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 12.07.2005, 12:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress