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
Und im Anhang für den Prof. das fertige VHDL-File. Nur verstehen mußt du es noch, sonst kommst du in Erklärungsnot ;-)
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.