MECCANICA e DINTORNI

COSTRUIAMO LE NOSTRE CNC DIVERTENDOCI CON L'AIUTO DI TANTI PROFESSIONISTI ESPERTI
Oggi è gio mar 28, 2024 11:40

Tutti gli orari sono UTC +1 ora




Apri un nuovo argomento Rispondi all’argomento  [ 138 messaggi ]  Vai alla pagina Precedente  1 ... 4, 5, 6, 7, 8, 9, 10  Prossimo
Autore Messaggio
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mar mar 28, 2017 14:23 
Non connesso
TORNITORE E FRESATORE
Avatar utente

Iscritto il: mer ott 07, 2015 09:11
Messaggi: 1726
Località: Lastra a Signa (Firenze)
Io, in un caso analogo, gestivo un'array di strutture dove l' indice 0 (zero) dell'array era sempre la configurazione corrente, mentre gli indici successivi erano le 'memorie' di programma;
così ti faciliti anche la selezione, perché la memoria 1 corrisponde all' indice 1 ecc.
Quando salvi o recuperi da una memoria, copi la locazione scelta nell' indice zero e viceversa; per copiare il contenuto di una struttura in un altra (dello stesso type) usa semplicemente l'operatore '=' e non memcpy.
Eviteresti anche di dover usare due settori di flash.
Dato che non c'è 'usura' della locazione flash se non gli cambi valore e che praticamente riscrivi sempre gli stessi dati (i bytes modificati in percentuale sono pochi),
la vita della flash rimane ampiamente sufficiente lo stesso.

_________________
Alberto Bianchi
Le mie 'rumente', Tornio: Mi-Bo; Fresatrici: Fervi T044, Rumag REV1S, CST L1; Tavola rotante: Vertex HV8; Divisori: BS-0 & Yantai FNL100B; Trapano: Caber BO6; Forno a muffola; Segatrice Axel 4"x6"; Affila-bulini Parpas AU.


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mar mar 28, 2017 18:36 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: dom gen 31, 2010 21:46
Messaggi: 8842
Località: Bussero (MI)
Nel mio caso devo prevedere due gestioni differenti perché altrimenti dovrei salvare sempre 11 strutture anche se cambio un solo parametro.... nel caso del salvataggio delle impostazioni istantaneo questo deve avvenire ad ogni variazione di parametro proprio per evitare di prevedere una funzione manuale di salvataggio; in questo modo, in qualsiasi momento si toglie alimentazione al micro, i parametri restano salvati. Un conto però è salvare una sola struttura mentre un altro è salvarne 11..... devo fare i conti con i cicli di scrittura della flash. Le impostazioni predefinite invece non prevedo vengano cambiate spesso quindi mi posso permetterle di salvarne sempre 10 alla volta.

_________________
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: gio mar 30, 2017 13:07 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: dom gen 31, 2010 21:46
Messaggi: 8842
Località: Bussero (MI)
Grande AlBi!!! Finalmente funziona!!!
Ho creato un codice solo per provare il salvataggio utilizzando la porta seriale come interfaccia ed usando la stessa identica definizione per la struttura FLASH_SAVE. Funziona tutto a meraviglia... ho provato a salvare solo al singola struttura e non l'intero array ma direi che non dovrebbero esserci differenze visto che gli si passa il puntatore.

Io sbagliavo la funzione di lettura: nella classe SOFReader non sapevo dell'esistenza dell'istanza read_data visto che nell'esempio citato nel codice non la utilizza. Infatti non mi spiegavo come facesse a funzionare visto che la parte di lettura la fa così:
Codice:
reader.open(sector_index);
printf("data %d bytes at %p :\r\n", reader.get_data_size(), reader.get_physical_base_addr());
printf("%.*s\r\n", reader.get_data_size(), reader.get_physical_base_addr());
// "First Data" printed
reader.close();


