43
UNIVERSIDADE ESTADUAL DE CAMPINAS Faculdade de Engenharia Mecânica Engenharia de Controle e Automação ES952 – Trabalho de Graduação II Prof. Dr. Luiz Otávio Ferreira 2. o Semestre de 2007 KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC Orientando: Marco Antonio da Silva RA: 026990 Data: 21 de Novembro de 2007

KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Embed Size (px)

Citation preview

Page 1: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

UNIVERSIDADE ESTADUAL DE CAMPINAS

Faculdade de Engenharia Mecânica

Engenharia de Controle e Automação

ES952 – Trabalho de Graduação II

Prof. Dr. Luiz Otávio Ferreira 2.o Semestre de 2007

KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Orientando: Marco Antonio da Silva RA: 026990 Data: 21 de Novembro de 2007

Page 2: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

ÍNDICE

1. Introdução....................................................................................................................... 4

2. Desenvolvimento ............................................................................................................ 5

2.1. Apresentando o Hardware ...................................................................................... 5

2.2. A escolha do Microcontrolador .............................................................................. 5

2.3. Escolha dos Elementos de Chaveamento ............................................................... 8

2.4. Leituras Analógicas .............................................................................................. 10

2.5. Leitura do sensor óptico ....................................................................................... 12

2.6. Montagem e Elaboração do software ................................................................... 13

2.6.1. Ensaio de Eixo Travado................................................................................ 15

2.6.2. Ensaio de Eixo Livre .................................................................................... 17

3. Resultados Obtidos ....................................................................................................... 20

3.1. Resultados Motor 1............................................................................................... 20

3.2. Resultados Motor 2............................................................................................... 22

4. Conclusões.................................................................................................................... 28

5. Referências Bibliográficas............................................................................................ 29

6. Anexos .......................................................................................................................... 30

Folha 2

Page 3: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

ÍNDICE DE FIGURAS

Figura 1: O microcontrolador utilizado no projeto................................................................. 6

Figura 2: Diagrama de Portas para o PIC18F452................................................................... 7

Figura 3: Encapsulamento TO-220 ........................................................................................ 9

Figura 4: Confecção de um Buffer utilizando Amplificador Operacional ........................... 11

Figura 5: Esquema de um divisor resistivo .......................................................................... 11

Figura 6: Divisor Resistivo encontrado................................................................................ 12

Figura 7: Sensor óptico CNY70 ........................................................................................... 12

Figura 8: Montagem e testes no protoboard ........................................................................ 13

Figura 9: Tela inicial do programa ....................................................................................... 15

Figura 10: Curva Tensão versus Corrente de Armadura ...................................................... 15

Figura 11: Primeiro motor testado........................................................................................ 20

Figura 12: Gráfico transiente corrente Ia x tempo - Motor 1 ............................................... 21

Figura 13: Gráfico transiente FCEM x tempo - Motor 1...................................................... 22

Figura 14: Segundo motor testado........................................................................................ 22

Figura 15: Gráfico transiente corrente Ia x tempo - Motor 2 ............................................... 23

Figura 16: Gráfico transiente FCEM x tempo - Motor 2...................................................... 24

Figura 17: Tela inicial .......................................................................................................... 25

Figura 18: Após identificar Ra e Vb..................................................................................... 25

Figura 19: Após identificar La e a constante de tempo elétrica............................................ 26

Figura 20: Após ensaio de eixo livre realizado .................................................................... 26

Figura 21: Disponibilizando dados para impressão no MATLAB....................................... 27

Folha 3

Page 4: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

1. Introdução

O presente trabalho foi desenvolvido com a seguinte motivação: atuar como um

auxiliar no laboratório de Engenharia de Controle e Automação para identificação de

parâmetros de motores de corrente contínua, para posterior utilização em desenvolvimento

de controladores.

Tal necessidade foi levantada após a constatação que um grupo de alunos da

graduação leva, em média, 6 horas para a identificação dos parâmetros do motor de

corrente contínua usando as ferramentas disponibilizadas no laboratório, devido à

complexidade de montagem, programação e utilização das ferramentas. Considerando uma

disciplina que possui duas horas por semana, o tempo utilizado para a realização desta

tarefa poderia ser mais bem aproveitado se houvesse uma ferramenta que diminuísse este

tempo, deixando os graduandos livres para o desenvolvimento de controladores em si,

assunto este que deve ser bem explorado em um curso de Engenharia de Controle e

Automação.

O desenvolvimento do hardware foi baseado na pesquisa feita na disciplina de

Trabalho de Graduação anterior, podendo ser consultada nos arquivos em anexo. Nela,

todos os parâmetros relevantes do motor foram listados, bem como o modo físico de

levantamento e processamento dos dados.

O resultado final foi uma placa de circuito impresso utilizando a tecnologia de

microcontroladores já apresentada para os graduandos de Engenharia de Controle e

Automação em disciplina de laboratório específica. Pelo fato de utilizar um

microcontrolador reprogramável eletricamente como controle central da placa, que utiliza

linguagem de programação relativamente fácil de ser aprendida e flexível, esta pode ser

reprogramada e reutilizada para diversas outras aplicações envolvendo até mesmo o

desenvolvimento de controle de motor, pois possui, além do processamento, o

sensoreamento e a atuação já embutidos na placa.

A interface Homem-Máquina é feita através do programa HyperTerminal,

disponível em todas as versões do Windows. Nela são apresentados todos os parâmetros

encontrados e calculados, além de dados já formatados para impressões de gráficos

utilizando o software MATLAB.

Folha 4

Page 5: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

2. Desenvolvimento

2.1. Apresentando o Hardware

O hardware apresentado é uma placa de circuito impresso, com os seguintes

componentes:

• Um microcontrolador PIC18F452.

• Dois MOSFETS de potência acionados por PWM.

• Três leituras analógicas, sendo duas para medição da tensão no motor e uma

para leitura de corrente no motor.

• Conexão ICSP (In-Circuit Serial Programming) através de conector

compatível com módulo ICD2 disponível no laboratório.

• Conexão RS-232 a 9600bps, sem bit de paridade e sem controle de fluxo,

com conexão na placa via conector MOLEX de 4 vias e outra extremidade

com conector DB9 fêmea.

• Um sensor óptico com emissor e receptor infravermelho com filtro anti-UV

no mesmo encapsulamento para medição de rotação.

• Visor de Cristal líquido 16 colunas x 2 linhas

2.2. A escolha do Microcontrolador

No início do projeto, foi considerada a utilização de microcontroladores da

fabricante Microchip para a confecção da placa de Circuito Impresso, pela familiaridade

adquirida por alunos de graduação e técnicos do laboratório através das placas de

desenvolvimento existentes. Porém, o microcontrolador utilizado nos kits já estava

obsoleto, com famílias que o substituíam com vantagens.

Assim, o microcontrolador PIC16F914 foi inicialmente pesquisado para a

confecção do projeto, pois possui oscilador interno e possibilidade de habilitar apenas as

entradas analógicas que seriam utilizadas, facilidades estas inexistentes no

microcontrolador PIC16F877.

Folha 5

Page 6: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Porém, durante a fase de desenvolvimento do projeto, a idéia de se utilizar o

microcontrolador acima mencionado foi abandonada, sendo substituído pelo PIC18F452,

pelo fato de não possuir memória RAM suficiente para a aplicação. Além disso, algumas

vantagens foram levadas em conta na substituição, levantadas no site da Microchip [1]:

• A família 18FXXX é a última geração de microcontroladores de 8

bits da Microchip, sendo que alguns possuem até o protocolo de

comunicação CANBus embutido e portos para ligação direta de

Displays LCD de 7 segmentos.

• Operações aritméticas de multiplicação e divisão já embutidas na

Unidade Lógica Aritmética.

• Pode trabalhar em até 40 MHz, utilizando multiplicador de

freqüência interno; a família 16FXXX chega a, no máximo, 20MHz.

• Possui memória RAM de 1536 bytes (seis vezes maior que a

proposta inicial).

• Possui memória de dados de 32 Kbytes (quase cinco vezes maior que

a proposta inicial).

Figura 1: O microcontrolador utilizado no projeto

De acordo com o databook para o microcontrolador [2], este é o esquema de

portas para o padrão DIP40:

Folha 6

Page 7: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 2: Diagrama de Portas para o PIC18F452

E a seguinte tabela é utilizada para a conexão das entradas e saídas do

projeto:

Tabela 1: Relação de Entradas e Saídas no Microcontrolador

PINO TIPO FUNÇÃO PORTO DESCRIÇÃO

2 Entrada Leitura Analógica PORTA,0 Leitura da Tensão aplicada no

motor (positivo)

3 Entrada Leitura Analógica PORTA,1 Leitura da tensão aplicada no motor

(negativo)

4 Entrada / Saída Expansão PORTA,2 Pino multifunção disponível no

conector de expansão

5 Entrada Leitura Analógica PORTA,3 Leitura da corrente pelo resistor de

shunt

7 Entrada / Saída Expansão PORTA,5 Pino multifunção disponível no

conector de expansão

8 Entrada Entrada Digital PORTE,0 Leitura de Botão (Push-Button)

9 Entrada Entrada Digital PORTE,1 Leitura de Botão (Push-Button)

10 Entrada Entrada Digital PORTE,2 Leitura de Botão (Push-Button)

15 Entrada Leitura Digital PORTC,0

Leitura (borda de subida) do sinal do sensor óptico, incrementando o

TIMER1

Folha 7

Page 8: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

PINO TIPO FUNÇÃO PORTO DESCRIÇÃO

16 Saída Saída a PWM PORTC,1 Sinal para o segundo MOSFET de

potência

17 Saída Saída a PWM PORTC,2 Sinal para o primeiro MOSFET de

potência

18 Saída Saída Digital PORTC,3 Liga / Desliga LED OPERANDO

19..22 27..30 Saída Saída

Digital PORTD,0..7 Porto de Dados para o display LCD

24 Saída Saída Digital PORTC,5 Porto RS para o display LCD

25 Saída Saída Serial PORTC,6 Transmissão de Dados Serial

26 Entrada Entrada Serial PORTC,7 Recepção de Dados Serial

33 Entrada / Saída Expansão PORTB,0 Pino multifunção disponível no

conector de expansão

34 Entrada / Saída Expansão PORTB,1 Pino multifunção disponível no

conector de expansão

39 Entrada Entrada Digital PORTB,6 Programação ICSP

40 Entrada Entrada Digital PORTB,7 Programação ICSP

Alguns recursos apresentados não serão utilizados neste projeto, como o

visor LCD e botões, já que o computador será utilizado como Interface Homem-Máquina,

mas ficarão disponíveis para futuros desenvolvimentos.

2.3. Escolha dos Elementos de Chaveamento

Para os drives dos motores, MOSFET’s de potência foram utilizados no

lugar dos transistores BJT de potência, pois suportam mais corrente para um mesmo

encapsulamento. Além de, por ser um elemento que é acionado por tensão, e não por

corrente, pode, em determinadas aplicações, ser ligado diretamente ao microcontrolador,

dispensando transistores intermediários que auxiliam o acionamento de BJT’s de potência,

pois requerem correntes de base altas.

O MOSFET consegue transições mais rápidas de chaveamento do que um

BJT e por isso passou a substituí-lo em aplicações caracterizadas por altas freqüências.

Folha 8

Page 9: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Nestes casos, as perdas de chaveamento do MOSFET podem ser desprezadas quando

comparadas às do BJT. Entretanto, na condução, a queda de tensão no estado ligado é alta

(aproximadamente de 4V para a corrente nominal), resultando em perdas também altas.

O MOSFET escolhido foi o de canal N IRFZ48N, de encapsulamento TO-220,

possibilitando a colocação de um dissipador.

Figura 3: Encapsulamento TO-220

Segundo sua folha de dados, segue uma tabela de características elétricas:

Tabela 2: Características do MOSFET

Característica Valor RDS(ON) 14mΩ

ID máx. (VGS=5V) 20A IDSS (“vazamento” de corrente na

condição desligado) 250μA

