Condizionamento pick up magnetico

Si esatto, ho un filtro sull'alimentazione sul cavo d'ingresso e anche nel circuito dopo il regolatore di tensione 7805...poi ho un filtro sul cavo d'ingresso sempre LC di modo comune per il segnale in ingresso e uno anche sulla scheda. Poi ho collegato la massa del circuito alla scatola ma niente..nessuno gli è mai capitato di fare applicazioni per motori e riscontrare questi problemi?

Guardando un pò attentamente il segnale che hai postato e lo schema sopratutto , mi sono reso conto che hai impostato un valore di soglia di 0,2 volt al comparatore, valore ottenuto però da un semplice partitore resistivo che viene alimentato dalla tensione in uscita del regolatore
7809 / 7805 . Questo valore di soglia secondo me è troppo basso e soggetto ai minimi disturbi (essendo ottenuto da solo 2 resistenze),basta poco per far scattare il comparatore.
Se interpreto bene il segnale blu (comparatore) si vede che partendo da basso va alto torna basso e di nuovo alto e li rimane fino a quando la sinusoide (pick up) torna sotto il valore di soglia.........quindi il suo funzionamento lo fa..........ma nella sinusoide si vede chiaramente il segnale interferente che secondo me l'unica cosa che può servire a qualcosa è un filtro passa basso tipo 24db/ottava in modo da attenuare il più possibile quei picchi che rompono le scatole...

Come mai hai impostato il valore di soglia al comparatore così basso ,sicuramente avevi un buon motivo che però mi sfugge... :~

Ho impostato la soglia a 0.2v perchè se l'avessi presa più alta avrei generato in uscita un segnale sfasato che ad alto numero di giri comporta un errore in gradi notevole. Se il pick up desse un onda quadra come segnale allora metterei la soglia a 4v anche, ma essendo tipo sinusoide ha un certo tempo di salita. Però posso provare ad alzare la soglia e ci avevo pensato.
Ma il fatto che mi preoccupa di più è che il micro si resetta. Il segnale di pick up è di modo comune. Il pick up ha un filo che va alla bobina (quello che io intercetto) e un altro filo collegato al telaio; dovrei cercare di isolarlo rispetto la bobina perchè è lui che disturba il circuito secondo me attraverso appunto la massa che ho collegato al telaio.

Ho impostato la soglia a 0.2v perchè se l'avessi presa più alta avrei generato in uscita un segnale sfasato che ad alto numero di giri comporta un errore in gradi notevole. Se il pick up desse un onda quadra come segnale allora metterei la soglia a 4v anche, ma essendo tipo sinusoide ha un certo tempo di salita. Però posso provare ad alzare la soglia e ci avevo pensato.
Ma il fatto che mi preoccupa di più è che il micro si resetta. Il segnale di pick up è di modo comune. Il pick up ha un filo che va alla bobina (quello che io intercetto) e un altro filo collegato al telaio; dovrei cercare di isolarlo rispetto la bobina perchè è lui che disturba il circuito secondo me attraverso appunto la massa che ho collegato al telaio.

