SC PASCAL: PROGRAMACIÓN DE LA PALANCA DE FLAPS CON POTENCIÓMETROS

Partimos de una palanca de flaps que al moverla hacer moverse a su vez a un potenciómetro lineal de 10kohm. Lo primero que tenemos que hacer es conectar este potenciómetro a la tarjeta que se vaya a usar para controlarlo (USB Main o USB Servos) y ver qué valor toma el potenciómetro en cada punto de flap.

En este ejemplo los datos son los siguientes:

Flaps

Valor pot

0

40

1

130

2

230

5

324

10

454

15

559

25

673

30

764

40

857

Ahora podemos tratar estos datos de diferente manera, pero para este ejemplo vamos a calcular el valor del potenciómetro entre cada dos puntos de flaps. Son los siguientes:

Flaps Valor intermedio
0-1 85
1-2 180
2-5 277
5-10 389
10-15 506
15-25 616
25-30 718
30-40 810

De esta forma, si el valor del potenciómetro es mayor de 389 pero menor de 506, significa que la palanca estará en el punto de flap 10º.

Vamos a usar un archivo *.INI, que será el siguiente:

[Main]
Main1=SIMIO000210

[MainADCs]
Lever1=1
Lever2=2
EjeSplr=3
EjeFlap=4

[Flaps]
Flaps01=85
Flaps12=180
Flaps25=277
Flaps510=389
Flaps1015=506
Flaps1525=616
Flaps2530=718
Flaps3040=810

 

En este *.INI se ha definido el nombre de la tarjeta MAin USB que se usará, en qué eje de esta tarjeta está conectada la palanca de flaps, y los valores de las posiciones intermedias que hemos calculado antes.

Cuando movamos la palanca, debemos leer los valores del potenciómetro que van a cambiar, por lo que se leen en la sección OnADCChange(). Una vez leído, hay que hacer algo con ese valor. En este caso debemos escribir en la variable IOCP de la posición de la palanca (variable 326) el valor que se corresponde con el punto de flap seleccionado.

La variable 326 toma los siguientes valores:

Flaps Variable IOCP
0 0
1 2048
2 4096
5 6144
10 8192
15 10240
25 12288
30 14336
40 16384

Estos valores se obtienen, por ejemplo, usando el programa Offset Monitor incluído en la suite IOCP Server.

 

La variable IOCP hay que registrarla en la sección OnIOCPConnect().

Finalmente en la sección MAIN se leen los valores del fichero *.INI y se activa el eje ADC que nos interesa.

El script sería el siguiente:


PROGRAM Flaps;

const
OFFSET_FLAPLEVER_POS=326; //0 2048 4096 6144 8192 10240 12288 14336 16384

var
Main1:string;
Flaps01:integer;
Flaps12:integer;
Flaps25:integer;
Flaps510:integer;
Flaps1015:integer;
Flaps1525:integer;
Flaps2530:integer;
Flaps3040:integer;
ejeflap:integer;


//BOARDS EVENTs
procedure OnADCChange(sn:string;nadc:byte;value:integer);
begin
if nadc=ejeflap then begin
if (value<Flaps01) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,0) else
if ((value>(Flaps01)) and (value<(Flaps12))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,2048) else
if ((value>(Flaps12)) and (value<(Flaps25))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,4096) else
if ((value>(Flaps25)) and (value<(Flaps510))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,6144) else
if ((value>(Flaps510)) and (value<(Flaps1015))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,8192) else
if ((value>(Flaps1015)) and (value<(Flaps1525))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,10240) else
if ((value>(Flaps1525)) and (value<(Flaps2530))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,12288) else
if ((value>(Flaps2530)) and (value<(Flaps3040))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,14336) else
if ((value>(Flaps3040))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,16384) end;
end;


//IOCP EVENTs
procedure OnIOCPConnect(socket:byte);
begin
RegIOCPOffset(1,OFFSET_FLAPLEVER_POS);SYNC;
end;


//MAIN
Begin
Main1:=readinifile('Throttle.ini','Main','Main1');
ejeflap:=readinifile('Throttle.ini','MainADCs','EjeFlap');
Flaps01:=readinifile('Throttle.ini','Flaps','Flaps01');
Flaps12:=readinifile('Throttle.ini','Flaps','Flaps12');
Flaps25:=readinifile('Throttle.ini','Flaps','Flaps25');
Flaps510:=readinifile('Throttle.ini','Flaps','Flaps510');
Flaps1015:=readinifile('Throttle.ini','Flaps','Flaps1015');
Flaps1525:=readinifile('Throttle.ini','Flaps','Flaps1525');
Flaps2530:=readinifile('Throttle.ini','Flaps','Flaps2530');
Flaps3040:=readinifile('Throttle.ini','Flaps','Flaps3040');
EnableADCChannel(Main1, ejeflap, 1, 30); //Flaps pot
End.


 

Versión española

English version