Warnton bei Annäherung

#3839227
Lesenswert?

in meinem letzten Project (Anzeige für digitale Messschieber) habe ich 
eine akustische Limit Überwachung eingebaut. Funktioniert (oder besser 
soll so funktionieren) wie ein Abstandswarmer.
Also ab Messwert X% vom Limit beginnt ein Interwallton, dessen 
Intervalle kürzer werden und ab ca. 98% in Dauerton übergehen.

Wie ich es bisher gemacht habe:
- Ein 1kHz clock geht an einen Pin an dem ein Piezobuzzer hängt.
- Der Pin wird durch einen PWM eneabled. Also 1kHz wird nur für die 
dutyCycle durchgelassen. Die PMW arbeitet mit einer Periode von ca. 
500ms

Geht soweit.

Probleme:
- Setze ich nur den Abstand Limit/Messwert als dutyCycle um klingt es 
irgendwie blöd, weil sich ja an der Frequenz (Periode PMW) nichts ändert
- Ändere ich mit dem Abstand die PWM-Frequenz klingt es zwar besser aber 
auch noch nicht so wie man es von einem Abstandswarmer gewohnt ist.
- Auch die Kombination von Beidem (Periode und dutyCycle) ist irgendwie 
noch nicht das Wahre.

Hab so das Gefühl, als wenn die lineare Umsetzung Abstand/PMW-Periode 
das Problem ist.

Hat jemand eine Idee, wie man sowas besser machen kann?

Danke
Reiner
(Firma: Vescomp) #3839275
Lesenswert?

Reiner W. schrieb:
> Hab so das Gefühl, als wenn die lineare Umsetzung Abstand/PMW-Periode
> das Problem ist.
 Natürlich.
 50cm auf 40cm ist 10cm und 20%
 20cm auf 10cm ist 10cm und 50%

> Hat jemand eine Idee, wie man sowas besser machen kann?
 Abstand merken, bei der nächsten Abfrage Verhältnis zueinander
 ausrechnen, Frequenz um diesen Faktor erhöhen / verringern.
#3839393
Lesenswert?

Marc Vesely schrieb:
> Abstand merken, bei der nächsten Abfrage Verhältnis zueinander
> ausrechnen, Frequenz um diesen Faktor erhöhen / verringern.

Danke, für deine Antwort. Bin mir aber nicht ganz sicher, ob ich dich 
korrekt verstehe. Eigentlich mache ich das ja schon so:

1
(void) beep (uint16 MessWert) {
2
    uint16 Limit;
3
    uint8 dcProzent =  Messwert * 100 / Limit;  // Messwert ist dcProzent vom Limit
4
    
5
    /*Abstand der High Pulse wird kleiner je näher der Messwert dem Limit kommt*/
6
    uint8  PMW_Periode = 255 - dcProzent;        // 255 -> f/255 ... f/155 
7

8
    /*Umrechnung Compare Wert an geänderte Priode 
9
     damit bleibt der dutyCycle (dcProzent) umabhängig von der Periode*/
10
    uint8  PMW_Compare = dcProzent * PMW_Periode / 100;  
11
    
12
    PMW_Write_Period(PMW_Periode);    //Write Period to PMW
13
    PMW_Write_Compare(PMW_Compare);   //Write Compare to PMW
14
}

Oder hab ich da was nicht verstanden?
#3839506
Lesenswert?

Reiner W. schrieb:

Was, genau, macht diese Funktion mit dem übegebenen Wert:

>     PMW_Write_Compare(PMW_Compare);   //Write Compare to PMW

Wenn ich das jetzt richtig im Ohr habe, dann sind die Piepser meines 
Rückfahrpiepsers im Auto immer gleich lang. Nur das INtervall dazwischen 
ist anders.

Wenn die Funktion PWM_Write_Compare da also nicht noch rumrechnerein mit 
dem Wert macht (weil es zb Prozent erwartet), dann sollte es doch 
eigentlich ein konstanter Wert hier tun?
(Firma: Vescomp) #3839564
Lesenswert?

Karl Heinz schrieb:
> Wenn ich das jetzt richtig im Ohr habe, dann sind die Piepser meines
> Rückfahrpiepsers im Auto immer gleich lang. Nur das INtervall dazwischen
> ist anders.
 Hmmm.
 Ich glaube du hast Recht, werde es aber noch ausprobieren.

Reiner W. schrieb:
> Bin mir aber nicht ganz sicher, ob ich dich
> korrekt verstehe. Eigentlich mache ich das ja schon so:
 Da das alles sowieso subjektiv ist, würde ich es an deiner Stelle
 mit einer Tabelle versuchen. 100 Bytes sind nicht viel, die ganze
 Umrechnerei nimmt ja fast soviel.
 Dann kannst du es auch so einstellen, wie es dir am besten erscheint.
#3839628
Lesenswert?

Karl Heinz schrieb:
> Wenn ich das jetzt richtig im Ohr habe, dann sind die Piepser meines
> Rückfahrpiepsers im Auto immer gleich lang. Nur das INtervall dazwischen
> ist anders.

Ja, da hast du recht. Ich verändere hier neben der Frequenz zusätzlich 
noch den dutyCycle. Aber ich glaub auch, dass das das nicht nötig ist.
Der Constanze Wert müsste dann wohl
1
PMW_Periode / 2

sein, wenn immer ein DC von 50% eingestellt sein soll. Muss ich nur noch 
rumspielen, wie man den DC praktisch auslegt.

Marc Vesely schrieb:
> Da das alles sowieso subjektiv ist, würde ich es an deiner Stelle
>  mit einer Tabelle versuchen. 100 Bytes sind nicht viel, die ganze
>  Umrechnerei nimmt ja fast soviel.

Ja, ich tendiere auch dazu. Ich denke, dass es sich vlt. genau wie mit 
der Lichtstärke verhalten könnte. Wahrscheinlich sollte die Frequenz 
logarithmisch zunehmen. Werde ich heute mal ausprobieren. Da ich ja mit 
recht wenigen Stufen klarkommen würde, könnte ich ja ein bit durch ein 
UINT8 oder UINT16 schieben und hätte dann ja einen quadratisch 
ansteigenden Wert.

Danke für die Hilfe

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren