Come impostare sample time di una comunicazione seriale

di il
14 risposte

Come impostare sample time di una comunicazione seriale

Il mio obiettivo è quello di trasmettere via seriale un dato di 1 byte ogni 1 millisecondo da matlab Simulink alla mia board STM32F103RB.

A questo scopo sto utilizzando il blocco Serial send (affiancato ovviamente dal blocco Serial Configuration). Presupposto che la connessione seriale è funzionante in quanto la uso anche per ricevere (e da quel punto di vista funziona tutto), mi chiedo come mai Simulink invia il dato con tempistiche randomiche. In particolare io ho settato il solver con un sample time di 1 millisecondo, ma a quanto pare ciò non è abbastanza. Infatti se verifico dal micro, il dato non viene mandato con il periodo di tempo impostato.

Lo schema Simulink della parte appena descritta è quello allegato.
Preciso inoltre che anche il blocco constant è stato settato con un sample time di 1 millisecondo.

Dunque la mia domanda è: dove sbaglio? C'è qualche parametro della simulazione da impostare che io sto ignorando?

Grazie.
Allegati:
31302_b97a3f80409d163e2c2b411eca5f24e9.jpg
31302_b97a3f80409d163e2c2b411eca5f24e9.jpg

14 Risposte

  • Re: Come impostare sample time di una comunicazione seriale

    Lavori con windows?
  • Re: Come impostare sample time di una comunicazione seriale

    oregon ha scritto:


    Lavori con windows?
    Sì, lavoro con windows.
  • Re: Come impostare sample time di una comunicazione seriale

    Windows non è un OS real time. Non potrai ottenere quei tempi (1 ms) ciclici perché l'attività del so ha tempi minimi di 10 - 15 ms non predicibili.

    Ti serve una architettura diversa
  • Re: Come impostare sample time di una comunicazione seriale

    oregon ha scritto:


    Windows non è un OS real time. Non potrai ottenere quei tempi (1 ms) ciclici perché l'attività del so ha tempi minimi di 10 - 15 ms non predicibili.

    Ti serve una architettura diversa
    Però nel caso in cui mettessi una periodicità molto più alta dovrei aspettarmi di conseguenza tempi di trasmissione più alti, invece anche impostando ad esempio 1 secondo mi ritrovo che i dati mi arrivano ogni 2-3 millisecondi (ovvero le stesse tempistiche che ho quando trasmetto ogni 1 millisecondo). Insomma pare come se Simulink trasmettesse come e quando gli pare, mentre io vorrei che lo facesse come e quando dico io.
    Quindi avevo pensato che il problema stesse in Simulink, non nel sistema operativo. Alla luce di ciò che ho detto confermi che il problema risiede nell'OS?
  • Re: Come impostare sample time di una comunicazione seriale

    Un attimo...
    Una cosa è fare una trasmissione ogni secondo a 115200 baud (il byte ti arriva ogni secondo ma velocemente), altro trasmettere un byte ogni ms a 115200 baud che non puoi fare
  • Re: Come impostare sample time di una comunicazione seriale

    oregon ha scritto:


    Un attimo...
    Una cosa è fare una trasmissione ogni secondo a 115200 baud (il byte ti arriva ogni secondo ma velocemente), altro trasmettere un byte ogni ms a 115200 baud che non puoi fare
    la trasmissione ogni 1ms non va nemmeno a baud rate maggiori, ma a parte questo aspetto, come ho detto prima, anche impostando a valori del tipo 1s, il dato comunque sia non viene trasmesso con la cadenza impostata. Infatti Simulink pare che faccia un po' come vuole...
  • Re: Come impostare sample time di una comunicazione seriale

    La trasmissione ogni ms NON può essere fatta da windows a nessuna velocità, forse non mi sono spiegato.

    La trasmissione ogni secondo può essere fatta, se simulink non rispetta il tempo questo è un altro problema.

    Ovvero, simulink può avere problemi ma il ciclo ogni ms è un LIMITE per windows
  • Re: Come impostare sample time di una comunicazione seriale

    oregon ha scritto:


    La trasmissione ogni me NON può essere fatta da windows a nessuna velocità, forse non mi sono spiegato.

    La trasmissione ogni secondo può essere fatta, se simulink non rispetta il tempo questo è un altro problema.

    Ovvero, simulink può avere problemi ma il ciclo ogni ms è un LIMITE per windows
    Bene, chiaro.
    Ora, dato che a me si presenta il problema anche per la trasmissione ogni secondo, come si può ovviare a questa cosa?
  • Re: Come impostare sample time di una comunicazione seriale

    Non conosco simulink se tale software non rispetta tale tenporizzazione (e mi sembra strano) usane un altro o rivolgiti al supporto del produttore (cosa che farei io).
    Ma come vedi che non viene rispettato l'invio ogni secondo? Hai usato un Serial Monitor?
  • Re: Come impostare sample time di una comunicazione seriale

    oregon ha scritto:


    Non conosco simulink se tale software non rispetta tale tenporizzazione (e mi sembra strano) usane un altro o rivolgiti al supporto del produttore (cosa che farei io).
    Ma come vedi che non viene rispettato l'invio ogni secondo? Hai usato un Serial Monitor?
    Si esatto, ho usato uno sniffer
  • Re: Come impostare sample time di una comunicazione seriale

    Quale? E i risultati si possono vedere?
  • Re: Come impostare sample time di una comunicazione seriale

    Il programma si chiama Device Monitoring Studio.
    I risultati che ho ottenuto sono i seguenti. (Guarda le righe IRP_MJ_WRITE, le altre righe sono i dati che mando dal micro a Simulink)
    Questo è a 1ms: Questo è a 20ms: Purtroppo non ho salvato nessuna prova a 1s, però ti assicuro che i risultati sono analoghi.
  • Re: Come impostare sample time di una comunicazione seriale

    Sembra sia sempre impostato a 20 ms. Forse non hai configurato bene il software, non ti so aiutare, ripeto, senti un forum specializzato.

    Sarebbe utile avere un resoconto per 1s. Se continua ad essere 20 ms allora qualcosa non va evidentemente nella configurazione di Simullink
  • Re: Come impostare sample time di una comunicazione seriale

    oregon ha scritto:


    Sembra sia sempre impostato a 20 ms. Forse non hai configurato bene il software, non ti so aiutare, ripeto, senti un forum specializzato.

    Sarebbe utile avere un resoconto per 1s. Se continua ad essere 20 ms allora qualcosa non va evidentemente nella configurazione di Simullink
    Sì ti confermo che rimane sempre intorno ai 20ms. Purtroppo ho già provato a scrivere sul forum ufficiale di MatLab, ma nessuno ha risposto...
Devi accedere o registrarti per scrivere nel forum
14 risposte