Tempo de Subida (tr) 78 ns Tempo de Desligamento (tf) 50 ns

Como o PWM do microcontrolador trabalhará a uma freqüência fixa de 1200 Hz,

pode-se estimar a perda de potência no MOSFET.

Tomando como exemplo um motor de corrente contínua na pior condição de

trabalho: eixo travado, puxando 5 Ampères de corrente, a uma alimentação de 12Vcc.

Supondo que o PWM está trabalhando a 75%:

Sendo

Como o PWM trabalhará a 75%:

,

Folha 9

Page 10: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Perdas do MOSFET no estado ligado:

Perdas do MOSFET no estado desligado:

Perda de energia durante o tempo de ligação:

Perda de energia durante o tempo de desligamento:

Perda de potência por chaveamento:

Perda total do MOSFET:

Analisando o resultado final, a estimativa aponta para perdas baixas de potência.

Porém, por precaução, os MOSFET’s serão protegidos por dissipadores padrão de mercado.

Caso haja uma demanda grande de energia, os componentes em questão possuem

autodesligamento de segurança para evitar sua iminente queima.

2.4. Leituras Analógicas

Para o levantamento das características do motor, três leituras analógicas são

utilizadas: duas leituras para a tensão do motor, com divisor resistivo para atenuar a tensão

para 5 Vcc e uma leitura de corrente do motor através de resistor de shunt. Todas as

entradas analógicas possuem um isolamento por buffer, que possui altíssima impedância de

entrada, para evitar que sinais indesejados danifiquem a leitura ou comprometam o

funcionamento do microcontrolador.

Folha 10

Page 11: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 4: Confecção de um Buffer utilizando Amplificador Operacional

Para o cálculo do divisor resistivo, levou-se em conta a tensão máxima que

poderia chegar na entrada analógica, que é 5 volts. Então, a tensão de leitura (12V máximo)

deveria ser atenuada 2,4 vezes.

O divisor resistivo possui a seguinte forma padrão:

Figura 5: Esquema de um divisor resistivo

Como a entrada analógica é protegida por um buffer, e este possui

impedância muito alta, a corrente é a mesma passando em R1 e R2. Assim, o seguinte

equacionamento é feito:

Como o par de resistências deveria ser de valor comercial e possuírem

valores acima de 1KΩ, para não forçar passagem significativa de corrente pelo divisor, a

seguinte configuração foi encontrada:

Folha 11

Page 12: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 6: Divisor Resistivo encontrado

Para a leitura da corrente do motor um resistor de shunt de 1Ω / 5W foi

utilizado, para não necessitar de circuitos multiplicadores ou divisores para se ler o correto

valor de corrente.

2.5. Leitura do sensor óptico

Para a leitura da rotação final do motor de corrente contínua, a solução óptica foi

adotada, por não necessitar de acoplamentos ao eixo do motor, além de ser a mais barata e

mais prática de ser implementada e utilizada.

O sensor a ser utilizado é o CNY70, com encapsulamento que já possui o emissor

de infravermelho e o fotorreceptor, do tipo transistor NPN. Sua leitura não é afetada por

raios de luzes externas, como raios solares ou lâmpada fluorescente:

Figura 7: Sensor óptico CNY70

Folha 12

Page 13: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

A leitura do sensor é feita através de um contador de 16 bits independente do

microcontrolador, que é incrementado na borda de subida do pino. Este recurso é utilizado

para garantir que não se perca nenhum pulso devido a processamento durante os testes.

Para facilitar os cálculos e garantir maior amostra para leitura, uma janela de exatamente 1

segundo é aberta e se inicia a contagem; ao seu término, o número de pulsos corresponde à

velocidade do motor em ciclos por segundo.

2.6. Montagem e Elaboração do software

Para os testes do conjunto completo e do software para o microcontrolador, foi

realizada a montagem do conjunto em um protoboard:

Figura 8: Montagem e testes no protoboard

Esta metodologia permite a identificação de possíveis falhas no projeto antes de ser

executada a montagem final em placa de circuito impresso.

As seguintes falhas puderam ser evitadas durante este processo:

• Quando se liga o motor CC, este se comporta como um curto-circuito

momentâneo para a fonte, pois necessita movimentar toda sua inércia de

eixo. Este curto-circuito fazia com que o microcontrolador reinicializasse. A

Folha 13

Page 14: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

solução adotada para este problema foi aumentar a capacitância do circuito,

fazendo com que a queda de tensão advinda do estado inicial do motor fosse

amortecida.

• Durante a fase inicial de testes, para se proteger as entradas analógicas do

microcontrolador foi previsto um diodo zener de 5,1 volts, e não o buffer

descrito acima. Mas esta metodologia permitia, na leitura do resistor de

shunt, a passagem de corrente através da entrada analógica, superaquecendo

o microcontrolador e fazendo-o travar o processamento. Assim, como

descrito acima, fez-se necessária utilização de buffers de alta impedância de

entrada para solucionar o problema.

• Durante os testes, foi utilizada uma solução para leitura de motor utilizando

um fotodiodo e um fotosensor separados. Porém, notou-se que esta

montagem era altamente sensível a raios solares e a emissão de luz por

luminárias fluorescentes, sendo necessário um circuito compensador entre a

leitura do microcontrolador e o circuito óptico. Mas esta montagem mostrou-

se cara e difícil de ser implementada, pois requeria ajustes de sinais. Assim,

como descrito anteriormente, se utilizou o CNY70, que já integra um filtro

anti-UV e possui o emissor e receptor já montado em um único

encapsulamento, dispensando componentes e ajustes adicionais.

Com o hardware montado e testado, restava apenas escrever o código-fonte para o

microcontrolador.

Nele, fez-se uso de máquinas de estados, que facilita a montagem do código e

eventuais manutenções, pois o fluxo de informação no programa pode ser facilmente

seguido e identificado.

Como descrito em Kenjo, T. E Nagamori, S. [3], os parâmetros elétricos e

mecânicos de um motor de corrente contínua podem ser estimados com dois ensaios: de

Eixo Travado e Eixo Livre.

