Pages: 1 ... 101 102 [103] 104 105 106   Go Down
Author Topic: [Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo  (Read 99074 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sono appena ricordato che l'anno scorso avevo realizzato un programma che converte l'out PPM dei singoli servo di una ricevente in S.BUS Futaba, che è ancora meglio del PPMSUM visto che è un pacchetto dati contenente i valori degli impulsi, sono sicuro che MegaPirate NG accetta anche l'S.BUS, mi pare pure MultiWii 2.3 (devo verificare).
Non dovrebbe essere un problema convertire quel codice in modo da fargli accettare in ingresso Mavlink, o altro protocollo, e fornire in uscita S.BUS, non è possibile trasmetterlo direttamente via datalink perché anche se è una normale comunicazione su UART (8N2) deve rispettare delle precise tempistiche nella ripetizione dei pacchetti, se non mi ricordo male ogni 14 ms ovvero ~71 Hz.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 636
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bè, visto il costo e la fatica irrisori, e alla luce dei tuoi consigli, penso che mi conviene fare una schedina di conversione. (penso che un attiny85 basta..)
Però visto che probabilmente più in là utilizzerò un trasporto a 2,4GHz, penso che vado di ppmsum così non perdo tempo a riconvertire dopo.
Per quanto riguarda il discorso Win/Linux, ho provato in tutti i modi ad installare il Planner 2.0 beta2 (l'ultima) su linux (dicono si faccia, ma il discorso è veramente recente..) ma niente da fare. le librerie ci sono tutte, ma alla compilazione escono tipo 5000 warning...poi mi fermo io perchè la vedo dura..
Ah, lavoro su Ubuntu 13.10 Gnome.
In compenso il planner di Windows gira bene su Wine riconoscendo per ora la scheda USB-Seriale. (ho dovuto fare solo un link tra ttyUSB0 e com3.) appena mi arriva la sceda provo il funzionamento.
Se è solo per la compilazione su Arduino mi appoggio tranquillamente a windows. Mi scoccia usarlo troppo, ma un pò ogni tanto si può ancora fare... smiley
Poi per quanto riguarda la versione di APM, comprendo, ma penso proprio che per ora posso "accontentarmi" delle funzionalità offerte da queste versioni..

Quote
Probabilmente la soluzione migliore è usare una piccola MCU esterna che converte i comandi da seriale in PPMSUM, va bene qualunque mcu a 8 pin dotata di UART e un paio di timer.
Scusa, ma perchè dici due Timer? non ne basta uno impostato a 20, o meglio 22ms e fare un ciclo per tutti i canali?
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 636
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sto scaricando l'arduino per compilare ardupilot... Però! ne hanno aggiunta di roba! 90MByte contro i circa 60 dell'arduino normale....
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sto scaricando l'arduino per compilare ardupilot... Però! ne hanno aggiunta di roba! 90MByte contro i circa 60 dell'arduino normale....

La versione per windows contiene avr-gcc per Windows che è più pesante della rispettiva versione per Linux, per girare gli servono delle librerie aggiuntive.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 636
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ah, pardon, non lo sapevo...
..in compenso..URRAH!!  smiley-grin smiley-grin smiley-grin

La versione special di Arduino, ovvero: ArduPilot-Arduino-1.0.3, gira tranquilla su Wine (Wine v.1.4.1 - ubuntu 13.10-Gnome) e pare pure compilare! dico pare perchè ho provato solo lo sketch blink su una Duemilanove.

Mi pare una notizia interessante! quasi quasi lo comunico anche nel loro forum..
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Poi per quanto riguarda la versione di APM, comprendo, ma penso proprio che per ora posso "accontentarmi" delle funzionalità offerte da queste versioni..

L'attuale versione di MegaPirateNG è matura e stabile, potrebbe anche essere che loro portano avanti lo stesso lo sviluppo visto che sono indipendenti dal gruppo di APM, però la vedo dura perché a parte correggere qualche bug minore e ottimizzare qualcosa rimane il fatto che la MCU è arrivata al limite, in tutti i casi per la tua applicazione va benissimo come è attualmente.

Quote
Scusa, ma perchè dici due Timer? non ne basta uno impostato a 20, o meglio 22ms e fare un ciclo per tutti i canali?

Un timer è il clock di sistema, un timer genera il PPM, io sono abituato a ragionare sempre con un sistema sia event driven (interrupt) che con esigenze ROTS (scheduler degli eventi), per me  è la norma avere un sysclock smiley
Il TINY85 non ha una UART, ha l'USI che è un hardware per comunicazioni seriali castrato smiley , meglio se vai su una mcu con una vera UART.

Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ah, pardon, non lo sapevo...
..in compenso..URRAH!!  smiley-grin smiley-grin smiley-grin

C'è poco da essere felici,  con solo Linux hai sempre problemi per far girare software "particolare" smiley

Quote
La versione special di Arduino, ovvero: ArduPilot-Arduino-1.0.3, gira tranquilla su Wine (Wine v.1.4.1 - ubuntu 13.10-Gnome) e pare pure compilare! dico pare perchè ho provato solo lo sketch blink su una Duemilanove.

Buono a sapersi, tocca vedere se riesce anche a caricare sul ATmega 2560 perché con Wine non sempre si riesce ad usare correttamente la USB, però questo è un problema relativo perché puoi farlo usando avrdude, direttamente da Linux, da riga di comando/script utilizzando l'hex generato.
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

MegaPirateNG ha anche un tool (per Windows) che permette di flashare direttamente la board con l'ultima release del software preconfigurate tramite una serie di scelte dalla GUI, provato su una MEGA2560 e funziona perfettamente.
Non serve l'IDE di Arduino per compilare in quanto i vari firmware vengono scaricati online in base alle scelte fatte.

Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10101
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La versione per windows contiene avr-gcc per Windows che è più pesante della rispettiva versione per Linux, per girare gli servono delle librerie aggiuntive.

ora le contengono anche quelle linux, mi pare dalla 23 in poi, proprio per evitare casini di tollchain
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ora le contengono anche quelle linux, mi pare dalla 23 in poi, proprio per evitare casini di tollchain

Certo, ora sia la versione Linux che quella MAC contiene la stessa, vecchia, toolchain della versione Windows proprio per evitare i vasi casini  dovuti a librerie gcc non allineate e preinstallate da Linux/MAC, però GCC per Windows richiede più roba per girare sotto questo ambiente operativo, ovvero usa WinAvr che ha un suo peso nel pacchetto.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 636
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa, ma perchè dici due Timer? non ne basta uno impostato a 20, o meglio 22ms e fare un ciclo per tutti i canali?

Un timer è il clock di sistema, un timer genera il PPM, io sono abituato a ragionare sempre con un sistema sia event driven (interrupt) che con esigenze ROTS (scheduler degli eventi), per me  è la norma avere un sysclock smiley
Il TINY85 non ha una UART, ha l'USI che è un hardware per comunicazioni seriali castrato smiley , meglio se vai su una mcu con una vera UART.
Giusto.
Magari (solo perchè ce li ho) uso un attiny2313 che ha USART e 2 Timer...
A questo punto chiedo un piccolo chiarimento. Per quanto riguarda il PPM-SUM, il "vuoto" da lasciare per far da sync al treno di ppm va bene di 4ms? e poi ogni 2ms parte un impulso tra i 1000 e i 2000 uS, e se il canale non è usato 500uS? però mi chiedo, se ho 2 segnali consecutivi da 2ms, devo comunque prevedere un piccolo "vuoto" tra i due?
Perdonatemi se chiedo cose ovvie, è solo perchè tra le info trovate in giro ho trovato alcune discordanze..
Tipo qui danno un buon esempio, ma dal quale si deduce che l'impulso non arriva a 2000 uS, ma un pò di meno.. oltretutto il segnale di sync lungo non è LOW, ma HIGH.. come funziona?
« Last Edit: January 04, 2014, 02:41:01 pm by dab77 » Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A questo punto chiedo un piccolo chiarimento. Per quanto riguarda il PPM-SUM, il "vuoto" da lasciare per far da sync al treno di ppm va bene di 4ms? e poi ogni 2ms parte un impulso tra i 1000 e i 2000 uS, e se il canale non è usato 500uS? però mi chiedo, se ho 2 segnali consecutivi da 2ms, devo comunque prevedere un piccolo "vuoto" tra i due?

Regola generale per il PPMSUM, premesso che può essere sia a logica positiva che negativa, dipende dal tipo di ricevente e nel firmware c'è una opzione per scegliere la logica, di default è logica negativa, ovvero idle a 1 logico e impulsi a 0 logico, la separazione tra i singoli impulsi deve essere almeno 100 us, la durata finale del frame deve essere 100us maggiore della durata massima per l'impulso.
Esempio pratico, tipicamente gli impulsi variano tra 1000 e 2000 us, valori standard e di default previsti da tutti i software, questo comporta che per codificare otto canali, il massimo possibile, servono 2100 * 7 us + 2000 us = 16700 us, separazione per il frame durata minima 2100 us.
Anche se la durata del frame non è obbligatoriamente costante è bene che lo sia, semplifica il lavoro del software di decodifica e garantisce una frequenza costante di refresh dei dati, da questo ne deriva che la durata finale del frame è variabile in funzione della durata dei singoli impulsi.
Nota che sia MultiWii che MegaPirateNG consigliano di regolare la propria radio, se possibile, per emettere impulsi tra 1000 e 2000 us, a  seconda di marca e modello tale valore può essere sensibilmente inferiore come default, p.e. tra 1050 e 1950 us con centro a 1500 us come a 1514-1524 us per alcuni modelli di radio.
Domani ti posto una videata del DSO per il PPMSUM in out dalla presa DSC (usata per i simulatori e per mettere due radio in master/slave) del mio Tx (una Aurora 9 Hitech) così hai una misura reale del segnale a cui fare riferimento.
Comunque tutti i software per multi consentono di impostare sia il valore per il centro che quello degli estremi da software se non è possibile farlo sulla radio.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 636
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Magari! intanto grazie, della possibilità di logica positiva o negativa non avevo trovato notizie in rete, anche se però le immagini le trovavo in entrambi i modi. Per questo ero confuso sul segnale di link..
anche dalla tua spiegazione però c'è un solo punto che non ho capito. parli di mantenere possibilmente la durata del frame uguale, e mi sembra più logico (anche in fase di misurazione/debug risulterebbe più semplice..), però poi dici che "da questo ne deriva che la durata finale del frame è variabile in funzione della durata dei singoli impulsi."... Per quello che ho capito in realtà se tra due canali lascio 100uS o lascio 100uS+i uS restanti a colmare i 2000uS del segnale massimo, al software che riceve non cambia nulla, giusto?
forse è solo più semplice da programmare lasciare 100uS fissi tra un canale e l'altro..
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

però poi dici che "da questo ne deriva che la durata finale del frame è variabile in funzione della durata dei singoli impulsi."...

Intendevo dire che la durata finale in stato di idle è variabile, in funzione della durata dei singoli impulsi, in modo da ottenere sempre un frame di durata costante, p.e. il classico 20 ms pari a 50 Hz.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 636
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ah, avevo capito male! quindi, ricapitolando:
sync ->  ( impulso HIGH ch1 variabile -> impulso LOW 100uS ) ripetuto per 8ch -> impulso HIGH variabile a colmare i 20mS(sync)

ma, che tu sappia, si usa anche di fare l'impulso LOW variabile per singolo canale?
Logged

Pages: 1 ... 101 102 [103] 104 105 106   Go Up
Jump to: