ROCKETRY FRANCE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Acceleromètre

2 participants

Page 2 sur 2 Précédent  1, 2

Aller en bas

Acceleromètre - Page 2 Empty Re: Acceleromètre

Message par lem75pat Ven 12 Aoû - 13:37


Bonjour

Il faudra me montrer l'équation itérative de ton programme de filtrage (constitution, parametrage)

Voici ce que j'ai retrouvé sur le projet de comptage d'entrées dans la cathédrale de la ville du club

L'exemple ARDUINO basique de commande de la LED (par le créateur d'ARDUINO)


/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.
*/

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {
// put your setup code here, to run once:
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(2000); // wait for a second
}


Les caractéristiques pour ARDUINO Uno :
dimensions 52*65 mm
µcontrôleur Atmel ATmega 328
quartz 16 MHz
32k octets mémoire programme (flash)
2k octets mémoire données (RAM)
1k octets mémoire EEPROM
14 lignes E/S logique (40mA maxi par ligne)
6 entrées analogiques
digital 13 = led, analog 4 = SDA I2C, analog 5 = SCL I2C, afficheur avec I2C

De mes programmes faits pour ce projet de comptage, il apparaît des mesures et développements
400 tours par seconde, soit 2.5ms par exécution de loop()


Pour les servo moteurs de modélisme, la constante de temps est pratiquement en dizaines de ms

Un moteur réducteur donne, avec w = 2pi n/60 = 2pi N
fem E = K w
I = C / K E I = K w * C/K = C w
C = J dw/dt
U = E + R I
= K w + (R J / K) dw/dt
d'ou w + (R J / K²) dw/dt
w + tau w' = 0
w'/w = -1/tau
w = A e^-t/tau
W + p tau W = Wf
W = Wf / (1 + p tau)
psi = W / p = Wf / p (1 + p tau)

L'équation du moteur réducteur est 1 / p(1 + p tau)
Dans un asservissement, avec B O = 1 / p(1 + p tau)
en B F = 1 / [1 + p(1 + p tau)]
et si tau << 1, alors -> 1 / (1+p)

ici comme theta est lié à tangage (ou inclinaison) via un double intégrateur, cela donne
B / p²(1+p)

Dans l'asservissement qui est le nôtre, en B F c'est
B / [ B + p²(1+p) ] ou 1 / [ 1 + p²/B + p^3/B ]
B est le gain
la commande theta, je le répètes doit être compris entre 0 et +-45°
sinon la force latérale sera plus difficile à obtenir (notamment à l'approche de +-90°
à angle droit, ce sera un aérofrein dans son intégralité
theta, je le rappelles est pour moi l'angle de rotation des ailerons (ou pales)
lem75pat
lem75pat

Messages : 783
Date d'inscription : 08/04/2016
Localisation : Paris

Revenir en haut Aller en bas

Acceleromètre - Page 2 Empty Re: Acceleromètre

Message par lem75pat Ven 12 Aoû - 13:46

Bonjour

Il faudra me montrer l'équation itérative de ton programme de filtrage (constitution, parametrage)

Voici ce que j'ai retrouvé sur le projet de comptage d'entrées dans la cathédrale de la ville du club

L'exemple ARDUINO basique de commande de la LED (par le créateur d'ARDUINO)


/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.
*/

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {
// put your setup code here, to run once:
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(2000); // wait for a second
}


Les caractéristiques pour ARDUINO Uno :
dimensions 52*65 mm
µcontrôleur Atmel ATmega 328
quartz 16 MHz
32k octets mémoire programme (flash)
2k octets mémoire données (RAM)
1k octets mémoire EEPROM
14 lignes E/S logique (40mA maxi par ligne)
6 entrées analogiques
digital 13 = led, analog 4 = SDA I2C, analog 5 = SCL I2C, afficheur avec I2C

De mes programmes faits pour ce projet de comptage, il apparaît des mesures et développements
400 tours par seconde, soit 2.5ms par exécution de loop()


