hallo im forum
habe mir eine schaltung sender/empfänger für ultraschall
zusammgebastelt, funktioniert auch ganz gut.
nun zum problem, irgendwie steh ich bei der sofware auf dem schlauch,
setze timer0 vom tin2313 (20MHz) ein und weiss das der schall bei 340m/s
rund 29,4µs braucht für 1cm.
(angestrebte genauigkeit sollte 1cm sein optimieren kann man immer noch)
also routine so geschrieben das der timer bei 29,4µs einen int generiert
und dann immer plus 1 rechnet, im studio getestet ja so gehts.
leider sind die empfangenen werte bisschen komisch denn ergebniss ist
47m 50cm, 50cm haut auch hin aber die 47m frage ich mich wo die
herrkommen???
was sollte/muss unbedingt bei dem programm noch beachtet werden????
Seh ich das richtig:
Am PORTD, Pin 5 hängt der Sender. Sobald der Pin auf 0 geht, fängt
der zu senden an
Am PORTD, Pin 6 hängt der Empfänger. Sobald der etwas empfängt, geht
der Pin auf 0
PS: Du machst es einem nicht gerade leicht den Code zu verfolgen.
Wie stellst du eigentlich den Messwert fest?
Ich würde auf jeden Fall mal das 0-setzen der Variablen vor den ersten
Puls ziehen und nicht danach und mich nicht darauf verlassen, dass das
alles beim Power-On des Prozessors schon 0 sein wird.
ja genauso funktioniert
pull-ups hab ich auch schon drüber nachgedacht habs ausprobiert und es
gab dort kein unterschied
ist dieser ansatz denn so realisierbar oder suboptimal????
ähm die ganzen ausgaberoutinen hab ich weggelassen damit die übericht
bisschen besser wird aber was meinst du mit:
"Du machst es einem nicht gerade leicht den Code zu verfolgen."
den messwert stell ich anhand der zeit fest:
start -> timervorbereiten -> signal senden und tccr0b setzen ->
timer läuft (29,4-30µs) -> nach dieser Zeit ein interrupt ->
dann zeit neu laden
in der routine
+1 was gleich 1cm ist
pind6 weiter pollen warten bis gesetzt
pind6 gesetzt dann zu stopp springen
werte auslesen ausgabe 10s warten
rjmp start
hoffe das es jetzt ein wenig verständlich ist
chris schrieb:
> ja genauso funktioniert> pull-ups hab ich auch schon drüber nachgedacht habs ausprobiert und es> gab dort kein unterschied
Hast du schon mal mit einem Oszi die Zeit zwischen Sender-Statr und
Empfänger-Echo ausgemessen?
> ist dieser ansatz denn so realisierbar oder suboptimal????
Sieht für mich nicht so schlecht aus.
> "Du machst es einem nicht gerade leicht den Code zu verfolgen."
Ich werd zb. jetzt nicht die Konfigurationsbist auseinanderpfriemeln um
zu sehen wie du deinen Timer/Interrupt konfigurierst.
Du verwendest an manchen Stellen Hex Zahlen, bei denen ich mich
minutenlang gefragt habe, was das eigentlich soll. Zb in der ISR
vergleichst du cm mit $64. Ich hab mich jetzt gefragt was das soll, was
ist die spezielle Bedeutung von $64? Draufgekommen bin ich erst im
Nachhinein, beim weiteren Analysieren. Du zählst cm und m getrennt.
Warum schreibst du das dann nicht einfach
cpi temp0, 100 ; 100 cm sind ein Meter
und gibst damit einen Hinweis an den Leser was hier passiert.
Die Subroutine ganz unten, wer braucht die? Niemand, wenn du den
Timer-Konfigurier und Startcode an die Aufrufstelle gleich einfügst,
muss man beim lesen nicht im Hinterkopf halten, woher das jetzt
aufgerufen wurde, welche Bedeutung das hat, den Code absuchen, obs noch
wo einen 2.ten Aufruf gibt. etc.
Auch hat sich der Messcode, beginnend mit dem Setzen des Senders und
Abbruch durch den Empfänger, als zentrale Stelle der eigentlichen
Messung eine etwas bessere optische Hervorhebung verdient. Alles andere
ist nur Geplänkel rundherum, aber dort ist das Herz deines Programmes.
So hab ich erst mal den Code 3 mal rauf/runterscrollen müssen, um zu
finden, wo denn eigentlich die Messung abläuft.
Vor diesem Herz sollten alle gemessenen Variablen auf 0 gesetzt werden,
danach kommt die Auswertung. Das wär zumindest für mich logisch. Bei dir
muss ich 3 mal rumscrollen um rauszufinden ob die Variablen überhaupt
auf 0 gesetzt werden.
etc. etc.
PS: Das erklärt zwar nicht die 40m, aber ich kann deine Berechnung nicht
wirklich nachvollziehen.
20000000/8/256 = 9765. Kehrwert davon 0.0001024 Sekunden. In diesen
Zeitabständen wird der Timeroverflow aufgerufen. Wie kommst du auf
29,4µs?
ja gut ist ein wenig eigensinnig der code aber hinweise zur kenntnis
genommen :-)
geg:
f=20Mhz
Teiler=8 im tiny im tccr0b einstellbar durch $02 oder 2, pdf tiny2313
S.111
bits=74
gleichung um timer vorzuladen
1/(f/T/bit) = 1/(20Mhz/8/74) = 29,6µs -> 256-74 = 182 muss im tcnt0
stehen
Stimmt denn deine Taktfrequenz? in deinem Code gibst du ganz oben an,
dass die CPU auf 4Mhz läuft. Und hier in deinen Angaben sagst du dass du
20Mhz verwendest.
wie lange brauchen die piezoelemente bis sie ein/ausgeschwungen haben???
im datenblatt von ust40r/t ist leider nichts drüber zufinden
bei den leuten von roboternetz habe ich das ein oder andere gelesen,
dass die erst senden(2,5ms) und nach 1,25ms den timer setzen da das
übersprechen wohl sehr stark ist und nach der hälfte der zeit die
amplitude so schwach ist das jetzt erst nach dem schall detektiert wird.
ja gut leute denn kann ich ertsmal davon ausgehen das die software zwar
den ein oder anderen fehler hat aber nichts dramatisches
danke für die hilfe und einen schönen pfingstsonntag noch
gruss chris
Hallo Leute,
nach dem ihr mir den ein oder anderen Tip gegeben habt läuft die
Software + Hardware schon recht gut, nun hab ich aber doch noch ein paar
Fragen:
1. Sollte das Tastverhältnis 50:50 sein oder kann auch tan=30: taus=70
sein???(40Khz)
2. zu Testzwecken teste ich die Schaltung erstmal frei im Raum mit einer
Pausenzeit zur nächsten Messung von 3s.
Wie entscheidend ist die Fläche auf die das Signal trifft??
Im Moment 400x150x15mm Aluplatte.
3. Leider habe ich eine Abweichung bei 40cm gemessen 50-55cm
bei 60cm schwankt der Wert so von 76cm-96cm
Was könnte dort die Ursache sein oder sollte der Test nur im Rohr
durvchgeführt werden???
chris schrieb:
> 1. Sollte das Tastverhältnis 50:50 sein oder kann auch tan=30: taus=70> sein???(40Khz)
Das sollte schon 50:50 sein. Du bringst doch mit dem Strom einen Piezo
zum schwingen und der will vorzugsweise sinusförmig schwingen. Warum
willst Du es überhaupt ändern?
> 2. zu Testzwecken teste ich die Schaltung erstmal frei im Raum mit einer> Pausenzeit zur nächsten Messung von 3s.> Wie entscheidend ist die Fläche auf die das Signal trifft??> Im Moment 400x150x15mm Aluplatte.
Das sollte schon reichen.
> 3. Leider habe ich eine Abweichung bei 40cm gemessen 50-55cm> bei 60cm schwankt der Wert so von 76cm-96cm> Was könnte dort die Ursache sein oder sollte der Test nur im Rohr> durvchgeführt werden???
Sowohl der Sender als auch der Empfänger schwingen langsam ein. Das
dauert mehrere Wellenzüge bis die die volle Amplitude erreichen. Dein
Empfänger wird typischerweise irgendwo mittendrin (nachdem schon die
ersten paar schwachen Wellen empfangen wurden) entscheiden, dass das
Signal jetzt stark genug ist und erst dann ein Signal an den µC geben
(evtl. passiert das auch durch die Schwelle des Timer-Eingangs). Wenn
das Signal nun einmal stärker und einmal schwächer ist, dann beendet der
Zähler seine Arbeit eben mal früher und mal später. Der Effekt sollte
eigentlich nicht so stark sein wie Du ihn beschreibst, außer Du hältst
die Aluplatte oder den Sender mit der Hand und bei jeder Messung ist der
Winkel Sender/Aluplatte anders.
Markus Kaufmann schrieb:
Das sollte schon 50:50 sein. Du bringst doch mit dem Strom einen Piezo
zum schwingen und der will vorzugsweise sinusförmig schwingen. Warum
willst Du es überhaupt ändern?
leider gibt es meine schaltung nicht her genau 50:50 einzustellen, ist
mehr bei 30-40:70-60, deshalb muss ich mir dafür was anderes überlegen.
ich werde es auf jedenfall mit 50:50 probieren und wieder berichten
An alle ein frohes Fest und ein guten rutsch ins neue Jahr.
chris schrieb:
> leider gibt es meine schaltung nicht her genau 50:50 einzustellen, ist> mehr bei 30-40:70-60, deshalb muss ich mir dafür was anderes überlegen.
Es wird mit einem anderen Tastverhältnis wahrscheinlich schon
funktionieren, aber die Ergebnisse werden eben schlechter als mit 50:50
sein.
so nun hauts mich vom Hocker !!!!! :-ö
Habe mal ne astabile Kippstufe aufgebaut um die 41Khz so das ich das
Tastverhältnis sauber auf 50:50 einstellen kann, noch minimale Änderung
im Programm vorgenommen alles verbunden und siehe da, ein Steigerung um
100%.
Mit der alten Sendeschaltung schwankten die Werte wie erwähnt sehr stark
und Abstand zum Empfänger kleiner 15cm totaler Müll im Display
Mit der neuen Schaltung stehen die Werte sauber im Display nach jeder
Messung ohne Schwankungen, im Moment leider nur 10-30cm, ich glaube ich
muss den Empfänger empfindlicher kriegen!!!!
Hallo und ein gesundes neues Jahr
erstmal das was ich abhacken kann, sind Sender und Software arbeiten
zuverlässig und stabil.
Als Empfänger (Ub=10V) habe ich 4x Transistorverstärker
Spannungsverstärkung rund 92, leider kann ich nur mit 2 Stufen arbeiten,
da ab der dritten sich das Ding aufschwingt (oder was anderes tut) und
am Ausgang 250Khz macht.
1. Wo kommen die 250Khz her??? sollte die 3te/4te Stufe etwas weniger
Verstärken?????
Ich hatte mir vorher überlegt das ich noch ein Bf980 dazu nehme, um die
Verstärkung in Abhängigkeit der Regelspannung zu regeln. (s.B. X7)
Ohne Regelspannung, X2-X6 verbunden, Entfernung im Raum rund 10-150cm
nen plus is noch drin aber das sind die stabilen Werte.
Mit Regelspannung X2-X10, X11-X6, X7-X12 verbunden, man kann rund 20cm
drauf rechnen im Vergleich ohne Regelspannung.
D.h 20cm * 58µs= 1,2ms braucht die Regelung um zu arbeiten oder sehe ich
das Falsch?????
2. Wie würdet ihr die Nachführung realisieren oder verbessern????