Ma il pick-up girando ti dovrebbe modificare solo la frequenza ( o ti varia anche l'ampiezza della sinusoide ), non mi sembra che aumentando la frequenza ti possa portare errori in gradi perchè il comparatore comunque scatta solo al raggiungimento di tale tensione...........

Guardando il grafico dei segnali noti anche tu che il comparatore funziona , è il segnale che è da ripulire da quei picchi......e bisogna sistemare il filtro sull'alimentazione perchè si vedono i disturbi trasferiti ma attenuati.........Dici che il micro si resetta ma da cosa lo deduci ?

Intendevo che se il segnale è sinusoidale ha un certo rise time, quindi più la soglia è bassa più il comparatore scatta prima.
Vedo che si resetta perchè il motore si spegne e ho un led che fa 3 lampeggi quando si accende e li fa appunto quando si spegne il motore perchè significa che si è spento e riacceso il uP.
L'alimentazione è pulita, da cosa vedi che è sporca? C'è un 1000uF dopo il 7805 e dei 100nF sul micro e sul comparatore

Se guardi il segnale blu (comparatore) noti che segue un'ondulazione del segnale giallo (pick-up) ma attenuata.
Quel segnale all'uscita dell'operazionale dovrebbe stare pari ad alimentazione e visto che oscilla vuol dire che l'alimentazione è da filtrare.
Quella sinusoide ha un periodo di circa 30 microsecondi che corrisponde ad una frequenza di circa 33Khz e dovresti applicare un filtro
passa basso .

ps. E comunque devi lavorare sulla schermatura..

Bisogna intendere cosa significa filtrare l'alimentazione...più di così non è che si può filtrare.
Quel disturbo deriva dalla massa sicuramente.
Ho visto che alcuni hanno progettato un delayer per il motore da vespa, che consiste nel mettere un filtro RC tra il filo rosso (segnale pick up) e il filo bianco (che loro dicono sia la massa); Io applico il mio circuito tra il filo rosso e il telaio, ovvero il ritorno per il segnale di pick up dato che questo è collegato a un capo proprio al telaio. Probabilmente il segnale di pick up va condizionato così: si prende il segnale tra il rosso (pick up) e il bianco, anche se il bianco non è il suo vero riferimento, e poi con il comparatore configurato in questo schema: http://www.simplecircuitdiagram.com/wp-content/uploads/2010/04/Detector-for-Magnetic-Transducer.gif si rileva il segnale differenziale del pick up e così il rumore di modo comune viene escluso.
La massa del mio circuito poi la devo collegare per forza al telaio perchè altrimenti, quando mando il segnale alla bobina, (che essa ha proprio un filo collegato al telaio per il ritorno di corrente della scintilla) esso deve essere riferito al telaio.
Qui mi sorge il dubbio quindi: anche il pick up è riferito al telaio, quindi poi il comparatore fa dei problemi?

Ciao a tutti,
credo di aver risolto il problema dei disturbi per quanto riguarda il condizionamento del segnale del pick up.
Ora però ho un ulteriore problema.
Ho un pulsante collegato al pin 15 (digital pin 9, OC1A/PCINT1) del micro atmega328p e ho necessità di premerlo in determinati momenti a motore acceso. Dato che comunque i disturbi che arrivano possono influenzare questo pin ( e così è!) ho messo un 100nF tra il pin e massa.
Il pin è normalmente alto tramite il pull up interno e quando premo il pulsante va basso.
Quando arriva un disturbo che mi fa andar basso il pin ripetutamente senza il mio volere, il uP da di matto.
Premesso che utilizzo il timer 1 per generare un ritardo, questo pin ha a che fare con tale timer?
Per far delle prove ho escluso la parte di codice che usa questo pin e quindi non va a leggere il suo stato, ma se inizio a premerlo ripetutamente e velocemente (come se un disturbo arrivasse ripetutamente su quel pin) allora il uP inizia a fare delle cose che non dovrebbe dato che non vado a rilevare quel pin.

Qualcuno mi spiega il perchè?
Grazie milleeeeeeeeeee

cosi su due piedi ti do una soluzione un po drastica usa un fotoaccoppiatore e non se ne parla più.

Pietro

Secondo me hai un problema generale di alimentazione disturbata.

Potresti provare di usare al posto del pullup interni del pullup esterni da 1kOhm.
Ciao Uwe

Allora perchè se carico uno sketch vuoto cioè che non fa nulla non ho questo problema?
Come posso disabilitare gli interrupt su quel piedino?

non serve disabilitare gli interrupt se non li hai attivati.
Sei sicuro che non hai un problema di SW o di RAM troppo piena?
Ciao Uwe

All'inizio li disabilito tutti con cli(); e poi setto dei registri per il timer1 e poi sempre nel setup riabilito tutti con sei();

Che intendi con problemi relativi a Ram troppo piena? Non ne ho mai sentito parlare.

ekjk:
...
Che intendi con problemi relativi a Ram troppo piena? Non ne ho mai sentito parlare.

L'Arduino UNO ha 2kByte di RAM. se usi tanti variabili e array si riempie e sovvrascrive variabili di sistema e fa cose strane.
Ciao Uwe

ma io per essere sicuro isolerei con un fotoaccoppiattore arduino con il resto, giusto per essere scrupolosi, l'alimentazione se proprio si ha un sentore di disturbo si potrebbe pensare di precedere il tutto da un 7812 cosi sei sicuro di una certo isolamento elettrico.

Ciao, cosa era e come hai risolto con i disturbi che avevi prima ?
Sono curioso ....

Andiamo per gradi:

  1. I problemi di prima li ho risolti mettendo dei gran 100nF ovunque, ovvero, sull'ingresso del comparatore dove arriva il segnale di pick up ora c'è un R_L_C che lascia passare i segnali fino a 300Hz circa e tutto il resto viene attenuato per frequenze maggiori. Poi ho messo dei 100nF su tutti i piedini digitali che uso e qualche zener per limitare un pò gli spike.

  2. io dichiaro tutte queste variabili prima del setup:

#include <EEPROM.h>
#include "FreqPeriodCounter.h"
#include <avr/io.h>
#include <avr/interrupt.h>

#define NEXT_RST 2
#define PUIN 3
#define PUOUT 4
#define ledRun 5
#define led1 6
#define led2 7
#define led3 8
#define SELF 9
#define SWITCH1 10
#define SWITCH2 11
#define SWITCH3 12
#define SWITCH4 13

boolean CONFIGURED=LOW;
boolean writed=LOW;
boolean STEP=LOW;
boolean RUN=LOW;
boolean CREA=LOW;
volatile boolean val=HIGH;
volatile boolean flag=LOW;
boolean config=HIGH;
boolean OK=HIGH;
boolean prec=LOW;
boolean s[4]; // stati degli switch
int count_step=1;
int step_rimasti;
float alpha_max; 
float alpha_step; 
float alpha[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float m[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; 
float q[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; 
float tick=0.5;
int i=0;
int k=0;
int wait=1000; 
int wait_canc=4000; 
unsigned long last=0;
int pulse_width=200; 
volatile unsigned long width=0;
int delta_t; // in microsecondi
int delta_t_step;
int delta_t_opt[6]={0, 0, 0, 0, 0, 0}; 
int delta_t_tab[251];
int freq;
int freq_soglia;
int freq_step;
int freq_max[6]={0, 0, 0, 0, 0, 0}; 
int RPM[6];
volatile int dt;
volatile int NotRun=0;
int stato_config[8]={0,0,0,0,0,0,0,0};

e nel setup:

 // initialize Timer1
    cli();          // disable global interrupts
    TCCR1A = 0;     // set entire TCCR1A register to 0
    TCCR1B = 0;     // same for TCCR1B
 
    // set compare match register to desired timer count:
    // turn on CTC mode:
    TCCR1B |= (1 << WGM12);
    TCCR1B &= ~(1 << WGM10);
    TCCR1B &= ~(1 << WGM11);
    // Set for prescaler 8:
    TCCR1B |= (1 << CS11);
    TCCR1B  &= ~(1 << CS12);
    TCCR1B  &= ~(1 << CS10);
    // enable timer compare interrupt:
    TIMSK1 |= (1 << OCIE1A);
    // enable global interrupts:
    sei();
  1. Io uso un regolatore 7805 ben filtrato prima del uP, non c'è bisogno di altri filtri; infatti vi sto dicendo che mi succedono cose strane se lo provo a banco quindi in assenza di disturbi, ma mi metto a spingere velocemente i due pulsanti che ho collegato un al digital pin3 e uno a d.p. 9.

Il bello come dicevo prima è che se spingo questi pulsanti ripetutamente e velocemente, anche quando il codice non dovrebbe nemmeno accorgersi di loro perchè c'è un IF che precede la loro lettura (e la sua condizione di entrata è FALSA), il micro inizia a fare cose strane tipo accende dei led che non dovrebbe, poi si pianta in un certo punto (che non si capisce come ci sia entrato).
Ho paura che siano abilitati degli interrupt per questi pin e che lui vada ad eseguire qualcosa che non ho dichiarato, ma come? boh non ne ho idea.
Aiutatemi voi.

Grazie

ekjk:
3. Io uso un regolatore 7805 ben filtrato prima del uP, non c'è bisogno di altri filtri; infatti vi sto dicendo che mi succedono cose strane se lo provo a banco quindi in assenza di disturbi, ma mi metto a spingere velocemente i due pulsanti che ho collegato un al digital pin3 e uno a d.p. 9.

Hai fatto il deboucing dei pulsanti?
Ciao Uwe

Non l'ho fatto, che effetto ha farlo?
E' sempre necessario farlo? Se si , come si fa?