Ho dovuto solo modificare leggermente rispetto al tuo codice visto che le istanze write_data e read_data non sono void e restituiscono 0 ad indicare che l'operazione si è conclusa correttamente. Questo torna utile anche per senalare eventuali errori.
Queste sono le funzioni di lettura e scrittura:
Codice:

void values_to_flash() //SCRITTURA SU FLASH
{   
    SOFWriter flash_writer;
   
    if (flash_writer.open(7) != kSOF_ErrNone)
    {
        format_flash();
    }
    size_t r = flash_writer.write_data((uint8_t*)&weld_current_save, sizeof(FLASH_SAVE));
    if ( r != sizeof(FLASH_SAVE))
    {
        pc.printf("\n");
        pc.printf("flash save fail\n");
        wait(1.0);
        pc.printf("\n");
    }
    else
    {
        pc.printf("\n");
        pc.printf("flash save ok\n");
        wait(1.0);
        pc.printf("\n");
    }
    flash_writer.close();
}   



void flash_to_values() //LETTURA DA FLASH
{
    SOFReader flash_reader;
   
    if (flash_reader.open(7) != kSOF_ErrNone)
    {
        pc.printf("\n");
        pc.printf("FALSH OPENING FAILURE");
        wait(1.0);
        pc.printf("\n");
    }
    size_t r = flash_reader.read_data((uint8_t*)&weld_current_save, sizeof(FLASH_SAVE));
    if ( r != sizeof(FLASH_SAVE))
    {
        pc.printf("\n");
        pc.printf("flash read fail\n");
        wait(1.0);
        pc.printf("\n");
    }
    else
    {
        pc.printf("\n");
        pc.printf("flash read ok\n");
        wait(1.0);
        pc.printf("\n");
    }
    flash_reader.close();
}



Permettimi un paio di domande visto che sei ferratissimo:
che tipo è il size_t ?
L'utilizzo di definizioni della stdint.h è identico alle vecchie... mi spiego, un uint8_t è identico ad un (unsigned)char?

Grazie

_________________
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: gio mar 30, 2017 15:28 
Non connesso
TORNITORE E FRESATORE
Avatar utente

Iscritto il: mer ott 07, 2015 09:11
Messaggi: 1726
Località: Lastra a Signa (Firenze)
Bene!!! sono veramente contento che hai risolto... Se poi ti serve ancora aiuto non hai che da chiedere...
Devo farti una piccola correzione, non perché mi piaccia fare il saccente, anzi... ma per aiutarti e perché spesso i dettagli sono importanti anche nelle conversazioni tecniche:
read_data() e write_data() non sono istanze ma metodi della classe SOFReader, mentre la variabile 'reader' è l'istanza della classe SOFReader.
Quando istanzia una classe e se ne utilizza un metodo si scrive appunto: reader.read_data().

Comunque, anche secondo me in quell'esempio c'è un errore, al posto della seconda reader.get_data_size() ci doveva essere reader.read_data();

Io non avendo installato la libreria avevo solamente ipotizzato delle chiamate a funzione che accettavano gli stessi parametri giusto per provare la compilazione ed essere sicuro di non passarti fesserie...
Non mi sono curato dei valori di ritorno.

size_t è il tipo ritornato dalla pseudo funzione sizeof() (pseudo perché è risolta al compile time) e in genere corrisponde ad un unsigned int, ma siccome dipende dall'organizzazione della memoria fisica sulla specifica macchina, potrebbe essere anche qualcosa di diverso e così hanno deciso di fare un tipo dedicato che contiene il valore della massima dimensione allocabile di una variabile, array compresi.

Si, come hai ben intuito uint8_t corrisponde ad un char (che è unsigned) ma in generale le definizioni della stdint sono state fatte per essere più chiare e soprattutto univoche.
Questo non toglie che quando si manipolano le stringhe sia ancora opportuno lavorare con i char; uint8_t sarebbe una forzatura che toglierebbe soltanto leggibilità al codice.