Pour les servo moteurs de modélisme, la constante de temps est pratiquement en dizaines de ms

Un moteur réducteur donne, avec w = 2pi n/60 = 2pi N
fem E = K w
I = C / K E I = K w * C/K = C w
C = J dw/dt
U = E + R I
= K w + (R J / K) dw/dt
d'ou w + (R J / K²) dw/dt
w + tau w' = 0
w'/w = -1/tau
w = A e^-t/tau
W + p tau W = Wf
W = Wf / (1 + p tau)
psi = W / p = Wf / p (1 + p tau)

L'équation du moteur réducteur est 1 / p(1 + p tau)
Dans un asservissement, avec B O = 1 / p(1 + p tau)
en B F = 1 / [1 + p(1 + p tau)]
et si tau << 1, alors -> 1 / (1+p)

ici comme theta est lié à tangage (ou inclinaison) via un double intégrateur, cela donne
B / p²(1+p)

Dans l'asservissement qui est le nôtre, en B F c'est
B / [ B + p²(1+p) ] ou 1 / [ 1 + p²/B + p^3/B ]
B est le gain
la commande theta, je le répètes doit être compris entre 0 et +-45°
sinon la force latérale sera plus difficile à obtenir (notamment à l'approche de +-90°
à angle droit, ce sera un aérofrein dans son intégralité
theta, je le rappelles est pour moi l'angle de rotation des ailerons (ou pales)
lem75pat
lem75pat

Messages : 783
Date d'inscription : 08/04/2016
Localisation : Paris

Revenir en haut Aller en bas

Acceleromètre - Page 2 Empty Re: Acceleromètre

Message par lem75pat Ven 12 Aoû - 13:49

Ahhh je l'ai placé deux fois, je n'avais pas vu le 'page 2 sur 2' de ce sujet qui se remplit (tant mieux d'ailleurs)

Voici pour les servomoteurs 'modélisme', à partir de
https://fr.wikipedia.org/wiki/Servomoteur

Un extrait sur les caracéristiques :

Les plus courants, et les moins chers, ont une course limitée à 90° ou 120°. Un servomoteur standard comme le S3002 de Futaba
a des dimensions de 31,0 x 16,0 x 30,2 mm et pèse 35 g. Sa vitesse de rotation est de 0,20 seconde pour parcourir 60° alors
que son couple est de 3,3 kg⋅cm.

Un mini-servo comme le HS-55 de chez Hitec est quatre fois moins lourd, mais aussi moins puissant. En effet, son couple est
de 1,1 kg⋅cm et sa vitesse est de 0,17 seconde pour 60°. Mais son poids est de 8 g pour des dimensions de 22,8 x 11,6 x 24 mm.


Cela reste dans mon ordre de grandeur de sa constante de temps
lem75pat
lem75pat

Messages : 783
Date d'inscription : 08/04/2016
Localisation : Paris

Revenir en haut Aller en bas

Acceleromètre - Page 2 Empty Re: Acceleromètre

Message par bdureau Ven 12 Aoû - 15:16

Pour les servos voici ce que j'ai
http://www.ebay.fr/itm/5X-Micro-Mini-Servos-SG90-9G-Servo-Moteur-RC-Helicoptere-Avion-Fr-TE147-/161674791051?hash=item25a491888b:g:~vYAAOSw7ehXS9tn

Pour le filtre de Kalman voici mon code
--------------------------------------------

//Kalman Variables
float f_1=1.00000; //cast as float
float kalman_x;
float kalman_x_last;
float kalman_p;
float kalman_p_last;
float kalman_k;
float kalman_q;
float kalman_r;
float kalman_x_temp;
float kalman_p_temp;
//end of Kalman Variables
//================================================================
// Kalman functions in your code
//================================================================

//Call KalmanInit() once.

//KalmanInit() - Call before any iterations of KalmanCalc()
void KalmanInit()
{

kalman_q=4.0001; //filter parameters, you can play around with them
kalman_r=.20001; // but these values appear to be fairly optimal

kalman_x = 0;
kalman_p = 0;
kalman_x_temp = 0;
kalman_p_temp = 0;

kalman_x_last = 0;
kalman_p_last = 0;

}

//KalmanCalc() - Calculates new Kalman values from float value "altitude"
// This will be the ASL altitude during the flight, and the AGL altitude during dumps
float KalmanCalc (float altitude)
{

//Predict kalman_x_temp, kalman_p_temp
kalman_x_temp = kalman_x_last;
kalman_p_temp = kalman_p_last + kalman_r;

//Update kalman values
kalman_k = (f_1/(kalman_p_temp + kalman_q)) * kalman_p_temp;
kalman_x = kalman_x_temp + (kalman_k * (altitude - kalman_x_temp));
kalman_p = (f_1 - kalman_k) * kalman_p_temp;

//Save this state for next time
kalman_x_last = kalman_x;
kalman_p_last = kalman_p;

//Assign current Kalman filtered altitude to working variables
//KAlt = kalman_x; //FLOAT Kalman-filtered altitude value
return kalman_x;
}


-----------------------------------------------------------------------------
Pour l'initialiser j'ai une petite qui fait 50 mesures lorsque l’altimètre démarre

Voici un lien vers le code complet
https://github.com/bdureau/RocketFlightLogger


bdureau
bdureau

Messages : 5020
Date d'inscription : 28/03/2016
Age : 52
Localisation : 92150 Suresnes (Région parisienne)

http://rocket.payload.free.fr/

Revenir en haut Aller en bas

Acceleromètre - Page 2 Empty Re: Acceleromètre

Message par lem75pat Lun 15 Aoû - 13:59

Salut

Pour l'analyse j'ai repris comme syntaxe : n-1 & n pour précédent & courant (ou actuel)

donc voilà

Xn = Xn-1 + (K / (altitude - Xn-1))
Pn = (1 - K) * (Pn-1 + R)
avec K = (Pn-1 + R) / (Pn-1 + R + Q)

ou encore

Pn = Q (Pn-1 + R) / (Pn-1 + R + Q)
Xn = Xn-1 + (Pn-1 + R) / ((Pn-1 + R + Q)(altitude - Xn-1))
lem75pat
lem75pat

Messages : 783
Date d'inscription : 08/04/2016
Localisation : Paris

Revenir en haut Aller en bas

Acceleromètre - Page 2 Empty Re: Acceleromètre

Message par lem75pat Lun 15 Aoû - 15:28

Encore moi

Je rajoute

Pour un servo moteur (asservissement en position)
moteur réducteur en angle, A / p (1 + tau1 p)
B O 1 = A / p (1 + tau1 p)
B F 1 = A / A + p (1 + tau1 p)
avec tau1 << 1
B F 1 = A / A+p = 1 / (1 + p/A)
En rajoutant B/p² (effet aileron sur le tangage)
B O 2 = B / p²(1 + p/A)
B F 2 = B / B + p² + p^3/A

L'équation au dénominateur est B + p² + p^3/A

Une équation comme a x^3 + b x² + c x + d = 0 donne

x^3 + b/a x² + c/a x + d/a = 0
X^3 + p X + q = 0 x = X - b/3a
p = c/a - b²/3 a²
q = d/a + 2 b^3/27 a^3 - b c/3 a²
déterminant D = q²/4 + p^3/27
racine = (-0.5q + D^0.5)^0.33 + (-0.5q - D^0.5)^0.33
avec a=1
p = c - b²/3
q = d + 2 b^3/27 - b c/3

Selon méthode de Cardan et méthode de Bombelli
lem75pat
lem75pat

Messages : 783
Date d'inscription : 08/04/2016
Localisation : Paris

Revenir en haut Aller en bas

Acceleromètre - Page 2 Empty Re: Acceleromètre

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum