Skip to content

04. Sistema Eletrônico Embarcado

Leonardo Azzi Martins edited this page Dec 4, 2021 · 1 revision

Manual de operações e especificações do sistema

Placa principal

Abaixo está o diagrama de conexão dos componentes da primeira versão da placa principal, que ainda está funcional e tem o uso recomendado como datalogger.

O conector do ESC (em azul) é o conector que liga o controle do ESC à placa principal. No modelo inicial, este é apenas uma barra de pinos, apresentando esporadicamente um mal contato que prejudica fortemente o funcionamento do protótipo (pois ele faz o ESC se comportar de forma errática). O negativo (fio marrom do ESC) deve ficar para baixo, ou seja, este fio deve ficar mais próximo do LED de indicação de energia que os demais, e deve-se ter cuidado para não plugar esse conector com a orientação errada.

O conector de programação (em vermelho) é o conector para a programação e comunicação serial com o ATMEGA 328P. O negativo é o mais próximo do oscilador de cristal. Logo acima está o VCC, portanto deve-se ter cuidado para plugar esse conector com a orientação correta (por mais que o JST dificulte, é possível plugar errado), e também deve-se verificar a ligação do cabo no FTDI, pois pode ocorrer de estar virado neste lado também.

Os conectores dos fins de curso (em verde) são onde se pluga cada um dos sensores de fim de curso da prótese. Atualmente, a ordem não importa, uma vez que a prótese apenas para quando qualquer um dos fins de curso é atingido. Deve-se seguir a orientação do JST para conectar cada um dos fins de curso..

Os dois conectores I2C principais (em amarelo) tem a mesma pinagem, portanto a ordem em que os MPU’s são ligados em cada um dos conectores não causa problemas. A ligação dos conectores deve seguir a orientação destes, com a saliência do conector voltada para cima.

O conector I2C auxiliar (em marrom) tem a pinagem espelhada em relação aos conectores I2C principais, pois deve-se plugar o conector para o outro lado, com a saliência para cima. Esse conector é para alguma expansão ou periférico extra que possa vir a ser necessário.

O conector da palmilha instrumentada (em roxo) tem 4 de seus 5 pinos funcionais, sendo um deles não conectado a nada. O conector deve ser plugado com sua saliência voltada para cima.

O conector do encoder (em laranja) utiliza apenas dois de seus três pinos, porém ,como a ordem dos pinos conectados importa, deve-se seguir a orientação do conector corretamente (saliência para cima).

O último conector é o da fita de LED (em rosa), que serve para controlar a fita de LED RGB de indicação da prótese. O conector deve ser plugado com a saliência para cima. Para a fita de led funcionar, entretanto, é necessária uma alimentação de 12V, que pode ser obtida conectando um fio do positivo da bateria a pino com um + adjacente ao conector do LED.

O conector do ESC foi substituído na versão posterior a fim de reduzir ao máximo o mal contato, sendo indicado o uso da versão mais nova da placa embarcada no protótipo. Em relação ao conector de programação da placa principal, inicialmente, pensava-se que os pinos do programador deveriam estar na mesma ordem em que aparecem no ATMEGA328P, entretanto, verificou-se posteriormente que as placas do Arduino que tem esse microcontrolador tem a pinagem diferente, adotando-se esta nova pinagem para maior compatibilidade.

Na página anterior está o diagrama de conexão dos componentes da segunda versão da placa principal, que tem como uso indicado a aplicação no protótipo, pois este modelo sofreu diversas melhorias de segurança, além de ter seu conector de programação padronizado (ficando igual ao conector de programação do Arduino Pro mini). Além disso, todos os conectores do I2C tem a mesma pinagem, diminuindo a chance de erro na hora de plugar os periféricos na prótese.

Periféricos

Sensores de movimento (MPUs)

O sensoriamento do movimento é feito por meio de uma Unidade de Medidas Inerciais (IMU), que agrega giroscópio e acelerômetro, com o objetivo de ter informações sobre a posição de um objeto. O chip que realiza esta tarefa é o MPU 6050, muito utilizado para tal tarefa. Ele é um sensor digital de 6 eixos, com ótima precisão, baixo consumo de energia e é compacto. Sua comunicação é feita por meio do protocolo I2C, que utiliza apenas dois fios e pode ter diversos dispositivos no mesmo barramento (bus). Por conta disso, o MPU tem dois endereços próprios, que devem ser utilizados na comunicação para poder acessar os dados do MPU desejado.

Este sensor fica posicionado na parte superior do garfo da prótese, ou seja, na parte que fica fixa à coxa do usuário, sendo esta posição a utilizada para o funcionamento do sistema de controle. O sensor funciona com 3.3V, mas tem suas entradas tolerantes a 5V, e tem regulador onboard para reduzir os 5V recebidos. Seu consumo de corrente é baixíssimo, da ordem de miliamperes. Ele tem 8 pinos, dos quais apenas 5 são usados aqui. Para informações sobre os pinos não utilizados ou informações aprofundadas sobre o sensor, diversos sites cobrem essas informações em detalhes. Aqui utilizamos o pino de alimentação (VCC), o terra (GND), pinos de comunicação I2C (SDA e SCL) e o pino de seleção de endereço, chamado AD0. O SDA é ligado ao pino PC4 do microcontrolador (equivalente ao A4 do Arduino UNO) e o SCL é ligado ao PC5 (equivalente ao A5). A ligação do AD0 é feita no próprio sensor, tanto ao VCC quanto ao GND.

Ele é chamado de “6 eixos” por ter acelerômetro de 3 eixos e giroscópio de 3 eixos. Com o acelerômetro, conseguimos medir a aceleração em cada um dos eixos, e por meio da integração desses valores, podemos aproximar a velocidade da prótese. Além disso, também é possível decompor a aceleração sentida para descobrir qual a angulação do objeto com a aceleração exercida pela gravidade. Com o giroscópio, encontramos a velocidade angular da prótese, e por meio de sua integração, encontramos a posição angular da prótese. Cada um dos métodos citados para encontrar o ângulo da prótese em relação ao solo tem suas falhas: ano primeiro método, uma aceleração externa pode distorcer o resultado obtido; no segundo, o erro de integração causa um “drift” no ângulo calculado. Entretanto, por meio da filtragem (filtro de kalman) dos valores obtidos e da sua combinação (que acaba funcionando também como um filtro passa baixa), obtemos uma referência muito boa do ângulo da prótese em relação ao solo. Conforme citado anteriormente, o sensor pode ter dois endereços diferentes, o que permite ligar dois sensores ao mesmo tempo no mesmo bus I2C. Esse endereço pode ser configurado a partir do pino AD0 do sensor, tendo como endereço 0X68 para o AD0 em LOW e 0X69 para o AD0 em HIGH. Essa característica foi usada a nosso favor para utilizar dois MPU’s simultaneamente. Por conta disso cada um dos sensores de movimento vestíveis tem um endereço diferente, que configuramos ligando o AD0 no GND em um dos sensores e ligando o AD0 no 5V no outro sensor.

ESC: Electronic Speed Controller

O ESC é o dispositivo que faz a ativação do motor brushless do atuador. Ele é um dispositivo eletrônico de alta potência, utilizado originalmente em veículos R/C e que é controlado por meio de comunicação com servos R/C. Atualmente a prótese está equipada com um ESC Hobbyking X-Car de 60A, que funciona tanto com motores sem sensor (sensorless) ou com motores sensoriados (sensored). Atualmente o motor utilizado é sensorizado, por apresentar torque inicial alto e grande potência em relação ao seu peso.

O ESC aceita até cerca de 12.4 volts de alimentação (bateria 3s) e motores com corrente máxima de 60A. Ele tem um dissipador de calor e ventoinha, para não atingir temperaturas muito altas. Ele conta com os dois fios de entrada da bateria (vermelho e preto), três fios para o motor (laranja, amarelo e azul) e um conector de controle de três fios, um fio vermelho, que fornece 5V para o circuito de controle, um marrom, que é o GND, e um amarelo, que é o sinal, que controla o funcionamento do ESC.

Atualmente a bateria é ligada no ESC por meio de um conector XT-60, e o ESC é ligado ao motor por meio de banana plugs 3,5mm. Um ponto importante a salientar é que o motor é sensorizado (tem um encoder), sendo necessária a ligação dos fios na ordem correta, que é indicada pelas suas cores. Assim, as cores iguais devem ser ligadas juntas. O encoder (sensor) do motor tem um conector padronizado, devendo este ser conectado ao ESC para o funcionamento correto do motor e do encoder.

A comunicação do ESC com a placa principal é uma parte bastante importante, pois ela tem um funcionamento relativamente complexo. Basicamente o ESC utiliza a mesma comunicação que um servomotor comum, por meio de modulação por largura de pulso (PWM), com um pulso que dura de 1 a 2 ms a cada 20 ms. Na teoria, para o ESC, um pulso de 1ms (valor 0 do Servo.write) faria o motor funcionar com velocidade máxima para um sentido, um pulso de 1.5ms (valor 90) faria o motor ficar parado e um pulso de 2ms faria o motor funcionar com velocidade máxima no outro sentido.

Na prática, entretanto, não é o que ocorre. Os intervalos de funcionamento são ligeiramente desiguais, não utilizam todo o intervalo de 0 até 180 e há uma zona morta próxima aos 90. Por conta disso, é necessário haver um mapeamento dos valor enviados ao ESC para que este funcione corretamente. O motor se mantém parado com valores de 83-93, funciona para trás com velocidade máxima com valor 20, e funciona para frente com velocidade máxima com 180. Todavia, ele tem mais velocidade para frente do que para trás, por conta disso, deve-se utilizar intervalos semelhantes (de preferência iguais) tanto para frente quanto para trás.

Header de programação

O cabeçalho de programação é por onde é feito o envio e recebimento de dados de um computador para a placa principal. Por meio dele, também é possível fazer comunicação Serial com a placa, enviando e recebendo dados em tempo real. Este cabeçalho conta com os pinos de comunicação serial do ATMEGA 328P, seu pino de reset, um positivo e um terra, em um conector JST de 5 vias (5 pinos / fios).

A comunicação serial ocorre por meio dos pinos USART do microcontrolador, sendo um deles o RX (Receiver, que recebe os dados direcionados ao microcontrolador) e o outro o TX (Transmitter, que envia o que o microcontrolador deseja). Ela utiliza o padrão RS-232 em nível lógico TTL (de forma simplificada, de 0 a 5 V), e para poder se comunicar com o computador, é necessário um conversor, denominado FTDI. Ele “traduz” os dados enviados pela USART para o computador e também os dados enviados do computador para a USART. Por ser assíncrona (não haver um clock comum entre o receptor e o transmissor), a comunicação Serial precisa que o microcontrolador seja resetado antes da comunicação, por conta disso há também um pino de Reset no cabeçalho. Além disso, para efetuar a programação, é necessário resetar o microcontrolador diversas vezes no processo de forma precisa. Além desses três pinos de comunicação há também dois pinos de alimentação no circuito, VCC e GND, que são fornecidos pelo FTDI. Eles permitem que se programe o ATMEGA328P sem haja a necessidade de alimentação externa para ele. A ordem dos pinos deste conector mudou da primeira para a segunda versão da placa principal: Na primeira, a ordem era, de cima para baixo, RESET, RX, TX, VCC e GND. Para haver compatibilidade com outros sistemas que funcionam com o ATMEGA 328P, como o Arduino Pro Mini, utilizou-se o seguinte pinout na segunda versão, de cima para baixo: RESET, TX, RX, VCC e GND. Portanto, para operar cada uma das versões, indica-se que hajam dois cabos distintos, para não haver confusão. O cabo atual é compatível com a versão antiga da placa principal, logo, recomenda-se fazer um cabo novo para a placa mais atual, tendo em vista que há conectores do tipo JST de sobra.

Sensores 'Fim de curso'

Os sensores de fim de curso verificam a aproximação do garfo em relação a parte inferior da prótese, servindo para impedir colisões. Os fins de curso utilizam o TCRT-5000 como elemento sensor. Sua saída varia de cerca de 0 a 5V, sendo 5V quando não acionado e próximo de 0 quando acionado, tendo como função ativar a interrupção do ATMEGA 328P, que para o motor e ativa um alarme. Os sensores tem três fios, positivo (vermelho), sinal (amarelo) e terra (preto), sendo alimentado com 5V, sendo utilizado plug JST para sua conexão na placa.

Feedback de movimento do motor (Encoder)

O feedback do atuador da prótese é feito por meio de um encoder rotativo. Ele está localizado no motor brushless, e tem uma função dupla: indicar ao ESC qual posição o eixo do motor se encontra, para ligar o enrolamento correto e assim reagir mais rápido e aplicar mais torque, e indicar ao microcontrolador quantas voltas o motor já deu. Na realidade, a segunda função foi uma adaptação, pois o encoder tem como tarefa principal a sua primeira função. O encoder conta com três sensores de efeito hall igualmente espaçados, com comportamento digital. Assim, eles geram ondas quadradas com igual defasagem entre si. Por conta disso, existem 6 combinações possíveis entre os três pinos do encoder. Ao lado um exemplo de como é o formato de onda do encoder. O sinal dele varia de 0 a 5V. Atualmente, o encoder tem um conector de três pinos, trazendo o sinal dos três sensores para a placa principal, por meio de um plug JST. Entretanto, em ambas as versões da placa principal, apenas o sinal de dois sensores são utilizados, deixando um dos sensores não conectado. Os dois encoders presentes são lidos no modo quadratura, que permite saber o quanto o motor está se movimentando e para que sentido ele está indo, dando enorme precisão à leitura de movimento. A ordem dos fios não importa, desde que não seja trocada durante o funcionamento da prótese, pois isso gera falsos pulsos que podem causar um funcionamento caótico do motor. Por conta disso, é importantíssimo que esse conector seja bastante robusto e completamente livre de mau contato.

Sensores de força plantar (Palmilha instrumentada)

É o sensor que mede a força aplicada pelo pé protético do usuário ao solo, sendo constituído por três sensores resistivos de força (FSR) posicionados em diferentes áreas do pé, captando importantes dados sobre a intenção de movimento do usuário. Os sensores estão localizados no dedão, metatarso e calcanhar. Eles são alimentados por 5V e cada um alimenta um outro resistor, de 15K, que está ligado ao terra, configurando um divisor de tensão. Os sensores funcionam de maneira analógica, variando sua resistência de acordo com a força aplicada nestes sensores. Eles são utilizados em conjunto com uma resistência de valor fixo, de 15K, formando um divisor de tensão, e esta varia entre cerca de 1V(medir para confirmar) a até cerca de 5V, sendo que quanto maior o valor da tensão, maior a força que o sensor está sendo submetido, pois a resistência dos sensores é altíssima (da casa dos MOhms) e cai a valores baixos quando estes são pressionados (casa dos KOhms). O sensor conta com um plug JST de 5 vias, das quais apenas 4 são utilizadas, uma para a alimentação (5V) e três para os sensores.

Fita de LED

Serve como indicação para o usuário, podendo demonstrar nível de bateria, erros, etc. Utiliza um conector JST de 4 vias, uma para 12V, e um para cada cor, que deve ser ligado ao terra para funcionar. Isso é feito na placa principal por meio de transistores, uma vez que a corrente utilizada pela fita é bem mais alta do que uma porta do microcontrolador pode suprir.

Discussão sobre o sistema

O sistema de processamento de dados é responsável por embarcar tarefas que exigem ser executadas em tempo real e com alto poder de processamento, como o controle dinâmico do torque e um futuro sistema de adaptação de parâmetros da prótese para cada biotipo (Rede Neural). Quando projetamos a prótese, pensamos no microprocessador BCM2837 de 64 bits, o qual compõe a placa de desenvolvimento Raspberry Pi 3 B, realizando este processamento de forma embarcada. Este microprocessador se comunicará com o sistema primário por meio de GPIO, fornecendo para este os parâmetros solicitados para processamento.

Para gerenciar a bateria da prótese, pretende-se implementar um circuito capaz de ler a tensão em cada célula a fim de informar ao pesquisador e/ou usuário que a bateria precisa ser recarregada e o sistema ser desligado. Isso poderia ser feito de forma muito simples, utilizando um divisor de tensão 2r/r, que reduz a tensão por 3, para ler a terceira célula, e um divisor r/r, que divide a tensão por 2, para ler a segunda célula, realizando leitura direta na primeira célula. O único motivo de não ter implementado esse sistema antes foi a falta de portas analógicass na placa embarcada principal, pois o ATMEGA 328P DIP possui apenas 6 portas analógicas (a versão SMD tem 8).