SSC - Serial Servo Controler ou Controladora de servos Serial
Como o proprio nome ja menciona trata-se de uma interface de controle de servos motores usando a porta serial do PC para controlar a posição do eixo de cada servo. As controladoras SSC são vastamente utilizadas em projetos eletronicos e mecanicos onde desejamos efetuar o controle de servos mecanismos usando um PC que atraves de sua porta RS232 ou porta Serial efetua o envio do comando para a placa de controle SSC e a mesma efetua o posicionamento de acordo com o programa de controle. Para contruirmos interfaces SSC precisamos de um microcontrolador independente do frabricante e obviamente de uma interface de controle ( Software para a interface Homen/Maquina ).
Como nosso objetivo é uma apresentação EDUCACIONAL de um projeto e dar o inicio ao raciocinio de como funciona a interface para que cada um possa dar vida a sua ideias. Nos iremos apresentar neste artigo um projeto para controle de ate oito(8) servos porem os exemplos de firmware ( programa contido no Microcontrolador ) e do programa de controle tem a capacidade de controlar somente um (1) dos servos. Nosso objetivo é sempre de fazer com que o leitor tenha entendimento do produto e faça o seu de acordo com o pesquisado e o que foi aprendido. Para aqueles que não tem tempo para pesquisas temos o produto pronto que pode ser obtido em nossa loja digital no endereço http://www.edukatikaloja.com.br/produto.php?cod_produto=4187818 .
Em nosso projeto de estudo e apresentação iremos utilizar o PIC16F628A funcionando a uma frequencia de 4Mhz programado internamente com a Linguagem PICBASIC PRO 2.6x.
O diagrama da interface basica para oito(8) canais esta na figura 1.
Figura 1
Descrição Basica do diagrama da figura 1. Podemos observar como componente principal o PIC16F84A no diagrama mas o modelo usado é o PIC16F628A mais moderno, mais barato, mais rapido, com mais funções e totalmente compativel em pinagem com o PIC16F84A mostrado no diagrama. No diagrama devemos iguinorar todos os JUMPERS as chaves S1 e S2 os Leds LED1 e LED2 pois os mesmo fazem parte do projeto de robo de seis(6) patas.
Sendo assim os dados enviado pelo PC atraves da porta RS232 ( Porta Serial ) é enviado ao Microcontrolador atraves do conector K1 conector DB9 de 9 pinos o qual utiliza somente tres(3) sinais que corresponde ao TX, RX e GND. O sinal vindo do PC parra por um resitor de 22K o qual faz o "casamento" e eliminação de possiveis ruidos no sinal e o entrega ao Microcontrolador. O microcontrolador ira interpretar os comandos enviado pelo PC atraves do codigo fonte abaixo que no caso é mostrado somente de um dos canais ou seja somente de um servo.
Na sequencia abaixo temos o codigo fonte do programa de controle em PICBASIC PRO.
'**************************************************************** '* Name : ssc_edukatika.pbp * '* Author : [Clovis Magoga Rodrigues - www.edukatika.com.br] * '* Notice : Edukatika - Robotica Educacional] * '* : Programa para controle de servos usando a RS232c * '* : e VB6, controle de ate 8 servos * '* Date : 30/05/2011 * '* Version : PIC16F628/627 para 16F84A Renomeio linha CMCON * '* Notes : Faça bom uso do conhecimento e agradeça quem * '* : gosta de ensinar e compartilha conhecimento * '* Aplicação: Controle de servos usando a porta serial e VB6 * '****************************************************************
CMCON = 7 ' desativa portas
TRISB = %00000000 ' define portB como saida TRISA = %00000001 ' define portA com entrada
DEFINE OSC 4 ' define a frequencia do cristal em 4mhz
Baud CON N2400 ' velocidade da porta RS232 Com_In VAR PORTA.0 ' pino de entrada para serial Com_Out var PORTA.1 ' pino de saida para serial Controle VAR BYTE ' armazena dados relacionado a Nr. pulsos ativa VAR byte ' aramazena qual o servo a ser ativo Sync var byte ' sincronismo de comunicação serial I VAR BYTE ' variavel para contagem S0 var byte ' varivael do servo 0
low PORTB.0 ' nivel logico baixo na PortB.0
high led
S0 = 127 ' centraliza todos os servos ao iniciar
inicio: ' inicio da rotina principal
serin Com_In,Baud,7,Set_Pos,[255],ativa,Controle ' recebe dados da RS232 SEROUT Com_Out,Baud,[ativa,Controle] ' envia dados para a RS232 If ativa = 0 then S0 = Controle ' se servo 0 ativo envia pulsos para saida
Set_Pos:
pulsout PORTB.0,S0 ' gera pulsos em MS na PortB.0 = dado em S0 goto inicio
O codigo fonte acima é bem simples sendo a rotina principal com inicio na linha INICIO: a linha principal que efetua a comunicação esta no comando SERIN CON_IN.BAUND,7,SET_POS`que efetua o recebimento dos dados enviado pelo PC. Nesta linha ja estamos controlando a velocidade de trabalho fixada em 2400bps, com palavra de transmissão de sete(7) bits, e a variavel SET_POS que define qual dos oitos servos estamos comandando. A linha SEROUT COM_OUT,BAND efetua o controle de fluxo de dados no caso de usarmos a rotina de repetição dos comandos. A linha IF ATIVA = 0 then S0 = Controle efetua a checagem do dados recebido e aciona o servo correspondente ao dado contido na variavel S0, uma vez identificado o dado o programa salta para a rotina SET_POS e envia o dado para a porta PORTB.0,S0 que siguinifica PORTB do Microcontrolador, porta 0 de saida e o dado S0 responsavel por gerar o pulo na largura correta para posicionar o eixo do servo motor.
Toda a rotina acima é enviado ao microcontrolador atraves do programa mostrado na figura 2. Lembre-se que a tela do programa tem oitro(8) barras deslizates de controle porem iremos explicar somente o funcionamento de uma delas. O restante é indentico obviamente levando-se em consideração as variaveis de saida de cada pino do microcontrolador.
Figura 2
De acordo com a figura 2 apos a ativação do programa executavel instalado no PC teremos exatamente a tela da figura 2, observe que podemos setar a porta serial COM1 ou COM2. Escolhe sempre a porta COM1 pois é a que sta setada no programa interno do Microcontrolador. Cada barra deslizante é responsavel por ativar um dos oito(8) servos para a direita ou esqueda. Os botões abaixo de cada barra deslizante serve para posicionar os servos na posição central. O botão grava efetua a gravação de cada movimento que foi efetuado nas barras. Para gravar voce devera efetuar o movimento da barra ou do botão de controle e clicar em gravar e assim por diante. Para repetir os movimentos basta teclar em repetir.
Na sequencia abaixo podemos observar o codigo fonte dos pontos principais do programa de controle da figura 2. Sendo que o primeiro exemplo se refere ao Botão deslizante 1 o qual aciona o primeiro servo.
Codigo fonte de acionamento da barra deslizante do Primeiro Servo Private Sub VScroll1_Change() ' Servo 1 Text1(0).Text = Str(VScroll1.Value) MSComm1.Output = Chr$(255) MSComm1.Output = Chr$(0) MSComm1.Output = Chr$(Text1(0).Text) End Sub
Codigo fonte de centralização do Primeiro Servo Private Sub Command1_Click() MSComm1.Output = Chr$(255) MSComm1.Output = Chr$(1) MSComm1.Output = Chr$(127) Text1(1).Text = Str(127) VScroll1.Value = Text1(1).Text End Sub
Codigo fonte das definições basicas do Programa Dim armazena_posicao() As Double Dim indice_posicao As Double Dim velocidade As Byte Dim InString As String
Os tres(3) modulos acima é o centro de controle de todo o programa de controle. Como mencionamos modulos individuais, obviamente o estudante, projetista tem que ter em mente que devemos repetir os comandos de controle para os outro sete(7) servos.