- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 10 von 11 ErsteErste ... 891011 LetzteLetzte
Ergebnis 91 bis 100 von 104

Thema: Ultraschall - Entfernunsmessung mit Ultraschall Interface aus RN

  1. #91
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Zitat Zitat von Besserwessi
    Da sollte man das Hochzählen auch in ASM machen. z.B. mit
    LDS R16, {Timer0_overflows}
    SUBI R16, 255
    STS {Timer0_overflows},R16
    LDS R16, {Timer0_overflows}+1
    SBCI R16, 255
    STS {Timer0_overflows}+1,R16
    Danke für den Code. Hab ich gleich mal ausprobiert und "Timer0_overflows = Timer0_overflows + 1" durch alle ASM Befehle ersetzt ,da bei mir eine Word Variable. Hat nochmal eine µs gebracht. Lücke jetzt noch 4µs.

    PS nach weiterem Tasten und Messen 3µs Lücke

    EDIT
    Echt stark, was Inline ASM bringt. Habe nun die Timer0_overflows Variable auf Typ Byte geändert. Damit kann sie eine Zeit bis ca 65ms abdecken, was hier für die US Messung mehr als genug wäre.

    Die ganz neue ISR sieht nun so aus:

    Code:
    On Timer0 Isr_count_overflows Nosave
    
    Isr_count_overflows:                    'Ansprung, wenn Timer0 überläuft
      !push r16
      !in r16,sreg
      !Push r16
      !lds R16 , {timer0_overflows}
      !SUBI R16, 255
      !STS {Timer0_overflows},R16
      !pop r16
      !out sreg,r16
      !pop r16
    Return
    Wenn ich nun meinen eigenen Tests trauen darf, liegt die Lücke bei nur noch bei 2µs. Die Simulation ist so eingestellt, daß 10 Überläufe auftreten. Nicht angezeigte Werte sind 2568µs und 2569µs. Anmerkung: ASM Code nur durch C&P entstanden.


    Gruß
    Searcher
    Geändert von Searcher (03.09.2011 um 09:34 Uhr) Grund: ISR zum Timerüberlauf nochmal optimiert
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #92
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Schaltung selber sollte deutlich weniger Strom Verbrauchen, zumindest nach dem Schaltplan. Da wird viel von den 20 mA für den AVR und den 7805 verbraucht werden. Wenn die Schaltung nicht aktiv ist sollte man deutlich unter 1 mA kommen können (ohne den µC). Die größte Unsicherheit ist dabei das CMOS gatter hinter dem letzten Transistor. Je nach Einstellung der Schwelle kann da ein mittlerer Pegel anliegen und das Gatter dahinter ggf. etwas mehr Strom brauchen.

    Beim Senden braucht man kurz mehr Strom - auch auch da kaum 20 mA, beim Empfangen wird man vielleicht auch 1-3 mA kommen.

    In einer Spar-Version ohne den analogen Ausgang könnte man auch auf die Gatter verzichten und den 220 K Widerstand für die Rampe immer an 5 V haben. Die Funktion des Flipflops sollte der µC mit übernehmen können, ggf. auch gleich mit dem analog Comperator des µC, so dass man auch mit 1 Transistor auskommt. Damit sollte man im inaktiven Bereich auf einen Stromverbrauch von ca. 50 µA kommen und vielleicht 1 mA beim Empfangen.

  3. #93
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Ich möchte die ganze möglichst vereinfachte Schaltung nur für Erkennung eventuellen Hindernises vom µC kurz einschalten und brauche eigentlich keine Messungen. Deshalb gefällt sie mir sehr !
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  4. #94
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562

    Zusammenfassung Ultraschall Entfernungsmessung

    Hallo allerseits,

    ich habe jetzt doch Lust bekommen, eine zusammenfassung zu schreiben und somit fange ich einmal an:

    Anfangs habe ich viele Versuche und Tests mit Operationsverstärkern durchgeführt, bis ich dann am Ende, als es mittels LF353 so einigermaßen funktioniert hat, draufgekommen bin, dass ich eine Verstärkung brauche, die sich mit der Laufzeit des Signals erhöht. Ich bin dann dank einem Roboternetzbenutzer auf das Ultraschall - Interface von Manf gestoßen, das mir eigentlich gut gefallen hat.

    Als Sende - und Empfangswandler benutze ich die aus einem Bausatz von Conrad, diesem hier.


    Grundsätzliches Funktionsprinzip:
    Der Mikroprozessor erzeugt 20 Perioden mit einer Frequenz von 40kHz, der Resonanzfrequenz der Wandler.
    Dieses Singal gelangt über Start In in das Interface.
    Dort wird mit diesem Signal der Sendewandler betrieben, die Rampe gestartet und das Flipflop gestellt.
    Unmittelbar nach dem Senden des Bursts, also der 20 Perioden beginnt der AVR, die Zeit zu stoppen. Dazu wird der Timer0 benutzt.
    Trifft nun das Echo ein, so wird es vom Empfangswandler in eine Wechselspannung "verwandelt". Da diese sehr schwach ist, wird sie duch die Eingangsverstärkung verstärkt und setzt das Flipflop wieder zurück.
    Der AVR bemerkt die Zurücksetzung des Flipflops per Interrupt und stoppt den Timer.
    Danach wird wird die Zeit ausgewertetet, in cm umgerechnet und ausgegeben.


    Das messen der Laufzeitverzögernung übernimmt ein ATmega48, obwohl der dafür ein bisschen überdimensioniert ist.
    Als ein großes Problem Stellte sich die Verstärkung heraus, als Lösung wurde eine dritte Transistor Verstärkterstufe eingebaut.
    Auch wurden Störunen durch die Betriebsspannung übertragen, so wurde diese mittels 220uF Kondensatoren gestützt.

    Empfehlenswert ist es auch, eine veränderbare Induktivität einzuplanen, um den Schwingkreis eventuell abstimmen zu können, da die Resonanzfrequenz nicht unbedingt mit der berechneten übereinstimmt. (Bei mir zumindest nicht genau)

    Die Vollständige und für meinen Fall optimierte Schaltung hier:


    Klicke auf die Grafik für eine größere Ansicht