Per il debug, al posto delle printf esplicite (in c++ si dovrebbe usare l'ostream cout) , ti suggerirei di configurare e usare la macro 'assert', che puoi lasciare permanentetemente nel codice perché è attiva solamente quando la #define NDEBUG è true che puoi gestire con un flag di compilazione condizionale.

Quando sarai sicuro che funziona tutto al 100% prova a togliere la pragma pack, e ritesta accuratamente il tutto; non credo che avesse responsabilità sul non funzionamento.

Immagino che per questo sviluppo non avrai usato un RTOS....peccato!

_________________
Alberto Bianchi
Le mie 'rumente', Tornio: Mi-Bo; Fresatrici: Fervi T044, Rumag REV1S, CST L1; Tavola rotante: Vertex HV8; Divisori: BS-0 & Yantai FNL100B; Trapano: Caber BO6; Forno a muffola; Segatrice Axel 4"x6"; Affila-bulini Parpas AU.


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: gio mar 30, 2017 16:03 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: dom gen 31, 2010 21:46
Messaggi: 8842
Località: Bussero (MI)
Figurati ben vengano le correzioni!
Come detto il C l'ho studiato una vita fa (ai tempi il C++ non c'era ancora) quindi tante cose le ho apprese usandolo.
Oltretutto io sono molto più preparato sull'hardware che sul software tanto che in origine lo sviluppo del firmware avrebbe dovuto farlo Raban.... poi gli sono nati due gemelli e gioco forza mi ci sono messo io ma con non poche difficoltà :risatina:

Quindi, se ho capito bene, potrei comunque definire una stringa come uint8_t xxx[] a patto di gestirla come stringa e non come array di interi ?

_________________
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: gio mar 30, 2017 16:15 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: dom gen 31, 2010 21:46
Messaggi: 8842
Località: Bussero (MI)
ah, no non ho usato un RTOS. Non uso periferiche complesse quindi ho preferito evitare di complicarmi la vita.
Per lo sviluppo sto usando mbed; è un IDE online sviluppato da ARM, molto potente e ben fornito di librerie, ottimo soprattutto a livello hobbistico e per prototipazione veloce. E' supportato dai maggiori costruttori (ST, NXP, Atmel, Renesas....) e ultimamente viene ben visto anche in ambito professionale (io lavoro nel settore).
E' disponibile anche un sistema operativo che lavora sempre su architettura ARM (Mbed OS), fornito sempre a titolo gratuito, ma non mi ci sono mai messo.

Per la cronaca, QUESTA è la board che sto usando io (la più potente della famiglia STM32F4 di ST).

_________________
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: gio mar 30, 2017 16:49 
Non connesso
TORNITORE E FRESATORE
Avatar utente

Iscritto il: mer ott 07, 2015 09:11
Messaggi: 1726
Località: Lastra a Signa (Firenze)
Due gemelli! :shock: Non lo invidio.... :risatina:

<se ho capito bene, potrei comunque definire una stringa come uint8_t xxx[] a patto di gestirla come stringa e non come array di interi ?>
si, ovviamente interi ad 8 bit, ma non c'è nessun vantaggio... per le stringhe meglio continuare ad usare i char,
anche nelle funzioni di manipolazione è usato il char, si farebbe solo confusione.

Quando ho iniziato io, mbed non esisteva e nemmeno le schede ST-Nucleo, di piccolo c'erano soltanto le discovery.

Un nostro connazionale ha sviluppato questo bellissimo RTOS Open Source che uso fin quasi dagli esordi: http://www.chibios.org
e che ha integrato con l' IDE Eclipse e la toolchain Gnu in un prodotto che si chiama Chibisudio. https://sourceforge.net/projects/chibios/files/ChibiStudio/
Uso sempre quello, è fatto molto bene, e anche il debug con l'ST-Link è molto valido.

L'RTOS nasce per portare ad una semplificazione del lavoro e non il contrario! e non è assolutamente dedicato a gestire le periferiche complesse.
Capisco che però ha i suoi tempi di apprendimento; comunque una volta che l' hai imparato ad usare non torni più indietro.

Nel controllo della saldatrice sarebbe stato sicuramente utile.

Mbed OS è appunto RTOS di ARM, anche corredato di una serie di funzionalità orientate allo IOT

_________________
Alberto Bianchi
Le mie 'rumente', Tornio: Mi-Bo; Fresatrici: Fervi T044, Rumag REV1S, CST L1; Tavola rotante: Vertex HV8; Divisori: BS-0 & Yantai FNL100B; Trapano: Caber BO6; Forno a muffola; Segatrice Axel 4"x6"; Affila-bulini Parpas AU.


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mar apr 11, 2017 21:33 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: dom gen 31, 2010 21:46
Messaggi: 8842
Località: Bussero (MI)
piccolo aggiornamento. Grazie all'aiuto di AlBi ho potuto terminare lo sviluppo delle routine di gestione dei dati, sia per il salvataggio della configurazione corrente che per la memorizzazione di 10 configurazioni modificabili.
Ora è venuto il momento di passare all'artiglieria pesante: i cicli di saldatura.
Ho giù sviluppato tutte le classi per la lettura dei sensori e la gestione delle varie uscite. Per quanto riguarda il controllo in corrente l'idea era quella di affidarsi ad una libreria PID già preconfezionata, QUESTA.
AlBi, se potessi dargli un'occhiata e darmi un parere te ne sarei grato.... più che altro ora devo capire se è veloce abbastanza per quello che dobbiamo fare oppure no.
La mia preoccupazione non è per il controllo in DC statico ma per il controllo in AC e in pulsata dove i cambi sono rapidi e non sono in grado di capire se la funzione di trasferimento è veloce abbastanza da starci dietro.
Le condizioni peggiori sono queste:
AC a 500Hz: in questo caso la polarità della torcia cambia 500 volte al secondo e ad ogni cambio devo portare la corrente a pochi ampere per effettuare la transizione in modo che gli IGBT di uscita non debbano commutare a pieno regime.... diciamo che devo scendere a 5/10A, effettuare la commutazione e risalire a regime....il tutto 500 volte al secondo.
DC con pulsazione a 5Khz: qui devo cambiare la corrente da un valore massimo ad uno minimo con frequenza 5Khz (quindi 5000 volte al secondo).

In tutto questo sarebbe meglio che la corrente non scenda e salga con un gradino ma con una rampa la cui pendenza sia veloce abbastanza da garantire il raggiungimento e la tenuta del valore impostato entro il ciclo, che durerà 500Hz ovvero 2millisec oppure 5000Hz ovvero 200microsec.
Questi tempi per il microcontrollore che sto usando sono lentissimi ma non lo so se lo sono altrettanto per la routine di PID che sto valutando di usare.
Ora faccio un po' di prove di latenza ma mi piacerebbe capire meglio come funziona..... ad esempio non capisco che differenza c'è tra la modalità automatica e manuale (PID::setMode e PID::setInterval).. setInterval è di tipo float e rappresenta i secondi tra un calcolo e l'altro, ma i secondi per quello che devo fare io sono un'eternità :risatina:

_________________
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mar apr 11, 2017 22:02 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: dom gen 31, 2010 21:46
Messaggi: 8842
Località: Bussero (MI)
Ulteriore aggiornamento. Ho fatto un rapido test per vedere quanto ci mette la routine di calcolo della libreria PID nuda e cruda.
Questo il codice:
Codice:
    PID CurrentIn; //definisco un PID
    float out;
    uint16_t inizio, fine;       
    Timer conta;  //definisco un timer
    while (1) {
        conta.reset(); //resetto il timer
        conta.start(); //faccio partire il timer
        inizio = conta.read_us(); //memorizzo posizione del timer
        out = CurrentIn.compute(); //eseguo il calcolo PID
        fine = conta.read_us() - inizio; //calcolo tempo impiegato
        PC.printf("calcolo PID richiede %dus\n",fine); //visualizzo tempo impiegato
    }

Risultato: 2us
Così ad occhio mi pare che ci siamo, anche considerando che la printf è abbastanza pesante di suo. Certo sulla pulsazione da 200us non ho tantissima risoluzione ma direi sufficiente.

_________________
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mar apr 11, 2017 22:26 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: mar mar 23, 2010 22:18
Messaggi: 41202
Località: Artena(Roma)
si direi che ci siamo , la stessa frase di Colombo quando era convinto di essere arrivato nelle indie :risatina:

_________________
la democrazia funziona fino a quando fate quello che dico io!
Mc Mazzafrusten meccanico mannaro
il riparatore di riparazioni
er robin hood de no'antri
tagliatore scelto di puntarelle
http://www.lievitoedintorni.it/phpbb/index.php


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mar apr 11, 2017 23:15 
Non connesso
CAPO OFFICINA

Iscritto il: dom nov 06, 2011 17:34
Messaggi: 32784
Località: Napoli
:risatina: :risatina:


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mer apr 12, 2017 06:24 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: dom gen 31, 2010 21:46
Messaggi: 8842
Località: Bussero (MI)
beh almeno lui aveva davanti la terra... qui ho il mare a 360° :rotfl:

_________________
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mer apr 12, 2017 06:42 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: mar mar 23, 2010 22:18
Messaggi: 41202
Località: Artena(Roma)
:risatina:

_________________
la democrazia funziona fino a quando fate quello che dico io!
Mc Mazzafrusten meccanico mannaro
il riparatore di riparazioni
er robin hood de no'antri
tagliatore scelto di puntarelle
http://www.lievitoedintorni.it/phpbb/index.php


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mer apr 12, 2017 08:02 
Non connesso
CAPO OFFICINA
Avatar utente

Iscritto il: lun feb 29, 2016 11:29
Messaggi: 13594
Località: Ustica & Dintorni saltuariamente Bologna o Pesaro
Per albi e McMax
... dovete leggere il regolamento ... in questo forum si parla italiano !!! :rotfl: :rotfl: :rotfl:
Nel C non ci ho mai capito nulla :oops: io mi sono fermato al qbasic 7 :-|

_________________
Gli errori sono per i principianti, noi esperti puntiamo al disastro !!!
Le conoscenze acquisite, sono proporzionali al DANNO PRODOTTO !!! ( esperienza personale...)
youtube



Immagine 2°socio TIRATOSAURO CLUB ITALIAN


Top
 Profilo  
 
 Oggetto del messaggio: Re: nuovo controller Mc Raban basato su STM32 Nucleo
MessaggioInviato: mer apr 12, 2017 10:13 
Non connesso
TORNITORE E FRESATORE
Avatar utente

Iscritto il: mer ott 07, 2015 09:11
Messaggi: 1726
Località: Lastra a Signa (Firenze)
:risatina: :risatina: Chissà com'è che Onorino ci azzecca sempre...
@Davide e dai... se cerchi bene qualche parola in italiano la trovi... :rotfl: :rotfl: :rotfl:

_________________
Alberto Bianchi
Le mie 'rumente', Tornio: Mi-Bo; Fresatrici: Fervi T044, Rumag REV1S, CST L1; Tavola rotante: Vertex HV8; Divisori: BS-0 & Yantai FNL100B; Trapano: Caber BO6; Forno a muffola; Segatrice Axel 4"x6"; Affila-bulini Parpas AU.


Top
 Profilo  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 138 messaggi ]  Vai alla pagina Precedente  1 ... 4, 5, 6, 7, 8, 9, 10  Prossimo

Tutti gli orari sono UTC +1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBB.it