Folha 14

Page 15: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

2.6.1. Ensaio de Eixo Travado

O programa inicia os testes através deste ensaio, requisitando ao usuário que

segure o eixo do motor:

Figura 9: Tela inicial do programa

Como descrito em Kenjo, T. E Nagamori, S. [3], o motor nesta condição

excitado em diferentes tensões apresenta uma relação linear entre corrente de armadura e

tensão no motor. A equação para o caso de eixo travado é dada por:

Figura 10: Curva Tensão versus Corrente de Armadura

Folha 15

Page 16: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Equação 1: Relação entre corrente e Tensão para o Eixo travado

Na qual:

V – Tensão nos terminais do motor

Vb – Perda de Tensão nas escovas

Ia – Corrente de Armadura

Ra – Resistência de Armadura

Variando a tensão através do PWM aplicado ao MOSFET, o microcontrolador

excita o motor em três tensões distintas, medindo e guardando em um vetor a tensão que o

motor está recebendo e a corrente de armadura.

Terminado os testes, o motor é desligado e a resistência de armadura, em Ohms, é

encontrada da seguinte maneira:

Equação 2: Encontrando Ra

Na qual:

Vf,Iaf – Tensão e corrente nos terminais do motor final

Vi,Iai – Tensão e corrente nos terminais do motor inicial

A perda de tensão nas escovas do motor é calculada utilizando a Equação 1 acima e

a resistência de armadura recém encontrada.

Nota-se que a resistência de armadura poderia ser encontrada apenas aplicando 12

volts no motor com seu eixo travado e medindo a corrente de armadura. Porém, esta

metodologia negligencia a existência da perda de tensão nas escovas, que em alguns casos é

alta e pode influenciar na obtenção dos demais parâmetros do motor, como será abordado

mais à frente. Além disso, o método apresentado melhora a eficácia dos cálculos, pois

explora a resposta do motor em diferentes condições de trabalho.

Folha 16

Page 17: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Continuando os testes, o microcontrolador agora pede ao usuário segurar o eixo do

motor e agora o excita com o PWM a um ciclo de 100%. A partir do momento que o

MOSFET é ligado, a corrente é monitorada e armazenada em um vetor com uma freqüência

de varredura de 1MHz.

Feito isto, o motor é novamente desligado e o microcontrolador calcula a constante

de tempo elétrica através da seguinte metodologia: a corrente de regime é resgatada do

vetor e calcula-se 63% de seu valor. Em seguida, percorre-se o vetor até encontrar o valor

imediatamente acima dos 63% da corrente de regime. Assim, é encontrado o tempo que a

corrente atingiu este valor, sendo este a constante de tempo elétrica (τE).

A indutância de armadura, em Henry, é calculada utilizando a seguinte equação:

Equação 3: Encontrando a Indutância de Armadura

Ao final deste teste, o programa pode disponibilizar, de acordo com a vontade do

usuário, os dados Ia x tempo para ser gerado um gráfico no MATLAB ou outro programa

que contenha esta função.

2.6.2. Ensaio de Eixo Livre Neste ensaio será utilizado o sensor óptico para a identificação da velocidade final

do motor.

Porém, é necessário que o usuário anexe ao eixo do motor CC um papel ou qualquer

outro elemento que o sensor seja capaz de identificar, mas que seja leve o suficiente para

adicionar o mínimo de inércia ao eixo. Este método é necessário, pois os sensores de

mercado não possuem sensibilidade suficiente para distinguir diferenças de cores no eixo a

altas velocidades. Portanto, a metodologia de se pintar parte do eixo com tinta preta, após

exaustivos testes, foi descartada.

Após avisar o usuário para posicionar o eixo do motor próximo ao sensor, o

microcontrolador ajusta o PWM para operar a um ciclo de 100%; é aguardado 500

milissegundos para a estabilização do sistema e, a seguir, são registradas quatro leituras

Folha 17

Page 18: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

para se retirar a média da velocidade de eixo do motor. Também são armazenadas a tensão

de terminais do motor e sua corrente de eixo livre.

O primeiro parâmetro a ser identificado é a resistência mecânica do motor em

Ohms, a saber:

ab

h RI

VVR −−

=∞

Equação 4: Identificação de Rh

Na qual:

V – Tensão nos terminais do motor durante o ensaio de eixo livre

Vb – Perda da tensão nas escovas (identificado anteriormente)

I ∞ - Corrente de Armadura durante o ensaio de eixo livre

Ra – Resistência de Armadura (calculado anteriormente)

A seguir, a constante do motor, em N*m/A é calculada:

549,9/∞

Ω=

IRK h

Equação 5: Constante do Motor

Na qual:

Rh – Resistência mecânica de movimento (identificada acima)

– Velocidade angular final em RPM ∞Ω

Percebe-se que, durante os cálculos, a velocidade final do motor, fornecida em

RPM, é transformada em rad / s, através da constante 9,549. Isto é necessário para se

definir a constante do motor utilizando as unidades SI, deixando, assim, o valor da

constante mecânica igual à elétrica.

Para a identificação da constante de tempo mecânica, era necessário medir a

velocidade com um período de amostragem de, no mínimo, 10ms, para não se perder

pontos. Durante os testes, notou-se que este período de amostragem não era possível de se

alcançar utilizando o sensor óptico. Assim, uma outra abordagem necessitava ser utilizada.

Folha 18

Page 19: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

De acordo com Kenjo, T. E Nagamori, S. [3], todo motor possui comportamento

também de gerador, e sua resposta pode ser vista através da força contra-eletromotriz. Esta

força pode ser descrita de acordo com a seguinte equação:

∞Ω= KE

Equação 6: Relação entre FCEM e a velocidade de eixo

Na qual:

E – Força Contra-Eletromotriz (V)

K – Constante do Motor (identificado anteriormente)

– Velocidade angular em rad/s ∞Ω

Ou seja, a força contra-eletromotriz gerada é diretamente proporcional à velocidade

angular do motor, visto que a constante K não se altera com o tempo.

Então, passou-se a medir o decaimento da velocidade do motor indiretamente, ou

