Introduction: Controle De Servo Motor Com PIC16F628A Utilizando Modo Sigma-delta Como Conversor Analógico.

About: I am lover about eletronic things and new technologies.

Olá a todos, apresento a vocês um circuito/ código que pode ser de muito ajuda para pessoas que tenham dificuldade no controle de um servo motor a partir de microcontroladores PIC, nesse projeto eu uso o 16f628a pela finalidade dele ser poderoso e simples, mas com a deficiência de não possuir um conversor A/D.

A menina dos olhos desse circuito é empregabilidade do modo delta-sigma na emulação de um conversor A/D de até 10bits podendo ter inúmeras aplicabilidades a partir da sua criatividade. Outra grande vantagem é utilizar o PIC no controle de até 8 servo motores através do portB e tendo essa união de vantagens possuímos um circuito versátil na criação de braços robóticos, robôs móveis, automatização inteligente etc.

Step 1: Controle De Servo Motor Com PIC16F628A Utilizando Modo Sigma-delta Como Conversor Analógico/digital.

Coisas que são perceptíveis na utilização do circuito no modo de delta sigma é que algumas vezes ele apresenta instabilidade na responta do sinal de entrada, logo, é extremamente necessário utilizar resistores de tolerância 1% e bom aterramento para evitar spikes.

Esse circuito foi o primeiro passo em um projeto maior com a utilização de outros sensores no controle do servo motor.

Step 2: Código Em MIKROC...

Aqui apresento a grande caixa preta que mostra como essa beleza funciona. O código foi desenvolvido a partir de outros projetos encontrados na internet e foi idealizado para utilização em um sistema de controle multi sensorial.

O código está definido para que o microcontrolador trabalhe a 8MHz, mas pode ser facilmente alterado mudando o prescaler já definido.

O valor de delta-sigma "1900" foi definido assim pelo fato de que cada servo mesmo na teoria tendo um pulso de 2 ms = 2000us // +90° há variações, logo, precisei compensar partindo que na linha de código:

"myServos[i].Angulo = (500 + Leitura);" , 500 corresponde aos 500us que faz o servo começar em -90°.

As linhas de código:

if(porta.f5==1){

delay_ms(100);

if(porta.f5==1){

i++;

if (i > 3) i = 0;

}

}

Tem como função o incremento na variável "i" que fará mudar o controle do servo motor e a função de duas condicionais iguais com o delay serve para evitar o bounce no pressionamento da chave de contato.