Pages: 1 2 [3] 4   Go Down
Author Topic: Condizionamento pick up magnetico  (Read 5341 times)
0 Members and 1 Guest are viewing this topic.
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Varese
Offline Offline
God Member
*****
Karma: 8
Posts: 585
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
// 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
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 45
Posts: 1513
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Ettore Massimo Albani
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: 1 2 [3] 4   Go Up
Jump to: