Sari la conținut

Pornire pe rand a 3 motorase


Gialdi77

Postări Recomandate

cu automat de stare codul si poza cu schema echivalenta

 

----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 12:49:35 05/22/2013
-- Design Name:
-- Module Name: top_motor3 - RTL
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity top_motor3 is
Port (
 clk : in STD_LOGIC;
 reset : in STD_LOGIC;
 cama1_in : in STD_LOGIC;
 cama2_in : in STD_LOGIC;
 cama3_in : in STD_LOGIC;
 start_in : in STD_LOGIC;

	 motor1 : out STD_LOGIC;
	 motor2 : out STD_LOGIC;
	 motor3 : out STD_LOGIC
	 );
end top_motor3;
architecture RTL of top_motor3 is
type state_type is ( IDLE,
 MOTOR1_START,
 MOTOR1_RUN,
 MOTOR2_START,
 MOTOR2_RUN,
 MOTOR3_START,
 MOTOR3_RUN);
signal state, next_state : state_type;
signal cama1,cama2,cama3,start : STD_LOGIC;
signal cama1_reg,cama2_reg,cama3_reg, start_reg : STD_LOGIC;
begin
--sampling the asynchronous inputs into the clk domain
process(clk)
begin
if rising_edge(clk) then
cama1_reg <= cama1_in; cama1 <= cama1_reg;
cama2_reg <= cama2_in; cama2 <= cama2_reg;
cama3_reg <= cama3_in; cama3 <= cama3_reg;
start_reg <= start_in; start <= start_reg;
end if;
end process;

SYNC_PROC: process (clk)
begin
 if rising_edge(clk) then
	 if (reset = '1') then
	 state <= IDLE;
	 else
	 state <= next_state;
	
	 -- assign other outputs to internal signals
	 end if;	
 end if;
end process;
--MOORE State-Machine - Outputs based on state only
OUTPUT_DECODE: process (state)
begin
 if state = IDLE then
	 motor1 <= '0';
motor2 <= '0';
motor3 <= '0';
 elsif state = MOTOR1_START or state = MOTOR1_RUN then
motor1 <= '1';
motor2 <= '0';
motor3 <= '0';
 elsif state = MOTOR2_START or state = MOTOR2_RUN then
motor1 <= '0';
motor2 <= '1';
motor3 <= '0';
 elsif state = MOTOR3_START or state = MOTOR3_RUN then
motor1 <= '0';
motor2 <= '0';
motor3 <= '1';
	
 end if;
end process;
NEXT_STATE_DECODE: process (state, cama1, cama2, cama3, start)
begin
 --declare default state for next_state to avoid latches
 next_state <= state; --default is to stay in current state

 case (state) is
	 when IDLE =>
	 if start = '1' then
		 next_state <= MOTOR1_START;
	 end if;
	 when MOTOR1_START =>
	 if cama1 = '0' then
		 next_state <= MOTOR1_RUN;
	 end if;
	 when MOTOR1_RUN =>
if cama1 = '1' then
	 next_state <= MOTOR2_START;
end if;
	 when MOTOR2_START =>
if cama2 = '0' then
	 next_state <= MOTOR2_RUN;
end if;
	 when MOTOR2_RUN =>
if cama2 = '1' then
	 next_state <= MOTOR3_START;
end if;
	 when MOTOR3_START =>
if cama3 = '0' then
	 next_state <= MOTOR3_RUN;
end if;
	 when MOTOR3_RUN =>
if cama3 = '1' then
	 next_state <= MOTOR1_START;
end if;

	 when others =>
	 next_state <= IDLE;
 end case;	
end process;
end RTL;

 

 

tot cipul asta sintetizat costa sub 1$, (evident fara costul meu) si nu-l gasesti pe raft in nici un magazin. Daca vreu sa schimb ceva nu-mi trebuie ciocan de lipit....

post-1482-0-96753500-1369230318_thumb.png

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

  • Răspunsuri 57
  • Created
  • Ultimul Răspuns

Top Posters In This Topic

Nu stiu ce sa mai zic .Acum ma-ti bagat de tot in ceata , vorbiti in niste termeni pe care nu-i inteleg inca .Varianta cu CD o inteleg, dar cu programarea nu prea .Roadrunner care ar fi pretul la cipul asta al tau?

Link spre comentariu
Distribuie pe alte site-uri

Indiferent de varianta pentru care optati, pe fiecare motor aveti nevoie de un senzor, indiferente de tip. electromecanic, optic sau magnetic, pentru a seziza efectuarea unei rotatii complete.

Editat de miron1947
Link spre comentariu
Distribuie pe alte site-uri

din pacate nu e asa usor, trebuie programat si probabil testat, si reprogramat si tot asa...pana merge cum vrei tu.

daca ai fi avut un cablu de programare iti trimiteam cateva neprogramate si eventual fisierul.

 

las ca-l faci cu microcontroller ca e la fel de simplu, te ajutam.

 

RR

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

Pentru a continua, sunt neceare niste clarificari:

1)Care este frecventa maxima a actionarii contactului care comanda montajul?

2)Ce tip de senzor estimati ca va fi utilizat?

3)Ce deplasare inertiala are volanta, dupa intreruperea alimentarii?

Link spre comentariu
Distribuie pe alte site-uri

Vezi Miron,

 

