Test de réactivité en aveugle

BESQUEUT

Senior Member
Mon objectif est de déterminer à quelle fréquence on doit rafraîchir un servo pour que le pilote ait le sentiment d'une bonne "réactivité".
Si vous posez la question à un pilote, il répondra probablement "la plus grande possible"
ce qui n'est pas une réponse, l'objectif étant en particulier de limiter l'usage de la bande de fréquence (duty cycle légal)
accessoirement de limiter l'échauffement de l'émetteur, et en tout état de cause de donner des limites à l'optimisation des programmes d'émission et de réception.

Dans ce genre de situation où les a-priori sont légions et la subjectivité la règle, seule la méthode des tests en double aveugle (double insu) permet d'obtenir des chiffres fiables.

Pour ceux que ça intéresse, voir par exemple stradivarius-la-fin-dun-mythe
et également le-mythe-stradivarius-ecorne

Si vous disposez d'un servo, d'un potentiomètre, d'un bouton poussoir et bien sur d'un Picaxe, vous pouvez faire le test vous-même et publier vos résultats.
Ce n'est pas une compétition ; simplement une mesure objective d'un sentiment subjectif.

Code:
' Reactivite

#PICAXE 40X2
#no_table

symbol Hasard=w27
symbol Position = W26  'Pulse width

symbol I=b1
symbol J=b2
symbol Freq=b3
symbol Angle=b4
symbol Nmax=b5
symbol N=b6

symbol Bouton=pinA.7
symbol Potar=D.1
symbol Aiguille=0
symbol Oscillo=b.7

setfreq m16

Hasard=31416
gosub etalonnage


do
	sertxd(13,10,"Pour commencer, appuyer sur le bouton",13,10)
	
	do
		random hasard
	loop while Bouton = 1

	do
	loop while Bouton=0


	ptr=10
	for i=1 to 32
		random hasard
		Freq=hasard//8
		@ptrinc=freq
		gosub Pilot2
	next i

	sertxd(13,10,"Reglages :",13,10)
	ptr=10
	for i=1 to 32
		sertxd("Regl ",#i,":",#@ptrinc,13,10)
	next i
loop


Pilot2:
	sertxd("Test ",#i,13,10)
	select case Freq
		case 7: Nmax=0		
		case 6: Nmax=1		' 64 hz
		case 5: Nmax=2		' 32 hz
		case 4: Nmax=4		' 16 hz
		case 3: Nmax=8		'  8 hz
		case 2: Nmax=16	'  4 hz
		case 1: Nmax=32	'  2 hz
		case 0: Nmax=64	'  1 hz
	endselect
	position=600
	N=255

	
	do
		inc N
		if N=Nmax then
			N=255
			readadc D.1,angle
			position =angle*7/3+310
			pulsout Oscillo,1000
		endif

		pulsout B.0,Position
		pause 25

	loop while Bouton = 1


	do
	loop while Bouton=0
Return


Pilotage:
	servo Aiguille,150
	sertxd("Test ",#i,13,10)
	
	do
		readadc D.1,angle
		if angle>75 and angle<225 then
			servo Aiguille,Angle
		endif
		
		select case Freq
		case 7			' 350 hz
		case 6: pause 25		' 64 hz
		case 5: pause 55		' 32 hz
		case 4: pause 117		' 16 hz
		case 3: pause 240		'  8 hz
		case 2: pause 480		'  4 hz
		case 1: pause 980		'  2 hz
		case 0: pause 1980	'  1 hz
		endselect
		pulsout Oscillo,1000

	loop while Bouton = 1


	do
	loop while Bouton=0
return

Etalonnage:
	for Freq=0 to 7
		sertxd("Freq=",#Freq,13,10)
		gosub Pilot2
	next Freq
RETURN
Ouvrer le terminal et lancez le programme.
Le programme commence par un étalonnage pendant lequel vous pouvez mesurer au fréquencemètre ou à l'oscillo chacune des 8 fréquences utilisées (entre 1Hz et 60 hz environ)
Appuyez sur le bouton pour passer à la fréquence suivante.
Puis le programme vous propose 32 tests, chacun avec une fréquence tirée au hasard.
Notez sur un papier ou dans un tableur le N° du test et votre sentiment sur la réactivité, entre 0 et 7.
Appuyez sur le bouton pour passer au test suivant.
Après le 32 ième test, le programme vous révélera les 32 fréquences utilisées, à ajouter dans une 3 ième colonne de votre tableau.
Merci de publier les 3 colonnes pour analyse.

Pour ma part :
Les valeurs 0,1 et 2 (1, 2 et 4 hz) sont assez facile à repérer.
A 3 (8 hz) c'est un peu "mou" mais ça me semble utilisable.
Au delà (4,5, 6 et 7), impossible de distinguer les différentes fréquences : c'est réactif ; point.

A noter que le Picaxe est incapable de gérer simultanément un READADC et la commande SERVO : le servo tremble épouvantablement, même avec une alim séparée.
le problème est connu et documenté sur le forum anglais, sur lequel j'ai trouvé la solution : utiliser pulsout au lieu de servo.

A noter également que le READADC n'est pas la seule commande incompatible avec SERVO. Ça explique différents cas de tremblote du servo que j'ai pu voir dans différents threads...

Notons pour finir, que la commande RANDOM ne donne pas une séquence aléatoire mais une succession de nombres a peu près doubles du précédent. Donc quand on commence à zéro, et surtout quand on atteint zéro ou une valeur petite, on tombe sur une succession de nombres petits...

Des précautions très spécifiques doivent être prises pour obtenir une séquence satisfaisante.
 
Last edited:

PieM

Senior Member
A noter que le Picaxe est incapable de gérer simultanément un READADC et la commande SERVO
Curieux de lire cette affirmation péremptoire !
Ce qui certain par contre:
- c'est que la commande servo n'est à utiliser qu'en début de programme pour initialiser la commande qui ensuite doit se faire par servopos.
- que servo est inutilisable avec un X2 à la fréquence de 16 MHz. (comme dans le programme ci dessus...)
- qu'il faut éviter d'utiliser des instructions liées aux timers telles que sertxd avec. (comme dans le programme ci dessus...)

Quant à utiliser pulsout, c'est connu depuis longtemps y compris dans ce forum, mais ne peut remplacer partout une tâche de fond comme Servo.

Sinon sur la méthode dite objective, j'ai un peu de mal avec une approche qui ne tient compte ni des latences liées aux traitements réels de l'information, pas plus que celles liées à la cinématique qui suit.
En outre ici il ne s'agit pas de servos de direction ni de gaz mais d'une commande différentielle de drivers de moteurs.

4 infos/s sur le carburateur d'une voiture de 200ch engendrent plus de "réactivité" que 10 infos/s sur une voiture de 50 ch.
 
Top