Gast
#2657501
Hallo liebe mikrocontroller-Mitglieder, ich beschäftige mich seit einiger Zeit mit FPGA's bzw. der Hardwarebeschreibungssprache VHDL und habe noch nicht all zu viele Erfahrungen auf dem Gebiet sammeln können. Bei der Umsetzung könnte ich ein paar Tipps von Euch erfahrenden Usern gebrauchen. Nun möchte ich aus Übungsgründen gerne einen kleinen Modellbauservo mittels einem FPGA ansteuern. Zur Theorie: Die Winkeleinstellung des Servos wird mittels der Pulsweitenmodulation geregelt. Alle 20 ms (50 Hz) wird ein Impuls zwischen 1er und 2 ms gesendet, wobei die Mittelstellung bei einer Pulsbreite von 1.5 ms liegt. Maximale Winkelausrichtung bei Pb von 1er ms zu der einen Seite und 2 ms zu der anderen Seite. Mein FPGA Board, an dem ich diese Umsetzung realisieren möchte, taktet mit 50 Mhz. Um eine Frequenz von 50 Hz, bzw. eine Periodendauer von 20 ms zu erhalten, muss ich die 50 MHz. mit dem Faktor 10^6 teilen. Ein 50 Hz Signal habe ich bereits realisieren können, indem ich einen Zähler gebaut habe, der bei jeder aktiven Taktflanke von 0 bis 499999 hochzählt und den Zähler jeweils um 1 inkrementiert und den Ausgangswert nach dem gesamten Zählzyklus 'not' alter Ausgangswert verknüpft. Somit oszilliert mein Signal 10 ms High, 10 ms Low .... usw. Jetzt habe ich oft in Foren gelesen, dass man die Ansteuerung des Servos mit z.B. 8 bit quantisiert. Also Werte von 0 - 255. Meine Frage: Beziehen sich die 8 bit auf den gesamten Zeitraum von 20 ms oder auf den Zeitraum der Pulsweite, also maximal 10% der Periodendauer, auf 2 ms? Bei dem gesamten Zeitraum würde das doch bedeuten, dass bei angenommener Pulsbreite von 2 ms (was ja 10 % von 20 ms beträgt), dann 256*0.1 = 25.6 Werte, also 25 mögliche Servoeinstell-werte zur Verfügung stehen? Wie müsste ich jetzt weiter vorgehen? Ich habe mir folgendes gedacht: Meinen 50 Hz Zähler benötige ich nur, um jeweils den Begin meines Impulses zu detektieren. Dann würde ich einen weiteren Zähler benötigen, der dann für maximal 2 ms den Takt auf 'High' hält und die restliche Zeit, maximal 18 ms, auf 'Low'. Für das erste würde mir schon reichen, wenn ich den Stellwinkel im Quellcode vorgebe, ohne zusätzliche Eingänge vom Fpga. Dazu würde ich dann später übergehen. Kann mir jemand sagen, ob ich mit dieser Sichtweise ersteinmal richtig liege? Vielen Dank, photon