Página 1 de 1

Ajuda em como fazer controle de servo valvula com pwm

MensagemEnviado: 14 Out 2008 08:38
por rosiley
Bom dia rapaziada, preciso da ajuda de voces em fazer um projeto que funcione da seguinte forma:

Controlar 8 válvulas proporcional com tensão de trabalho de 24v via pwm, sendo que este controle será feito atraves de um computador.
A parte mais fácil eu já fiz, que é a interface gráfica e a comunicação do pic com o computador, sendo que nesta fase utilizei o pic 16f648 junto com o ftd 232 que simula uma com virtual, mais só que no projeto definitivo eu pretendo utilizar o 16f877 e aproveitar o código do nosso amigo que está no link abaixo.

http://asm51.eng.br/phpBB/viewtopic.php?t=6168

Aqui está parte do código criado no c++ builder

//---------------------------------------------------------------------------
void __fastcall TFuncionamento::CheckBoxMostrar_ValvulaClick(TObject *Sender)
{
{
if (CheckBoxMostrar_Valvula->Checked)
{
CGauge1->Visible=true;CGauge2->Visible=true;CGauge3->Visible=true;
CGauge4->Visible=true;CGauge5->Visible=true;CGauge6->Visible=true;
CGauge7->Visible=true;CGauge8->Visible=true;
}
}
{
if (CheckBoxMostrar_Valvula->Checked==false)
{
CGauge1->Visible=false;CGauge2->Visible=false;CGauge3->Visible=false;
CGauge4->Visible=false;CGauge5->Visible=false;CGauge6->Visible=false;
CGauge7->Visible=false;CGauge8->Visible=false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TFuncionamento::VrPowerButtonValve1Click(TObject *Sender)
{
{
if (VrPowerButtonValve1->Active){
CGauge1->Visible=true;CGauge1->Progress=0;
VrSlider1->Visible=true;VrSlider1->Position=0;
}
}{
if (VrPowerButtonValve1->Active==false){
CGauge1->Visible=false;
VrSlider1->Visible=false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TFuncionamento::VrSlider1Change(TObject *Sender)
{
Edit1->Text=VrSlider1->Position;
static int i;
CGauge1->Kind=gkHorizontalBar;
CGauge1->Progress=i++;
if(i>=90)
CGauge1->ForeColor=clRed;
else
CGauge1->ForeColor=clGreen;
if(i>100)
i=0;
}
//---------------------------------------------------------------------------

MensagemEnviado: 15 Out 2008 12:27
por MOR_AL
Olá Rosiley. Tudo bem?

Para você controlar qualquer variável ("x" por exemplo), é necessário que você monitore esta variável, por meio de um sensor que converta a unidade física da variável x ( por exemplo, pressão , temperatura, vazão, posição, velocidade, aceleração, peso, etc) em uma variável elétrica (tensão, corrente, resistência, capacitância, indutância, etc). Com esta conversão você poderá trabalhar com esta e outras variáveis que aparecerão, no "meio elétrico", no qual já há diversas maneiras de se processar informações de modo rápido e prático.
Uma vez monitorada esta variável, você terá o seu Valor Obtido de x, ou xObtido.
O valor que você deseja para a variável x, eu vou chamar de xDesejado. Este valor é diferente de xObtido.
Na realidade você precisa conhecer esta diferença, ou erro obtido. A este erro vou chamar de xErro.
Então, você calculará:

xErro = xDesejado - xObtido

Haverão três situações e sua atitude deverá ser:

xErro < 0 (Negativo) --> xObtido é maior que xDesejado. Você deve atuar no delta do seu PWM (seu caso) para reduzir xObtido.
xErro = 0 --> xObtido é igual a xDesejado. Não altere nada.
xErro > 0 (Positivo) --> xObtido é menor que xDesejado. Você deve atuar no delta do seu PWM (seu caso) para aumentar xObtido.

Agora a pergunta mais imediata seria: QUANTO AUMENTAR OU DIMINUIR, para que o ajuste seja o melhor, ou mesmo o correto?

Isso que eu lhe mostrei é a essência da Teoria da Realimentação. Existem muitas técnicas e regras que regem esta teoria.
Procure algum livro que trata do assunto, que é tão vasto que certamente você encontrará um livro de acordo com seu grau de instrução.
Mais um detalhe. As três condições de xErro não são práticas, são teóricas e mostradas apenas para facilitar a compreensão como um todo.
Na realidade deve-se aceitar um valor mínimo de erro. Este valor mínimo poderá e deverá ser estipulado por você. Desta forma, ao invés de comparar xErro com zero, deve-se compará-lo com xErroMínimo.

Espero ter auxiliado de alguma forma.
MOR_AL

MensagemEnviado: 17 Out 2008 16:39
por MOR_AL
Olá novamente Rosiley.

A figura abaixo apresenta um fluxograma para um sistema de controle (via PWM) da velocidade de rotação de um motor (RPM).
Acredito que seja auto explicativo. Fica faltando quantificar os valores de Aumenta Delta e Diminui Delta.

Imagem

MOR_AL

MensagemEnviado: 23 Out 2008 19:59
por rosiley
Boa noite, Mor_al como voce já deve ter percebido sou novo na área de programação em pic e estou com um problema e acho que voces podem me ajudar. Estou lendo tudo que posso sobre pic na area de pwm para podser resolver o meu problema, a placa eletronica já está quase pronta.
Esta placa ira acionar 8 valvulas proporcional, tudo controlado pelo pic 16f877, sendo que o mesmo faça este controle por pwm e que ao mesmo tempo informe no computador via rs 232. Essa parte eu já fiz, mais a lógica do pic é que está me tirando o resto de cabelo que tenho, e estou travado no pic, agradeço quem puder ajudar.
Segue abaixo a placa que irá controlar tudo isso. Como ja falei na mensagem anterior estou tentando entender o código que o fabim postou para que eu possa andar com o meu.
Já comprei um kit de desenvolvimento da microgenios o pic entre outros materiais.[/img]