Forum: FPGA, VHDL & Co. Delay mit Gatter ohne R/C realisieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Karsten K. (karsten42)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich möchte ein Signal um ca 1us "verlängern" um damit ein Gate zu 
steuern. Als externe Schaltung ist das ein simples OR Gatter mit R und 
C. Bitte siehe Bild.

Wie kann ich dies in einem CPDL ohne externe R/C Komponenten 
realisieren?

Mein Gedanke war einen Zähler zu nutzen und diesen über ein FF zu 
starten und zu stoppen. Jedoch ist das Taktsignal natürlich nicht 
synchron zum Eingangssignal und daher ist die resultierende Verzögerug 
unbestimmt.

Ich bin ganz frisch in VHDL & Co. daher die vielleicht etwas doofe 
Frage.

Beste Grüße
Karsten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Karsten K. schrieb:
> Wie kann ich dies in einem CPDL ohne externe R/C Komponenten
> realisieren?
Es ist ein CPLD, und richtig: du brauchst dafür einen Zähler. Welchen 
Takt hast du an deinem CPLD? Welches CPLD hast du?

> Jedoch ist das Taktsignal natürlich nicht synchron zum Eingangssignal
> und daher ist die resultierende Verzögerug unbestimmt.
Dagegen hilft "Einsynchronisieren". Ohne geht es nicht. Aber es dürfte 
ein Flipflop dafür ausreichen...

von Falk B. (falk)


Lesenswert?

@ Karsten K. (karsten42)

>Ich möchte ein Signal um ca 1us "verlängern" um damit ein Gate zu
>steuern. Als externe Schaltung ist das ein simples OR Gatter mit R und
>C. Bitte siehe Bild.

>Wie kann ich dies in einem CPDL ohne externe R/C Komponenten
>realisieren?

Nur mit einem Zähler, weil die Gatterlaufzeiten viel zu klein sind.

>Mein Gedanke war einen Zähler zu nutzen und diesen über ein FF zu
>starten und zu stoppen. Jedoch ist das Taktsignal natürlich nicht
>synchron zum Eingangssignal und daher ist die resultierende Verzögerug
>unbestimmt.

Sicher.

>Ich bin ganz frisch in VHDL & Co. daher die vielleicht etwas doofe
>Frage.

Dein Problem ist wahrscheinlich ohne so eine Sauerei lösbar. Beschreibe 
es grundlegend und dir kann geholfen werden. Siehe Netiquette.

von Karsten K. (karsten42)


Angehängte Dateien:

Lesenswert?

Hallo Lothar, Hallo Falk

Entschuldigung, ich wollte nicht gleich alles überladen. Mein Ansatz ist 
ja, das ganze zu verstehen und auch möglichst selber zu entwickeln.

O.K. Für ein CAN projekt benötige ich einen CAN-HUB. Dafür hat Herr 
OSchmidt eine tolle einfache Gatterschaltung entwickelt. Mir ist der 
Aufwand an Einzelgatter aber zu groß und so entstand die Idee die 
Schaltung in ein CPLD zu integrieren. Als blutiger Anfänger in VHDL/CPLD 
habe ich mir einfach mal den XC 9572 ausgesucht da dieser als PLCC und 
5V einfach im Hobbybereich zu handhaben ist. Der CAN-Bus läuft mit 
250KBaud, somit ist ein Bit 4uS lang, 1TQ ist 250nS. Als Takt steht mir 
16Mhz zur Verfügung.

Die Schaltung besteht im wesentlichen aus zwei Gates die über die 
Verzögerungsglieder verreigelt gesteuert werden. Im MCP2551 wird das TXD 
Signal an RXD weitergeleitet. Sind beise synchron, sperrt das "untere" 
Gate. Wird ein dominates Siganl empfangen, so wird das "obere" Gate 
gesprerrt und das Dominate Signal gelangt über das wired OR an den 
CAN-Controller.

Die wired OR Schaltung lässt sich durch ein NOR mit n Eingängen 
nachbilden. Die input/output buffer duch die NOR gatter zum MCP2515 ( 
wird durch ein SJA1000 ersetzt ) können wegfallen.

Beste Grüße
Karsten

von Uwe (Gast)


Lesenswert?

> somit ist ein Bit 4uS lang
> resultierende Verzögerug unbestimmt.
> Als Takt steht mir 16Mhz zur Verfügung.
16MHz=62,5ns
1µs/62,5ns=16
Was passiert wenn du dich um einen Takt verzählst ?
Was passiert wenn bei der RC kombination das C 10% Toleranz hat ?
Ist zwar eigentlich nicht sauber geht in diesem fall aber trotzdem.

von Karsten K. (karsten42)