seja, o microcontrolador desliga o MOSFET e passa a medir a tensão nos terminais do

motor, guardando os valores em um vetor. Esta técnica fornece indiretamente a velocidade

do eixo, mas permite um período de amostragem de 2 milissegundos.

A constante de tempo mecânica é encontrada calculando-se 37% do valor do

primeiro elemento do vetor de dados (aproximadamente 1 μs após o desligamento do

MOSFET). O vetor é percorrido e no instante que o valor for menor ou igual que os 37%

do primeiro elemento, a constante de tempo mecânica é registrada.

O programa permite a impressão dos valores força contra-eletromotriz x tempo para

a geração do gráfico em MATLAB ou qualquer programa que permite a impressão de

gráficos.

Folha 19

Page 20: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

3. Resultados Obtidos

Após os ensaios apresentarem resultados positivos no protoboard, o esquema final

do circuito foi gerado e encontra-se em anexo a este relatório.

O código-fonte completo em CCS C também encontra-se em anexo a este

documento.

Dois motores de médio porte, utilizados em furadeiras de mão, foram testados com

a versão final do programa e a seguir são apresentados os resultados obtidos:

3.1. Resultados Motor 1

Figura 11: Primeiro motor testado

Resultados copiados diretamente do programa:

Resistencia de Armadura-Ra (Ohms):03.3

Perda de Tensao nas Escovas-Vb (V):2.44

Corrente de Regime-Ia (A):1.017

Constante de Tempo Eletrica-TauE (us):002

Indutancia de Armadura-La (uH):6.60

Constante de Tempo Mecanica (ms):124

Corrente de Eixo Livre (A):0.158

Velocidade de Eixo Livre (RPM):840

Resistencia Mecanica de Movimento-Rh (Ohms):59.1

Constante do Motor (N*m/A):0.107

Folha 20

Page 21: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 12: Gráfico transiente corrente Ia x tempo - Motor 1

Folha 21

Page 22: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 13: Gráfico transiente FCEM x tempo - Motor 1

3.2. Resultados Motor 2

Figura 14: Segundo motor testado

Folha 22

Page 23: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Resultados copiados diretamente do programa:

Resistencia de Armadura-Ra (Ohms):01.6

Perda de Tensao nas Escovas-Vb (V):1.37

Corrente de Regime-Ia (A):1.051

Constante de Tempo Eletrica-TauE (us):001

Indutancia de Armadura-La (uH):1.60

Constante de Tempo Mecanica (ms):074

Corrente de Eixo Livre (A):0.619

Velocidade de Eixo Livre (RPM):17580

Resistencia Mecanica de Movimento-Rh (Ohms):14.5

Constante do Motor (N*m/A):0.004

Figura 15: Gráfico transiente corrente Ia x tempo - Motor 2

Folha 23

Page 24: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 16: Gráfico transiente FCEM x tempo - Motor 2

Folha 24

Page 25: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

E, a seguir, algumas imagens das telas apresentadas no HyperTerminal:

Figura 17: Tela inicial

Figura 18: Após identificar Ra e Vb

Folha 25

Page 26: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 19: Após identificar La e a constante de tempo elétrica

Figura 20: Após ensaio de eixo livre realizado

Folha 26

Page 27: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

Figura 21: Disponibilizando dados para impressão no MATLAB

Folha 27

Page 28: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

4. Conclusões

O trabalho foi de grande valia como aprendizado, principalmente nas partes que se

referem a utilizar a facilidade de programação do circuito sem necessitar tira-lo do

protoboard. O desafio apresentado para identificação de motores foi proveitoso, pois

demonstrou que técnicas baratas e práticas de serem implementadas nem sempre

apresentam resultados satisfatórios, como o caso de se tentar utilizar o sensor óptico para a

identificação da constante de tempo mecânica do motor.

Com este trabalho tentou-se automatizar e simplificar o processo de identificação

dos parâmetros do motor de corrente contínua para o levantamento de sua função de

transferência e posterior confecção de controladores. O conector de expansão foi pensado

com o intuito de se colocar encoder incremental no motor ou utilizar, para motores sem

escovas, o sinal de ciclo completo que alguns modelos possuem já embutidos.

Tacogeradores também podem ser utilizados, visto que no conector de expansão estão

sendo disponibilizados pinos do microcontrolador que podem ser usados como entradas

analógicas. Enfim, a confecção da placa de circuito impresso foi pensada para ser utilizada

como outras finalidades, visto que o microcontrolador pode ser reprogramado.

Como melhorias futuras, poderia se pensar em utilizar amplificadores operacionais

ao invés de divisor resistivo para a leitura da tensão aplicada no motor, deixando a placa

flexível para qualquer tensão de entrada. Nesta versão, apenas modelos de motores que

suportam alimentação de 12VCC ou um pouco abaixo podem ser testados.

Folha 28

Page 29: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

5. Referências Bibliográficas

[1] Microchip’s High Performance PIC18 Microcontrollers, disponível na Internet via

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2042&pa

ram=en020453 Arquivo capturado em 2 de novembro de 2007.

[2] Microchip Technology Inc., PIC18FXX2 Datasheet, Revisão C, 2006.

[3] Kenjo, T. E Nagamori, S. – Permanent-Magnet and Brushless DC Motors – Primeira

Edição. Oxford University, 1985. Capítulos 4, 6 e 7.

[4] Ahmed, A. – Eletrônica de Potência – Primeira Edição. Pearson Education do Brasil,

2000. Capítulo 3.

[5] Vishay Semiconductor, CNY70 Datasheet, Revisão A4, Maio 2000

[6] International Rectifier, IRFZ48N Datasheet, Revisão 0, Abril 1998

[7] Texas Instruments, MAX232 Datasheet, Revisão 1, Outubro 2002

Folha 29

Page 30: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

Relatório Final – ES952 – Rev.0 – Novembro 2007

6. Anexos

ANEXO I – Esquema do circuito de identificação de motores CC, revisão 0. ANEXO II – Programa em CCS C para identificação de motores CC.

Folha 30

Page 31: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC
Page 32: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c/******************************************************************************//*********** PROGRAMA DE IDENTIFICAÇÃO DE PARÂMETROS DO MOTOR *********//******************************************************************************//* Data: 11/2007 *//* Revisão: 0 *//* Autor: Marco Antonio da Silva RA: 026990 *//* Orientador: Professor Dr. Luiz Otávio Saraiva Ferreira *//* Utiliza como IHM o programa HyperTerminal do Windows *//* Parâmetros de configuração: *//* - 9600 bits por segundo *//* - 8 bits de dados *//* - Sem paridade *//* - 1 bit de parada *//* - Sem controle de fluxo *//* Identifica os seguintes parâmetros do motor CC: *//* - Ra, La, Vb (perda nas escovas), TauE (constante de tempo elétrica) *//* - Corrente de Eixo Livre, Rotação de Eixo Livre, Rh, Ke *//* - TauM (constante de tempo mecânica), Corrente de Eixo Travado *//******************************************************************************/

#include <18F452.h>#device adc=10 //conversão A/D operando a 10 bits

#FUSES NOWDT //Watch Dog Timer uses 1:4 Postscale#FUSES HS //High speed Osc (> 4mhz)#FUSES PROTECT //Code protected from reads#FUSES NOOSCSEN //Oscillator switching is disabled, main oscillator is source#FUSES BROWNOUT //Reset when brownout detected#FUSES BORV20 //Brownout reset at 2.0V#FUSES NOPUT //No Power Up Timer#FUSES STVREN //Stack full/underflow will cause reset#FUSES NODEBUG //No Debug mode for ICD#FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)#FUSES NOWRT //Program memory not write protected#FUSES NOWRTD //Data EEPROM not write protected#FUSES NOWRTB //Boot block not write protected#FUSES NOWRTC //configuration not registers write protected#FUSES NOCPD //No EE protection#FUSES NOCPB //No Boot Block code protection#FUSES NOEBTR //Memory not protected from table reads#FUSES NOEBTRB //Boot block not protected from table reads

#use delay(clock=20000000)#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,errors) //RS232 a 9600, sem bit de paridade, reseta comunicação após erro

#ZERO_RAM

//todos os portos precisam de inicialização de seu TRIS em inicia_pic()#use fast_io(B)#use fast_io(A)#use fast_io(C)#use fast_io(E)#use fast_io(D)

/************** DEFINIÇÃO DOS PORTOS DE LEITURA A/D *************/#define VOLTMAIS 0x00 //tensão positiva do motor#define CORRENTE 0x01 //Corrente lida no resistor de shunt#define VOLTMENOS 0x03 //tensão negativa do motor

/**** DEFINIÇÃO DE BITS PARA REGISTRADORES EXISTENTES ***********/#bit liga_tmr01 = 0x10.0

/*********** VARIÁVEIS GLOBAIS ********************/char digitos[5];unsigned long int corr[60],volt[120];

Página 1

Page 33: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c

unsigned long int ra,vb,la,omegainf,corrinf,rh,ke,taum,iatravado,ialivre;unsigned int taue;

/************************ INÍCIO DAS ROTINAS ****************************/

void ltrans_valor(unsigned long int valor) // converte os dígitos do número paraASCII { digitos[0]=(int)(valor%10)+0x30; valor=(unsigned long int)valor/10; digitos[1]=(int)(valor%10)+0x30; valor=(unsigned long int)valor/10; digitos[2]=(int)(valor%10)+0x30; valor=(unsigned long int)valor/10; digitos[3]=(int)(valor%10)+0x30; valor=(unsigned long int)valor/10; digitos[4]=valor+0x30; }

void inicia_pic() // inicialização do microcontrolador { setup_adc_ports(AN0_AN1_AN3); setup_adc(ADC_CLOCK_INTERNAL); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); setup_timer_2(T2_DIV_BY_16,0xFF,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_ccp1(CCP_PWM); enable_interrupts(INT_RTCC); disable_interrupts(INT_RB); disable_interrupts(GLOBAL); setup_oscillator(False); output_A(0x00); output_B(0x00); output_C(0x00); output_D(0x00); output_E(0x00); set_tris_A(0x0F); set_tris_B(0x00); set_tris_C(0x81); set_tris_D(0x00); set_tris_E(0x00); }

void pula_linha(int i) // pula linha no hyperterminal { int j; for(j=0;j<i;j++) { putc(0x0D); putc(0x0A); } }

void limpartela() //limpa a tela do HYPERTERMINAL { putc(0x1B); putc(0x5B); putc(0x32); putc(0x4A); }

void limprime_unidades(int ponto) //imprime os digitos ASCII na RS232 {

Página 2

Page 34: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c if(digitos[4]!=0x30) putc(digitos[4]); if(ponto==1) { putc(digitos[3]); putc('.'); } else if(digitos[3]!=0x30) putc(digitos[3]); putc(digitos[2]); if(ponto==2) putc('.'); putc(digitos[1]); if(ponto==3) putc('.'); putc(digitos[0]); }

void imprimeresults1() //IMPRIME RESULTADOS DO PRIMEIRO TESTE { pula_linha(1); printf("Resistencia de Armadura-Ra (Ohms):"); ltrans_valor(ra); limprime_unidades(3); pula_linha(1); printf("Perda de Tensao nas Escovas-Vb (V):"); ltrans_valor(vb); limprime_unidades(2); pula_linha(1); }

void imprimeresults2() //imprime resultados do segundo teste { pula_linha(1); printf("Corrente de Regime-Ia (A):"); ltrans_valor(iatravado); limprime_unidades(1); pula_linha(1); printf("Constante de Tempo Eletrica-TauE (us):"); ltrans_valor(taue); limprime_unidades(0); pula_linha(1); printf("Indutancia de Armadura-La (uH):"); ltrans_valor(la); limprime_unidades(2); pula_linha(1); } void imprimeresults3() // imprime resultados do terceiro teste { pula_linha(1); printf("Constante de Tempo Mecanica (ms):"); ltrans_valor(taum); limprime_unidades(0); pula_linha(1); printf("Corrente de Eixo Livre (A):"); ltrans_valor(ialivre); limprime_unidades(1); pula_linha(1); printf("Velocidade de Eixo Livre (RPM):"); ltrans_valor(omegainf); limprime_unidades(0); pula_linha(1); printf("Resistencia Mecanica de Movimento-Rh (Ohms):"); ltrans_valor(rh); limprime_unidades(3); pula_linha(1); printf("Constante do Motor (N*m/A):"); ltrans_valor(ke); limprime_unidades(1); }

Página 3

Page 35: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.cvoid main() { unsigned long int leit_volt,leit_voltmenos,leit_corr,temp2; int32 temp1; unsigned long int i,j,maqestteste; inicia_pic(); set_pwm1_duty(0x00);

while(1) { switch(maqestteste) //máquina de estados de testes { case 0: //estado 0: imprime avisos para o usuário { limpartela(); pula_linha(2); printf("ENSAIO COM EIXO TRAVADO"); pula_linha(1); printf("*** SEGURE O EIXO DO MOTOR ***"); pula_linha(1); printf("E PRESSIONE QUALQUER TECLA PARA CONTINUAR..."); pula_linha(1); temp2=0; maqestteste=1; break; } case 1: //estado 1: aguarda entrada de dados do usuário { if(kbhit()) { maqestteste=2; getc(); } else { delay_ms(10); temp2++; if(temp2>=200) maqestteste=0; else maqestteste=1; } break; } case 2: //estado 2: excita o motor em 4 tensões diferentes e lê tensão e corrente { pula_linha(2); setup_ccp1(CCP_PWM); set_pwm1_duty(0x00); printf("IDENTIFICANDO RA E Vb"); temp2=520; j=0; vb=0; while(temp2<1023) { set_pwm1_duty(temp2); delay_ms(800); putc('.'); leit_volt=0; for(i=0;i<64;i++) { set_adc_channel(VOLTMAIS); delay_us(60); leit_volt=leit_volt+read_adc(); } leit_volt=leit_volt>>6;

leit_voltmenos=0; for(i=0;i<64;i++)

Página 4

Page 36: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c { set_adc_channel(VOLTMENOS); delay_us(60); leit_voltmenos=leit_voltmenos+read_adc(); } leit_voltmenos=leit_voltmenos>>6;

leit_corr=0; for(i=0;i<64;i++) { set_adc_channel(CORRENTE); delay_us(19); leit_corr=leit_corr+read_adc(); } leit_corr=leit_corr>>6; leit_corr=leit_corr*48; corr[j]=leit_corr/10; volt[j]=leit_volt-leit_voltmenos; j++; switch(temp2) { case 520: { temp2=700; break; } case 700: { temp2=800; break; } case 800: { temp2=900; break; } case 900: { temp2=2100; break; } } } set_pwm1_duty(0x00); for(i=0;i<j;i++) { temp1=volt[i]; temp1=temp1*117; volt[i]=temp1/100; } maqestteste=3; break; } case 3: //estado 3: calcula Ra e Vb e imprime na RS232 { temp2=volt[j-1]-volt[0]; temp2=temp2*10; leit_corr=corr[j-1]-corr[0]; ra=leit_corr/10; ra=temp2/ra;

temp2=corr[0]/10; vb=ra/10; vb=temp2*vb; vb=volt[0]-vb; imprimeresults1(); pula_linha(1); maqestteste=4;

Página 5

Page 37: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c break; } case 4: //estado 4: imprime pergunta de decisão ao usuário { pula_linha(1); printf("Testar novamente / Continuar testes (T/C)?"); maqestteste=5; break; } case 5: // estado 5: aguarda entrada de dados do usuário { if(kbhit()) { i=getc(); putc(i); if(i=='T' || i=='t') maqestteste=2; else if(i=='C' || i=='c') maqestteste=6; else maqestteste=4; pula_linha(1); } break; } case 6: //estado 6: iprime avisos ao usuário { pula_linha(2); printf("IDENTIFICACAO DE LA"); pula_linha(2); printf("Pressione qualquer tecla"); pula_linha(1); printf("e trave o eixo do motor NO MESMO INSTANTE"); maqestteste=7; break; } case 7: //estado 7: aguarda usuário pressionar qquer botão do computador para prosseguir { if(kbhit()) { pula_linha(1); getc(); maqestteste=8; } else maqestteste=7; break; } case 8: //estado 8: liga o MOSFET1 a 100% e lê o transiente de corrente { setup_ccp1(CCP_OFF); delay_us(10); output_high(PIN_C2); set_adc_channel(CORRENTE); for(i=0;i<60;i++) corr[i]=read_adc(); output_low(PIN_C2); setup_ccp1(CCP_PWM); maqestteste=9; break; } case 9: //estado 9: calcula constante elétrica e indutância do motor { for(i=0;i<60;i++) { temp2=corr[i]; temp2=temp2*48; temp2=temp2/10; corr[i]=temp2; } temp2=corr[59]*10; temp2=temp2/16;

Página 6

Page 38: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c i=0; while(corr[i]<temp2) i++; taue=i; la=taue*ra; la=la*10; iatravado=corr[59]; imprimeresults2(); maqestteste=10; break; } case 10: //estado 10: pergunta de decisão ao usuário { pula_linha(1); printf("Testar novamente / Imprimir dados IaxTempo / Continuar testes (T/I/C)?"); maqestteste=11; break; } case 11: //estado 11: aguarda entrada de dados do usuário { if(kbhit()) { i=getc(); putc(i); switch(i) { case 'T': case 't': { maqestteste=8; break; } case 'I': case 'i': { maqestteste=12; break; } case 'C': case 'c': { maqestteste=13; break; } default: { maqestteste=10; break; } } pula_linha(1); } break; } case 12: //estado 12: imprime dados corrente x tempo para impressão no matlab { limpartela(); i=0; j=22; while(i<60) { pula_linha(1); printf("Tempo(us);Corrente(A)"); while(i<j && i<60) { pula_linha(1); ltrans_valor(i+1);

Página 7

Page 39: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c limprime_unidades(0); putc(';'); ltrans_valor(corr[i]); limprime_unidades(1); i++; } pula_linha(1); printf("PRESSIONE QUALQUER TECLA..."); while(!kbhit()) restart_wdt(); getc(); j=j+22; } maqestteste=13; break; } case 13: //estado 13: início do ensaio com eixo livre; imprime avisos ao usuário { pula_linha(2); printf("ENSAIO COM EIXO LIVRE"); pula_linha(1); printf("*** ENCOSTE O MOTOR EM SENSOR1 E DEIXE O EIXO LIVRE ***"); pula_linha(1); printf("E PRESSIONE QUALQUER TECLA PARA CONTINUAR..."); pula_linha(1); maqestteste=14; break; } case 14: //estado 14: aguarda usuário pressionar qquer tecla do computador para prosseguir { if(kbhit()) { maqestteste=15; getc(); } else maqestteste=14; break; } case 15: //estado 15: liga MOSFET1 a 100%, leia velocidade final, calcula Rh, calcula K { //e levanta constante de tempo mecânica pelo decaimento da Força Contra-Eletromotriz setup_ccp1(CCP_OFF); delay_us(10); output_high(PIN_C2); delay_ms(500); omegainf=0; while(!omegainf) { liga_tmr01=0; set_timer1(0x00); liga_tmr01=1; delay_ms(1000); liga_tmr01=0; omegainf=get_timer1(); if(!omegainf) { pula_linha(1); printf("SEM LEITURA DO SENSOR"); } } omegainf=0; pula_linha(1); printf("OBTENDO PARAMETROS"); for(i=0;i<4;i++) { putc('.');

Página 8

Page 40: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c liga_tmr01=0; set_timer1(0x00); liga_tmr01=1; delay_ms(1000); liga_tmr01=0; temp2=get_timer1(); if(!temp2) { i=0; omegainf=0; } else omegainf=omegainf+temp2; } omegainf=omegainf>>2; omegainf*=60; pula_linha(1); leit_corr=0; for(i=0;i<64;i++) { set_adc_channel(CORRENTE); delay_us(19); leit_corr=leit_corr+read_adc(); } leit_corr=leit_corr>>6; leit_corr=leit_corr*48; leit_corr=leit_corr/10; leit_volt=0; for(i=0;i<64;i++) { set_adc_channel(VOLTMAIS); delay_us(15); leit_volt=leit_volt+read_adc(); } leit_volt=leit_volt>>6; leit_voltmenos=0; for(i=0;i<64;i++) { set_adc_channel(VOLTMENOS); delay_us(15); leit_voltmenos=leit_voltmenos+read_adc(); } leit_voltmenos=leit_voltmenos>>6; volt[0]=leit_volt-leit_voltmenos; temp1=volt[0]; temp1=temp1*117; volt[0]=temp1/100;

leit_volt=volt[0]-vb; temp2=leit_volt*10; rh=leit_corr/10; rh=temp2/rh; rh=rh-ra;

temp2=rh/10; temp1=omegainf; temp1=temp1*104; ke=temp1/1000; temp2=temp2*leit_corr; ke=(int16)temp2/ke; j=0; output_low(PIN_C2); do { leit_volt=0; for(i=0;i<64;i++) { set_adc_channel(VOLTMAIS);

Página 9

Page 41: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c delay_us(15); leit_volt=leit_volt+read_adc(); } leit_volt=leit_volt>>6; leit_voltmenos=0; for(i=0;i<64;i++) { set_adc_channel(VOLTMENOS); delay_us(15); leit_voltmenos=leit_voltmenos+read_adc(); } leit_voltmenos=leit_voltmenos>>6; volt[j]=leit_volt-leit_voltmenos; j++; } while(j<120);

for(i=0;i<120;i++) { temp1=volt[i]; temp1=temp1*117; volt[i]=temp1/100; }

i=0; temp1=volt[i]; temp1=volt[i]*10; temp2=temp1/27; while(volt[i]>temp2) i++; taum=2*i; ialivre=leit_corr; imprimeresults3(); maqestteste=16; break; } case 16: //estado 16: menu de opções ao usuário { pula_linha(2); printf("ESCOLHA UMA OPCAO:"); pula_linha(1); printf("Testar ensaio de eixo livre novamente"); pula_linha(1); printf("Resetar todos os testes"); pula_linha(1); printf("Dados Forca Contra-EletromotrizxTempo"); pula_linha(1); printf("Imprimir todos parametros do motor"); pula_linha(1); printf("(T/R/D/I):"); maqestteste=17; break; } case 17: //estado 17: aguarda entrada de dados do usuário { if(kbhit()) { i=getc(); putc(i); switch(i) { case 'T': case 't': { maqestteste=13; break; } case 'R': case 'r': {

Página 10

Page 42: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c maqestteste=0; break; } case 'D': case 'd': { maqestteste=18; break; } case 'I': case 'i': { maqestteste=19; break; } default: { maqestteste=16; break; } } } break; } case 18: //estado 18: imprime dados Força Contra-Eletromotriz x tempo para impressão no MATLAB { i=0; j=22; while(i<120) { pula_linha(1); printf("Tempo(ms);FCEM(V)"); while(i<j && i<120) { pula_linha(1); ltrans_valor(2*i); putc(digitos[2]); putc(digitos[1]); putc(digitos[0]); putc(';'); ltrans_valor(volt[i]); putc(digitos[3]); putc(digitos[2]); putc('.'); putc(digitos[1]); putc(digitos[0]); i++; } pula_linha(1); printf("PRESSIONE QUALQUER TECLA..."); while(!kbhit()) restart_wdt(); getc(); j=j+22; } maqestteste=16; break; } case 19: //estado 19: imprime todas os parâmetros encontrados do motor { pula_linha(2); printf("PARAMETROS FINAIS DO MOTOR"); pula_linha(1); imprimeresults1(); imprimeresults2(); imprimeresults3(); maqestteste=16; break;

Página 11

Page 43: KIT EXPERIMENTAL PARA IDENTIFICAÇÃO DE MOTORES CC

tg2_2.c } } // fecha switch(maqestteste) } //fecha while(1) } //fecha main()

Página 12