Go Down

Topic: Condizionamento pick up magnetico (Read 5 times) previous topic - next topic

uwefed

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

ekjk

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

uwefed

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

ekjk

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.

uwefed


...
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

Iz2rpn

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.

tonid

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

ekjk

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:

Code: [Select]

#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:
Code: [Select]

// 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();


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.

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

uwefed


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

ekjk

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

ekjk

Ho capito cos'è e come si fa il debouncing, non l'ho fatto ma non è questo il punto.
Il punto è che se io spingo 1000 volte consecutive il pulsante e il uP non deve in quel momento leggere quel pulsante il risultato è nullo.
Potrei anche fare il debouncing ma perchè il micro fa una digitalread su quel pin anche se non lo deve fare?

cyberhs

Una domanda: come mai il common del 7809 non è collegato a massa?

Ettore Massimo Albani

uwefed


Ho capito cos'è e come si fa il debouncing, non l'ho fatto ma non è questo il punto.
Il punto è che se io spingo 1000 volte consecutive il pulsante e il uP non deve in quel momento leggere quel pulsante il risultato è nullo.
Potrei anche fare il debouncing ma perchè il micro fa una digitalread su quel pin anche se non lo deve fare?

Il bouncing significa che Tu premi il pulsante o lo molli e il contatto saltella qualche volta prima di far contatto. In conclusione un ciclo premere e rilasciare produce ca 6 impulsi che il µC legge come 6 pressioni del pulsante e il risultato una freqenza di pressione molto piú alta di quella fisica che hai fatto tu.

Non conosco il Tuo codice e non so e la colpa dell' effetto strano che descrivi é un errore di programmazione o un errore di uso dell'elettronica.

Con le Tue risposte fai capire che Ti mancano le basi per un progetto di elettronica cosí complesso e con un problema di consequenze cosí gravi come un motore malpilotato che Ti consiglio di non proseguire nel Tuo progetto.

Ciao Uwe

tonid

Uno sbaglio/errore c'è sicuramente. Come dice uwefed non avendo il codice non si può capire se il problema è li o no......
Per quanto riguarda la parte elettronica invece sembra che prima di aver fatto le modifiche allo schema non avevi questo problema.....
Se i pulsanti rimangono sotto if non dovrebbero darti problemi ma nello schema hai usato solo dei pulsanti verso massa,  forzali con una R a +5v e ricordati che ogni pulsante che si usa collegato ad un qualsiasi integrato e non solo ha sempre bisogno di un "antirimbalzo" che in questo caso lo puoi risolvere via codice ma è sempre da fare altrimenti ad ogni pressione del pulsante generi un treno di 5/6/7 impulsi che ovviamente non essendo previsti ti daranno problemi....
E' difficile capire a distanza cosa possa essere a darti questo problema, notavo però che sullo stampato hai montato entrambi gli stabilizzatori 78xx con la carcassa metallica tagliata (probabilmente per problemi di spazio) e non è una gran cosa.......tieni l'oscilloscopio attaccato ad entrambe le uscite di questi due e controlla se la tensione rimane stabile come dovrebbe essere,potrebbero essersi danneggiati.

Pur volendo aiutarti è tutto quello che mi viene in mente per ora , riguardati il codice se non vuoi postarlo il problema potrebbe essere anche lì , prova a farti un debug in serial monitor sulle variabili dei pulsanti e controlla se hai il risultato che volevi.....

ekjk

Mi sembra di avere le basi sufficientemente adeguate sull'elettronica, non perchè sia un ingegnere elettronico ma perchè non si sta parlando di realizzare un amplificatore di potenza in classe D a qualche MHz di frequenza di oscillazione; si sta parlando di un "circuitino" alimentato a batteria che non fa altro che ritardare un segnale.
Ho ricontrollato centinaia di volte lo schematico, ho fatto misure ovunque con l'oscilloscopio e non mi sembra il caso di venirmi a dire "non hai le basi per affrontare un progetto di elettronica".
Per caso io vado a dire a chi non riesce a risolvere il mio problema: tu non hai le basi per risolverlo?
Le mie risposte e ciò che scrivo sono dettate dal fatto che un problema del genere non lo avevo mai visto e forse prima di scriverlo qua su ho fatto moltissime prove.
Prima avevo il problema di disturbi quando collegavo il sistema al motore perchè i disturbi a radio frequenza si accoppiavano sul segnale del pickup e disturbavano molto, quindi prima ho risolto questo. Poi ho provato a spingere questi pulsanti perchè li devo utilizzare e mi sono accorto che non vanno a motore acceso e a motore spento si.
Dunque ripeto la mia domanda: ieri dalla prova definitiva a banco ho notato che commentando tutta la parte di codice relativa alle azioni eseguite una volta premuti i pulsanti ottengo lo stesso problema.
Ergo: è un problema elettronico o di software? Elettronico come potrebbe essere? Di software non capisco come tali pulsanti possano influenzare il comportamento se sono "disabilitati".

ps: il 7809 è in configurazione generatore di corrente costante e serve solo per la carica della batteria.

Go Up