help progetto mini tornio da banco

Sezione dedicata all'elettronica di controllo cnc.
Rispondi
torn24
God
God
Messaggi: 5335
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: help progetto mini tornio da banco

Messaggio da torn24 » domenica 8 marzo 2020, 9:58

In questo caso, la funzione map è sostanzialmente inutile
Ho messo 1000 nella funzione map() come valore casuale :D mettere l'avanzamento consentito dal sistema che forse è maggiore di 1000 mm al minuto.

@ hellfire39 il fatto che il programma che ho postato non provochi neanche un movimento del motore, mi fa ipotizzare che il problema non sia del programma. :D ovvero con tutti i difetti del caso un movimento del motore e l'arresto ai finecorsa dovrebbe esserci.
Per quanto riguarda il mio contributo al problema sarebbe senza uso di librerie, per vari motivi, uno non avendo mai usato quella libreria dovrei informarmi su l'uso, due il codice senza libreria non sarebbe proprio bloccante, ma si avrebbe un ritardo variabile in durata sulla risposta dei comandi, forse tale ritardo potrebbe essere trascurabile.
CIAO A TUTTI !

Avatar utente
hellfire39
God
God
Messaggi: 3789
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: help progetto mini tornio da banco

Messaggio da hellfire39 » domenica 8 marzo 2020, 10:35

l'avanzamento consentito dal sistema che forse è maggiore di 1000 mm al minuto
come ho scritto, sicuramente non con quel codice: li il limite è dato dall'utilizzo di delay()
mi fa ipotizzare che il problema non sia del programma
in ogni caso: con potenziometro a zero hai una divisione per zero che manda in crash il programma.
Non ho mai verificato come si comporta Arduino, ma non è una cosa buona.
E, al di sopra di una certa velocità, come ho scritto prima, viene delay(0) e quindi non emetti impulsi. O meglio, sono così veloci che il driver potrebbe non vederli.
ma si avrebbe un ritardo variabile in durata sulla risposta dei comandi,
ma se arrivi col potenziometro a zero, tale ritardo tende a infinito. Molto meglio scegliere almeno una velocità minima, in modo da avere un delay non superiore a qualche decimo di secondo.

