Hallo Leute,
ich habe folgende Frage:
Ich entwickle gerade eine Motorsteuerung mit Geschwindigkeitsanzeige und
so weiter. Bin schon ganz weit im Projekt aber brauch noch bisschen
Hilfe. Und zwar wenn der Motor dreht bekommen ich einen periodischen
Rechtecksignal, diesen fasse ich zu einem Signal zusammen, der Pro
Umdrehung des Motors seinen Zustand invertiert. (siehe Bild)
das blaue Signal ist der Motor. 6 High und 6 Low Anteile machen eine
Umdrehung des Motors und das gelbe Signal ist eben dafür da, eine
Umdrehung zu repräsentieren.
Jetzt muss ich aber für die Anzeige dieses Signal messen, mein Prof.
meinte dass ich eine mit einer Zählfrequenz die Pulse ermitteln muss, um
dann somit zur Hz Zahl des Signal zu gelangen oder die Periodendauer zu
ermitteln.
Genau das ist meine Frage, Wie mache ich das, ich brauche bisschen
Hilfe.
Hier der Teil des Programms, wo ich es einfügen muss:
abtasten: process (S, RST)
variable zaehl : integer := 6;
begin
if RST = '1' then
zaehl := 6;
Puls1 <= '0';
elsif S = '1' and S'event then
if (RichtungVR = '1' and VR2 = '0') or (RichtungVR = '0' and VR2 =
'1') or Langsamer = '1' or Schneller = '1' then
zaehl := 6;
Puls1 <= '0';
else
zaehl := zaehl - 1;
end if;
if zaehl = 0 then
Puls1 <= not Puls1;
zaehl := 6;
end if;
VR2 <= RichtungVR;
end if;
Puls0 <= Puls1
Warte auf antworten vielen dank im voraus.
Ich habe vorerst mal nur Fragen:
Was ist S, ist das der Puls vom Motor?
Was ist deine Zählfrequenz?
Wie willst du die Zählfrequenz und die Motorimpulse synchronisieren?
Auf welcher Zielplattform soll das Ganze implementiert werden?
Auf einem FPGA?
> Und zwar wenn der Motor dreht bekommen ich einen periodischen> Rechtecksignal, diesen fasse ich zu einem Signal zusammen, der Pro> Umdrehung des Motors seinen Zustand invertiert.
Warum teilst du die Frequenz durch 6?
> Jetzt muss ich aber für die Anzeige dieses Signal messen, mein Prof.> meinte dass ich eine mit einer Zählfrequenz die Pulse ermitteln muss, um> dann somit zur Hz Zahl des Signal zu gelangen oder die Periodendauer zu> ermitteln.
Was willst du anzeigen? U/min (Periodendauer) oder msec/U (Frequenz)?
BTW:
Hz-Zahl? Das heißt in Technikerkreisen: Frequenz.
danke erstmal für die antwort
S ist der Takt, der vom Laser des Motors gelesen wird. Wenn man sich den
Motor zylndrisch vorstellt, hat der Motor immer nacheinander in gleichen
Abständen gleichgroße Schwarze und Weise Balken. Der Laser intepretiert
einen schwarzen Balken als High und einen weisen Balken als Low (siehe
blaues signal oben im Bild). Und somit kommt dieses blaue Signal zu
Stande dieses S ist. Da ich nun 6 schwarze und 6 weise Balken habe,
dauert eine Umdrehung des Motor, egal wie schnell, 6 High Flanken an,
dass heisst bis man bei der siebten Flanke angekommen ist, hat der Motor
gedreht. Nun müsste ich ermitteln, wie lange der Motor für eine
Umdrehung braucht auf dem FPGA (nebenbei, es handelt sich um ein FPGA).
Mit dem blauen Signal kann ich nicht viel anfangan hab ich mir gedacht
und hab das gelbe entwickelt (programmtechnich siehe oben). Das gelbe
Signal repräsentiert mit seinen High und Low Flanken immer eine
Umdrehung des Motors. Und meine Aufgabe ist es nun die Zeit für eine
High oder Low Flanke rauszufinden über das FPGA und es später auf einer
7 Segment Anzeige auszugeben. Mein Prof. meinte, das ich hier eine
Zählfrequenz von ungefähr 10 kHz brauche und damit die Pulse ermitteln
soll. So könnt ich dann die U/min (mit einer Formel) ermitteln. U/min =
60 * Zählfrequenz / Pulse
Und genau über dieses wollte ich von euch Hilfe.
> Mit dem blauen Signal kann ich nicht viel anfangan ...
Warum nicht? Der Unterschied ist nur eine Konstante, die würde dir "nur"
das Ergebnis um den Faktor 12 ändern.
Wenn du ein FPGA hast, hast du vermutlich auch einen zentralen
(Master-)Takt im Bereich 50-100MHz. Auf diesen Takt mußt du das signal
vom Tacho einsynchronisieren, danach kannst du weiterarbeiten. Diese
lokale Takterei auf S bringt dir ausschliesslich Scherereien
(garantiert).
> U/min = 60 * Zählfrequenz / Pulse
Kann so nicht stimmen, denn die Pulse sind Umdrehungen (mal einen
konstanten Faktor, bei deinem Tacho 12*U). Deine Formel behauptet aber
[pre U/min = Zeit/Umdrehung [/pre]
Da gibt es ein Dimensionsproblem weil 1/s != s/1
So stimmt es besser:
U/min = 60*(U/sec) = 60 * (Tacho/12) / sec = 5*Tacho/sec = Tacho/(sec/5)
Also mußt du zum Berechnen der U/min nur für 1/5 sec die Tachoimpulse
zählen und fertig.
@Lazoboy61:
Ob Du nun das gelbe, oder das blaue Signal nimmst, ist doch fast egal.
Sie sind doch nur über einen Faktor miteinander verbunden (zeitlich
gesehen). Das blaue (schnelle) Signal hätte den Vorteil schon Werte zu
liefern, selbst wenn die Achse noch keine ganze Umdrehung hinter sich
hat.
Wenn Du es einfach haben willst, zähle doch die Impulse, solange Dein
gelbes Signal "high" ist. Falls Du mit 1 kHz (= 1000 Hz = 1000 Ticks pro
Sekunde) zählst und z.B. auf 200 Impulse kommst, dreht sich Dein Motor
mit (200/1000 = 200 ms = 0.2 s) / Umdrehung.
Duke
Danke für diesen Hilfreichen Tipps.
VHDL ist eine große Sache für mich geworden, bin grad noch am lernen der
Grundlagen parallel mit einem Projekt, aber hab noch viele lücken. Ich
hoffe in Zukunft ändert es sich und wird besser.
Danke nochmals.