índiceitem superior

item anteriorpróximo item

 

3.3 - Torques externos de propulsores

 

Propulsores (ou motores foguete, ou motores de jato de gás) são equipamentos que visam gerar impulsos lineares (forças) e conjugados (torques). A força ou o torque gerado pelos propulsores é aproximadamente constante e não controlado, isto é, não se consegue dosar a intensidade da força ou do torque. Porém consegue-se, até certo limite, controlar o tempo de acionamento dos motores, e assim gerar impulsos (produto da força ou torque pelo tempo de acionamento) controlados. O limite é imposto pelo tempo de abertura e fechamento da válvula, de tal forma que, abaixo de um certo intervalo de tempo entre a abertura e o fechamento, a válvula deixa de responder ao comando. Este intervalo mínimo de tempo gera o MIB (“minimum impulse bit” ou impulso mínimo). Em geral o tempo de acionamento de um MIB é menor do que o ciclo de controle, o que significa que deve haver uma eletrônica especial ou uma interface do programa de controle embarcado capaz de comandar a abertura e o fechamento da válvula do propulsor de forma independente do ciclo de controle. Nos propulsores reais o impulso gerado não é proporcional ao tempo de acionamento se o intervalo de tempo entre a abertura e o fechamento for pequeno, ou seja, da ordem da duração do MIB. Porém, para intervalos relativamente longos o impulso é praticamente proporcional ao tempo de acionamento.

 

Como o controle da abertura e fechamento da válvula é executado por eletrônica digital, então os intervalos de acionamento são discretos no tempo. Este controle pode ser executado pelo processador central do controle de atitude por meio de uma interface, desde que esta possa contar com intervalos de tempo menores do que o do ciclo de controle. Pode, também, ser executado por eletrônica dedicada, que conte com seu próprio oscilador (“clock”). Uma vez que tentativas de acionamento dos propulsores em intervalos inferiores ao requerido pelo MIB podem comprometer tanto a durabilidade da válvula quanto do leito catalítico (no caso de propulsores à hidrazina), então a eletrônica ou a interface de acionamento deve ignorar comandos que violam a condição de MIB. Isto significa, também, que esta eletrônica dedicada ou a interface deve conhecer o instante de fechamento da válvula antes de comandar a abertura. De fato, procedimentos de segurança que não permitem comandar a abertura sem que o instante de fechamento seja definido são freqüentemente empregados em satélites: se o sistema de comando falhar ou travar durante o intervalo de acionamento, ainda assim garante-se que os propulsores serão desligados no instante correto.

 

A implementação efetuada para simular o empuxo de propulsores faz aproximações tanto no impulso quanto na discretização do tempo. A modelagem necessária para a simulação da atitude deve possuir característica de generalidade, e como as não-linearidades do impulso em pequenos intervalos de tempo dependem de detalhes construtivos do propulsor, então, para manter-se a generalidade, adotou-se uma formulação baseada em impulsos proporcionais ao tempo de acionamento, ficando a cargo do programador a verificação do atendimento da condição de MIB, bem como as não-linearidades envolvidas.

 

O empuxo gerado pela simulação é portanto discreto no tempo, assumindo o valor máximo se o comando estiver acionado ou um empuxo nulo caso contrário. O instante de acionamento é sempre o instante corrente, ou seja, no início ou fim de um ciclo de integração. O instante associado ao fechamento da válvula é passado para a simulação juntamente com o comando de acionamento, o que permite dosar o impulso em valores inferiores ao do ciclo de integração. Este instante é fornecido por meio de tempo de acionamento time_prop em segundos, e assim o propulsor permanece ligado entre os instantes time e time + time_prop, e desligado a partir daí. Conseqüentemente, se time_prop for maior do que o ciclo de integração (ver função set_step_time, na Seção 3.7), então o acionamento continua durante todo ou parte do ciclo seguinte. Acionamentos com duração negativa são ignorados.

 

A discretização dos instantes de acionamento é também efetuada no simulador, uma vez que se desconhecem quais serão os intervalos de tempo adotados pela eletrônica dedicada ou pela interface. Por outro lado, embora o integrador numérico trabalhe com intervalos discretos de tempo, ainda assim o real valor deste intervalo pode ser desconhecido, porque depende da ordem do integrador utilizado e do fato de se utilizar passo fixo ou variável. Até mesmo nos integradores de passo fixo o passo não é constante. Isto significa que o valor total do impulso irá diferir daquele comandado, pois o propulsor somente é desligado após exceder o tempo de disparo. Caso deseje-se conhecer o real valor do impulso, a função get_thruster_duty_cycle retorna com o intervalo de tempo do último impulso utilizado na integração.

 

A implementação permite configurar até 16 propulsores no satélite, por meio da posição, empuxo e direção de cada um. O torque é calculado automaticamente em função da posição do centro de massa, que varia no caso de haver apêndices articulados no satélite. A posição dos propulsores deve ser fornecida com relação ao sistema geométrico do satélite, xoyozo, fixado no centro de massa do corpo principal (ver Seção 3.6).

 

As funções set_thruster_flag e reset_thruster_flag permitem configurar o integrador para processar ou não os torques oriundos dos propulsores.

 

·         int set_thruster_flag ();

·         int reset_thruster_flag ();

·         int get_thruster_flag ();

·         int set_number_thrusters (int nthrusters);

·         int get_number_thrusters ();

·         int set_thrusters (int ind_thrtr, vector3 thrtr_pos, vector3 thrtr_thrust);

·         vector3 get_thruster_position (int ind_thrtr);

·         vector3 get_thruster_vector (int ind_thrtr);

·         double get_thruster_thrust (int ind_thrtr);

·         int set_thruster_duty_cycle (int ind_thrtr, double time_prop);

·         double get_thruster_duty_cycle (int ind_thrtr);

·         vector3 get_thruster_torque ();