Lettura segnale da sonda lambda
Home › Forum › Discussioni su problematiche generali › Lettura segnale da sonda lambda
- Questo topic ha 7 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 7 mesi fa da
Anonimo.
-
AutorePost
-
Agosto 30, 2011 alle 4:14 pm #35087
Anonimo
InattivoHo bisogno di un sensore lambda per controllare il tenore di ossigeno nei fumi di scarico di un generatore di vapore, ho trovato il sensore ma non riesco a trovare un elettronica di controllo che possa adattarmi il segnale per l’uso con lo slimline.
Avete suggerimenti ?
Agosto 30, 2011 alle 4:26 pm #36920Sergio Bertana
Amministratore del forumLe sonde lambda hanno una uscita in tensione variabile tra 0 ed 1 volt in funzione del rapporto di ossigeno presente nei fumi di scarico e quello ambientale.
Utilizzando il modulo espansione I/O analogico della famiglia SlimLine, è possibile configurare l’ingresso per acquisizione differenziale con fondo scala di 1 volt. Tenuto conto che il convertitore è un 19 bit hai sicuramente la capacità di acquisire un dato molto preciso.
Su valori così bassi di tensione consiglio di usare un cavo twistato e schermato per la connessione della sonda agli ingressi del modulo analogico, e di tenere al minimo la lunghezza del cavo.
Settembre 22, 2011 alle 8:50 am #36960Anonimo
InattivoHo utilizzato un sensore lambda con uscita in CAN bus, ora scrivo per avere un aiuto riguardo alla comunicazione tramite CAN bus. Nel documento allegato è riportato lo schema di collegamento ed il formato frame dati.
Per la ricezione del frame ho utilizzato un programma in ST che utilizza la funzione SysCANRxMsg, di seguito il codice sorgente del programma:
SysCANRxMsg(16#3fffffff, 16#00000123, ADR(CANMsg));
MB_TenoreOssigeno:= CANMsg.Data[4]/1000;Ma, in fase di compilazione ottengo questo messaggio:
READFIELDBUS(3) – warning S1300: SYSCANRXMSG => Function return value ignored
1 warnings, 0 errors.Quale può essere il problema ?
Settembre 22, 2011 alle 9:20 am #36961Sergio Bertana
Amministratore del forumLa funzione SysCANRxMsg come si vede dal manuale ritorna una variabile BOOL, il cui significato è:
FALSE: Messaggio non ricevuto
TRUE: Messaggio ricevutoLa warning stà ad indicare che è stata utilizzata la funzione senza eseguire il controllo sul suo valore di ritorno. Inoltre il valore del tenore di ossigeno sarà valido solo se il messaggio è stato ricevuto. Quindi consiglio di riscrivere il programma nel modo.
IF SysCANRxMsg(16#3fffffff, 16#00000123, ADR(CANMsg)) THEN
MB_TenoreOssigeno:=CANMsg.Data[4]/1000;
END_IF;Settembre 22, 2011 alle 9:35 am #36962Anonimo
InattivoSI, dopo aver postato mi sono reso conto che il warning dipende da questo. Il mio problema però persiste, sto monitorando i valori ottenuti:
CanRcv := SysIsCANRxTxAv(FALSE);
read := SysCANRxMsg(16#00000000, 16#00000121, ADR(CANMsg));
MB_TenoreOssigeno := CANMsg.Data[4]/1000;CanRCV mi risulta sempre FALSE, tutti i campi della variabile CANMSG assumono valore 0, c’è qualcosa da preconfigurare sullo slimline ?
C’è qualche tentativo che posso fare per verificare l’effetiva trasmissione di messaggi dal dispositivo lambda ?
Settembre 22, 2011 alle 9:45 am #36963Sergio Bertana
Amministratore del forumCosì com’è il programma non è formalmente corretto, occore prima controllare se è stato ricevuto un frame CAN, poi eseguirne la lettura e salvare i valori letti solo se lettura positiva.
Eseguendo sempre la lettura se non sono stati ricevuti messaggi il frame di ritorno è sempre azzerato, quando viene ricevuto un messaggio i campi sono valorizzati, ma subito dopo vengono riazzerati. Ecco come dovrebbe scrivere il programma:
IF SysIsCANRxTxAv(FALSE) THEN
RxFrame:=TRUE; (* Flag che indica ricezione frame da azzerare in debug *)IF SysCANRxMsg(16#3fffffff, 16#00000123, ADR(CANMsg)) THEN
RxData:=TRUE; (* Flag che indica ricezione dati da azzerare in debug *)
MB_TenoreOssigeno:=CANMsg.Data[4]/1000;
END_IF;END_IF;
Come si vede ho definito due variabili BOOL che devono essere azzerate in debug, la variabile RxFrame è settata su ricezione di un qualsiasi frame CAN. La variabile RxData è settata se ricevuto un frame dalla sonda lambda.
Per testare il protocollo CAN esistono degli appositi analizzatori di protocollo, ma con un oscilloscopio è almeno possibile vedere se la sonda trasmette.
Settembre 22, 2011 alle 10:16 am #36964Sergio Bertana
Amministratore del forumAggiungo una nota sulla acquisizione del valore di ossigeno dal frame CAN. Non ho il tuo programma, ma ti ricordo che CANMsg.Data è un array di USINT, ed il valore che ricevi è riportato su due USINT. Quindi per leggerne il valore devi scrivere:
MB_TenoreOssigeno:=(TO_UINT(CANMsg.Data[4])*256)+CANMsg.Data[5];
MB_TenoreOssigeno:=MB_TenoreOssigeno/1000;Questo è verò se il valore nel messaggio CAN è scritto nel formato big-endian (La memorizzazione inizia dal byte più significativo per finire col meno significativo). Se invece è di tipo little-endian devi invertire i due valori di CANMsg.Data.
Settembre 22, 2011 alle 11:09 am #36965Anonimo
InattivoIl produttore della centralina mi pone le seguenti domande:
La velocità di connessione e corretta ?
NON SO COME VERIFICARLO OD IMPOSTARLO SULLO SLIMLINE.Il settaggio della tipologia di messaggio (estesa o standard) è corretta ?
NON SO DI COSA SI TRATTIL’allineamento del messaggio (intel o motorola) è corretto ?
HO SCELTO ALLINEAMENTO MOTOROLA PENSANDO ALLA BASE RISC DELL’ARCHITETTURA ARMMisurando la resistenza della linea dovrebbe avere un valore <= 120 ohm.
HO VERIFICATO CHE SIA COSI’ -
AutorePost
- Devi essere connesso per rispondere a questo topic.