PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wert umwandeln



Otti20vt
13.01.2007, 19:34
Hossa!

Nach etwa 2h Suchen, kämpfe ich immer noch mit Folgendem Problem.

Ich habe einen Wert "A" von 0 - 1000 jetzt möchte ich einer 10Bit PWM diesen wert zuweisen, soweit kein Problem O:) Aber das ganze soll genau anders rum sein und nicht Linear. :-k


A = 0 dann soll die PWM = 1000 sein
A = 1000 dann PWM = 0

Aber wenn A = 200 soll PWM = 600 und nicht 800
oder A = 800 PWM = 400 und nicht 200 [-X


Gibts dafür keine Funktion? und zwar so eine Funktion, welche die werte dazwischen selber berechnet?
Ich könnte natürlich selber eine Tabelle schreiben, aber dann müsste ich 1000 werte eingeben, und das ist wohl alles andere als effektiv ](*,)


Vielen Dank schonMal

coCo
13.01.2007, 20:06
Hi,
wenn du weißt wie man alle Werte für die Tabelle ausrechnen kann, dürfte es doch kein Problem sein einen Algorithmus zu schreiben, der dir die Werte berechnet.

MfG

Skulk
13.01.2007, 20:17
Ich habe zwar noch nicht verstanden in welchem zusammenhang die werte zueinander stehen sollen, aber invertieren kannst du sie sehr einfach:

WertPwm = 1000 - A

Hanni
13.01.2007, 21:16
Ich könnte natürlich selber eine Tabelle schreiben, aber dann müsste ich 1000 werte eingeben, und das ist wohl alles andere als effektiv

Kommt auf den Standpunkt an. Von der Geschwindigkeit ist das natürlich wesentlich effektiver als jeder Allgo :D

Otti20vt
13.01.2007, 22:16
Ich hab mal eine kleine Skizze gemacht wie ich das meine. Ich möchte einfach 4 Werte vorgeben wie oben genannt, und der µC soll sich die werte dazwischen selber errechnen.

coCo
13.01.2007, 22:52
Hi,
das is doch nich so schwer. Du musst einfach für die 4 Geraden jeweils die Gleichung ausrechnen. Die Steigung berechnest du einfach mit PWM_Wert/A.
Zum Beispiel übergibst du der Funktion folgende 4 Werte:
(1) PWM_Wert = 0 -> A = 1000
(2) PWM_Wert = 400 -> A = 800
(3) PWM_Wert = 500 -> A = 500
(4) PWM_Wert = 1000 -> A = 0
Also die werte aus deinem Beispiel.

Die Gerade von Punkt (1) nach (2) berechnet sich also so:
y = m*x+c
wobei m sich ausrechnet in dem du die Differenz von PWM_Wert von (2) und (1) durch die Differenz von A von (1) und (2):

y = ((400-0)/(1000-800))*x+0
-> y = 2*x

Damit hast du die Gleichung für den ersten Abschnitt und kannst alle restlichen Werte berechnen. Für die restlichen Abschnitte genauso die Gleichungen ausrechnen. Abschnitt 2 (von Punkt (2) nach (3)) zum Beispiel:

y = m*x+c
y = ((500-400)/(800-500))*x+400
-> y = 1/3*x+400

x ist A und y ist PWM_Wert.

Hoffe, dass es so stimmt und es dir weiterhilft.

MfG

EDIT: Scheint nicht so ganz zu stimmen, war wohl bissle müde gestern nacht :D

coCo
14.01.2007, 11:29
Hi,
du musst das Koordinatensystem anders machen, sprich der Wert 0 von A ist links unten im Ursprunge und 1000 dann rechts.

Wenn du nun die Geraden einzeichnest erhälst du eine negative Steigung. Die erste Gerade ist also:
y = -2*x+1000

Für die nächsten Geraden ist c unbekannt, weil du nicht genau sagen kannst wo sie die y-Ache schneiden. Aber die Steigung kannst du ausrechnen. Zum Beispiel für Abschnitt 2:
y = -(1/3)*x + c

c kannst du jetzt ganz einfach mit einer Punktprobe ausrechnen. Zum Beispiel mit dem Punkt P (800|400), den du vorher ja weißt:
400 = -(1/3)*800 + c
666,67 = c
Somit ergibt sich für die Gerade folgende Gleichung:
y = -(1/3)*x + 666,67

Jetzt dürfte es stimmen.

MfG

PS: Mit welchem Programm hast du das Diagramm gemacht?

Otti20vt
15.01.2007, 07:22
coCO Danke erstmal für deine mühe, ich werde mir deine Berechnungen heute abend nochmals anschauen, soweit eigentlich auch Logisch #-o

Danke O:)




PS: Mit welchem Programm hast du das Diagramm gemacht?


Mit dem Paint welches zu Windoze dazu gehört :oops: