> aber wie ich die 1µs bauen in dieser code ist mir nicht klar
Dazu solltest du erst mal sagen/wissen, was du für eine Taktfrequenz
hast.
Und dann wäre eine Skizze zum gewünschten Signalverlauf schön.
Ich vermute (in Ermangelung genauerer Informationen), High-Side ist
aktiv, wenn PWM=1 ist, und Low-Side, wenn PWM=0 ist. Dann muß High-Side
bei einem 0-1 Übergang verzögert werden, und Low-Side bei einem 1-0
Übergang. Du brauchst also 2 Totzeiten.
Das wäre ein Ansatz:
1 | :
|
2 | signal delayhs = integer range 0 to 100;
|
3 | signal delayls = integer range 0 to 100;
|
4 | :
|
5 | :
|
6 | process(clk) begin
|
7 | if rising_edge(clk) then
|
8 | if (PWM='0') then -- Low-Side aktiv
|
9 | delayhs <= 0;
|
10 | PWM_HI <= '0'; -- High-side sofort aus
|
11 | if (delayls<100) then -- Low-Side verzögern
|
12 | delayls<=delayls+1;
|
13 | else
|
14 | PWM_LO='0';
|
15 | end if;
|
16 | else -- High-Side aktiv
|
17 | delayls <= 0;
|
18 | PWM_LO <= '1'; -- Low-Side sofort aus
|
19 | if (delayhs<100) then -- High-Side verzögern
|
20 | delayhs<=delayhs+1;
|
21 | else
|
22 | PWM_HI='1';
|
23 | end if;
|
24 | end if;
|
25 | end if;
|
26 | end process;
|
Schöner wäre es allerdings, das in die PWM-Erzeugung zu integrieren, und
zwei Komparatoren zu verwenden.
BTW:
Die Shift-Taste erweitert den verfügbaren ASCII-Raum um den Faktor 2.
Gleichzeitig erhöht sie die Lesbarkeit deines Textes.