Forum: FPGA, VHDL & Co. Sortieranlage vhdl metall und kunststoff


von john (Gast)


Lesenswert?

Der optische Sensor 𝑶 soll erkennen, ob sich ein Werkstück auf dem 
Transportband befindet.
Ist das der Fall, wird der Motor 𝑴 eingeschaltet und das Transportband 
wird bewegt.

Passiert das Werkstück den induktiven Sensor 𝑰, meldet dieser, ob das 
Werkstück aus Metall besteht.
Dadurch kann entschieden werden, ob das Werkstück über den Transportweg 
A oder B bewegt wird.

Der Transportweg kann durch die Magnetschranke 𝑽 geändert werden. 
Hiermit können die Werkstücke aus Metall von den Werkstücken aus 
Kunststoff getrennt werden.
Es wird vereinbart, dass die Werkstücke aus Kunststoff über den Weg A 
und die Werkstücke aus Metall
über den Weg B transportiert werden.
Die Zeit 𝒁 der Aktivität des Transportbandes soll sowohl für den 
Transportweg A als auch für den Transportweg B berücksichtigt werden, 
damit die Werkstücke erstens nicht auf dem Transportband liegen
bleiben (Zeit zu kurz) und zweitens das Transportband keinen unnötigen 
Leerlauf hat (Zeit zu lang).
Ein sinnvoller Wert für die Zeit soll experimentell bestimmt werden.
Es soll auch Möglichkeit bestehen, die Anlage mit dem Signal 𝒓𝒆𝒔𝒆𝒕 in 
den Anfangszustand 𝑰𝒅𝒍𝒆 zu
versetzen. In dem Anfangszustand soll die Anlage auf das Signal vom 
optischen Sensor warten und
sonst nichts tun.



1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
entity sortierer is
5
 generic (
6
 CNT_OFL : positive :=          ERGÄNZE ; -- Sekundentakt overflow
7
 TIME_WEG_K : positive :=       ERGÄNZE im Praktikum; -- Kunststoff-Werkstück, langer Weg
8
 TIME_WEG_M : positive :=        ERGÄNZE im Praktikum; -- Metall-Werkstück, kurzer Weg
9
 FWD : std_logic := '0';
10
 BCK : std_logic := '1';
11
 RUN : std_logic := '1';
12
 STP : std_logic := '0';
13
 WEG_K : std_logic := '0';
14
 WEG_M : std_logic := '1'
15
 );
16
 port (
17
 reset_n : in std_logic; -- Key3
18
 clk : in std_logic; --50 MHz
19
 oe_in : in std_logic; -- Switch 9
20
 opt_sens : in std_logic; -- optischer Sensor
21
 ind_sens : in std_logic; -- induktiv Sensor
22
 oe_n_out : out std_logic;
23
 weiche_out : out std_logic; -- Weg A / Weg B -Umschaltung
24
 motor_pwr_out : out std_logic; -- ...
25
 motor_dir_out : out std_logic -- Motor Drehrichtung
26
 );
27
end entity sortierer;
28
architecture arch of sortierer is
29
-- signals
30
signal cnt : unsigned(      ERGÄNZE        );
31
signal time_s : unsigned(4 downto 0);
32
signal weiche : std_logic;
33
signal motor_pwr : std_logic;
34
signal motor_dir : std_logic;
35
type main_state_t is (idle, ERGÄNZE );
36
signal main_state, next_main_state : main_state_t;
37
 
38
39
begin
40
sort_control : process(clk, reset_n) is
41
begin
42
 if (reset_n = '0') then
43
 ERGÄNZE
44
 elsif rising_edge(clk) then
45
 main_state <= next_main_state; -- z_reg
46
47
 -- fast counter, overflow = 1s
48
 if cnt = to_unsigned(CNT_OFL, cnt'length) or main_state = idle then
49
 cnt <= (others => '0');
50
 else
51
 cnt <= cnt + 1;
52
 end if;
53
 -- Sekunden timer
54
 if main_state = idle then -- reset timer
55
 time_s <= (others => '0');
56
 elsif cnt = CNT_OFL then
57
 time_s <= time_s + 1;
58
 end if;
59
60
 case main_state is
61
 when idle => -- warte auf opt_sens hi   
62
63
64
65
66
 ERGÄNZE
67
 
68
69
70
 when ……. =>
71
72
73
74
75
 ERGÄNZE
76
77
 when ……. =>
78
79
80
81
82
83
 ERGÄNZE
84
 when ……. =>
85
 ERGÄNZE 
86
87
 when ……. =>
88
 ERGÄNZE
89
 when ……. =>
90
 ERGÄNZE
91
92
 end case;
93
 end if;
94
 oe_n_out <= not oe_in; -- voltage translator active
95
 weiche_out <= weiche;
96
 motor_pwr_out <= motor_pwr;
97
motor_dir_out <= motor_dir;

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


Lesenswert?

Nette kleine Aufgabe. Und welche konkrete Frage hast du dazu?
Denn es bringt dir mittel- und langfristig ja nichts, wenn die irgendwer 
löst und dir die fertige Lösung präsentiert.

Tipp: Signale von externen Sensoren müssen vor der Verwendung 
einsynchronisiert werden. Auch der Key3 ist ein solches asynchrones 
externes Signal.
Siehe 
http://www.lothar-miller.de/s9y/archives/64-State-Machine-mit-asynchronem-Eingang.html

von Lupy (Gast)


Lesenswert?

Hausaufgaben?

von vancouver (Gast)


Lesenswert?

Das ist ein heiter-besinnliches Weihnachtsrätsel für die Adventszeit. 
Wer als erstes die richtige Lösung postet, bekommt einen 
Schokoladennikolaus.

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


Lesenswert?

vancouver schrieb:
> bekommt einen Schokoladennikolaus.
Nur mal so interessehalber gefragt: wie groß?  ;-)

von Achim M. (minifloat)


Lesenswert?

john schrieb:
> ERGÄNZE im Praktikum

Vielleicht hilft es ja, mal zu zeichnen, wie dieser Transportweg mit 
Motor, Band, Weiche, Sensor usw. tatsächlich aussieht. Welche 
verschiedenen Zustände des  Systems gibt es überhaupt?? Damit dann den 
"When"-Krempel unten ausfüllen.

mfg mf

Beitrag #6901953 wurde von einem Moderator gelöscht.
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.