toate raspunsurile la intrebarile astea sunt irelevante, in cazul solutiei programabile (circuite logice sau MCU) pentru ca pot fi configurate pentru toate variantele de raspuns, pe cand in logica fixa trebuie stiute, deci trebuie construit ansablul mecanic, vazut cum se comporta dupa care faci circuitul de comanda. Cu solutia programabila se pot face simultan si adapta la fata locului.(si timp=bani)

sunt avantaje economice mari sa folosesti ceva programabil si modificabil la fata locului, fara sa fi nevoit sa te intorci la planseta de lucru de fiecare data cand lucrurile nu merg cum ti-ai propus

RR

 

PS - de exemplu pt logica fixa e important daca are inertie si elibereaza cama la oprire, pentru logica programata nu prea conteaza, pentru ca poate fi modificata usor pentreu cazul asta.

- sau daca limitatorii sunt in logica negativa. - eu zic ca e pacat ca astia tineri sa nu invete lucrurile asa cum se fac mai usor si mai ieftin.

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

Cu solutia programabila se pot face simultan si adapta la fata locului

Eu nu contest flexibilitatea unei automatizari cu microcontroler, dar nu este in domeniul meu, deci nu pot nici macar sugera o anume solutie, dar de datele expuse de mine, tot trebuie determinate practic si luate in calcul, chiar daca aceasta se face la fata locului.

Link spre comentariu
Distribuie pe alte site-uri

dar de datele expuse de mine, tot trebuie determinate practic si luate in calcul,

 

foarte corect,

 

trebuia inceput cu ansamblul mecanic, care probabil o sa-i dea bataie de cap mai mare decat electronica.

RR

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

Pentru a continua, sunt neceare niste clarificari:

1)Care este frecventa maxima a actionarii contactului care comanda montajul?

2)Ce tip de senzor estimati ca va fi utilizat?

3)Ce deplasare inertiala are volanta, dupa intreruperea alimentarii?

1) Frecventa este de 60 actionari pe minut(pe viitor poate o sa fie dublu , dar momentan atat)

2)Senzorul pe care vreau sa-l utilizez este unul optic

3)Deplasarea inertiala nu ar trebui sa fie asa mare tinand cont ca nu are decat 2 rotatii pe secunda

Editat de Gialdi77
Link spre comentariu
Distribuie pe alte site-uri

Tin sa va multumesc la toti, ca va bateti capul sa ma ajutati. Si imi cer scuze daca uneori nu stiu cum sa ma fac inteles. Va rog sa fiti mai ingaduitori ca sunt la inceput si nu stiu de multe ori cum sa ma exprim in termenii dumneavoastra.

Link spre comentariu
Distribuie pe alte site-uri

1) Frecventa este de 60 actionari pe minut(pe viitor poate o sa fie dublu , dar momentan atat) Adica maxim 2Hz, dar motorul poate realiza o cursa completa in acest interval cand are si sarcina?

2)Senzorul pe care vreau sa-l utilizez este unul optin mediuDaca lucreaza intr-un mediu cu impuritati, nu este recomandat, deoarece apar depuneri pe elementele de radiere, respectiv receptie a fascicolului luminos.

3)Deplasarea inertiala nu ar trebui sa fie asa mare tinand cont ca nu are decat 2 rotatii pe secundindicat sa faceti o probaNu ar trebuii, dar pentru certitudine ar fi util sa faceti o proba cu volanta, in functie de masa ei poate influenta distanta de oprire.

P.S.

Ar fi util, dar nu obligatoriu sa scrieti(daca nu este secret), pentru ce aplicatie doriti sa utilizati montajul.

Editat de miron1947
Link spre comentariu
Distribuie pe alte site-uri

Deplasarea inertiala nu ar trebui sa fie asa mare

La ansamblul motorului de stergator de parbriz, inertial se deplaseaza cca.450(vedeti zona lipsa din disc) post-9-0-29828600-1369381969_thumb.jpg are tot demultiplicare mare(snec) si nu are volanta(doar inertia rotorului), si are si franare electrodinamica pe o portiune din sectorul decupat, deci raman la parerea mea ca trebuie determinat acest parametru(inertia).

Editat de miron1947
Link spre comentariu
Distribuie pe alte site-uri

Dupa parerea mea abordarea unui proiect trebuie sa inceapa de la dispozitivul de executie spre cel de comanda nu invers cum vad ca procedati Dvs.

Editat de miron1947
Link spre comentariu
Distribuie pe alte site-uri

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.

×
×
  • Creează nouă...

Informații Importante

Folosim cookie-uri și tehnologii asemănătoare pentru a-ți îmbunătăți experiența pe acest website, pentru a-ți oferi conținut și reclame personalizate și pentru a analiza traficul și audiența website-ului. Înainte de a continua navigarea pe www.tehnium-azi.ro te rugăm să fii de acord cu: Termeni de Utilizare.

ATENTIE !!! Functionarea Tehnium Azi depinde de afisarea de reclame.

Pentru a putea accesa in continuoare site-ul web www.tehnium-azi.ro, va rugam sa dezactivati extensia ad block din browser-ul web al vostru. Dupa ce ati dezactivat extensia ad block din browser dati clic pe butonul de mai jos.

Multumim.

Apasa acest buton dupa dezactivarea extensiei Adblock