Autor Tópico: Controle_PID_PIC18F2480  (Lida 16819 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Controle_PID_PIC18F2480
« Online: 20 de Setembro de 2010, 12:03 »
Pessoal,
Estou desenvolvendo um projeto de Iniciação Científica na área de Controle embarcado. Cujo objetivo é controlar a posição do pescoço e dos olhos de um robô. Estas partes são formadas por motores CC com caixa de redução. Já fiz a modelagem e estou em fase de implementação do algoritmo no microcontrolador PIC. Estou usando o compilador CCS, já iniciei o código, até baseado  em um dos posts deste fórum.
Gostaria de uma ajuda nessa parte, algo como um material (já  pesquisei vários mas a maioria é em assembly que não eh o objetivo do projeto) ou de experiência de alguem que já desenvolveu um projeto semelhante. Posso postar o código depois.

Grato

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Controle_PID_PIC18F2480
« Resposta #1 Online: 20 de Setembro de 2010, 15:28 »
Vinigusto,

Conforme conversamos, segue algoritmo PID num PIC.

http://ww1.microchip.com/downloads/en/AppNotes/00964A.pdf

Para começar a pensar num controle de posição. Dependendo da velocidade, é necessário avaliar se a velocidade de processamento de um PIC com linguagem C é adequado a um controle de posição. Principalmente se for uma malha de controle rápida. Caso contrário, talvez o dsPIC seja uma opção melhor. Mas cabe a voce dizer a velocidade esperada em sua aplicação.

Abraço,

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re: Controle_PID_PIC18F2480
« Resposta #2 Online: 30 de Setembro de 2010, 22:36 »
Obrigado pelo material, deu para compreender bem.
Gostaria de tirar uma dúvida quanto a questão da escolha para o tempo de amostragem (Ts) para esse meu contexto.

obrigado

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Controle_PID_PIC18F2480
« Resposta #3 Online: 30 de Setembro de 2010, 23:06 »


O tempo de amostragem, que é também o intervalo de varredura do programa, Ts, deve ser menor que a constante de tempo do processo (Tp) que voce vai controlar. Idealmente falando: Ts < 2 Tp. Se Ts for menor ainda melhor.

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re: Controle_PID_PIC18F2480
« Resposta #4 Online: 01 de Outubro de 2010, 19:13 »
Obrigado mais uma vez,
Deu para ter uma ideia, eu sei que a depender do valor de Ts pode gerar mais ruído ou não. No caso de sistemas robóticos tem que ser menor.
Mas não entendi como posso mensurar Tp, consequentemente Ts.

Grato

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Controle_PID_PIC18F2480
« Resposta #5 Online: 01 de Outubro de 2010, 23:59 »
Vinigusto,

O valor de Tp pode ser medido ou estimado. A medição só é possível em sistemas existentes, onde será implantado um sistema de controle. Para sistemas inexistentes, que estão sendo projetados, o que se faz é estimar, através de hipóteses baseadas na dinâmica, na inércia e outras propriedades físicas do sistema, baseado no projeto do sistema. Também se pode estudar a dinâmica de um sistema, e fazer estimativas acerca do mesmo, usando simulações, através do Simulink, Matlab ou outras ferramentas de modelagem e simulação.

[]´s

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re: Controle_PID_PIC18F2480
« Resposta #6 Online: 25 de Outubro de 2010, 13:35 »
Olá amigo,
Tow empacado em algumas partes, como por exemplo: como faço o tratamento das unidades das variavel setpoint e actual position, tipo se trabalho com elas em radianos/s ou não. A outra como mando/ou transformo o sinal de controle (do PID discreto) para o pwm.

Grato

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Controle_PID_PIC18F2480
« Resposta #7 Online: 25 de Outubro de 2010, 21:10 »
Olá amigo,
Tow empacado em algumas partes, como por exemplo: como faço o tratamento das unidades das variavel setpoint e actual position, tipo se trabalho com elas em radianos/s ou não. A outra como mando/ou transformo o sinal de controle (do PID discreto) para o pwm.

Grato


Tanto faz, pode trabalhar em radianos, graus, grados, ....

Na verdade,nos cálculos do PID, o mais fácil é trabalhar com a própria leitura do conversor A/D de 10 bits, que é um numero inteiro de 0 a 1023. A leitura máxima é 1023 e a mínima é zero. Não precisa converter nada.

Para aumentar a precisão (resolução) do controle, o ideal é ajustar / montar o sistema de modo que a oscilação normal do eixo do potenciômetro gere uma variação de 0 a 1023 no conversor A/D.

Ao converter a saída do PID para PWM é necessário implementar um fator de escala, que pode ser igual a 1 (ou seja, não multiplicar nada). Explicando, o módulo PWM do PIC usa uma palavra de 10 bits e como voce já estará usando 10 bits para o conversor A/D, faz sentido pensar numa escala de 0 a 100% de 10bits, onde 100% é igual a 1023. Ok??

Abraços,
 

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re: Controle_PID_PIC18F2480
« Resposta #8 Online: 25 de Outubro de 2010, 22:10 »
Eu entendi sua ideia. Mas no caso de eu trabalhar com variareis long int (set_point, actual_position, sinal_controle,etc) . O próprio copilador se encarregar da conversao (10 bits), ou eu teria que zerar 6 bits?
Outra dúvida como faço para lê um dado(set_point) de uma porta vindo pela serial utilizando o compilador CCS? Seria usando a função kbhit() e getc()? tipo:

while(true){
    if(kbhit()){ set_point = getc();}
    ...

Grato

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Controle_PID_PIC18F2480
« Resposta #9 Online: 26 de Outubro de 2010, 19:54 »
Eu entendi sua ideia. Mas no caso de eu trabalhar com variareis long int (set_point, actual_position, sinal_controle,etc) . O próprio copilador se encarregar da conversao (10 bits), ou eu teria que zerar 6 bits?
Outra dúvida como faço para lê um dado(set_point) de uma porta vindo pela serial utilizando o compilador CCS? Seria usando a função kbhit() e getc()? tipo:

while(true){
    if(kbhit()){ set_point = getc();}
    ...

Grato


No caso, deve ser usada uma variável tipo unsigned int (vão de 0 a 65535) para ler do A/D. Assim, o valor será de 0 até 1023 apenas.

Ao ler a porta serial, serão necessários 2 bytes (duas leituras na serial) para montar um valor inteiro no programa em C. Exemplo:

set_point = 256 * getc();  // Lê e carrega byte mais significativo
set_point += getc();         // Lê e carrega byte menos significativo
« Última modificação: 26 de Outubro de 2010, 20:07 por minilathe »

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re: Controle_PID_PIC18F2480
« Resposta #10 Online: 26 de Outubro de 2010, 23:03 »
Obrigado pela dica mais uma vez! Posso enviar meu código para vc vê?

Grato

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re: Controle_PID_PIC18F2480
« Resposta #11 Online: 01 de Novembro de 2010, 11:26 »
Pode ser? Para poder esclarecer + a dúvida.

Grato
[/quote]

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Controle_PID_PIC18F2480
« Resposta #12 Online: 01 de Novembro de 2010, 11:54 »
Vinigusto,

Obrigado pela dica mais uma vez! Posso enviar meu código para vc vê?

Grato


Claro!!  :) , pode mandar...

Abraços,

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re: Controle_PID_PIC18F2480
« Resposta #13 Online: 01 de Novembro de 2010, 16:28 »
Olá, poderia confirmar se vc recebeu o anexo. Eu enviei. Me passa seu email por favor para confirmar.

Grato

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Controle_PID_PIC18F2480
« Resposta #14 Online: 01 de Novembro de 2010, 19:09 »
Vinigusto,

Não recebi, se quiser mande como mensagem privativa do Forum.


 

/** * */