Name:	Ultraschall_Entfernungsmessung_schaltplan..jpg
Hits:	44
Größe:	21,4 KB
ID:	19873
    EDIT: So ein Blödsinn, das Bild wird automatisch komprimiert, und so kann man die Bauteilwerte nicht mehr lesen.
    Hier noch einmal hochgeladen, da sollte die Auflösung passen.

    Hier noch ein Paar weitere Biler vom aufbau des Modules:
    Klicke auf die Grafik für eine größere Ansicht

Name:	Vorne.jpg
Hits:	42
Größe:	72,7 KB
ID:	19867
    Klicke auf die Grafik für eine größere Ansicht

Name:	Seite.jpg
Hits:	40
Größe:	50,1 KB
ID:	19869
    Klicke auf die Grafik für eine größere Ansicht

Name:	Hinten_AVR.jpg
Hits:	41
Größe:	64,5 KB
ID:	19868

    Soweit die Hardware.
    Auch die Software hat einige Untstimmigkeiten mit sich gebracht, so ist die Erzeugung des Bursts, der in Start in geht, nun etwas unkonventionell gelöst, aber es funktioniert.
    Die ISR ´s dürfen nicht zu lange sein, so zum Beispiel kein Print oder ähnliches, wie ich es ursprünglich gemacht habe.

    Das Komplette Programm, das auf dem Mega48 läuft, hier:
    Code:
     
    'Ultraschall Entfernungsmessung messprogramm
    '              endgültige version
    $regfile "M48def.dat"
    $crystal = 1000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    $baud = 2400
    Dim Endtime As Long                                         'die entgültige zeitin us
    Dim Countperoverflow As Integer                             'dieOverflows des Timer0 werden hier gezählt
    Dim Struser As String * 10                                  'die Eingabevariable des Users
    Dim Countperiodes As Byte                                   'die Perioden des Us bursts werden gezählt
    Dim Timerstand As Byte                                      'der stand des Timers beim Überlauf
    Dim Ausgabefertig As Byte                                   'flag wird gesetzt, wenn die Zeitmessung erfolgt hat
    Dim Entfernung As Word
    '##########  timer0 Kofigurieren und Initialisieren   ##################
    Config Timer0 = Timer , Prescale = 1
    On Timer0 Isrtimer
    Enable Timer0
    Stop Timer0
    '#######################################################################
    'Int0 Konfigurieren
    Config Int0 = Rising
    Enable Int0
    On Int0 Isr_interrupt
    'portd.3 als ausgang definieren, das ist der Start in Pin
    Config Portd.3 = Output
    Portd.3 = 1
    
    'Alle variablen auf null setzen.
    Endtime = 0
    Countperoverflow = 0
    Struser = "sd"
    Countperiodes = 0
    Timerstand = 0
    Ausgabefertig = 0
    Print "Ultraschall Entfernungsmessung Online"
    Do
    Input Struser
    If Struser = "" Then
    '################# den Sendebrust generieren +++++++++
    Countperiodes = 0
    Do
    Portd.3 = 0                                                 'man kommt so genau auf 40khz
    Countperiodes = Countperiodes + 2
    
    Portd.3 = 1
    Countperiodes = Countperiodes - 1
    
    Loop Until Countperiodes > 20
    Countperiodes = 0
    Portd.3 = 1
    '######################################################
    
    Enable Interrupts                                           'interrupts global aktivieren
    Start Timer0                                                'timer starten, as stoppen der zeit beginnt jetzt
    Timer0 = 0                                                  'timer auf null setzen, dass die messung auch wirklich bei null beginnt
                                                                  'variable verändern, dass nicht noch mal in die Schleife
    Struser = "sd"
    End If
    If Ausgabefertig = 1 Then                                   'Wenn die Fertig flag gesetzt wurde
    Entfernung = Endtime / 60                                   '  Umrchnung in cm
    Entfernung = Entfernung + 10                                '   auf grund von Kalibrierung nutwendig, kann angepasst werden
    Print Entfernung                                            '  Entfernung ausgeben (per UART)
    Timer0 = 0
    Timerstand = 0                                              'Alle Variablen wieder auf null setzen
    Endtime = 0
    Countperoverflow = 0
    Ausgabefertig = 0
    Entfernung = 0
    End If
    Loop
    
    '###############TimerIsR##################
    Isrtimer:
    Countperoverflow = Countperoverflow + 1                     'die timerüberläufe zählen
    Return
    '#########################################
    
    '######### Interrupt isr################
    Isr_interrupt:
    Stop Timer0                                                 'beim eintreffen der messung Timer stoppen
    Timerstand = Timer0                                         'derzeitigen timerstand in Variable sichern
                                                                 'Die Endtime in us ausrechnen
    Endtime = Countperoverflow * 256
    Endtime = Endtime + Timerstand
    
    Disable Interrupts                                          'interrupts global deaktivieren, um eventuelle Störungen zwischen den pausen zu ignorieren
    Ausgabefertig = 1                                           'die Flag setzen, dass die cm ausgegeben werden
    Return
    '############  End Programm ###############################################
    Sonst: da die verstärkung nun schon sehr groß ist, werden manchmal auch echos von gegenständen, die nicht direkt in einer Linie mit den Kapseln stehen, empfangen und registriert. Für mich stellt dies aber kein Problem dar.

    Die Ergebnisse enthalten (in meinem Falle) eine Maximale abweichung von 3cm, aber nicht sehr oft.

    Viel Glück jedem, der auch einmal versuchen sollte, solch eine Entfernungsmessung zu realisieren!

    Mfg Thegon
    Geändert von Thegon (02.09.2011 um 20:16 Uhr) Grund: Schaltplan unleserlich

  5. #95
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.060
    Meinen Glückwunsch zum erfolgreichen Abschluß, Du hast Dich da prima durchgearbeitet. Ich hätte manchmal gerne mehr geholfen nur kam ich in den letzten Tagen nicht richtig dazu. Und natürlich hat Besserwessi ja auch die guten Antworten schon so schnell gegeben dass mir kaum Gelegenheit dazu blieb.

  6. #96
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Beim Programm sind da noch ein Kleinigkeiten nicht optimal:
    Das Disable Interrupts in der ISR sollte keinen Effekt haben. In der ISR sind weitere Interrupts ohnehin gesperrt. Am Ende der ISR werden die Interrupts wieder freigeben. Die Timer= Überlauf ISR ist recht langsam und verursacht damit eine leicht störende Pause - daher die Häufung von bestimmten Werten. Dazu kann es bei der Berücksichtigung der Zahl der Überläufe noch zu einem Problem kommen wenn beide Interrupts fast gleichzeitig auftreten. Das kommt eher selten vor, kann aber passieren und dann einen deutlichen Fehler verursachen.
    Besser wäre es die Zeitmessung mit dem 16 Bit Timer1 zu machen, oder ganz ohne Interrupt einfach in einer Zählschleife im Hauptprogramm.

  7. #97
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562
    Hallo
    @Manf:
    Danke Ich finde, du hast mir sehr viel geholfen, denn es ist immer gut, wenn der Macher der Schaltung selbst Hilfestellungen gibt.

    @ Besserwessi:
    Danke natürlich auch, die verbesserungsvorschläge wären sicherlich sinnvoll, aber ich denke, ich spare mir das, weil das Modul garnicht dazu gedacht war, genaue Entfernungen zu messen, sondern eben als Hindernisserkennung, also um villeicht eine Wand ungefähr zu erkennen und dann umzudrehen oder so. Das ganze soll einmal so eine Art "Radarbildschirm" werden, auf der die Unmittelbare Umgebung von villeicht 2m drauf ist oder so.

    Mfg Thegon

  8. #98
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von Thegon Beitrag anzeigen
    Hallo
    @Manf:
    Danke Ich finde, du hast mir sehr viel geholfen, denn es ist immer gut, wenn der Macher der Schaltung selbst Hilfestellungen gibt.

    @ Besserwessi:
    Danke natürlich auch, die verbesserungsvorschläge wären sicherlich sinnvoll, aber ich denke, ich spare mir das, weil das Modul garnicht dazu gedacht war, genaue Entfernungen zu messen, sondern eben als Hindernisserkennung, also um villeicht eine Wand ungefähr zu erkennen und dann umzudrehen oder so. Das ganze soll einmal so eine Art "Radarbildschirm" werden, auf der die Unmittelbare Umgebung von villeicht 2m drauf ist oder so.

    Mfg Thegon
    Ich habe je fleißig mit gelesen weil es Spaß macht zu sehen wie jemand sich an das Problem heran tastet. Respekt! das hast Du gut gemacht.
    Aber wenn es darum geht schnell einfach und effektiv Hindernnisse + relativ deren Entfernung zu ermitteln ist z. B. ein SRF02 "einfacher" einzubinden.

    Gruß Richard

  9. #99
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562
    Zitat Zitat von Richard Beitrag anzeigen
    Aber wenn es darum geht schnell einfach und effektiv Hindernnisse + relativ deren Entfernung zu ermitteln ist z. B. ein SRF02 "einfacher" einzubinden.
    ja sicherlich, ich habe mich auch vorher schon umgeschaut und über die Anschaffung eines SRF02 nachgedacht, aber irgentwie wollte ich es eben unbedingt selbst zusammenbasteln.
    Wären alle meine Versuche gescheitert, hätte ich vermutlich auch ein SRF02 oder ähnliches gekauft

    Sonst: Danke für das Lob *stolz*

    Mfg Thegon

  10. #100
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich finde solche Projekte auch immer sehr interessant und für mich lehrreich. Und wenn's dann am Ende auch noch funktioniert ist das echt ein Grund stolz zu sein. Was mich dabei oft sehr beeindrukt ist das Zusammenwirken der unterschiedlichsten Fachbereiche und der jeweiligen Spezialisten hier im RN-Forum.

    Da jetzt ja alles funktioniert wäre für mich noch ein Vergleich mit der schon erwähnten einfachen Zählschleife anstelle der Interruptlösung interessant. ;)

    Gruß

    mic

    P.S.: Vielleicht bringen wir doch noch irgendwann einen RN-Bot auf den Mars. :)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 10 von 11 ErsteErste ... 891011 LetzteLetzte

Ähnliche Themen

  1. Ultraschall-Interface
    Von e_f1986 im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 06.01.2008, 11:35
  2. Ultraschall Interface Problem
    Von NemesisoD im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 29.03.2007, 12:26
  3. Ultraschall-Interface will nicht...!
    Von BASTIUniversal im Forum Sensoren / Sensorik
    Antworten: 29
    Letzter Beitrag: 14.09.2006, 18:55
  4. Ultraschall Interface
    Von Eddi1984 im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 11.08.2006, 17:53
  5. Grundlagen Ultraschall Interface mit Analogausgang
    Von Manf im Forum Artikel / Testberichte / Produktvorstellungen /Grundlagen
    Antworten: 0
    Letzter Beitrag: 13.12.2004, 22:50

Berechtigungen

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

LiFePO4 Speicher Test