Buongiorno a tutti, sto cercando di creare un doppio softstart che devo utilizzare per un'amplificatore valvolare, quindi dovrei variare all'accensione di arduino automaticamente i fiilamenti delle valvole e poi all'accensione di un'interruttore dovrebbe parti l'avviamento soft per il primario di un trasformatore(ovviamente le uuscite vanno a variare dei transistor . Ho cominciato a scrivere qualcosa, potete controllare se è tutto ok oppure ho scritto qualche boiata(che la cosa è molto probabile), e come seconda cosa potete consigliarmi come procedere? Grazie Saluti Roberto
/*Programma che genera un'avviamento graduale di due carichi
resistivi, uno dei due si deve avviare all'accensione del
circuito, il secondo solo se viene azzionato un'interruttore
che fa partire il ciclo di avviamento. a ciclo completo si
devono accendere dei led che permettono di sapere se la tensione
ha raggiunto la soglia ideale.*/
int ON HV 5 //L'interruttore di accensione del ciclo di start del
//del trasformatore di hig voltage è associato alpin
//digitale 2
int FILAMENTI 26 //Pin analogico 0 che comanda un transistor bd138 che ha sua volta
//comanda un transistor di potenza
int HV 25 //Pin analogico 1 utilizzato per comandare un transistor di media potenza che
//pilota un transistor di media potenza per variale la tensione del primario
//di un trasformatore
#define LED fILAM 6 //Led di indicazione del raggiungimento della tensione massima sul filamento
#define LED hV 7 //Led di indicazione dell'effettivo raggiungimento della tensione sul primario
// dell'alta tensione
void setup() {
pinMode(ON HV, INPUT) //Definisce l'igresso dell'interrutore di on
pinMode(FILAMENTI, OUTPUT) //Definisce l'uscita variabile per i filamenti
pinMode(HV,OUTPUT) //Definisce l'uscita variabile per l'alta tensione
pinMode(LED FILAM,OUTPUT) //Definisce l'uscita per il led di ok per i filamenti
pinMode(LED HV,OUTPUT) //Definisce luscita per il led di ok alta tensione
}
void loop() {
// put your main code here, to run repeatedly:
Il valvolare ha i "classici" filamenti alimentati da un secondo raddrizzatore in DC, come nelle applicazioni hi-fi, o e' uno di quelli con l'alimentazione dei filamenti in AC ? ... nel primo caso basta un regolatore di tensione, nel secondo o si fa la parzializzazione via triac, o si sostituisce l'alimentazione con una DC ... oppure si risolve il problema con un grosso NTC da pochi ohm.
Per il trasformatore, il problema e' che essendo un carico induttivo, non si comporta bene con i normali variatori a triac per carichi resistivi ... vero anche che in quel caso e' sufficente una breve rampa senza alcuna specifica necessita' di potenza ... deve solo evitare di salire "secco", quindi in teoria non servirebbe neppure un circuito apposito, basterebbe anche qui una robusta NTC di protezione in serie ...
Scusatem mi sono espresso male io...volevo usare dei triac tipo i classici bta12 e i diac db3, quindi mi servirebbe che l'uscita crei una rampa di salita in modo che mi vari il pilotaggio del carico, diciamo un 30/40 secondi. Il codice che ho scritto presenta errori oppure fin'ora va bene?
non è possibile tramite triac? non mi è mai capitato questa situazione e devoo dire che non mi è mai nemmeno stata spiegata la cosa(nonostante 5 anni di istituto professionale), per potere variare la tensione del primario come potrei fare? visto che il secondario non posso avendo in gioco tensioni di 2500 volt....
Il codice che ho scritto presenta errori oppure fin'ora va bene?
No, ci sono errori banali di sintassi di cui si è parlato in altri topic, comunque ti serve un documento da usare come guida per iniziare a scrivere codice C valido almeno per il compilatore.
Posso scrivere, ma dubito tu sappia cosa sono: macro, variabile, costante letterale, tipi standard ecc.
int ON HV 5
Quella istruzione ha una sintassi non comprensibile al compilatore.
int ON_HV = 5;
// o
const int ON_HV = 5;
// o
const byte ON_HV = 5;
// o meglio
const byte kOnHV = 5; // k (sta per costante, On(singola parola), High Voltage (due parole)
// o molto meglio
const byte pinHVSwitch = 5; // pin High Voltage Switch
In riferimento al primo post, io forse ho capito cosa ti serve fare, mi puoi dare conferma?
Ti serve tenere in caldo le valvole, quindi lasci i filamenti accesi e poi dopo tot minuti azioni l'interruttore della HV, purtroppo con 2500V sull'anodo e con i filamenti che sparano elettroni la placca subisce stress, perché il circuito del bias vuole il suo tempo. Quindi servirebbe che HV partendo da 0, raggiunga 2500 progressivamente in un tempo da stabilire? Giusto?
Tu scrivi "amplificatore" ma non specifichi altro e non è possibile capire se si tratta di un BF, HF, anche la classe non l'hai specificata. Deduco che i tubi sono dei triodi, ma solo perché non conosco un pentodo che lavora con quella tensione.
Non sapendo nulla del circuito sparo a caso.
Per evitare la complicazione circuitale del triac, potresti usare un relè che viene commutato quando la tensione sull'anodo raggiunge il 75% circa. All'accensione la 2500V passa attraverso un rete resistiva/induttiva ad alta impedenza e sul Condensatore avrai una costante di carica R*C.
Praticamente mi servirebbe che i filamenti si accendano piano fino a 20v. Con la tensione di placca in stand by, in caso di utilizzo della potenza del finale hf accendo l'interruttore e la tensione cresce lentamente fino al massimale(le valvole sono le gk71 sn 1500v ma il trasf ne eroga 2500 alimentando a 220il primario ma lo alimento a 130v struttando un secondario del trasformatore di alimentazione)
Volendo creare un soft start solo sui filamenti ed un sistema di timer sul trasformatore?dicoiamo che per toto secondi resta inserito un relays che mi riduca la tensione con una resistenza è possibile? Per fare variare un uscita analogica devo utilizzare il pwm? oppure c'è un'altro modo perche stavo leggendo il testo della sandi su arduino ma non riesco a trovare nulla
Ho provato a leggere il funzionamento della funzione pwr ed ho messo giu un paio di righe ma cercando di complilarle mi da diversi errori
#include <PWM.h>
/*Programma che genera un'avviamento graduale di due carichi
resistivi, uno dei due si deve avviare all'accensione del
circuito, il secondo solo se viene azzionato un'interruttore
che fa partire il ciclo di avviamento. a ciclo completo si
devono accendere dei led che permettono di sapere se la tensione
ha raggiunto la soglia ideale.*/
#define PWM_Filamenti 26 //PWM che comanda l'accensione dei filamenti
int valore_pwm=0 //Assegna il valore 0 alla variabile pwm
#define LED fILAM 6; //Led di indicazione del raggiungimento della tensione massima sul filamento
#define LED hV 7; //Led di indicazione dell'effettivo raggiungimento della tensione sul primario
// dell'alta tensione
void setup() {
pinMode(pinHVSwitch, INPUT) //Definisce l'igresso dell'interrutore di on
pinMode(FILAMENTI, OUTPUT) //Definisce l'uscita variabile per i filamenti
pinMode(HV,OUTPUT) //Definisce l'uscita variabile per l'alta tensione
pinMode(LED FILAM,OUTPUT) //Definisce l'uscita per il led di ok per i filamenti
pinMode(LED HV,OUTPUT) //Definisce luscita per il led di ok alta tensione
}
void loop() {
// Si genera un segnale PWM
analogWrite(PWM_Filamenti, valore_pwm); //Assegna al pin 26 il valore di 0
delay(2000) //Determina un ritardo di 2 secondi prima di eseguire pla prossima riga
valore_pwm = valore_pwm + 25 //Aumenta il valore del pwm di 10%
if(valore_pwm > 255) valore_pwm = 255 //Se il valore dell'incremento del pwm supera il100% determina un valore di 100%
}
gli errori sono questi invece
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Nano w/ ATmega328"
softstart:13: error: expected unqualified-id before numeric constant
softstart:21: error: expected ',' or ';' before 'void'
softstart.ino: In function 'void loop()':
softstart:34: error: expected `;' before 'valore_pwm'
non capisco anche perchè utilizzando l'ide 1.6 mi desse molti piu errori....
#include <PWM.h>
/*Programma che genera un'avviamento graduale di due carichi
resistivi, uno dei due si deve avviare all'accensione del
circuito, il secondo solo se viene azzionato un'interruttore
che fa partire il ciclo di avviamento. a ciclo completo si
devono accendere dei led che permettono di sapere se la tensione
ha raggiunto la soglia ideale.*/
#define PWM_Filamenti 26 //PWM che comanda l'accensione dei filamenti
// errore manca il ;
int valore_pwm=0 //Assegna il valore 0 alla variabile pwm
// errore LED_filam 6, errore rimuovi ;
#define LED fILAM 6; //Led di indicazione del raggiungimento della tensione massima sul filamento
// errore LED_hV 7, errore rimuovi ;
#define LED hV 7; //Led di indicazione dell'effettivo raggiungimento della tensione sul primario
// dell'alta tensione
void setup() {
// aggiungi ; alla fine di ogni istruzione
pinMode(pinHVSwitch, INPUT) //Definisce l'igresso dell'interrutore di on
pinMode(FILAMENTI, OUTPUT) //Definisce l'uscita variabile per i filamenti
pinMode(HV,OUTPUT) //Definisce l'uscita variabile per l'alta tensione
pinMode(LED FILAM,OUTPUT) //Definisce l'uscita per il led di ok per i filamenti
pinMode(LED HV,OUTPUT) //Definisce luscita per il led di ok alta tensione
}
void loop() {
// Si genera un segnale PWM
analogWrite(PWM_Filamenti, valore_pwm); //Assegna al pin 26 il valore di 0
// aggiungi ;
delay(2000) //Determina un ritardo di 2 secondi prima di eseguire pla prossima riga
// aggiungi ;
valore_pwm = valore_pwm + 25 //Aumenta il valore del pwm di 10%
// aggiungi ;
if(valore_pwm > 255) valore_pwm = 255 //Se il valore dell'incremento del pwm supera il100% determina un valore di 100%
}
ho scoperto una cosa, cambiandoide gli errori calano, e poi non avevo messo i punti e virgola alla fine delle righe di programma ora il codice è così
#include <PWM.h>
/Programma che genera un'avviamento graduale di due carichi
resistivi, uno dei due si deve avviare all'accensione del
circuito, il secondo solo se viene azzionato un'interruttore
che fa partire il ciclo di avviamento. a ciclo completo si
devono accendere dei led che permettono di sapere se la tensione
ha raggiunto la soglia ideale./
#define PWM_Filamenti 26 //PWM che comanda l'accensione dei filamenti
int valore_pwm=0 //Assegna il valore 0 alla variabile pwm
#define LED_fILAM 6; //Led di indicazione del raggiungimento della tensione massima sul filamento
#define LED_HI_VOLTAGE 7; //Led di indicazione dell'effettivo raggiungimento della tensione sul primario
// dell'alta tensione
void setup() {
pinMode(pinHVSwitch, INPUT) //Definisce l'igresso dell'interrutore di on
pinMode(PWM_FILAMENTI, OUTPUT) //Definisce l'uscita variabile per i filamenti
pinMode(LED_FILAM,OUTPUT) //Definisce l'uscita per il led di ok per i filamenti
pinMode(LED_HI_VOLTAGE,OUTPUT) //Definisce luscita per il led di ok alta tensione
}
void loop() {
// Si genera un segnale PWM
analogWrite(PWM_Filamenti, valore_pwm); //Assegna al pin 26 il valore di 0
delay(2000); //Determina un ritardo di 2 secondi prima di eseguire pla prossima riga
valore_pwm = valore_pwm + 25; //Aumenta il valore del pwm di 10%
if(valore_pwm > 255) valore_pwm = 255; //Se il valore dell'incremento del pwm supera il100% determina un valore di 100%
}
e gli errori
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Nano w/ ATmega168"
softstart:13: error: expected unqualified-id before numeric constant
softstart:21: error: expected ',' or ';' before 'void'
Non capisco se stai tentanto di imparare qualcosa senza leggere un manuale sul C, oppure è il tuo manuale C che non è buono.
Rileggiti il sorgente che ho postato.
Manca almeno un ; e ci sono posti dove ; lo ha messo ma non ci va. #define nome_macro codice
Come vedi non ci va il ;
Mentre nelle dichiarazioni di variabile ci va il ; alla fine
PS:mio personalissimo parere, (da persona navigata che ne ha viste di tutti i colori): Ti stai perdendo in un bicchiere d'acqua.
Consiglio:
Nel caso volessi evitare di compilare una porzione di codice, lasciandola al contempo scritta, ti consiglio di usare #if, es:
buonasera, sono riuscito a far funzionare il programma, volevo chiedervi una cosa pero( visto che innavertitamente mentre stavo provando con il triac e l'alternata ho mandato nella scheda il 9vacc) ho guastato i regolatori di tensione , è possibile utilizzare per quello che devo fare io solamente l'integrato montato sulla uno senza dover usare tutta la scheda? e se possibile programmarlo ancora con l'ide di arduino Grazie
buonasera, sono riuscito a far funzionare il programma, volevo chiedervi una cosa pero( visto che innavertitamente mentre stavo provando con il triac e l'alternata ho mandato nella scheda il 9vacc) ho guastato i regolatori di tensione , è possibile utilizzare per quello che devo fare io solamente l'integrato montato sulla uno senza dover usare tutta la scheda? e se possibile programmarlo ancora con l'ide di arduino Grazie
Puoi sempre acquistare il regolatore è sostituirlo (sempre che sia guasto), sempre che hai un saldatore e una tronchesina.
Quindi collegando l'usb la scheda funziona?
Ci dovrebbe essere un pin di ingresso dove lanciare 5Vdc, mi pare Vin.
Quando si pasticcia con i file, c'è n'è sempre uno che va a finire dove non dovrebbe, comunque sempre meglio 9Vac che 2500Vdc.
Praticamente mi servirebbe che i filamenti si accendano piano fino a 20v
Il PWM è praticabile, ma osserva il segnale PWM, si tratta di una onda quadra con rapporto pausa impulso variabile, ora l'onda quadra è ricca di armoniche di alto ordine che potrebbero dare qualche problema in trasmissione, quindi quando andrai in trasmissione assicurati che il valore finale sia analogWrite(255) che equivale portare il pin di uscita HIGH.
Che Mega hai? Originale, clone, versione ecc.
Servono più informazioni al fine di visionare lo schematico.
Il regolatore si può guastare in modo che lo noti a vista (o con lente di ingrandimento) oppure si guasta se mostrare all'esterno alcun segno. Prima del regolatore ci potrebbe essere nello schema qualche altro componente, diodo, PTC ecc guasti e chi lo sa magari il regolatore si è salvato.
Comunque questo topic è in sezione software, capisci che se vuoi maggiori possibilità di risposta, dovrai postare nella sezione Hardware.
il regolatore si scalda e non poco, il mega è l'originale mega2560( al massimo lo tengo così, lo uso per fare le prove e basta....voi sapete se esiste una shield di arduino che possa comportarsi da accoppiatore direzionale(per costruire un wattmetro rosmetro per radiofrequenza).
ragazzi, se volessi ritardare l'accensione di un realays tramite interruttore come posso fare?
ho iniziato con l'istruzione if (digitalRead(pinHVSwitch,HIGH)) poi non so come utilizzare il comando delay per poter ritardaare l'accensione...