Hallo Freunde, ich habe ein Inkrementaldrehgeber an dem Rotor eines Schrittmotor befestig. Die Signale(Recheckig) von Inkremtal geben mir die Drehzahl bzw die position des Motors.Ein Counter_A zählt die Inkremente Signal und ein Counter_B zählt die tatzätliche Drehzahl des Motor und die Verlust ist dann die Differenz zwischen beide Counter. Nun habe ich beide Counter in separaten Process gesetzt , da die Processe parallele abrbeiten.Aber in welche Process soll ich die Verlust, also die Differenz zwischen beide Counter berechnen??? in eine anderen Process oder in einem von den beiden Processen. Mein S-Motor ist bipolare und wird mit 8 Signal angesteurt also 4 mal 2 H-Brücke. Hier mein Progamm für die Ansteuerung... wie kann ich zu diesem Progamm die Erfassung und Korrektur der Verlust ergänzen??? Ich hatte die Erfassung und Korrektur in eine andere Process , aber es hat nicht funktionniert.... Ich biete Um Hilfe Danke
1 | ......
|
2 | constant A1 : Std_Logic_Vector(7 downto 0) := "01010000"; |
3 | constant A2 : Std_Logic_Vector(7 downto 0) := "00001010"; |
4 | |
5 | Begin
|
6 | |
7 | PROCESS (Reset,clk) |
8 | |
9 | BEGIN
|
10 | |
11 | IF Reset = '1' THEN |
12 | counter <= (others => '0'); |
13 | counter1 <= (others => '0'); |
14 | counter_B<= (others => '0'); |
15 | |
16 | elsIF rising_edge(clk) THEN |
17 | |
18 | IF enable_in ='0' THEN |
19 | |
20 | IF counter ="00000010000000000000011" THEN ----Geschwindigkeit des Schritt |
21 | |
22 | counter <= (others => '0'); |
23 | |
24 | counter_B<= counter_B + '1';--tatsäztlichen Schrittanzahl des Motor |
25 | |
26 | counter1 <= counter1 + '1'; |
27 | |
28 | ELSE
|
29 | |
30 | counter <= counter + '1'; |
31 | |
32 | ---------------------------------------------------------------------------
|
33 | |
34 | ------------RECHTSLAUFT-------------
|
35 | |
36 | ---------------------------------------------------------------------------
|
37 | |
38 | |
39 | IF Richtung = '1' then |
40 | |
41 | CASE counter1 IS |
42 | |
43 | |
44 | WHEN "00" => |
45 | |
46 | aus <= not A1 xor A2; |
47 | |
48 | WHEN "01" => |
49 | |
50 | aus <= not A1 xor not A2; |
51 | |
52 | WHEN "10" => |
53 | |
54 | aus <= A1 xor not A2; |
55 | |
56 | WHEN "11" => |
57 | |
58 | aus <= A1 xor A2; |
59 | |
60 | WHEN OTHERS => |
61 | |
62 | aus <= "00000000"; |
63 | |
64 | END CASE; |
65 | |
66 | |
67 | ---------------------------------------------------------------------------
|
68 | |
69 | ----------------LINKSLAUFT-------------
|
70 | |
71 | ---------------------------------------------------------------------------
|
72 | |
73 | ELSIF Richtung ='0' then |
74 | |
75 | |
76 | CASE counter1 IS |
77 | |
78 | |
79 | WHEN "00" => |
80 | |
81 | aus <= A1 xor A2;--01011010 |
82 | |
83 | WHEN "01" => |
84 | |
85 | aus <= A1 xor not A2;--01010101 |
86 | |
87 | WHEN "10" => |
88 | |
89 | aus <= not A1 xor not A2;--10100101 |
90 | |
91 | WHEN "11" => |
92 | |
93 | aus <= not A1 xor A2;--10101010 |
94 | |
95 | WHEN OTHERS => |
96 | |
97 | aus <= "00000000"; |
98 | |
99 | END CASE; |
100 | |
101 | ELSE
|
102 | |
103 | counter <= (others => '0'); |
104 | |
105 | counter1 <= (others => '0'); |
106 | |
107 | aus <= "00000000"; |
108 | |
109 | end if; |
110 | |
111 | end if; |
112 | END IF; |
113 | |
114 | End IF; |