makemsis Inserito: 28 gennaio 2010 Segnala Share Inserito: 28 gennaio 2010 Avrei bisogno di scrivere un programma che generi i punti necessari a creare una sinusoide. Qualcuno può aiutarmi?Grazie. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 28 gennaio 2010 Segnala Share Inserita: 28 gennaio 2010 Si ma come? Per generare una sinusoide ci son praticamente due metodi: o usi una tabella o calcoli il seno usando un'algoritmo che è piuttosto pesante. Link al commento Condividi su altri siti More sharing options...
ASMO Inserita: 28 gennaio 2010 Segnala Share Inserita: 28 gennaio 2010 Io posso (se vuoi) fornirTi i codici esadecimali da inserire in una Eprom per ottenere (previo collegamento ad un D.A.C.) in uscita una sinusoide, con risoluzione a 64, 128, oppure 256 bit.Altro non so.SalutiASMO Link al commento Condividi su altri siti More sharing options...
makemsis Inserita: 28 gennaio 2010 Autore Segnala Share Inserita: 28 gennaio 2010 Devo semplicemente moviementare un motore con un uscita analogica. Il motore deve fare un loop tipo: "SU-GIU'-SU", tale loop dovrà avere una durata impostabile da parametro (una sorta di lunghezza d'onda). Quindi avevo pensato di creare una sinusoide... Link al commento Condividi su altri siti More sharing options...
mircoelektra Inserita: 28 gennaio 2010 Segnala Share Inserita: 28 gennaio 2010 o calcoli il seno usando un'algoritmo che è piuttosto pesante.Ma l' S7-300 non ha l' istruzione nativa "SIN" per calcolare la funzione seno? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 28 gennaio 2010 Segnala Share Inserita: 28 gennaio 2010 Ma l' S7-300 non ha l' istruzione nativa "SIN" per calcolare la funzione seno?Certo, ma non lo fa per opera dello spirito santo. E' una delle istruzioni che impiegano più tempo macchina. Se devi reiterarla per n volte diventa piuttosto pesate come tempo di ciclo.Il motore deve fare un loop tipo: "SU-GIU'-SU"Ma non basta una rampa, magari raccordata? Link al commento Condividi su altri siti More sharing options...
makemsis Inserita: 28 gennaio 2010 Autore Segnala Share Inserita: 28 gennaio 2010 Può essere...ma non saprei da dove partire... Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 28 gennaio 2010 Segnala Share Inserita: 28 gennaio 2010 Behe, tanto per cominciare ti do un'idea su come fare una rampa lineare a tempo variabile.In configurazione Hw setti il tempo del timer di sistema, ti consiglio di non scendere comunque sotto i 10 ms.Abiliti l'inturrupt legato all'OB35. Nell'OB35 richiami la funzione rampa.Tanto per fissare le idee annettiamo che il tuo riferimento sia in analogico 0-10v. L'uscita del D/A_C è suddivisa in 2047 gradini elementari.Se ad ogni richiamo incrementi di 1 l'uscita PAW corrispondente impiegherai 20.47" per andare da 0 al massimo. Se vuoi un tempo più lungo, per esempio 4 volte più lungo, richiami la funzione ogni 4 interrupts. Se vuoi un tempo più corto, per esempio la metà, nella funzione sommi 2 invece di 1.Questi pametri li può scrivere l'operatore nello HMI e poi li trasformi.Attenzione che il tempo di timer lo puoi stabilire solo in fase dic onfigurazione, quindi devi farti bene i conti dei limiti delle rampe per stabilire il tempo più idoneo ai tuoi scopi. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 28 gennaio 2010 Segnala Share Inserita: 28 gennaio 2010 E' una delle istruzioni che impiegano più tempo macchina. Se devi reiterarla per n volte diventa piuttosto pesate come tempo di ciclo.Il calcolo del seno, su una 315, richiede 3µs. Un po' di più il coseno: 3,65µs. L'operazione più pesante è il calcolo dell'arcoseno: 6,44µs (vedi "Lista operazioni S7-300", a pagina 49).Il problema, casomai, è che non ci sono dati per poter giudicare se la soluzione con andamento sinusoidale sia adatta o meno per il tipo di applicazione.Sappiamo solo che c'è qualcosa che deve andare su e giù, ma non sappiamo niente sulle velocità, sulle masse, sul tipo di motore usato per la movimentazione.Se si tratta solo di calcolare un riferimento con andamento sinusoidale, partendo da un tempo ciclo stabilito, direi che la soluzione è abbastanza banale.Per esempio, potresti effettuare il calcolo in OB35, con tempo impostato in configurazione hardware di 10ms.Dal dato di partenza "TempoCiclo" si calcola quante volte devo eseguire l'OB35 per completare il ciclo.Per comodità, si potrebbe impostare il tempo ciclo in millisecondi, così basta il semplice calcolo N_Step = TempoCiclo / 10 per sapere quanti step (esecuzioni di OB35) devo fare per colmpetare il ciclo.Fatto questo, si può calcolare l'entità di incremento angolare per ogni step. Visto che le funzioni trigonometriche funzionano con gli angoli espressi in radianti, basta il seguente calcolo: Inc = 2PI/N_Step.Il tutto si può riassumere come segue:Inc = 2PI*10/TempoCiclo = 62,83185/TempoCicloIl calcolo vale solo per l'esempio sopra descritto, con OB35 avviato ogni 10ms e TempoCiclo espresso in ms.Calcolato questo incremento, in OB35 si incrementa l'angolo virtuale di tale valore e poi si calcola il seno.Altro metodo potrebbe essere quello di misurare il tempo trascorso dall'inizio ciclo (basta ad ogni scansione incrementare del tempo impiegato per l'ultimo ciclo, oppure di "OB35_EXC_FREQ" se il tutto è ancora eseguito in OB35).Si calcola poi la frazione di giro virtuale effettivamente percorsa dividendo il tempo trascorso da inizio ciclo per il tempo totale del ciclo, e si calcola poi il seno dell'angolo corrispondente.Esempio:Rif = k * sin(2 * PI * TempoTrascorso / TempoTotale).Buttato giù grezzo grezzo in AWL, con la costante k = 27848 in modo da ottenere il massimo riferimento pari al 100% del segnale disponibile, diventa: L 6.283185e+000 L #TempoTrascorso *R L #TempoTotale /R SIN L 2.764800e+004 *R RND T PAW xxxOvviamente, tutti i calcoli vanno eseguiti in virgola mobile.E non si deve nemmeno dimenticare che il motore, nei punti prossimi ai 0° e ai 180° dell'angolo virtuale, lavorerebbero con riferimento molto basso.Si dovrebbe quindi prevedere una soglia minima per il riferimento. Link al commento Condividi su altri siti More sharing options...
makemsis Inserita: 2 febbraio 2010 Autore Segnala Share Inserita: 2 febbraio 2010 Grazie infinite a tutti!!!! Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora