SERVO CONTROL – CONTROLE PARA ATÉ 8 SERVOS
VIA RS-232 COM MICROCONTROLADOR PIC

Encontrei esse artigo/projeto que escrevi em 2008 e não me lembro de tê-lo publicado nas revistas da saudosa Editora Saber durante o período em que fui um dos seus colaboradores. Apesar de um pouco antigo o mesmo ainda pode ser montado já que seus componentes ainda estão disponíveis no mercado ou pelo menos pode servir de base para aqueles que desejam projetar algo similar. Seja qual for a sua escolha, boa leitura!

Pequenos robôs muitas vezes requerem a movimentação de um ou mais servos. É o caso de pequenos braços mecânicos que podem ser utilizados em sala de aula para o aprendizado das teorias que envolvem a robótica e/ou apresentados em feiras e até mesmo como trabalho de conclusão de curso. O projeto proposto neste artigo permite controlar até oito servos através da porta RS-232 de um PC e poderá ser utilizado nos mais variados projetos.


 Fotos do protótipo usado nos testes na época




A proposta

A proposta deste artigo é bem simples, mas bastante interessante. Através de um único microcontrolador será demonstrado como controlar até oito servos, de maneira simultânea, através de uma porta de comunicação RS-232 presente na maioria dos computadores atuais. O circuito também poderá ser utilizado em conjunto com outros “sistemas” microcontrolados, que utilizem a comunicação RS-232. As principais características do projeto Servo Control são:

  • Controle simultâneo de até 8 servos;
  • Comunicação RS-232 assíncrona com duas velocidades disponíveis: 2400 e 9600 bps;
  • Protocolo de comunicação extremamente simples (apenas 4 bytes);
  • Possibilidade de integração com uma aplicação desenvolvida pelo usuário, independente da linguagem de programação selecionada (desde que a mesma permita o acesso a RS-232 do computador em questão);
  • Tamanho bastante reduzido para facilitar a sua instalação em outros sistemas;
  • Baixo custo de desenvolvimento.


Como funcionam os servos?


Antes de falar a respeito do circuito, é interessante conhecer um pouco sobre o funcionamento dos servos (figura acima), já que estes são muito empregados hoje em dia na robótica educacional. O fato é que de todos os elementos capazes de converter energia elétrica em movimento mecânico, o servo é o que permite a maior gama de aplicações. Podemos emprega-los na construção de braços mecânicos (robôs manipuladores), tratamento e controle de alavancas no geral, entre outras. Graças a sua simplicidade de operação, aliada as suas características mecânicas, seu emprego para fins didáticos pode ser feita com muita facilidade.


Na figura acima você pode ver a estrutura de um servo básico. Ele é constituído de um motor, um dispositivo de realimentação, circuito de controle e um sensor de posição (geralmente um potenciômetro). O dispositivo de realimentação permite que o circuito de controle coloque a “alavanca” na posição desejada e a mantenha nesta.

Como você pode notar através da figura mais acima, o servo transforma sinais elétricos em movimentos mecânicos. Isso porque existe uma “proporcionalidade” entre os sinais (pulsos) que são levados ao servo e a posição da alavanca. Veja com maior detalhes como isso ocorre na figura abaixo.




De acordo com a largura de pulso recebido pelo servo a alavanca do mesmo avança ou recua para uma determinada posição. Este pulso têm largura predeterminada que varia entre 1ms (1x10-3 segundos) e 2,5ms (2,5x10-3 segundo) com um espaçamento médio de 20ms (20x10-3 segundos) entre cada pulso (sempre contínuos). Assim sua alavanca é posicionada de acordo com o sinal enviado.


O circuito



A figura acima mostra o circuito eletrônico do Servo Control. O microcontrolador CI1, um PIC16F628, faz todo o trabalho desde a comunicação com o computador até o controle dos servos. Este microcontrolador já é um velho conhecido dos maker's mais velhos e as principais características deste microcontrolador são:

  • Memória de programa com 2k bytes de FLASH;
  • 224 bytes de RAM;
  • 128 de EEPROM;
  • 15 pinos de I/O com dreno de corrente na ordem de 20mA;
  • Dois comparadores Analógicos;
  • Dois timer’s de 8 bits e um de 16 bits;
  • Um canal CCP (Capture, Compare and PWM);
  • Um canal USART para comunicação RS-232;
  • Várias opções para oscilador, inclusive interno a 4MHz;
  • Wath Dog Timer (relógio cão de guarda) interno;
  • Controle de Power-on Reset e Power-up Timer;
  • Proteção de código contra cópias;
  • Código de instruções reduzido (35 instruções);
  • Encapsulamento DIP com 18 pinos;
  • entre outras.
Para aquele que deseja maiores informações sobre este microcontrolador, aconselho o a leitura do datasheet que pode ser obtido gratuitamente no site do fabricante, http://www.microchip.com.

CI2, um MAX232 ou equivalente, permite converter os níveis de tensão do padrão RS-232  (+/-15VDC) para o padrão TTL (0-5VDC) do microcontrolador, e vice-versa.

O jumper JP1 permite selecionar a velocidade de comunicação do Servo Control. Com o JP1 aberto a mesma é de 2400bps (nível lógico “1” no pino 3 - RA4 - do microcontrolador) e fechado de 9600bps (nível lógico “0” no pino 3 - RA4 - do microcontrolador).

O jumper JP2 permite a comunicação RS-232 diretamente com o microcontrolador no modo TTL. Ela será útil se você precisar conectar o Servo Control diretamente a um microcontrolador. Lembrando apenas que, neste caso, o circuito deverá utilizar o modo de comunicação RS-232 invertido ou ainda, providenciar esta inversão via hardware (através de transistores ou  portas lógicas NOT).

Os capacitores C1 e C6 atuam como “desacopladores” (filtros) para CI1 e CI2, respectivamente. Os capacitores C2 a C5 são capacitores auxiliares para a CI2. Eles ajudam na “adaptação” dos níveis de tensão TTL para RS-232 e vice-versa. CI3 é um regulador para 5VDC/1A, C7 a C10 capacitores de filtro e D1 protege o circuito e servos contra uma possível inversão na entrada de alimentação do circuito. O LED1 pisca a uma frequência de 1 Hz, avisando sobre a presença de alimentação e funcionamento do circuito (seu piscar é controlado pelo microcontrolador).

O conector CN1 é um DB09 e serve para a conexão do circuito ao computador, através de um cabo que pode ser confeccionado de acordo com o esquema abaixo:

Computador
DB09 fêmea (pinos)

Placa Servo Control
DB09 Macho (pinos)

2
2
3
3
5
5
7-8 (conectar juntos)



Montagem




Na figura acima você tem a minha sugestão do lay-out para a confecção do circuito impresso (PCI). O mesmo tem apenas uma face e sua confecção não será trabalhosa, mesmo para os que usam o traçado manual. A montagem do circuito em placas tipo padrão ou mesmo em matrizes de contato também é possível. A escolha de um método ou outro é livre.

Utilize suportes para os CI’s 1 e 2. Os capacitores C2 a C5, C7 e C10 são do tipo eletrolíticos e, portanto polarizados. Tome cuidado ao monta-los na placa. Já os capacitores C1, C6, C8 e C9 não são polarizados e não exigem qualquer cuidado quanto a sua montagem, exceto pelo fato de C1 e C6 serem capacitores cerâmicos e C8 e C9 de poliéster e com valores diferentes. Tenha cuidado para não trocá-los durante a montagem. Os jumpers J1 e J2 na placa podem ser feitos com pequenos pedaços de fio rijo.

É recomendável o uso de uma barra de pinos para JP1. Desta forma, com o uso de um strap fica fácil a seleção da velocidade (2400 ou 9600bps). Na falta deste tipo de terminal você poderá soldar um fio diretamente na placa, selecionando de maneira permanente a velocidade. No caso do uso da placa se feito com outro microcontrolador, CI2 e os capacitores C2 a C6 poderão ser omitidos do circuito. Neste caso a ligação dos pontos para a comunicação (TX, RX e GND) deverá ser feita através de JP2. Utilize o circuito elétrico para realizá-la de maneira correta.

O conector CN1 é um DB09 90º fêmea e na falta do mesmo você poderá montar o cabo diretamente na placa.


Protocolo de comunicação

Este protocolo é composto basicamente por 4 caracteres (bytes), conforme apresentado abaixo e deve ser utilizado ao criar o seu próprio programa de controle.

<STX><Nr do servo><Posição para o servo><ETX>

Com:
STX = 02H
Nr do servo = 00H a 08H
Posição para o servo = 0 a FFH (255)
ETX = 03H

Ainda sobre os caracteres do protocolo, você deve compreender que estes não são os caracteres ASCII “1” (31H), “2” (32H), “3” (33H), etc. Sua interpretação deve ser feita no formato hexadecimal (01H, 02H, 03H, etc). Sendo assim os mesmos encontram-se no inicio da tabela ASCII e geralmente não estão presentes no teclado de um computador. Como exemplo, tomarei o primeiro caracter do protocolo, 02H ou STX (start of text). Este caracter não é o caracter ASCII “2” conforme dito anteriormente. Recomendo você estudar atentamente o protocolo em conjunto com a tabela ASCII para compreender melhor o que foi dito.


Teste e uso

Após a montagem, seja qual for o método escolhido, aconselho uma verificação minuciosa na mesma. Reveja todas as ligações, as soldas, posições dos componentes, etc. Gaste alguns minutos nesta verificação. Não tenha pressa em ligar o circuito. Alguns minutos gastos em uma boa verificação podem representar a diferença entre o sucesso e o fracasso em qualquer montagem.

Pegue o arquivo HEX disponível no pacote disponibilizado mais abaixo em "Downloads", grave-o em seu microcontrolador e em seguida insira o mesmo na placa.

Não entrarei nos detalhes envolvidos na programação do microcontrolador PIC Microchip neste artigo. Acredito que quem se propôs a montar o circuito aqui sugerido possui alguma experiência necessária com a gravação dos microcontroladores PIC

O melhor e mais simples teste que pode ser feito com o Servo Control é ligá-lo um computador e utilizando um programa tipo terminal como o Hyper Terminal do Windows,  o minicom do Linux ou outro a sua escolha, realizar
um teste preliminar do circuito. Os procedimentos seriam, como segue:

  1. Configure o jumper JP1 para comunicação a 9600bps (JP1 fechado);
  2. Conecte o cabo de comunicação entre a placa e o computador através do conector CN1;
  3. Execute o programa terminal escolhido;
  4. Conecte pelo menos um servo à placa (SRV1);
  5. Ligue uma fonte de alimentação de 9VDC/1A a placa e aguarde o piscar do LED1 iniciar e o servo posicionar sua alavanca no centro.
  6. Altere a posição da alavanca do servo utilizando o protocolo. Para enviar caracteres ASCII não presentes no teclado, através de um programa terminal, mantenha a tecla <ALT> pressionada enquanto digita o valor desejado.
Ex.: <ALT 02><ALT 01><ALT 200><ALT 03> = Pressione <ALT> enquanto tecla “0” e depois “2”, solte <ALT>, pressione <ALT> novamente enquanto tecla “0” e depois “1”, solte <ALT> e assim por diante.

Você irá perceber que a cada caracter correto enviado o Servo Control devolve uma string "ok" seguida de CR+LF (Carriage Return + Line Fide = 0DH + 0AH) e se o caracter estiver errado a string "err" seguida também de CR+LF. Se um caracter for enviado errado, você deverá iniciar o protocolo do inicio.


Conclusão

Com um pequeno microcontrolador você pode criar alguns circuitos bastante interessantes para aplicação em robótica. O uso deste circuito no controle de um pequeno braço mecânico é bastante viável e permitirá, se o conjunto for aplicado em sala de aula, um melhor aprendizado por parte dos alunos sobre o assunto robótica. Espero ter colaborado com todos aqueles que me acompanham com mais este circuito. Boa montagem e até a próxima!



Downloads

- Circuito do Servo Control
- Desenho do lay-out para circuito impresso - arquivo PDF
- Pacote com arquivos do programa para o microcontrolador
- Lista de materiais




Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.