In ogni caso, in quel periodo Arduino non "vede" eventuali ingressi digitali, se non via interrupt (che però apre tutta un'altra serie di problemi, ad esempio i disturbi).

Il ritardo delle altre istruzioni diventa trascurabile solo a velocità basse. Arduino è un processore a 8 bit ed ogni calcolo che impieghi più di 8 bit (es int), oppure, molto peggio, calcoli in virgola mobile, richiede molte istruzioni.
Quindi, come minimo rende imprecisa la velocità (e quindi quasi inutili i calcoli, soprattutto se poi si vuole visualizzare la velocità su un display ed utilizzarla per altri calcoli). Nei casi peggiori, a velocità più elevate, rende totalmente inaffidabile il valore impostato.

Secondo me, si prende la libreria accelstepper, prende l'esempio speed e si legge un po' di documentazione per capire come funziona. Alla fine è semplice. Adesso devo uscire, più tardi o nel pomeriggio, posto un esempio d'uso.

Io ho un programma che fa muovere una slitta avanti e indietro, ma è un po' complicato per dei neofiti.

torn24
God
God
Messaggi: 5335
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: help progetto mini tornio da banco

Messaggio da torn24 » domenica 8 marzo 2020, 11:43

ma è un po' complicato per dei neofiti
Aldilà del mio livello che potrebbe comunque essere basilare, non posso definirmi neofita in quanto mi cimento con il linguaggio C da 15 anni :badgrin:
Poi per l'utente non interessa neanche capirlo, ma avere un programma funzionante da caricare su arduino :D
CIAO A TUTTI !

Avatar utente
hellfire39
God
God
Messaggi: 3789
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: help progetto mini tornio da banco

Messaggio da hellfire39 » domenica 8 marzo 2020, 12:07

Aldilà del mio livello che potrebbe comunque essere basilare
Mi riferivo all'utente che ha aperto il thread.


P.S. comunque la divisione per zero non è un buon segno :mrgreen:

Inoltre, ma questa è una mia fissa personale, c'è un tipo di codice che mi accende un campanello di allarme e che mi porta a giudicare male il codice ed è il seguente:

Codice: Seleziona tutto

  if (digitalRead(SELETTORE) == HIGH) {
       digitalWrite(DIRPIN,HIGH);
   } else {
       digitalWrite(DIRPIN,LOW);
   }

// può essere scritto
digitalWrite(DIRPIN, digitalRead(SELETTTORE));

Quando si vuole assegnare un'espressione booleana ad una variabile booleana, if è ridondante. Basta assegnare l'espressione alla variabile, con una riga sola.
Sebbene, semanticamente, si ottenga lo stesso effetto, e, probabilmente, il compilatore è abbastanza intelligente da riconoscere il pattern e scrivere codice ottimizzato, si tratta sempre di un segno che chi l'ha scritto non ha ben chiaro il concetto di espressioni booleane.

torn24
God
God
Messaggi: 5335
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: help progetto mini tornio da banco

Messaggio da torn24 » domenica 8 marzo 2020, 12:16

Nonostante mi cimenti da anni con la programmazione in generale "vari linguaggi e vari ambiti", per esprimere le mie competenze dico sempre conosco i rudimenti della programmazione. Cosa veritiera in quanto l'apprendimento è da autodidatta e questo comporta tante cose :D Ma come dire, non so scrivere una poesia ma posso capirla, cosi vale per il codice :badgrin:
CIAO A TUTTI !

Avatar utente
hellfire39
God
God
Messaggi: 3789
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: help progetto mini tornio da banco

Messaggio da hellfire39 » domenica 8 marzo 2020, 12:23

[Scrivo volutamente un post a parte per tenere isolato questo argomento]

Per quanto riguarda la libreria AccelStepper, il suo uso è abbastanza facile, se la si utilizza in velocità e non in posizione.

Attenzione: utilizzandola in velocità, non si ha la rampa di accelerazione!

Si include la libreria

Codice: Seleziona tutto

#include <AccelStepper.h>
Si crea l'oggetto indicandogli i pin da utilizzare per step e direzione.

Codice: Seleziona tutto

#define STEP 3
#define DIR  2

AccelStepper stepper(AccelStepper::DRIVER, STEP, DIR);
La costante AccelStepper:DRIVER indica alla libreria che stiamo pilotanto il motore attraverso un driver. La libreria a anche altre modalità di lavoro.

Utilizzi stepper.setSpeed(NNN) per impostare la velocità desiderata in passi al secondo.

in loop devi chiamare periodicamente

Codice: Seleziona tutto

stepper.runSpeed()
Questa funzione si occupa di controllare se è ora di inviare uno step al driver e non è bloccante.
Tanto più velocemente richiami tale funzione, quanto più veloce riuscirai ad andare.

Come hai suggerito anche tu, sarebbe meglio avere pulsanti da premere per start e stop. Io controllerei ed imposterei la velocità solamente quando si parte, in modo da non rallentare il loop().
Chiaramente, in questo modo non si può variare la velocità in movimento.
Quindi, se questa è una funzione desiderata, bisogna leggere più frequentemente l'analogico e aspettarsi un calo delle prestazioni.
Appena recupero un Arduino vedo di quanti microsecondi si tratta.

---------------------

Come esperienza personale, non ho avuto problemi di velocità con runSpeed(). Ma tieni conto che non fa rampe di accelerazione. Di contro, facendo movimenti in posizione (vedi l'esempio "Bounce"), ho notato l'impossibilità di raggiungere frequenze elevate (stavo testando i limiti di stepper e driver). In tal caso ho dovuto utilizzare un arduino più performante (Teensy).

brborl
Newbie
Newbie
Messaggi: 6
Iscritto il: sabato 28 dicembre 2019, 15:12

Re: help progetto mini tornio da banco

Messaggio da brborl » domenica 8 marzo 2020, 12:37

Molte grazie a tutti voi,molto bello il confronto tra di voi perché innalza il livello tecnologico della cosa questo finché resta nei limiti del confronto ed è appunto quello che state facendo quindi grazie di nuovo,interessante lo spunto automazione realizzato dall'amico campano sul suo tornio con finalità filettatura e non solo tornitura che appunto era la mia voglia per non dover ogni volta cambiare tutta la cascata di ingranaggi,ad ogni modo domani sera mi metto a provare tutti gli spunti che avete inserti e posterò le immagini della parte hardware,volevo sapere come inserire le immagini in questo forum.
Bruno

Avatar utente
hellfire39
God
God
Messaggi: 3789
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: help progetto mini tornio da banco

Messaggio da hellfire39 » domenica 8 marzo 2020, 13:12

Se il tuo scopo è (anche) filettare, ti consiglio di valutare la soluzione offerta da mimoletti che è sicuramente funzionante e collaudata.

torn24
God
God
Messaggi: 5335
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: help progetto mini tornio da banco

Messaggio da torn24 » domenica 8 marzo 2020, 16:41

Per filettare è necessario avere l esatto numero di giri del mandrino, questo si può ottenere in due modi, "contare i numero di giri" o inserire il numero di giri di un sistema meccanico. Se non possiamo sapere l esatto numero di giri non possiamo filettare perché non riusciremmo a dare il giusto avanzamento a giro.
CIAO A TUTTI !

Avatar utente
hellfire39
God
God
Messaggi: 3789
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: help progetto mini tornio da banco

Messaggio da hellfire39 » domenica 8 marzo 2020, 17:14

Infatti, se non sbaglio, il sistema proposto da mimoletti prevede l'utilizzo di un encoder per rilevare i giri motore E sincronizzare l'avanzamento con la posizione angolare.

Sinceramente mi sembra una cosa un tantino complicata da programmare da zero per dei neofiti. Quindi, la proposta di un sistema già fatto e collaudato mi sembra la soluzione migliore!

tecno67
Member
Member
Messaggi: 391
Iscritto il: lunedì 26 febbraio 2007, 14:25
Località: Prov. di Milano

Re: help progetto mini tornio da banco

Messaggio da tecno67 » martedì 10 marzo 2020, 13:25

Scusate l'intromissione, ma credo che al di la degli stili e delle filosofie di programmazione, qui la discriminante sia proprio l'uso che si intende fare del sistema. Concordo quindi in parte con quanto detto da helfire39.
Se lo scopo è quello di avere un comodo sistema per variare la velocità di avanzamento, direi che al limite si può benissimo avere un sistema di regolazione della velocità del motore, che si può trovare già bello e che pronto con poco meno di 10€ con tanto di display e via... se poi non è sincronizzato col mandrino alla fine cambia poco per fare una semplice passata di tornitura prima sgrossando a passo largo e poi con passo minore per avere una bella finitura.
Se invece si vuole fare una filettatura, si ricade inevitabilmente nel classico albero elettrico tra mandrino ed avanzamento dove ovviamente non se ne parla nemmeno di avere il rapporto d'asse determinato da un segnale analogico proveniente da un potenziometro. Deve essere un valore numerico ben fisso per tutta la durata della filettatura e l'asse deve rimanere agganciato dall'inizio alla fine di tutte le passate anche in ritorno, altrimenti devi fare la ripresa al volo ad ogni passata come si fa sul tornio tradizionale , ma ci vuole una bella mano!
In questo caso inevitabilmente la motorizzazione dell'asse deve essere closed-loop. Sul mandrino ci và un encoder bidirezionale e non un semplice sensore (se si vuole usare dei sensori ce ne vanno due sfasati tra loro realizzando in pratica un encoder da 1passo/giro) e l'arduino o chi per lui, deve lavorare come un divisore di frequenza a livello teorico. In pratica come un controllo posizione. A quel punto usa una delle tante schede di controllo CNC con relativo SW e configura la macchina come tornio col motore mandrino controllato da una delle uscite del controller perché come dice hellfire39 non è certo una cosa alla portata di tutti programmarlo, anche per uno bravo. Poi dubito molto che un Arduino UNO od un PIC a 8 bit possa gestire una cosa simile.

Avatar utente
hellfire39
God
God
Messaggi: 3789
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: help progetto mini tornio da banco

Messaggio da hellfire39 » martedì 10 marzo 2020, 14:30

:D
Poi dubito molto che un Arduino UNO od un PIC a 8 bit possa gestire una cosa simile
Dubiti male, perché c'è chi l'ha fatto.

Certo, se pretendi di fare ciò che è stato descritto solamente con il SW, allora hai ragione: diventa davvero difficile e limitato nelle prestazioni.
Però, i micro hanno le cosiddette CIP (Core Independent Peripherals). Dei componenti hardware che possono fare operazioni in modo autonomo, slegate dal processore.
Alcuni pic della Microchip, ad esempio, hanno un CIP chiamato QEI (Quadrature Encoder Interface, li trovi in alcuni PIC18F o ds PIC33). Questi ti permettono di avere in tempo reale il conteggio dell'encoder senza dover scrivere codice, che avrebbe grossi limiti di velocità. Li ho usati nel passato proprio per fare dei DRO e dei divisori di conteggi encoder per un'applicazione particolare.

Ma, per un'applicazione di divisore, è sufficiente utilizzare un'altra CIP molto più comune: i timer. Molti timer, nelle varie famiglie di micro, hanno la possibilità di essere pilotati da impulsi esterni e scatenano un interrupt al raggiungimento di un valore prefissato. E questo è un ottimo metodo per fare un divisore.

Certo, richiede dimestichezza con la programmazione dei micro e, in taluni casi, una manciata di componenti esterni per condizionare il segnale proveniente dall'encoder.

tecno67
Member
Member
Messaggi: 391
Iscritto il: lunedì 26 febbraio 2007, 14:25
Località: Prov. di Milano

Re: help progetto mini tornio da banco

Messaggio da tecno67 » martedì 10 marzo 2020, 16:05

Non lo metto in dubbio, probabilmente parli del 18F4431 e fratelli della stessa famiglia. Ci avevo giocato un po ancora una quindicina d'anni orsono ai tempi del Mikrobasic, prima ancora di sapere dell'esistenza di Arduino. Ma ti ricordo che l'utente che ha iniziato il post ha a disposizione un Arduino UNO, un motore stepper Nema23 ed il relativo driver open-loop. Con quelli al massimo ci fa un regolatore di velocità open loop, a meno di essere un mago della programmazione dei microcontrollori.
Magari con un oggetto come quello di cui ho trattato in un altro post qui sul forum di elettronica CNC, può fare qualcosa di più, sempre con una certa capacità di programmazione.... oppure si accontenta!

Avatar utente
hellfire39
God
God
Messaggi: 3789
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: help progetto mini tornio da banco

Messaggio da hellfire39 » martedì 10 marzo 2020, 16:37

Ma l'utente che gli ha offerto il proprio progetto, mimoletti, è proprio quello che ha realizzato il sincronismo elettronico.
Quindi, se lo scopo è quello,è la soluzione ideale. Altrimenti si tiene Arduino e fa un semplice circuito di avanzamento non sincronizzato a velocità costante

torn24
God
God
Messaggi: 5335
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: help progetto mini tornio da banco

Messaggio da torn24 » mercoledì 11 marzo 2020, 8:03

In realtà per la tornitura su un tornio da banco si può fare a meno di cambiare valore di avanzamento, e quindi ingranaggi, si può scegliere un avanzamento ridotto che vada bene un po per tutto. Quindi è proprio la filettatura che obbliga il cambio di ingranaggi.
CIAO A TUTTI !

Rispondi

Torna a “Elettronica CNC”