Lesenswert?

Moin Uwe,

Die 1us ist die Zeitkonstante mit den angegebenen 10K und 100p. 
Theoretisch liegt bei TTL der L Pegel erst bei 3 Tau an; also nach ca 
3uS. Die Schaltung funktioniert damit aber sehr stabiel. Die absolute 
Verzögerung ist ersteinmal nicht so wichtig sondern vielmehr die 
Implementierung in ein CPLD.

Verzählen ist nicht der richtige Ausdruck denke ist. Du meinst vieleicht 
was passiert, wenn der Takt nicht synchron zur Flanke des 
Eingangssignals liegt. Das ist eben ein Problem weswegen ich hier die 
Experten um Rat bitte :-)

Gruß
Karsten

von Falk B. (falk)


Lesenswert?

@ Karsten K. (karsten42)

>O.K. Für ein CAN projekt benötige ich einen CAN-HUB. Dafür hat Herr
>OSchmidt eine tolle einfache Gatterschaltung entwickelt.

Naja, einer der üblichen Trickschaltungen. Nicht schön, geht aber.

>250KBaud, somit ist ein Bit 4uS lang, 1TQ ist 250nS. Als Takt steht mir
>16Mhz zur Verfügung.

Na immerhin!

>gesprerrt und das Dominate Signal gelangt über das wired OR an den
>CAN-Controller.

>Die wired OR Schaltung lässt sich durch ein NOR mit n Eingängen
>nachbilden.

Dann lass den Unsinn mit den RC-Gliedern und mach es über Zähler/State 
machines im CPLD, das ist halbwegs solide. Der Jitter durch die 
Überabtastung von 16 MHz ist hier unproblematisch, jeder 
UART/CAN-Tranceiver arbeitet genau so. Bei 250kBaud sind das gerade mal 
1/64 der Bitzeit bzw. 1/4 TQ.

Solider wäre wahrscheinlich ein gescheiter CAN-MUX. Damit hab ich mich 
aber noch nicht beschäftigt. Was spricht gegen eine gesteuerte 
Umschaltung der vier CAN-Ports auf den CAN-Tranceiver? Oder soll der HUB 
transparent wirken?

MFG
Falk

von Karsten K. (karsten42)


Lesenswert?

Hallo Falk,

Humm, übliche Trickschaltung: Hatte ich aber noch nirgends anders 
veröffentlicht gesehen.

O.K. Dann scheine ich mit dem ganz oben gezeigten Ansatz der CPDL 
Implementierung zumindest schon mal nicht ganz falsch zu liegen. Das 
wird dann eine spannende Herausforderung werden.

Gesteuertes Umschalten würde wohl gehen wenn die Nodes Nachrichten lange 
genug senden wenn gerade ein anderer Bus aktiviert ist. Mir scheint der 
Aufwand aber letztlich größer zu sein.

by the way: Da du ja DER CAN-Spezialist bist:
Die Frage nach automatischen Abschluss des Busses. Kennst du da eine 
realisierbare Lösung?
Hintergrund ist, dass an den vier CAN-Bus ( plural Busse ? ) Geräte 
angeschlossen werden die intern fest mit 120 Ohm abgeschlossen sind. Ist 
nur eines angeschlossen, müsste der HUB einen weiteren 120 Ohm 
Widerstand hinzufügen. Wenn jemand drei und mehr anschließt kommt aus 
der Box eine Pistole heraus und schießt!

Danke für die Hilfe.

Karsten

von Falk B. (falk)


Lesenswert?

@ Karsten K. (karsten42)

>by the way: Da du ja DER CAN-Spezialist bist:

Wie bitte? Wie kommt du denn darauf? Ich habe nur eine ungesunde Portion 
1/7tel Wissen!

>Die Frage nach automatischen Abschluss des Busses. Kennst du da eine
>realisierbare Lösung?

Keine Ahung.

>Hintergrund ist, dass an den vier CAN-Bus ( plural Busse ? ) Geräte
>angeschlossen werden die intern fest mit 120 Ohm abgeschlossen sind. Ist
>nur eines angeschlossen, müsste der HUB einen weiteren 120 Ohm
>Widerstand hinzufügen. Wenn jemand drei und mehr anschließt kommt aus
>der Box eine Pistole heraus und schießt!

Man könnte einen definierten Strom an CAN-H und CAN-L einspeisen und die 
Spannung messen. Dann weiß man, wwelche Terminierung auf dem Bus 
angeschlossen ist. Bei SEHR langen Busleitungen könnte aber der 
Kabelwiderstand das Ergebnis stark beeinflußen. Ist nur so ne schnelle 
Idee.

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
Noch kein Account? Hier anmelden.