UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE TECNOLOGIA
PROGRAMA DE GRADUAÇÃO EM ENGENHARIA ELÉTRICA
DESENVOLVIMENTO DE SISTEMA DE CONTROLE E AQUISIÇÃO MICROCONTROLADO
Francisco Lincoln Matos da Costa Filho
Fortaleza Dezembro de 2010
ii
FRANCISCO LINCOLN MATOS DA COSTA FILHO
DESENVOLVIMENTO DE SISTEMA DE CONTROLE E AQUISIÇÃO MICROCONTROLADO
Monografia submetida à Universidade Federal
do Ceará como parte dos requisitos para
obtenção do grau de Graduado em Engenharia
Elétrica.
Orientador:
Profª. Dra. Laurinda Lúcia Nogueira dos Reis
Fortaleza Dezembro de 2010
iv
“Resolve fazer o que deves, e não deixes de fazer o que tiveres resolvido”
(Benjamin Franklin)
v
A Deus,
A todos os meus familiares e amigos.
vi
AGRADECIMENTOS
Antes de tudo a Deus por tudo que me foi concedido e pelas oportunidades que me
foram dadas.
A professora Dra. Laurinda Lúcia Nogueira dos Reis por sua orientação, motivação e
disponibilidade durante todo o tempo de trabalho.
Aos professores do Departamento de Engenharia Elétrica da UFC bem como aos
técnicos e funcionários do departamento responsáveis diretamente ou indiretamente pela
minha formação.
Aos meus amigos e colegas de graduação que contribuíram em forma de apoio,
amizade e auxílio em forma de repasse de conhecimento para a realização deste trabalho e
para minha formação. Agradeço especialmente aos meus amigos de laboratório com os quais
superei os momentos mais difíceis de toda a caminhada e com os quais passei boa parte de
todo o período de graduação.
Agradeço ainda aos colegas que passaram pelo mestrado e doutorado no departamento
durante todo o tempo que permaneci na graduação e que também contribuíram de forma
semelhante aos colegas já citados.
A todos os meus familiares, em especial aos meus pais e irmão, por todo suporte e
companheirismo em todos os momentos da minha vida.
A todas as pessoas que por motivo de esquecimento não foram citadas anteriormente
agradeço também da mesma forma.
vii
Filho, F. L. M. C. e “Desenvolvimento de sistema de controle e aquisição microcontrolado”,
Universidade Federal do Ceará – UFC, 2010, 76p.
O presente trabalho tem como objetivo o desenvolvimento e aprimoramento de um sistema de controle e aquisição para fins de aplicação em âmbito educacional e industrial. O sistema é composto basicamente de partes distintas, que são: Software de interface com o usuário alocado em um computador padrão e placa de controle e aquisição de dados para interface com plantas diversificadas. O kit desenvolvido é de baixo custo e simples ao ponto de ser possível sua reprodução dentro de qualquer universidade. A placa de aquisição elaborada possui funcionalidades variadas que são coordenadas pelo microcontrolador utilizado PIC18F4550. A comunicação do dispositivo de interface com o computador é do tipo USB emulada serialmente. O trabalho é baseado na placa Mônica de controle e aquisição criada na Universidade Federal de Santa Catarina que apresentava comunicação via porta paralela com o computador.
Palavras-Chave: Sistema de controle e aquisição, software de interface, placa de
aquisição.
viii
Silva, R. N. A. L. e “Development of control and data acquisition system microcontrolled”, Universidade Federal do Ceará – UFC, 2010, 76p. This work aims the development and improvement of an acquisition and control system for application in the educational and industrial segments. The system is basically composed of distinct parts, which are: Software user interface allocated on a standard computer and board of control and data acquisition to interface with several plants. The kit is of low cost and so simple that reproduction is possible in any university. The acquisition board has many features which are coordinated by the microcontroller used PIC18F4550. The communication of the interface device with the computer is of USB type emulated serially. The work is based on Monica's board of control and data acquisition created firstly at the Federal University of Santa Catarina. This board implemented the communication with the computer through the parallel port.
Keywords: Acquisition and control system, software user interface, acquisition board.
SUMÁRIO
ix
SUMÁRIO
LISTA DE FIGURAS ............................................................................................................... xi
LISTA DE TABELAS ............................................................................................................ xiii
SIMBOLOGIA ........................................................................................................................ xiv
INTRODUÇÃO .......................................................................................................................... 1
CAPÍTULO 2
HARDWARE DE CONTROLE E AQUISIÇÃO DE DADOS ................................................. 4
2.1 CONSIDERAÇÕES INICIAIS .................................................................................. 4
2.2 CONCEITOS, CARACTERÍSTICAS E COMPARAÇÕES ..................................... 4
2.3 DESCRIÇÃO DO HARDWARE DE PROJETO ...................................................... 5
2.3.1 MICROCONTROLADOR PIC18F4550 ........................................................... 6
2.3.2 COMUNICAÇÃO USB ..................................................................................... 8
2.3.3 CONVERSÃO DIGITAL/ANALÓGICA .......................................................... 9
2.3.4 PROGRAMAÇÃO PIC18F4550 ...................................................................... 11
2.3.5 PROTEÇÕES E SINCRONISMOS ................................................................. 16
2.3.5.1 BUFFER ....................................................................................................... 16
2.3.5.2 CONDICIONADORES DE SINAL ............................................................. 17
2.3.5.3 ISOLADORES ............................................................................................. 18
2.3.5.4 FONTE SIMÉTRICA ................................................................................... 18
2.3.6 INSTALAÇÃO DA PLACA ............................................................................ 19
2.3.7 DETALHES DE HARDWARE E COMUNICAÇÃO .................................... 23
2.4 CONSIDERAÇÕES FINAIS ................................................................................... 24
CAPÍTULO 3
SOFTWARE E INTERFACE COM O USUÁRIO ................................................................. 25
3.1 CONSIDERAÇÕES INICIAIS ................................................................................ 25
3.2 SOFTWARES PARA COMUNICAÇÃO DE DADOS .......................................... 25
3.3 INTERFACE COM O PROGRAMA MATLAB ..................................................... 26
3.4 SIMULINK ............................................................................................................... 29
3.4.1 S-FUNCTIONS ................................................................................................ 31
3.4.2 SAÍDA ANALÓGICA ..................................................................................... 33
3.4.3 ENTRADA ANALÓGICA .............................................................................. 33
3.4.4 LEITURA DIGITAL ........................................................................................ 35
3.4.5 SAÍDA DIGITAL ............................................................................................. 35
SUMÁRIO
x
3.4.6 PWM ................................................................................................................. 36
3.4.7 RELÓGIO DE TEMPO REAL ........................................................................ 37
3.5 GUI ........................................................................................................................... 38
3.6 TEMPO DE AMOSTRAGEM ................................................................................. 39
3.7 INTERFACE COM O PROGRAMA SCILAB ....................................................... 40
3.8 SCICOS .................................................................................................................... 41
3.9 CONSIDERAÇÕES FINAIS ................................................................................... 42
CAPÍTULO 4
IMPLEMENTAÇÕES PRÁTICAS ......................................................................................... 43
4.1 CONSIDERAÇÕES INICIAIS ................................................................................ 43
4.2 AMBIENTE DE TRABALHO GRÁFICO .............................................................. 43
4.3 CÓDIGO PARA MODELAGEM DE UM SISTEMA ............................................ 49
4.4 CONSIDERAÇÕES FINAIS ................................................................................... 50
CAPÍTULO 5
CONCLUSÃO E TRABALHOS FUTUROS .......................................................................... 51
REFERÊNCIAS BIBLIOGRÁFICAS ..................................................................................... 53
APÊNDICE A – CÓDIGOS DESENVOLVIDOS NO TRABALHO ..................................... 55
LISTA DE FIGURAS
xi
LISTA DE FIGURAS
Figura 2.1 – Esquema geral da placa de controle e aquisição .................................................... 6
Figura 2.2 – Esquemático microcontrolador PIC18F4550 ......................................................... 7
Figura 2.3 – Tipos de comunicação em relação as suas velocidades ......................................... 9
Figura 2.4 – Esquema elétrico geral detalhado da “DAQ board”.............................................. 9
Figura 2.5 – Conversor digital-analógico TLC5615cp da Texas Instruments ......................... 10
Figura 2.6 – buffer de tensão .................................................................................................... 16
Figura 2.7 – Circuito com buffer e sincronizador de tensão para saída analógica ................... 17
Figura 2.8 – Circuito com buffer e sincronizador de tensão para entrada analógica ............... 18
Figura 2.9 – Circuito isolador de PWM ................................................................................... 18
Figura 2.10 – Fonte simétrica (-12V e +12V). ......................................................................... 19
Figura 2.11 – Primeira tela de instalação da placa ................................................................... 20
Figura 2.12 – Segunda tela de instalação da placa ................................................................... 20
Figura 2.13 – Terceira tela de instalação da placa ................................................................... 21
Figura 2.14 – Quarta tela de instalação da placa ...................................................................... 21
Figura 2.15 – Quinta tela de instalação da placa ..................................................................... 22
Figura 2.16 – Gerenciador de dispositivos ............................................................................... 22
Figura 2.17 – Placa de controle e aquisição conectada ao computador ................................... 24
Figura 3.1 – Ambiente de desenvolvimento de programas de controle ................................... 26
Figura 3.2 – Biblioteca de blocos Simulink fornecida com os arquivos de projeto ................. 30
Figura 3.3 – Modelo teste Simulink com procedimento de inicialização e finalização do
sistema .............................................................................................................................. 31
Figura 3.4 – canal de trabalho deve ser escolhido através de um duplo clique no bloco ......... 33
Figura 3.5 – A entrada do bloco é utilizada para definir o valor analógico na saída do canal . 33
Figura 3.6 – O canal receptor e o tempo de amostragem do bloco devem ser definidos. ........ 34
Figura 3.7 – Exemplo de aplicação do bloco ........................................................................... 34
Figura 3.8 – Exemplo de aplicação da recepção digital. De forma similar ao bloco “AD_pm”
o tempo de amostra e o número do canal também devem ser configurados .................... 35
Figura 3.9 – Configurações do bloco “ENVIA_digital_pm”. .................................................. 36
Figura 3.10 – Aplicação do bloco de envio de valores digitais. A entrada deve ser 0 ou 1 para
nível alto ou baixo digital ................................................................................................. 36
Figura 3.11 – Configurações do bloco de PWM ...................................................................... 37
Figura 3.12 – Na entrada do bloco o duty cycle desejado deve ser aplicado............................ 37
LISTA DE FIGURAS
xii
Figura 3.13 – Leitura do tempo real do Sistema Operacional e sincronismo deste com o
sistema .............................................................................................................................. 38
Figura 3.14 – Parâmetros do “Real-time Clock”. ..................................................................... 38
Figura 3.15 – Interface de manipulação da placa de controle e aquisição ............................... 39
Figura 3.16 – simples de aquisição analógica a partir de bloco encontrado na biblioteca do
Scicos ................................................................................................................................ 41
Figura 4.1 – Ambiente de controle PID da velocidade de um servo motor ............................. 45
Figura 4.2 – Planta para controle de velocidade do servo motor do kit ED4400B .................. 45
Figura 4.3 – Esquema de controle proporcional do sevo motor do kit ED4400B .................... 46
Figura 4.4 – Controle proporcional aplicado ao servo motor ................................................... 47
Figura 4.5 – Sinal contínuo e saída discretizada equivalente do sinal fornecida pelo Zero-
Order Hold ........................................................................................................................ 47
Figura 4.6 – Controle PI aplicado ao servo motor .................................................................... 48
Figura 4.7 – Resposta ao degrau da planta para posterior modelagem .................................... 49
LISTA DE TABELAS
xiii
LISTA DE TABELAS
Tabela 2.1 – Programação em formato de máquina de estados................................................ 12
Tabela 3.1 – Funções de comunicação com o protótipo de controle e aquisição ..................... 27
Tabela 3.2 – Parâmetros de uma S-function ............................................................................. 32
Tabela 4.1 – Código de aquisição ............................................................................................. 49
Siglas e abreviaturas
xiv
Siglas e Abreviaturas:
Símbolo Significado
CA Corrente Alternada
CC Corrente Contínua
CCS Custom Computer Services
CDC Communication Device Class
COM Component Object Model
EEPROM Electrically-Erasable Programmable Read-Only Memory
GUI Graphical User Interface
LPT Line Print Terminal
MIMO Multiple – Input / Multiple - Output
PC Personal Computer
PI Proporcional Integral
PID Proporcional Integral Derivativo
PLL Phase-Locked Loop
PWM Pulse Width Modulation
RAM Random Access Memory
RMS Root Mean Square
RS232 Protocolo de Comunicação Serial
SIE Serial Interface Engine
SISO Single – Input / Single - Output
SPP Serial Port Profile
UFC Universidade Federal do Ceará
UFSC Universidade Federal de Santa Catarina
USB Universal Serial Bus
Introdução
CAPÍTULO 1
INTRODUÇÃO
Na implementação dos sistemas de controle contínuo e discretos são discutidas diferen-
tes formas de leitura de grandezas físicas e de envio de sinais a diferentes atuadores. A busca
constante por ferramentas de aquisição de dados é promovida com a finalidade de alcançar
resultados de menor custo e maior rendimento que se adaptem aos requisitos de projeto de
plantas diversas.
O estágio atual em que se encontram os processos científicos, industriais e médicos le-
vam a necessidade do conhecimento e monitoramento de grandezas físicas associadas ao tipo
específico de processo. Na indústria alimentícia, por exemplo, o controle das condições de
produção e armazenagem não seria realizável sem o conhecimento de variáveis tais como
temperatura, umidade, pressão e pH.
Sistemas de aquisição de dados, como o nome sugere, são os produtos ou sistemas usa-
dos para coletar dados ou informações de determinada fonte. Estes sistemas são diferenciados
nas seguintes condições: comunicação serial, “Universal Serial Bus” (USB), portas paralelas e
placas plug-in. O conceito de aquisição pode ser mais bem definido como o processo de ob-
tenção de dados do mundo real que produz informações passíveis de manipulação em softwa-
re. As variáveis adquiridas podem ser armazenadas no computador e o controle destas pode
também ser realizado com o uso de linguagens de programação como Basic ou C, por exem-
plo.
Assim como em cursos de engenharia, em processos industriais sistemas de aquisição e
controle se tornam essenciais na composição de estruturas de controle quase sempre funda-
mentais sejam em laboratórios de universidades ou em processos generalizados na indústria.
A crescente necessidade de um hardware prático que realize a aquisição de informações
de um meio físico para um meio computacional levou a popularização das chamadas “Data
Acquisition Boards” ou “DAQ Boards”, placas constituídas de ferramentas capazes de adqui-
rir grandezas digitais e analógicas e repassá-las a um computador. Nesse contexto, os micro-
controladores, circuitos integrados programáveis, são bastante utilizados por conterem em
uma mesma pastilha a maioria dos blocos funcionais necessários a um sistema de aquisição de
dados (França, 1997).
Soluções comerciais de plataformas de aquisição ou “DAQ Boards” que atendem dife-
rentes níveis de complexidade estão disponíveis atualmente no mercado. Devido aos elevados
2
Introdução
custos embutidos nesses sistemas de aquisição e monitoramento de dados, é importante a pes-
quisa e o desenvolvimento de novas alternativas feitas pelos alunos nas universidades, que
visam baixar os custos para a indústria e ao mesmo tempo proporcionarem uma funcionalida-
de tão boa quanto às existentes em soluções desenvolvidas por grandes empresas do ramo da
automação (Coelho et al., 2001).
O presente trabalho busca o desenvolvimento de um hardware funcional de aquisição e
controle aplicável em controle de processos e de ferramentas computacionais que possibilitem
a elaboração de códigos de controle sobre as plantas dos processos independentemente de sua
área de aplicação. O sistema projetado é composto basicamente de funções e interfaces gráfi-
cas de fácil entendimento ao usuário elaboradas em software alocado em um computador pa-
drão e de uma “DAQ Board” com múltiplas funcionalidades. A comunicação entre o hardwa-
re de coleta e o computador que hospeda o software de controle é feita via USB. Esse tipo de
tráfego de dados é vantajoso devido a características próprias da USB, como seu caráter “plug
and play” que possibilita como o próprio nome diz a instalação simplificada do dispositivo
para uso subseqüente. O trabalho desenvolvido aqui tem como base o projeto de uma placa de
controle e aquisição desenvolvida na Universidade Federal de Santa Catarina, UFSC, deno-
minada “Placa Mônica” descrita em (Bittencourt, 2002).
A plataforma construída neste trabalho busca uma solução para aquisição de dados e
controle que opere em velocidade suficiente para ser empregada em quaisquer sistemas de
tempo real, disponibilizando os dados em um computador convencional, onde ferramentas
gráficas e estatísticas podem ser usadas posteriormente na análise dos dados coletados.
O sistema elaborado como um todo consiste de um arranjo de dispositivos que direcio-
nam, sincronizam e compatibilizam a comunicação de dados entre um microcomputador e o
meio externo e de um computador com software capaz de executar controles digitais. Contro-
les estes que poderão ser aplicados em diferentes plantas e em diferentes áreas de estudo, den-
tre as aplicações possíveis podem-se citar como exemplo motores de corrente contínua, tan-
ques de nível de água e incubadoras neonatais. No último exemplo é interessante notar a ne-
cessidade de atuação sobre a umidade relativa e a temperatura do meio.
O objetivo do trabalho é descrever o funcionamento do sistema desenvolvido no contex-
to de promover um meio de aquisição de dados e controle de baixo custo para aplicação em
estudos acadêmicos de controle e automação ou projetos industriais.
Neste capítulo, um conceito inicial sobre sistemas de aquisição e uma discussão sobre a
necessidade destes são introduzidos como base para o entendimento dos capítulos que se se-
guem.
3
Introdução
No capítulo 2 é feita a análise do hardware de projeto e de suas características como ti-
po de comunicação, ferramenta microcontrolada utilizada, funcionalidades e construção. É
destacado também o emprego da plataforma ou a posição que esta ocupa em meio ao ciclo de
controle.
No capítulo 3 uma descrição detalhada do software desenvolvido bem como das funções
e interfaces gráficas são discutidas levando em consideração vantagens e desvantagens da uti-
lização dos diferentes pacotes de softwares existentes para criação, Matlab/Simulink e Sci-
lab/Scicos. Neste capítulo é possível obter uma visualização clara de como o usuário poderá
desenvolver seu código ou interface de controle a partir das estruturas fornecidas pelo projeto.
O capítulo 4 segue na seqüência lógica de trabalho evidenciando possíveis aplicações
em que o protótipo pode ser empregado. Com o conhecimento geral do sistema adquirido nos
capítulos anteriores é possível o entendimento do funcionamento a partir de exemplos práticos
de comum emprego de controle.
Ao final do trabalho são apresentadas as conclusões e algumas sugestões para trabalhos
futuros, presentes no capítulo 5.
Nos apêndices são apresentados os códigos implementados.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
CAPÍTULO 2
HARDWARE DE CONTROLE E AQUISIÇÃO DE DADOS
2.1 - CONSIDERAÇÕES INICIAIS
Este capítulo apresenta uma descrição detalhada da plataforma física para emprego em
processos de controle bem como de suas funcionalidades e características intrínsecas. A fer-
ramenta microcontrolada PIC 18F4550 é abordada para melhor conhecimento do sistema e o
processo de instalação do equipamento é detalhado. O padrão de comunicação USB também é
discutido dado seu uso no interfaceamento entre “DAQ Board” e computador.
O emprego do material em meio aos processos de controle é relatado tendo em vista o
estabelecimento de possíveis aplicações. As vantagens e desvantagens em relação a soluções
comerciais existentes também são debatidas.
2.2 - CONCEITOS, CARACTERÍSTICAS E COMPARAÇÕES
A placa microcontrolada para consecução de dados e controle descrita aqui de modo
semelhante a “Placa Mônica” citada em (Bittencourt, 2002) atua como uma ponte de comuni-
cação entre um microcomputador e o meio externo. A placa em questão pode ser mais facil-
mente entendida como uma placa de aquisição e controle externo de dados acessíveis ao usuá-
rio.
O modelo de aquisição é mencionado aqui devido à adaptação simples permitida da pla-
ca a elementos básicos formadores de um sistema de aquisição. Um sistema manipulador de
informações (aquisição) é basicamente composto pelas seguintes partes: senso-
res/transdutores, condicionadores de sinais, conversor A/D, controles associados e programa.
As partes mencionadas e a correta adequação destas as características da placa serão discuti-
das posteriormente.
A real diferença entre a placa Mônica já mencionada e a placa discutida aqui consiste
basicamente no modo de comunicação entre o microcontrolador utilizado e o computador de
interface com o usuário. A comunicação utilizada é do tipo USB com emulação serial, isto é,
a velocidade e compactação da comunicação USB são aliadas a simplicidade do já conhecido
e consagrado protocolo de comunicação RS232. Outra característica importante da nova placa
CAPÍTULO 2 – Hardware de controle e aquisição de dados
5
é a característica de circuito Bus-Powered, ou seja, a alimentação é proveniente do próprio
computador utilizado.
As conexões básicas de dispositivos na placa resultam nas seguintes configurações: 6
conversores A/D (0 – 5 volts de entrada), 3 conversores D/A (0 – 5 volts de saída), dois canais
de saída PWM e cinco portas para comunicação digital. As configurações da placa e a comu-
nicação implementada serão explanadas de maneira que permitam a utilização pelo usuário na
configuração de sistemas de controle ou simplesmente de aquisição.
2.3 - DESCRIÇÃO DO HARDWARE DE PROJETO
O esquema elétrico geral da placa produzida pode ser observado na figura 2.1. Como já
mencionado, a placa possui seis entradas analógicas protegidas por esquemas de buffer casa-
dores de impedância. O buffer é implementado a partir de um circuito seguidor de tensão
construído com o amplificador operacional LMC6482AIN. Existem também três saídas ana-
lógicas obtidas pela ligação microcontrolador, PIC18F4550, e conversor digital-analógico,
TLC5615CP. As saídas analógicas apresentam uma faixa de valores de 0 a 5 volts. Vale res-
saltar que as proteções se encontram em placas separadas que foram adaptadas para facilitar o
acoplamento da placa de controle e aquisição.
A placa possui ainda duas saídas de PWM protegidas pelo acoplador óptico 6N137 que
permite trabalho em altas freqüências. O isolamento óptico é essencial no controle de circui-
tos de potência, ele também previne eventuais danos ao computador utilizado já que a alimen-
tação da placa é proveniente da USB do PC. O acoplamento óptico também se encontra em
placa de proteção à parte.
Existem ao todo cinco pinos que servem como entradas ou saídas digitais protegidos por
buffers casadores de impedâncias. O código da placa foi elaborado de modo que haja três en-
tradas e duas saídas digitais totalizando cinco pinos para eventuais comunicações digitais que
venham a ser necessárias como é comum em alguns sensores.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
6
Figura 2.1 – Esquema geral da placa de controle e aquisição.
2.3.1 - MICROCONTROLADOR PIC18F4550
Microcontrolador é um circuito integrado composto por um microprocessador e disposi-
tivos periféricos essenciais para o seu funcionamento como: memória de programa e de da-
dos; e também periféricos acessórios como: interfaces de entrada e saída de dados (Santos,
2009). Os microcontroladores são úteis por permitirem diferentes tipos de aplicações em ele-
trônica através da simples programação e subseqüente gravação do código no dispositivo,
também são funcionais por possuírem diversas funcionalidades compactadas e acessíveis ao
usuário como conversores analógico-digitais, por exemplo.
Esse tipo de pastilha eletrônica é utilizado em diferentes tipos de sistemas embarcados e
é vantajoso por seu baixo custo e possibilidade de adaptação do dispositivo a projetos especí-
ficos. O baixo consumo de energia é outro fator preponderante que justifica sua populariza-
ção.
A capacidade de processamento e de armazenamento é diversificada entre os microcon-
troladores existindo assim famílias de processadores com funções semelhantes. Algumas fa-
mílias são de linhas compactas possuindo, portanto, poucas funções e consumindo menos e-
nergia. Os componentes destas famílias são utilizados na execução de funções simplórias que
não exigem muitos recursos. Outros tipos de pastilha são compostos por maior capacidade de
armazenamento, palavras de bits maiores, diversas funcionalidades e podem ser usados para a
execução de atividades mais complexas. Além das vantagens citadas podem-se citar a portabi-
lidade dos microcontroladores, eliminação da necessidade de vários componentes externos e a
necessidade de pouco tempo para desenvolvimento.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
7
O microcontrolador utilizado no hardware de projeto é o PIC18F4550
(www.microchip.com) que pode ser visualizado na figura 2.2. Considerado um dos dispositi-
vos mais completos de sua categoria ele apresenta funcionalidades tais como:
• Possibilidade de regravação código;
• 1 Módulo Universal Serial Bus (USB). O PIC18F4550 possui um USB SIE (Serial In-
terface Engine) compatível com os modos full-speed e low-speed USB o que possibilita a rá-
pida comunicação entre um host USB e o microcontrolador. Além disso, o módulo USB pos-
sui 16 endpoints (locais físicos onde é armazenado o fluxo de dados) bidirecionais e suporta
até quatro tipos de transferências: controle, interrupção, isossíncrona e de massa.
• 13 Conversores analógico-digitais de 10 bits. Seis dos conversores são utilizados;
• Memória de programa Flash com 32 Kbytes;
• Memória de dados EEPROM 256 Bytes;
• Memória RAM 2 Kbytes;
• Freqüência de operação de até 48 MHz;
• Portas de entrada e saída: A, B, C, D e E;
• 4 Timers;
• 1 Módulo Capture/Compare/PWM;
• 2 Comparadores;
• 1 Streaming Parallel Port (SPP).
Figura 2.2 – Esquemático microcontrolador PIC18F4550.
O PIC 18F4550 foi escolhido como ferramenta de trabalho por possuir um conjunto de
funcionalidades de hardware que permitem a implementação de operações diversas. A diver-
CAPÍTULO 2 – Hardware de controle e aquisição de dados
8
sificação de aplicações possibilitadas pelo microcontrolador de trabalho é desejável em siste-
mas de aquisição de dados. O dispositivo foi escolhido também porque contém módulo USB
que permite a utilização desse tipo de comunicação.
2.3.2 - COMUNICAÇÃO USB
A constante atualização da forma de conexão entre computadores e dispositivos varia-
dos levou o mercado tecnológico a uma ampla difusão da interface USB. Sua versatilidade e
vantagens tornaram esse tipo de comunicação bastante amigável ao usuário, e popularizaram
seu uso na conexão entre computadores pessoais e periféricos, em substituição a interfaces
mais antigas, como as portas serial (COM) e paralela (LPT). A velocidade na transferência de
dados, figura 2.3, e a utilização da tecnologia “Plug and Play” são exemplos de característi-
cas da comunicação USB que vem tornando esta interface cada vez mais dominante na comu-
nicação entre computadores pessoais e periféricos.
Neste trabalho foram aproveitadas as vantagens apresentadas desse tipo de comunicação
como forma de adotar uma estrutura simples e de fácil manuseio para interface da “DAQ Bo-
ard”. O microcontrolador utilizado (PIC18F4550) foi programado para se comportar como
um dispositivo do tipo CDC (Communications Device Class). Dispositivos deste tipo de clas-
se implementam um mecanismo de comunicação de propósito geral que pode ser usado para a
comunicação entre a maioria dos dispositivos existentes. É interessante notar que a utilização
do compilador CCS para programação do PIC18F4550 possibilitou uma simplificação consi-
derável na montagem do algoritmo e na interface com os outros dispositivos além do micro-
controlador na placa. Isto foi possível devido aos drivers intrínsecos ao compilador CCS for-
necidos em forma de bibliotecas. O driver necessário para a comunicação com o dispositivo
CDC também é fornecido no pacote CCS. O compilador e a programação específica do mi-
crocontrolador merecem um item dedicado e serão discutidos mais adiante. Deverá ser deta-
lhada a forma em que se deu a comunicação entre computador e hardware.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
9
Figura 2.3 – Tipos de comunicação em relação as suas velocidades. Fonte - (Santos, 2009).
2.3.3 - CONVERSÃO DIGITAL/ANALÓGICA
Como já mencionado anteriormente a “Data Acquisition Board” do projeto possui três
conversores digital-analógicos que possibilitam saídas de 0 a 5 V na placa a partir de valores
digitais enviados pelo microcontrolador. A conexão entre o PIC18F4550 e os conversores
TLC5615cp utilizados pode ser observada na figura 2.4 que apresenta o esquema elétrico ge-
ral detalhado da placa.
Figura 2. 4 – Esquema elétrico geral detalhado da “DAQ board”.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
10
O TLC5615cp mostrado na figura 2.5 é um conversor da Texas Instruments de apenas
um canal que permite uma entrada serial com valores digitais de 10 bits e saída analógica des-
tes valores com ou sem ganho dependendo da configuração de ligação elabora para o circuito
integrado. O dispositivo de oito pinos possui basicamente três deles dedicados à comunicação
serial que são: DIN, SCLK e CS/. O DIN é o próprio canal de entrada de dados, se a entrada
estiver em nível baixo o bit é interpretado como zero e se em nível alto como um. O SCLK é
o clock do dispositivo que coordena o envio das informações digitais, no processo de envio o
circuito integrado define a entrada de um bit através do pulso gerado no pino SCLK. Isto é,
para transmissão de um bit é necessário que a entrada de clock seja colocada em nível baixo e
após o envio do bit para o pino DIN em nível alto. Este procedimento deve ser efetuado se-
qüencialmente até que os 10 bits permitidos pelo dispositivo sejam recebidos. O pino CS/ é o
pino de load ou carregamento que permite o início da comunicação serial entre conversor e
dispositivo de envio de informações que no presente projeto é o microcontrolador
PIC18F4550. O pino de load habilita a comunicação quando em nível baixo e desabilita
quando em alto.
Figura 2.5 – Conversor digital-analógico TLC5615cp da Texas Instruments.
O pino REFIN do conversor digital-analógico é um pino de referência de tensão e serve
como parâmetro para os valores analógicos da saída. Este circuito integrado permite a utiliza-
ção de um ganho como observado na equação (2.1) que aplicado aos valores de entrada au-
menta os valores de tensão na saída. Isto é essencialmente útil quando se trabalha com gran-
dezas digitais bem pequenas que resultam em valores analógicos também pequenos com o uso
CAPÍTULO 2 – Hardware de controle e aquisição de dados
11
de ganho unitário. A equação para obtenção do sinal analógico definida em (Filho; Reis,
2010) é dada por:
( )1024
10•2= INPUT
REFINOUT
BITSVV (2.1)
A transmissão de dados ao TLC5615cp para obtenção dos valores analógicos na saída
da placa é realizada através de código desenvolvido para o PIC18F4550. Ou seja, uma pro-
gramação para comunicação específica com o DA foi elaborada e compactada em um driver
(código definido para uso geral) criado no compilador CCS, tabela 2.1. O driver é chamado
pelo programa principal do microcontrolador e coordena as atividades dos três circuitos inte-
grados utilizados. Isto é, os pinos de dados, clock e load são sincronizados para o correto en-
vio de dados. O valor de tensão de referência utilizado foi de 2,5V que resulta em um valor
máximo na saída do dispositivo de 5V utilizando 10 bits serializados. A programação especí-
fica de comunicação será explorada no decorrer do trabalho.
2.3.4 - PROGRAMAÇÃO PIC18F4550
A programação do PIC18F4550, peça central do hardware, tendo em vista a implemen-
tação das funcionalidades da placa foi elaborada no compilador CCS em linguagem C. O CCS
fornece completa estrutura lógica de programação e tem baixo custo de trabalho. Este compi-
lador é vantajoso porque é composto por operadores (drivers) que foram empacotados em bi-
bliotecas que são específicas para os microcontroladores PICs. O driver necessário para a co-
municação USB com o dispositivo CDC é fornecido no pacote do compilador.
O conjunto de arquivos de código em C do apêndice A.2 foi reunido para que possibili-
tem a comunicação USB e o correto funcionamento dos dispositivos ligados ao PIC 18F4550.
É importante notar que dentre os códigos do apêndice o “usb_biblioteca.c” foi obtido de (San-
tos, 2009), o programa principal e o driver para comunicação com o conversor digital-
analógico foram criados e os demais códigos foram obtidos do pacote do compilador CCS.
O programa principal do microcontrolador gerado foi organizado de modo que funcione
como uma máquina de estados e possibilite o acesso às diversas funções da placa não somente
através de softwares como Matlab ou Scilab, mas também através de qualquer outro programa
CAPÍTULO 2 – Hardware de controle e aquisição de dados
12
que forneça interface de comunicação serial. É importante lembrar aqui que a comunicação
USB utilizada é emulada serialmente e por isso se fala em interface serial.
A tabela 2.1 mostra com clareza as opções que devem ser enviadas ao microcontrolador
para que as funções da “DAQ Board” mostradas na coluna da direita sejam acessadas por uma
interface serial sem o uso dos softwares ou comandos citados, as funcionalidades das funções
da tabela serão explanadas no próximo capítulo onde o software de comando da placa é abor-
dado. As opções devem ser enviadas em formato hexadecimal por programas como, por e-
xemplo, o comunicador serial “Docklight”.
Tabela 2.1 - Programação em formato de máquina de estados.
Opção Função
1 setpm_pwm_duty(1, duty, 3000) -> “O duty cycle deve ser enviado após
a escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
2 setpm_pwm_duty(1, duty, 6000) -> “O duty cycle deve ser enviado após
a escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
3 setpm_pwm_duty(1, duty, 12000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
4 setpm_pwm_duty(1, duty, 24000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
5 setpm_pwm_duty(1, duty, 48000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
6 setpm_pwm_duty(1, duty, 60000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
7 setpm_pwm_duty(1, duty, 96000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
CAPÍTULO 2 – Hardware de controle e aquisição de dados
13
nual (sem uso da função)”.
8 setpm_pwm_duty(1, duty, 120000) -> “O duty cycle deve ser enviado
após a escolha da opção em formato hexadecimal no caso de comunicação
manual (sem uso da função)”.
9 setpm_pwm_duty(2, duty, 3000) -> “O duty cycle deve ser enviado após
a escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
10 setpm_pwm_duty(2, duty, 6000) -> “O duty cycle deve ser enviado após
a escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
11 setpm_pwm_duty(2, duty, 12000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
12 setpm_pwm_duty(2, duty, 24000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
13 setpm_pwm_duty(2, duty, 48000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
14 setpm_pwm_duty(2, duty, 60000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
15 setpm_pwm_duty(2, duty, 96000) -> “O duty cycle deve ser enviado a-
pós a escolha da opção em formato hexadecimal no caso de comunicação ma-
nual (sem uso da função)”.
16 setpm_pwm_duty(2, duty, 120000) -> “O duty cycle deve ser enviado
após a escolha da opção em formato hexadecimal no caso de comunicação
manual (sem uso da função)”.
17 recebe_pm(1)
CAPÍTULO 2 – Hardware de controle e aquisição de dados
14
18 recebe_pm(2)
19 recebe_pm(3)
20 recebe_pm(4)
21 recebe_pm(5)
22 recebe_pm(6)
23 setpm_pwm_freq(3000, duty) -> “O duty cycle deve ser enviado após a
escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
24 setpm_pwm_freq(6000, duty) -> “O duty cycle deve ser enviado após a
escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
25 setpm_pwm_freq(12000, duty) -> “O duty cycle deve ser enviado após a
escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
26 setpm_pwm_freq(24000, duty) -> “O duty cycle deve ser enviado após a
escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
27 setpm_pwm_freq(48000, duty) -> “O duty cycle deve ser enviado após a
escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
28 setpm_pwm_freq(60000, duty) -> “O duty cycle deve ser enviado após a
escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
29 setpm_pwm_freq(96000, duty) -> “O duty cycle deve ser enviado após a
escolha da opção em formato hexadecimal no caso de comunicação manual
(sem uso da função)”.
30 setpm_pwm_freq(120000, duty) -> “O duty cycle deve ser enviado após
a escolha da opção em formato hexadecimal no caso de comunicação manual
CAPÍTULO 2 – Hardware de controle e aquisição de dados
15
(sem uso da função)”.
31 envia_pm(1, valor) -> “O valor deve ser enviado após a escolha da op-
ção em formato hexadecimal no caso de comunicação manual (sem uso da
função). O valor deve estar entre 0 e 255 para comunicação manual e entre 0 e
5 na utilização da função”.
32 envia_pm(2, valor) -> “O valor deve ser enviado após a escolha da op-
ção em formato hexadecimal no caso de comunicação manual (sem uso da
função). O valor deve estar entre 0 e 255 para comunicação manual e entre 0 e
5 na utilização da função”.
33 envia_pm(3, valor) -> “O valor deve ser enviado após a escolha da op-
ção em formato hexadecimal no caso de comunicação manual (sem uso da
função). O valor deve estar entre 0 e 255 para comunicação manual e entre 0 e
5 na utilização da função”.
34 recebepm_dig(1)
35 recebepm_dig(2)
36 recebepm_dig(3)
37 enviapm_dig(1, 1)
38 enviapm_dig(1, 0)
39 enviapm_dig(2, 1)
40 enviapm_dig(2, 0)
41 Controle de PWM por entrada analógica (AN0 -> PWM1)
42 Controle de PWM por entrada analógica (AN1 ->PWM2)
43 usb_detach(); -> ”Desconecta USB”.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
16
2.3.5 - PROTEÇÕES E SINCRONISMOS
Neste trabalho estão previstos circuitos auxiliares a placa principal com a finalidade de
isolamento e condicionamento de níveis de tensão para adequação em aplicações que necessi-
tam ou fornecem grandezas analógicas com limites superiores aos padrões da “DAQ Board".
2.3.5.1 – BUFFER
Um buffer de tensão é um circuito seguidor de tensão construído com amplificador ope-
racional utilizado para isolar uma fonte de alta impedância de saída de uma carga com baixa
impedância de entrada. Este circuito é também conhecido como acoplador ou casador
de impedâncias. Devido a sua característica de ganho unitário o buffer não fornece ganho de
tensão, entretanto neste circuito é o amplificador operacional e não a fonte de sinal que forne-
ce potência a carga. Isso pode ocasionar ganho de potência na carga alimentada pelo seguidor
de tensão já que o amplificador operacional possui impedância de saída nula e poderá forne-
cer corrente ilimitada a carga, dentro das limitações do componente. Portanto, estes dispositi-
vos são utilizados como forma de garantir acoplamento de impedâncias e ganho de potência
estável.
Conforme observado na figura 2.6 seguidores de tensão estão previstos para as entradas
e saídas digitais assim como entradas e saídas analógicas. Nas entradas e saídas analógicas
circuitos condicionadores de tensão são associados aos buffers.
Figura 2.6 – buffer de tensão.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
17
2.3.5.2 – CONDICIONADORES DE SINAL
O condicionamento de sinal empregado aqui é do tipo alteração de nível e é utilizado
para adequar os níveis de saída analógica a possíveis aplicações que exigiam uma faixa de
tensão maior, ou ainda adequar limites de tensão fornecidos a placa entre os 0 a 5 V das en-
tradas analógicas.
Aliado ao buffer casador de impedâncias descrito na subseção anterior um circuito am-
plificador da saída analógica composto por amplificadores operacionais é mostrado na figura
2.7. O circuito do esquema estende o limite de saída analógica de 0 a 5 V para -10 V a +10 V
teóricos onde 0 V corresponde a -10V e 5 V a +10 V. A malha é composta pelo seguidor de
tensão continuado por uma configuração de amplificador diferença, donde é obtida uma faixa
de -2,5 V a +2,5 V, e é finalizada por um amplificador não-inversor que eleva os limites do
estágio anterior a -10 V e +10 V.
Figura 2.7 – Circuito com buffer e sincronizador de tensão para saída analógica.
De modo similar às saídas analógicas, o casador de impedâncias é empregado em conjunto
com circuitos condicionadores nas entradas analógicas. Assim, como pode ser visto na figura
2.8 o circuito condicionador é projetado para adaptar uma faixa analógica de -10 V a +10 V a
faixa de trabalho das entradas analógicas que está entre 0 e 5 V. O valor de -10 V corresponde
a 0 V e o valor +10 V ao limite de 5 V. O buffer que é empregado após um divisor resistivo é
ligado a um somador inversor cuja finalidade é fornecer a grandeza analógica em valor positi-
vo. Após o somador é utilizado um amplificador em configuração inversora de ganho 0.5, a
saída do conjunto resulta na amplitude de saída desejada.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
18
Figura 2.8– Circuito com buffer e sincronizador de tensão para entrada analógica.
2.3.5.3 – ISOLADORES
São utilizados acopladores ópticos nas saídas de PWM com a finalidade de eliminar
tensões de modo comum com valores suficientemente elevados que possam vir a causar danos
ao sistema de aquisição. O componente empregado, 6N137, é capaz de isolar com total segu-
rança dois circuitos eletrônicos mantendo uma comunicação ou controle entre ambos. O iso-
lamento é garantido porque não existe contato elétrico entre o sinal emitido de PWM e a saída
do acoplador como é observado na figura 2.9.
Figura 2.9– Circuito isolador de PWM.
2.3.5.4 – FONTE SIMÉTRICA
Tendo em vista alimentar os circuitos das figuras 2.7 e 2.8 uma nova placa auxiliar de
fonte simétrica se junta ao kit de desenvolvimento composto pelos componentes de hardware
já descritos. Portanto, de acordo com a figura 2.10 os valores de -12V e +12V são fornecidos
CAPÍTULO 2 – Hardware de controle e aquisição de dados
19
a partir da construção de uma fonte simétrica de comum utilização que é formada por um reti-
ficador de onda completa e por reguladores de tensão para +12V e -12V.
Figura 2.10 – Fonte simétrica (-12V e +12V).
2.3.6 - INSTALAÇÃO DA PLACA
A instalação do sistema é dada de modo bastante simples. Quando o sistema é conecta-
do ao computador o usuário é interrogado quanto ao driver de instalação. O driver é um ar-
quivo fornecido na instalação do CCS C Compiler que se encontra na pasta de instalação
\...\PICC\Drivers e são os arquivos cdc9Xpt1.inf, cdc9Xpt2.inf, cdc_NTXP.inf e
cdc_NTXPVista.inf, respectivamente para os sistemas operacionais Windows 9xpt1, 9xpt2,
NT/XP e Vista. No término da instalação é possível fazer a comunicação USB com o sistema.
Ao conectar o dispositivo e concluir a instalação é adicionada uma nova porta serial ao com-
putador.
A observação de qual porta serial foi adicionada é essencial na escolha do parâmetro
que deve ser passado a função “inicializa(porta)”, função de software que será discutida no
próximo capítulo. O número da porta serial adicionada pode ser verificado através do “Geren-
ciador de dispositivos”, Painel de controle > Sistema > Hardware, no item “Portas (COM &
LPT)”.
O passo a passo da instalação pode ser observado nas figuras 2.11 a 2.16 para o Win-
dows XP. Para outros Sistemas Operacionais Windows o procedimento é bastante similar ao
demonstrado. Após a conexão do dispositivo USB da placa o Sistema Operacional interroga o
usuário conforme mostrado na figura 2.11. A última opção deve ser marcada e logo após o
botão “Avançar” deve ser pressionado.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
20
Figura 2.11 – Primeira tela de instalação da placa.
A janela para indicação do caminho a ser tomado pelo assistente de instalação aparecerá
logo em seguida, figura 2.12. A segunda opção deve ser marcada para uma indicação mais
rápida e precisa da pasta onde se encontra o Hardware.
Figura 2.12– Segunda tela de instalação da placa.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
21
A pasta onde se encontra o driver a ser instalado deve ser indicada na figura 2.13.
Figura 2.13 – Terceira tela de instalação da placa. Após encontrar o Hardware é comum que o Assistente encontre mais de uma opção
disponível. O usuário deve selecionar aquela solução compatível com seu Sistema Operacio-
nal, figura 2.14.
Figura 2.14 – Quarta tela de instalação da placa.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
22
Caso a instalação seja concluída com sucesso o usuário do sistema chegará à janela
mostrada na figura 2.15.
Figura 2.15 – Quinta tela de instalação da placa.
Como já dito anteriormente a porta COM serial instalada pode ser observada no
"Gerenciador de dispositivos", figura 2.16. Observar que a porta serial adicionada foi a
COM3 no exemplo.
Figura 2.16 – Gerenciador de dispositivos.
CAPÍTULO 2 – Hardware de controle e aquisição de dados
23
2.3.7 - DETALHES DE HARDWARE E COMUNICAÇÃO
Como pode ser observado no esquemático da figura 2.4 o microcontrolador apresenta
geração de clock através do oscilador primário, ou seja, um cristal externo de 20 MHz é loca-
lizado junto ao PIC18F4550. O dispositivo USB deve ser configurado para operar com 6
MHz, caso esteja configurado para transmissão Low Speed e 48MHz caso esteja configurado
para transmissão Full Speed. Neste trabalho é adotado o segundo tipo de comunicação, a de-
finição do tipo adotado ocorre através da configuração em software dos bits do dispositivo
central.
O PLL (Phase Locked Loop - Laço Travado em Fase) do dispositivo microcontrolado é
um módulo que provoca pré e pós-escalamento dos valores de clock do núcleo do microcon-
trolador e do circuito USB. Assim como o PLL existem também diretivas de configuração
denominadas USBDIV e NOUSBDIV projetadas para configurar o clock do dispositivo USB
integrado ao microcontrolador. O oscilador é definido aqui como HSPLL (oscilador a cristal
de alta velocidade com PLL habilitado). Os bits de configuração definidos neste sistema são:
USBDIV, PLL5 e CPUDIV1. Isso significa que é utilizado o módulo PLL pré escalar com a
configuração PPL5, onde o cristal externo de 20 MHz é divido por cinco gerando uma fre-
qüência de 4 MHz. Este valor é o adequado para a geração de 96 MHz no PLL. O sinal de 96
MHz é encaminhado para dois módulos diferentes, USBDIV, que divide o sinal por dois ge-
rando uma freqüência de 48 MHz para o módulo USB, e PLL pós escalar, onde o sinal é tam-
bém dividido por dois de acordo com a diretiva CPUDIV1 e é enviado para o núcleo do mi-
crocontrolador. Portanto, a configuração em código permite que microcontrolador e periférico
USB trabalhem com a mesma freqüência de 48 MHz (Santos, 2009) no modo Full Speed.
Outro detalhe importante visualizado na figura 2.4 é a alimentação do circuito da placa
de controle e aquisição através do próprio dispositivo USB. A vantagem deste tipo de alimen-
tação é a portabilidade gerada pela diminuição de circuitos presentes.
Um capacitor de 100uF é ligado entre a alimentação e o terra para que seja mantida uma
estabilidade na tensão. Do mesmo modo é feita a conexão do pino Vusb do PIC18F4550, aqui
deve ser empregada uma capacitância em torno de 470nF. O Vusb é uma entrada no micro-
controlador que funciona como alimentação dos resistores pull-up para a detecção da veloci-
dade da transmissão USB, isto é, detecta se o dispositivo opera em modo Full Speed ou Low
Speed, ele funciona ainda como regulador interno de tensão para o dispositivo USB. É válido
CAPÍTULO 2 – Hardware de controle e aquisição de dados
24
notar que o emprego do capacitor no Vusb é uma recomendação do fabricante do dispositivo
para manter a estabilidade do circuito USB interno ao PIC. O capacitor deve ser do tipo cerâ-
mico multicamada para uma melhor estabilidade na comunicação.
A possibilidade de simulação de comunicação USB fornecida a partir da versão 7.4 do
software Proteus facilitou e abreviou a fase de testes de hardware. Os arquivos de simulação
no Proteus se encontram na pasta de arquivos do kit de desenvolvimento e são disponibiliza-
dos ao usuário do sistema. A placa construída é mostrada na figura 2.17.
Figura 2.17 – Placa de controle e aquisição conectada ao computador.
2.4 - CONSIDERAÇÕES FINAIS
Neste capítulo foi apresentada a construção do hardware do kit de desenvolvimento cri-
ado para controle e aquisição em processos. Entende-se por hardware a “DAQ Board” discu-
tida aliada aos circuitos auxiliares de sincronismo. Existe um foco importante na caracteriza-
ção das funcionalidades da placa assim como também ocorre na implementação da comunica-
ção USB emulada serialmente. Detalhes importantes no estabelecimento da comunicação
USB são explanados, a localização do capacitor no pino Vusb é um exemplo. A instalação da
placa de aquisição é ainda descrita tendo em vista a formação completa de um conjunto de
informações que possibilitem a reprodução e utilização do material gerado.
CAPÍTULO 3 – Software e interface com o usuário
CAPÍTULO 3
SOFTWARE E INTERFACE COM O USUÁRIO
3.1 - CONSIDERAÇÕES INICIAIS
O presente capítulo tem por finalidade apresentar os softwares utilizados para estabele-
cer comunicação e controle com a placa de trabalho e os códigos criados que são fornecidos
na pasta de projeto junto a “DAQ Board”. Os arquivos de código fornecidos são funções pré-
definidas que simplificam a operação do sistema desenvolvido. Neste capítulo também é a-
bordada a elaboração de interfaces gráficas de software e sua respectiva aplicação.
3.2 – SOFTWARES PARA COMUNICAÇÃO DE DADOS
Existem possibilidades diversas para implementação e simulação de sinais de controle.
Os softwares empregados no controle digital são, em geral, compostos de ambientes gráficos
que facilitam a construção de modelos de sistemas simbolicamente. Dentre as opções disponí-
veis o pacote Matlab/Simulink bem como o Scilab/Scicos são ferramentas que podem ser uti-
lizadas para esta finalidade, destacando-se o Scilab por ser um software livre. As ferramentas
(toolboxes) que compõem os pacotes tornam-se atualmente mais atrativas em ambiente de
simulação.
Conforme pode ser observado na figura 3.1 o ambiente de desenvolvimento de progra-
mas propicia funcionalidades essenciais ao usuário. O toolbox de controle é constituído de
metodologias para desenvolvimento e análise de sistemas de controle tais como métodos para
representação de sistemas, análise de respostas em freqüência e resposta temporal, entre ou-
tras. O ambiente gráfico permite o desenvolvimento de sistemas de controle de forma gráfica
ou simbólica. Real Time, DLL’s etc., correspondem a rotinas geralmente desenvolvidas em
linguagens de alto nível que fazem a comunicação do sistema com hardware de aquisição e
processamento de informação. Outros toolboxes para as mais diferentes aplicações também
estão disponíveis (Filho; Reis, 2010).
CAPÍTULO 3 – Software e interface com o usuário
26
Figura 3.1 – Ambiente de desenvolvimento de programas de controle. Fonte – (Coelho et al., 2001).
Através do software de análise em comunicação com o hardware de aquisição é possí-
vel obter a resposta temporal, estudar a estabilidade, projetar controladores digitais e efetuar
tarefas de modelagem de um determinado sistema. O programa localizado em um computador
padrão também é responsável pela comunicação com o processo, monitoramento e aciona-
mento em ensaios de malha aberta e malha fechada de sistemas linear SISO (“single-input,
single output”) e MIMO (“multiple-input, multiple-output”).
3.3 - INTERFACE COM O PROGRAMA MATLAB
Tendo em vista o crescente uso do software Matlab na área de Controle de Processos e a
necessidade do fornecimento de comandos práticos para utilização do hardware, funções para
o pacote foram criadas para comunicação com a placa de aquisição de dados. Expõe-se aqui o
Matlab como uma ferramenta computacional de alto desempenho aplicada ao desenvolvimen-
to de controle de sistemas. O desenvolvimento de código nessa ferramenta é facilitado pela
linguagem de alto nível empregada no software e também pela possibilidade da análise da ve-
locidade de execução das funções através de recursos como, por exemplo, o “profiler”. O
“profiler” permite a visualização do tempo empregado para execução de cada linha de código
de um arquivo padrão do Matlab e posterior otimização do programa pelo aprimoramento das
funções que levam maior tempo de processamento.
As funções de comando da placa são disponibilizadas em uma pasta digital que acom-
panha a “DAQ Board” compreendendo assim um kit de desenvolvimento que pode ser facil-
mente reproduzido. Além dos comandos fornecidos em linguagem padrão do Matlab blocos
gráficos de interface também podem ser encontrados na pasta do pacote. Os últimos serão dis-
cutidos nas próximas seções.
CAPÍTULO 3 – Software e interface com o usuário
27
Os códigos estabelecidos utilizados na formulação de programas de controle ou somente
de aquisição envolvem as funcionalidades do hardware como, por exemplo, aquisição analó-
gica ou PWM (Pulse-Width Modulation). Existem ainda duas funções responsáveis pela inici-
alização e término da comunicação com o hardware, ou seja, o comando “inicializa (porta)”
deve ser chamado no prompt de comando do Matlab antes do início da transferência de dados
entre placa e computador e a função “finaliza” deve ser invocada ao término da comunicação.
As funções organizadas em forma de biblioteca e criadas através do próprio Matlab são
apresentadas de forma sucinta na tabela 3.1.
Tabela 3.1 - Funções de comunicação com o protótipo de controle e aquisição.
inicializa (porta)
inicializa.m
Função que permite inicialização da comunicação com a placa. O comando
deve ser executado antes do início de qualquer uma das funções abaixo. A função de-
ve obedecer à seguinte sintaxe: “inicializa(‘com1’)”.
finaliza
finaliza.m
Função que permite a correta finalização da comunicação com a placa. O
comando deve ser executado ao término da comunicação estabelecida com a placa.
Sintaxe de chamada no prompt de comando: “finaliza”.
envia_pm (canal, valor)
envia_pm.m
Função que permite enviar uma tensão entre 0 e 5 volts à uma das três saídas
analógicas da placa de aquisição de dados. Assim, o canal deve ser 1, 2 ou 3, e o valor
pode estar entre 0 e 5. Não retorna nenhum valor. A sintaxe deve ser da seguinte for-
ma: “envia_pm(1,4)”.
recebe_pm(canal)
recebe_pm.m
Função que permite ler (receber) uma tensão entre 0 e 5 volts de uma das seis
CAPÍTULO 3 – Software e interface com o usuário
28
entradas analógicas da placa de aquisição de dados. Assim, o canal deve ser 1, 2, 3, 4,
5 ou 6 , e o valor retornado é um float entre 0 e 5. A função deve ser implementada
como, por exemplo: “recebe_pm(1)”.
setpm_pwm_freq(freqüência, duty_cycle)
setpm_pwm_freq.m
Função que permite selecionar a freqüência de trabalho e o ciclo de trabalho dos
dois canais PWM ao mesmo tempo. As freqüências podem ser 3khz, 6khz, 12khz,
24khz, 48khz, 60khz, 96khz ou 120khz, passadas como parâmetros 3000, 6000, 12000
e assim por diante. O duty_cycle deve estar entre 0 e 1 onde 0 corresponde a um nível
mínimo de ciclo de trabalho de 0% e 1 a um nível máximo de 100%. Não retorna va-
lor. A sintaxe é da forma: “setpm_pwm_freq(6000,0.5)”.
setpm_pwm_duty(canal, duty_cycle, freqüência)
setpm_pwm_duty.m
Função que permite selecionar o duty cycle do canal de PWM, ou seja, a por-
centagem do período na qual se tem nível lógico alto. Assim, canal deve ser 1 ou 2 e
o duty_cycle deve estar entre 0 e 1 de forma similar a função anterior. As freqüências
podem ser 3khz, 6khz, 12khz, 24khz, 48khz, 60khz, 96khz ou 120khz, passadas como
parâmetros 3000, 6000, 12000 e assim por diante. Não retorna nenhum valor. A sinta-
xe de chamada deve ser similar a: “setpm_pwm_duty(2,0.6,3000)”.
recebepm_dig(canal)
recebepm_dig.m
Função que permite ler (receber) um valor de nível lógico alto ou baixo (5 ou 0
enviapm_dig(canal, valor )
enviapm_dig.m
Função que permite enviar um valor de nível lógico alto ou baixo (5 ou 0 volts
respectivamente) à um dos dois canais digitais de saída da placa de aquisição de da-
dos. Assim, os canais podem ser 1 ou 2 que correspondem aos pinos D0 e D1 e o va-
lor deve ser 1 ou 0. Não retorna nenhum valor. A sintaxe de chamada é da seguinte
forma: “enviapm_dig(1,0)”.
CAPÍTULO 3 – Software e interface com o usuário
29
volts respectivamente) à um dos três canais de entrada digital da placa de aquisição de
dados. Assim, o canal deve ser um inteiro 1, 2 ou 3 que correspondem aos pinos RE0,
RE1 E RE2 respectivamente. O valor retornado será 0 ou 1. De forma similar a função
recebe_pm.m um exemplo da sintaxe de chamada é dada por: “recebepm_dig(2)”.
3.4 – SIMULINK
Um dos fatores de grande interesse neste trabalho reside no ambiente Simulink do Matlab.
Nesse ambiente, os sistemas dinâmicos são tratados com base em funções de transferência a
partir de diagramas de bloco. Em um editor de modelos é possível desenvolver modelos de
sistemas dinâmicos utilizando-se de blocos provenientes de uma biblioteca padrão do softwa-
re ou criada em uma interface gráfica de fácil entendimento. O modelo criado pode ser simu-
lado de forma que o usuário possa acompanhar os valores de todas as variáveis envolvidas.
Essas variáveis podem ser visualizadas graficamente através de blocos do tipo “scope” ou po-
dem ser armazenadas na forma de matrizes para manipulação. São parâmetros padrões e que
devem ser definidos na janela de trabalho o tempo de simulação e o tempo de amostragem,
que determinam a velocidade de simulação e a exatidão da solução, à qual se pode chegar por
diversos métodos de integração. É importante notar que as simulações realizadas no Simulink
não se processam comumente em tempo real, característica a ser contornada ainda neste capí-
tulo.
A presente seção aborda de forma detalhada e em caráter tutorial o projeto de utilização
dos blocos de interface gráfica produzidos em ambiente Simulink alocados em uma nova pas-
ta que também é intrínseca ao kit fornecido ao usuário da plataforma. Portanto, visando facili-
tar a transferência de informação, dispõe-se de um Toolkit Simulink especialmente desenvol-
vido para a comunicação com a placa através do uso de ícones característicos de envio, rece-
bimento, relógio de tempo real etc. Com o Toolkit o controle digital pode ser desenvolvido
sem que haja preocupação com questões de hardware como, por exemplo, envio e recebimen-
to de dados para a placa de aquisição e controle. A figura 3.2 mostra os blocos projetados.
Antes de apresentar os blocos Simulink gerados é necessário que o usuário entenda o processo
de inicialização e finalização da “DAQ Board” que sempre deve ser executado no modelo de
trabalho criado.
CAPÍTULO 3 – Software e interface com o usuário
30
Figura 3.2 – Biblioteca de blocos Simulink fornecida com os arquivos de projeto.
Antes da simulação do modelo criado com os blocos fornecidos o usuário deve acessar o
menu File > Model Properties > Callbacks e chamar a função “inicializa(porta)” dentro da
moldura “Model start function”, conforme figura 3.3. A função “finaliza.m” também deve ser
escrita em “Simulation stop function”. O procedimento descrito permitirá a correta inicializa-
ção e finalização do modelo. As funções “envia_pm(canal,0)” bem como
“setpm_pwm_duty(canal,0, freqüência)” também podem ser adicionadas ao “stop” do modelo
como forma de retornar algum tipo de controle efetuado ao estado inicial anterior a simulação,
as funções devem ser chamadas quando se trabalha com saídas analógicas e de PWM respecti-
vamente. Um exemplo desenvolvido em Simulink do tipo “mdl”, extensão padrão, se encontra
na pasta digital fornecida já comentada junto à biblioteca de blocos.
CAPÍTULO 3 – Software e interface com o usuário
31
Figura 3.3 – Modelo teste Simulink com procedimento de inicialização e finalização do sistema.
Os blocos criados em ambiente Simulink possuem visual similar a aqueles produzidos
no projeto “Placa Mônica” desenvolvido em (Bittencourt, 2002). O diferencial reside na im-
plementação de código, a semelhança gráfica com a “Placa Mônica”, que se comunica via
porta paralela com o computador permite uma familiarização mais rápida com o protótipo de-
senvolvido aqui. As interfaces desenvolvidas são explicitadas individualmente a seguir. As
“S-functions” correspondentes aos blocos podem ser encontradas na pasta de projeto relacio-
nada ao Simulink do kit e devem ser copiadas no diretório padrão de trabalho para que pos-
sam ser utilizadas. A biblioteca dos blocos também pode ser encontrada na mesma pasta com
o nome “PM.mdl”.
3.4.1 – S-FUNCTIONS
A S-function é o código que descreve a atuação de um bloco do Simulink em uma lin-
guagem que pode se codificada em Matlab, C / C++, Fortran ou Ada. As S-functions dos blo-
cos deste projeto foram escritas em Matlab e, portanto foram guardadas em m-files de mesmo
nome das funções.
CAPÍTULO 3 – Software e interface com o usuário
32
A codificação em Matlab tem a forma de uma função:
[sys,x0,str,ts] = f (t,x,u,flag,p1,p2,...)
Onde os parâmetros correspondem ao descrito na tabela 3.2.
Tabela 3.2 - Parâmetros de uma S-function.
f Nome da S-function.
t Tempo corrente.
x Vetor de estado.
u Entrada do bloco.
flag Representa uma tarefa a ser desempenhada durante a simulação.
p1, p2, ... São parâmetros adicionais de entrada. Podem ser variáveis definidas no workspace do Ma-tlab ou um valor de entrada de um bloco no
Simulink.
sys É um argumento de retorno genérico. Os va-lores dependem da flag. (Ex: se flag = 3, sys contém a saída da S-function ou do bloco).
x0 Valores iniciais dos estados.
str Reservado para uso futuro. S-functions devem retornar a matriz vazia [].
ts Matriz com duas colunas contendo o interva-lo de amostragem.
Os códigos das S-functions construídas para cada bloco representativo do Simulink po-
dem ser encontradas no apêndice A.4. É interessante notar que nos códigos produzidos o pa-
râmetro “ts” não é utilizado já que o tempo de amostragem é definido como uma entrada em
cada bloco e é obtido pelo bloco de relógio digital do Simulink. Logo, internamente a cada
bloco o relógio digital é conectado e o tempo de amostragem é representado então pelo parâ-
metro de entrada “u”. Os parâmetros de entrada que devem ser configurados no Simulink co-
mo o canal ou duty cycle, por exemplo, são representados por “p1” e “p2”
CAPÍTULO 3 – Software e interface com o usuário
33
3.4.2 – SAÍDA ANALÓGICA
O bloco denominado “DA_pm” implementa a função “envia_pm.m”, presente na tabela
3.1, que permite enviar uma tensão entre 0 e 5 volts à uma das três saídas analógicas da placa
de aquisição de dados. O bloco pode ser visto na figura 3.5, um duplo clique no “DA_pm”
possibilita a escolha do parâmetro “Canal”, ou seja, o usuário digita em qual canal quer a sua
saída analógica como é observado na figura 3.4. A entrada do bloco é utilizada para definir o
valor de tensão na saída do canal. O “DA_pm” permite a manipulação dos componentes digi-
tal-analógico do hardware de controle e aquisição e pode ser aplicado como saída para um
determinado controle digital ou mesmo envio de sinal de referência. É importante notar que
as telas de interface de parâmetros são similares aquelas do projeto placa Mônica (Bittencourt,
2002), as configurações visuais são mantidas deste modo como forma de aproveitar a familia-
rização já existente do usuário com a placa de referência do projeto.
Figura 3.4 - O canal de trabalho deve ser escolhido através de um duplo clique no bloco.
Figura 3.5 - A entrada do bloco é utilizada para definir o valor analógico na saída do canal.
3.4.3 – ENTRADA ANALÓGICA
O bloco “AD_pm” executor da função “recebe_pm.m”, tabela 3.1, é responsável pela
leitura de um valor analógico obtido através do conversor A/D do microcontrolador localiza-
CAPÍTULO 3 – Software e interface com o usuário
34
do na placa de aquisição. A grandeza é disponibilizada ao usuário por meio de uma saída que
pode ser visualizada em um gráfico por exemplo. Um duplo clique no bloco da figura 3.7
possibilita a escolha dos parâmetros da figura 3.6. O canal de leitura deve ser escolhido em
“Canal A/D”, o tempo de amostragem também deve ser definido em “Sample Time”. O bloco
“AD_pm” é importante na captura de sinais analógicos de sensores e permite que estes valo-
res sejam trabalhados com as ferramentas de cálculo do Simulink.
Figura 3.6 - O canal receptor e o tempo de amostragem do bloco devem ser definidos.
Figura 3.7 - Exemplo de aplicação do bloco.
CAPÍTULO 3 – Software e interface com o usuário
35
3.4.4 – LEITURA DIGITAL
O bloco “RECEBE_digital_pm” implementa a função “recebepm_dig.m”, tabela 3.1.
Ou seja, o bloco efetua a leitura de valores das portas digitais do protótipo de aquisição. Os
parâmetros passados a interface da figura 3.8 são semelhantes a aqueles passados na figura
3.6. A saída do “RECEBE_digital_pm” representa o valor aquisitado. As entradas digitais são
importantes em algumas situações comuns em eletrônica como a captura de sinais de sensores
ou cascateamento de microntroladores, por exemplo. Existem sensores que implementam um
protocolo de comunicação próprio e fornecem informações digitais donde se obtém a necessi-
dade de entradas e saídas que possibilitem esse tipo de comunicação. O SHT75 da empresa
Sensirion é um tipo de sensor digital que envia dados binários quando em comunicação com
um microcontrolador (www.sensirion.com/en/01_humidity_sensors).
Figura 3.8 - Exemplo de aplicação da recepção digital. De forma similar ao bloco “AD_pm” o tempo de amos-
tra e o número do canal também devem ser configurados.
3.4.5 – SAÍDA DIGITAL
A interface “ENVIA_digital_pm” implementa a função “enviapm_dig.m”, tabela 3.1, e
é responsável pelo envio de valores digitais, 0 ou 1, que são as saídas responsáveis pelo for-
necimento de grandezas em nível baixo ou alto da “DAQ Board”. O bloco é observado na fi-
gura 3.10 enquanto os parâmetros de ajuste canal e tempo de amostragem na figura 3.9. Esse
CAPÍTULO 3 – Software e interface com o usuário
36
bloco é essencialmente importante em acionamentos que exigem uma saída em nível alto ou
baixo.
Figura 3.9 - Configurações do bloco “ENVIA_digital_pm”.
Figura 3.10 - Aplicação do bloco de envio de valores digitais. A entrada deve ser 0 ou 1 para nível alto ou baixo
digital.
3.4.6 – PWM
O “PWM_pm” executor da função “setpm_pwm_duty.m”, tabela 3.1, possibilita a con-
figuração de um sinal PWM de saída através do ajuste dos parâmetros canal, freqüência e ci-
clo de trabalho. O ciclo de trabalho ou duty cycle é escolhido na entrada do bloco e varia entre
0 e 1 assim como ocorre na função que este implementa, figura 3.12. Os parâmetros a serem
definidos freqüência, canal e tempo de amostra são acessados por um duplo clique na figura e
são observados na figura 3.11.
CAPÍTULO 3 – Software e interface com o usuário
37
Figura 3.11 - Configurações do bloco de PWM.
Figura 3.12 - Na entrada do bloco o duty cycle desejado deve ser aplicado.
3.4.7 – RELÓGIO DE TEMPO REAL
Como já discutido anteriormente um dos grandes problemas de simulação é a distinção entre
tempo de simulação e tempo real de processo, ou seja, a simulação se torna mais rápida que o proces-
so. Tendo em vista tal situação, uma solução prática foi adotada em ambiente Simulink para obtenção
de ensaios de acordo com o tempo real de execução. O processo para gerar o relógio de tempo real,
figura 3.13, é bastante simples e é descrito no parágrafo a seguir.
Na pasta relacionada ao Simulink presente junto ao kit de projeto existe um código em lingua-
gem C denominado “rtclock.c”, a este código deve ser aplicado o comando “mex” do Matlab como
forma de produzir um arquivo “mex” padrão do software. Logo após este procedimento o arquivo
“rtc.m” também presente na pasta mencionada deve ser executado. A seqüência descrita produzirá um
arquivo modelo do Simulink “rtc”, o modelo possuirá o relógio de tempo real. O bloco criado permite
ao modelo rodar em um tempo aproximadamente real onde a tolerância se adéqua aos objetivos do
sistema desenvolvido. A figura 3.14 mostra os parâmetros que devem ser passados, tempo de sincro-
nismo e tolerância entre o tempo real e de simulação. A interface deve ser copiada para o modelo de
simulação do usuário.
CAPÍTULO 3 – Software e interface com o usuário
38
Figura 3.13 - Leitura do tempo real do Sistema Operacional e sincronismo deste com o sistema.
Figura 3.14 – Parâmetros do “Real-time Clock”.
3.5 – GUI
Uma interface GUI (Graphical User Interface) do Matlab foi criada de modo que even-
tuais testes possam ser efetuados na placa de maneira bastante intuitiva. Conforme é visuali-
zado na figura 3.15, todas as funcionalidades da placa são abrangidas e o envio e recepção de
dados se tornam simples devido a configuração gráfica. A interface observada na figura 3.15
é útil porque possibilita testes rápidos das funcionalidades do sistema como, por exemplo, ve-
rificar o recebimento de dados de um sensor intrínseco ao processo.
CAPÍTULO 3 – Software e interface com o usuário
39
Figura 3.15 – Interface de manipulação da placa de controle e aquisição.
A interface é dividida em cinco agrupamentos de funções e possui o procedimento de
inicialização e finalização similar ao já comentado, apenas com a diferença de que tal proce-
dimento é realizado agora por botões no canto inferior da tela. O quadrante superior esquerdo
permite a manipulação dos dois canais de PWM onde é possível ativar individualmente ou
coletivamente os canais. O quadrante superior direito realiza a leitura analógica dos canais
A/D pelo pressionamento dos botões. O quadrante inferior esquerdo está relacionado à saída
analógica e o direito a um ajuste do duty cycle do PWM de acordo com os níveis de tensão
lido em duas das entradas analógicas da placa. O agrupamento inferior da tela corresponde ao
trabalho com as entradas e saídas digitais.
3.6 – TEMPO DE AMOSTRAGEM
O tempo de amostragem é uma discussão importante e serve como critério de avaliação
de desempenho das “DAQ Boards”. O tempo de amostragem obtido por software varia de a-
cordo com o a capacidade de processamento de cada computador, pois este tempo é o período
gasto pelo Matlab para executar cada iteração de aquisição, o que torna o tempo de amostra-
gem variável também na execução do programa.
CAPÍTULO 3 – Software e interface com o usuário
40
Os testes realizados em Simulink apresentaram ótimos resultados com um tempo de
amostragem em torno de 30 ms com a ressalva de que esse período pode ser ainda minimiza-
do. Um sistema computacional é considerado como um sistema em tempo real se ele proces-
sar os cálculos em períodos de amostragem bem menores que a dinâmica da planta, ou seja, a
sua constante de tempo deve ser grande em relação ao tempo de amostragem obtido (Teixeira,
2008). Considerando que em um motor o tempo de subida à entrada degrau é de aproximada-
mente 200 ms e em um sistema de tanque este tempo é de 1 s pode-se afirmar que o protótipo
desenvolvido se adéqua muito bem a processos laboratoriais e industriais.
3.7 – INTERFACE COM O PROGRAMA SCILAB
De forma similar ao programa Matlab, no software livre Scilab foram desenvolvidas
funções de comunicação com a placa de aquisição de modo que o protocolo de comunicação
permanecesse o mesmo. Portanto, as mesmas funções da tabela 3.1 existem no programa em
questão com a mudança da sintaxe de chamada apenas na função de inicialização. No softwa-
re livre é necessária também a execução de um procedimento padrão para o carregamento das
funções conforme descrito a seguir.
Na pasta de bibliotecas Scilab fornecida junto ao kit de desenvolvimento o usuário deve
copiar todos os arquivos para o diretório padrão do Scilab. No console do software devem ser
executados os seguintes arquivos internos a pasta “serial-port-master/serial_port” denomina-
dos “loader.sce” e “builder.sce”. Após a execução dos arquivos o diretório corrente do conso-
le deve ser retornado para o diretório padrão inicial através do menu “Arquivo - > Alterar o
diretório atual”. De volta ao diretório padrão a função “loadall.sce” deve ser executada para o
carregamento de todas as funções de comunicação. Finalizado o procedimento o usuário pode
então trabalhar normalmente com as funções. É importante notar que na função “iniciali-
za(‘comxx’)” a sintaxe agora é “inicializa(5)”, onde cinco é a porta de comunicação no caso.
A grande vantagem do Scicos em relação ao Matlab é a apresentação de maneira aberta
de ferramentas de simulação e comunicação externa com a possibilidade de aprimoramento
do software através dos próprios usuários.
CAPÍTULO 3 – Software e interface com o usuário
41
3.8 – SCICOS
O projeto gráfico similar ao desenvolvido no Simulink quando desenvolvido no Scicos
ou Xcos como é chamado nas versões mais modernas do pacote Scilab é interessante por ser
produzido em um software livre característico. No software abordado, elementos não originá-
rios ao programa podem ser criados em forma de toolbox pelos usuários e adicionados a plata-
forma sem grandes dificuldades. É observável no complemento Scicos o fornecimento de
“Palettes”, bibliotecas, que possibilitam a implementação de código dentro de diagramas de
blocos. Dentro das “Palettes” se encontram alguns blocos que permitem a execução de fun-
ções construídas na linguagem Scilab ou outra tal como a linguagem C, são exemplos o “sci-
func_block_m” e o “generic_block3” da versão 5.2.2. Estes blocos pré-existentes permitem a
alocação de funções computacionais sem que o usuário necessite se preocupar com funções de
interface. Logo, o Scicos é vantajoso por facilitar a implementação de código do projetista em
uma interface já fornecida junto ao programa. A figura 3.16 representa um exemplo de aquisi-
ção de grandezas analógicas desenvolvido no Scicos que se aproveita de um bloco já existen-
te, o “scifunc_block_m”, para alocação do código de captura dos valores analógicos da placa
mencionado na seção anterior.
Figura 3.16 – Esquema simples de aquisição analógica a partir de bloco encontrado na biblioteca do Scicos.
Embora bastante evoluído e competitivo se comparado ao Simulink o Scicos apresenta
ainda erros de execução notórios que dificultam o desenvolvimento de projeto. Portanto, erros
gráficos na interface e na configuração das portas dos blocos impossibilitam um desenvolvi-
mento mais prático com o Scicos. Por ser um software livre a expectativa é que o programa se
desenvolva ainda mais rapidamente do que já cresceu no lançamento de suas versões e, por-
tanto a sua utilização se torne mais cômoda para o usuário. O que se desenvolveu aqui em re-
CAPÍTULO 3 – Software e interface com o usuário
42
lação ao Scicos foram esquemas como o da figura 3.16 que podem ser também construídos
pelo usuário do kit a partir das funções desenvolvidas. Observa-se uma diferença em relação
ao projeto no Simulink em que se desenvolveram blocos personalizados com diferentes fun-
cionalidades.
3.9 – CONSIDERAÇÕES FINAIS
Nesse capítulo foram abordados tópicos relacionados ao software do kit elaborado que
consiste em uma placa de controle e aquisição e dos códigos de controle onde se inserem fun-
ções que exploram os atributos da placa, interface gráfica de comando e blocos gráficos para
implementação de diagrama de blocos. O capítulo relatou as experiências e o trabalho produ-
zido utilizando os programas Matlab e Scilab bem como seus complementos Simulink e Sci-
cos. No decorrer do texto é possível notar que é dada uma grande importância as interfaces
criadas para desenvolvimento de diagrama de blocos, isso ocorre pela comum opção dessas
ferramentas nos diversos setores de controle de processos. Uma discussão sobre sistemas de
aquisição de tempo real e como o projeto explanado resolve os problemas de compatibilização
entre tempo real de processo e tempo computacional é ainda realizada.
CAPÍTULO 4 – Implementações Práticas
CAPÍTULO 4
IMPLEMENTAÇÕES PRÁTICAS
4.1 - CONSIDERAÇÕES INICIAIS
Este capítulo apresenta as possibilidades básicas de trabalho com o já desenvolvido nos
capítulos anteriores. Implementações gráficas e manuseio de código são abordados com a fi-
nalidade de ilustrar a metodologia prática de operação no computador que resulta nas opera-
ções da “DAQ Board” sobre um sistema (planta). O kit educacional CC Servo Trainer ED-
4400B é tomado como referência de planta para a explanação do proposto. A análise das res-
postas gráficas obtidas é ainda discutida revelando perspectivas de avaliação de índices de
desempenho.
4.2 – AMBIENTE DE TRABALHO GRÁFICO
No projeto das malhas de controle é interessante que sempre um ambiente de simulação
seja construído antes da efetivação da aplicação prática. A simulação permite que o projetista
possa então realizar a tarefa proposta, ou seja, o projeto de um controlador para o processo
estimado, de modo que sua malha seja testada quanto aos índices de desempenho previamente
estabelecidos sem que o controle seja verdadeiramente aplicado a planta.
Após a simulação do processo, o projetista deve então verificar na prática os resultados
obtidos na simulação. Para a implementação do sistema de controle o usuário do kit de desen-
volvimento pode utilizar os blocos de comunicação com a placa de controle e aquisição de
dados apresentados no capítulo anterior.
Um exemplo de sistema de controle em que a placa desenvolvida se aplica muito bem
no aspecto educacional é o kit didático CC Servo Trainer ED-4400B que é composto por mó-
dulos de funções distintas. O principal elemento dentre os dispositivos é o módulo servo mo-
tor que é um motor CC com um redutor e um taco gerador incorporado (Sousa, 2009). Os e-
lementos do conjunto didático são descritos a seguir:
CAPÍTULO 4 – Implementações Práticas
44
U-156B – Fonte de alimentação CC (± 15V );
U-154B – Driver amplificador / Potência de saída: 15V, 0.7A (10W) máximo;
U-161B – Servo motor /Motor: 12Vcc; 4,5W / Taco Gerador: Aproximadamente 3Vp-
p/4000rpm;
U-155B – Unidade taco detector: Produz polaridade orientada e tensão CC proporcional
a velocidade pelo processamento da saída do taco gerador através de um conversor de
freqüência para tensão e um amplificador. Entrada: CA 1 ~ 1200Hz, 0 ~ 3V; Saída: 0 ~
±15Vcc;
U-159B – Medidor de RPM (4000rpm máximo);
U-163B – Freio Magnético: Fornece carga para o motor.
A figura 4.1 representa um ambiente de trabalho em Simulink criado para o controle de
velocidade do servo motor pertencente ao equipamento educacional. Na representação, tem-se
a seguinte seqüência em malha fechada: o software a partir dos blocos de comunicação exter-
na envia um sinal para o motor através de uma das saídas analógicas da placa de controle e
aquisição e a unidade taco detector mede a velocidade da planta convertendo-a em nível de
tensão, o valor de tensão é capturado por uma das entradas analógicas da placa de aquisição
sendo este o último passo para o fechamento da malha. É importante notar que o projeto deve
ser sempre simulado antes da aplicação real do controle. O ambiente Simulink ou o seu cor-
respondente Scicos são responsáveis pela inserção do bloco controlador junto ao processo real
e também pela disponibilização dos resultados do experimento.
CAPÍTULO 4 – Implementações Práticas
45
Figura 4.1 – Ambiente de controle PID da velocidade de um servo motor.
A utilização da plataforma criada neste trabalho tem como objetivo final a obtenção do
comportamento real do sistema quando submetido a algum método de controle e para isto
permite a visualização gráfica do comportamento citado e a obtenção de respostas onde diver-
sos índices de desempenho podem ser verificados, a visualização dos gráficos de resposta é
obtida por meio de blocos “scope” do Simulink. A figura 4.2 ilustra a montagem de um siste-
ma em malha fechada com os módulos do kit ED-4400B de acordo com (Teixeira, 2008).
Figura 4.2 – Planta para controle de velocidade do servo motor do kit ED4400B. Fonte – (Teixeira, 2008).
CAPÍTULO 4 – Implementações Práticas
46
A figura 4.3 ilustra o controle proporcional do motor CC do kit Servo Trainer imple-
mentado em software com os blocos de saída e entrada analógica presentes. As entradas e saí-
das em software comandam seus correspondentes na placa de aquisição e o processo tem co-
mo complemento, para fechamento da malha, a figura 4.2 que representa a planta do processo.
É importante observar que as ferramentas gráficas fornecidas pelos softwares de con-
trole em conjunto com o kit criado possibilitam a avaliação do controle efetuado e a melhoria
do sistema caso esta seja necessária. Na figura 4.4 é possível observar com clareza caracterís-
ticas intrínsecas ao controle proporcional como o erro em regime permanente, por exemplo. A
resposta ilustrada evidencia uma referência de tensão em 2,5V, o controle enviado à planta
que é representado pelo sinal com maior variação de amplitude e a resposta do sistema.
Figura 4.3 – Esquema de controle proporcional do sevo motor do kit ED4400B.
CAPÍTULO 4 – Implementações Práticas
47
Figura 4.4 – Controle proporcional aplicado ao servo motor.
Os sinais gráficos ilustrados na figura 4.4 foram obtidos com um tempo de aquisição de
30ms por amostra no Simulink. Os resultados gráficos demonstram a importância da placa de
controle e aquisição aliada às ferramentas de software. No esquema da figura 4.3 é inserido
ainda um bloco segurador de ordem zero, ou “zero-order hold” do inglês, muito comum em
sistemas controlados por computador com a finalidade de garantir a reconstrução de sinal dis-
creto. Por meio do uso do dispositivo Zero-Order Hold, conforme a figura 4.5, o sinal analó-
gico amostrado no bloco em intervalos periódicos é mantido constante durante o tempo de
amostragem, o que produz uma aproximação do sinal analógico em forma de degraus (Nise,
2004). O período de amostragem do bloco deve ser compatível com os períodos de todos os
outros blocos definidos no modelo.
Figura 4.5 – Sinal contínuo e saída discretizada equivalente do sinal fornecida pelo Zero-Order Hold.
CAPÍTULO 4 – Implementações Práticas
48
Na figura 4.6 é demonstrada a resposta de um controle PI para o esquema montado na
figura 4.1, o método de sintonia utilizado é o de (Ziegler; Nichols, 1942). É notável na figura
4.6 a correção do erro existente no controle proporcional em regime permanente e um maior
tempo de assentamento do que o exibido na figura 4.5, o controle é representado pela onda de
maior amplitude enquanto a de menor representa a resposta do sistema. A comparação entre
os tipos de controle através de respostas gráficas e a possibilidade de implementações rápidas
de métodos variados revelam a real finalidade e motivação deste trabalho.
Figura 4.6 – Controle PI aplicado ao servo motor.
Outra aplicação do kit de desenvolvimento se coloca ainda sobre a possibilidade de mo-
delar processos variados. A figura 4.7 ilustra a resposta ao degrau do motor já descrito e reve-
la a possibilidade de uma modelagem de primeira ordem através dos resultados obtidos com a
placa de controle e aquisição em conjunto com o software.
CAPÍTULO 4 – Implementações Práticas
49
Figura 4.7 – Resposta ao degrau da planta para posterior modelagem.
4.3 – CÓDIGO PARA MODELAGEM DE UM SISTEMA
Embora a aquisição e controle através de interfaces gráficas seja um elemento facilita-
dor em meio ao manuseio e comunicação das plantas tanto na área educacional como fora de-
la, o trabalho por meio de código em nível de software se torna fundamental em determinadas
situações e é também preferido por vários usuários.
Tomando o pressuposto acima como base é necessário o desenvolvimento de um mode-
lo geral de código que sirva como base para implementações mais complexas utilizando os
elementos criados disponíveis. Portanto, o escopo de um programa simples de aquisição que
pode ser aproveitado em um ensaio de resposta ao degrau é evidenciado a seguir, os comentá-
rios das funções em linguagem Matlab revelam o caráter de cada função.
Tabela 4.1 - Código de aquisição.
% Condições iniciais
n = 50; ts = 0.1;
% Sinal de entrada
u(1:n) = 3;
% Inicialização da placa
inicializa('com6');
% Simulação
for k = 1:n
CAPÍTULO 4 – Implementações Práticas
50
% Recebe saída da planta
y(k) = recebe_pm(1);
% Envia sinal de entrada
envia_pm(3,u(k));
pause(ts);
end
% Finalização da placa
finaliza;
% Resultados
t = 1:n;
plot(t,y(t),t,u(t)),title('saída e entrada'),xlabel('amostras');
O código da tabela 4.1 é fonte do acumulo de funções geradas no decorrer do trabalho
aliado a funções próprias do Matlab. A união entre as ferramentas próprias de cada software e
o material desenvolvido em projeto é o que torna a manipulação de hardware através do com-
putador uma atividade intuitiva e simplificada.
O processo de aquisição de dados é uma operação básica em meio aos processos e sua
aplicação se estende desde tarefas mais simples como medir pequenas tensões até missões
mais complicadas como o controle de uma planta industrial. O processo básico de aquisição é
sempre similar exceto pela diferença entre os elementos utilizados e a complexidade destes. O
equipamento discutido aqui se adapta aos vários tipos de processos e é flexível em relação aos
modos de captura de sinal. Portanto, o emprego da plataforma criada se torna recomendável
para uma gama variada de aplicações.
4.4 – CONSIDERAÇÕES FINAIS
As formulações e esquemas estudados nesse capítulo revelaram as alternativas existen-
tes relacionadas à consecução de um determinado tipo de controle ou obtenção de dados. A
formulação de código introduziu a base para programas mais complexos e a exemplificação
da disposição dos blocos gráficos reiterou a simplicidade de implementação em ambiente Si-
mulink.
CAPÍTULO 5 - Conclusão
CAPÍTULO 5
CONCLUSÃO E TRABALHOS FUTUROS
Este trabalho foi realizado com o objetivo de desenvolver um protótipo microcontrolado
de controle e aquisição de dados com alternativas diversificadas de comando por software. O
kit desenvolvido no presente trabalho composto por uma “Data Acquisition Board” e pelos
arquivos de códigos e modelos computacionais se mostrou eficiente em diversos quesitos co-
mo, por exemplo, portabilidade, estabilidade, funcionalidades e velocidade. As configurações
do sistema construído possibilitam a perfeita execução de controle de sistemas dinâmicos e
atendem a exigências de baixo custo. Isto, porque o sistema é de fácil reprodução e pode ser
produzido dentro de universidades quando voltado para fins educacionais.
A montagem da plataforma mostrou adaptabilidade a uma série de aplicações e tanto
bom emprego didático como industrial. A vantagem do sistema desenvolvido reside na aglo-
meração de funcionalidades de hardware em uma única placa de aquisição e controle de baixo
custo que se equipara a soluções comerciais existentes produzidas em escala industrial. O
tempo de amostra alcançada pela placa supre adequadamente a implementação de processos
considerados rápidos como é o caso do controle do motor CC e permite a obtenção de respos-
tas passíveis de análise dos índices de desempenho. Assim, os objetivos iniciais e condições
impostas de baixo custo, funcionalidade e operação são atendidos com êxito no projeto.
A explanação detalhada do hardware projetado revelou alguns aspectos importantes que
tornam o protótipo de aquisição uma ferramenta bastante interessante. A comunicação USB
emulada serialmente entre o computador e o PIC18F4550 simplificou consideravelmente a
transferência de informação através da fácil codificação, aproveitamento de drivers e uso de
biblioteca de funções já existentes do microcontrolador. Esta simplificação resulta em uma
facilitação da cópia do esquema proposto. No capítulo 2, a descrição em forma de tutorial da
instalação da placa permitiu a familiarização do usuário com o kit trabalhado.
No decorrer do trabalho é possível perceber o foco sobre as interfaces criadas para de-
senvolvimento de diagrama de blocos, isso ocorre pela preferência dessas ferramentas sobre
as outras nos diversos setores onde o uso de controle de processos é corrente. Questões rela-
cionadas a sistemas de aquisição de tempo real foram também levantadas e um bloco foi em-
pregado como forma de resolver problemas de compatibilização entre tempo real de processo
e tempo computacional no Simulink.
CAPÍTULO 5 - Conclusão
52
No último capítulo o leitor ganha intimidade com o software de projeto por meio do es-
boço de formulações práticas. São exemplificados modelos gráficos assim como um código
base de aquisição.
Finalmente, com uma configuração simples composta por computador e placa de aqui-
sição e controle se conseguiu um protótipo sólido para o desenvolvimento de diversos modos
de controle, treinamento educacional e interfaceamento com diversificados tipos de plantas e
sensores.
Para trabalhos futuros é proposto o desenvolvimento de interfaces no software Scicos
semelhantes aquelas existentes no ambiente Simulink, o estudo de formas para melhorar a ve-
locidade de aquisição via USB através dos softwares trabalhados e ainda o teste da plataforma
com outras plantas.
Referência Bibliograficas
REFERÊNCIAS BIBLIOGRÁFICAS
Bittencourt, F.; Projeto e desenvolvimento de uma Placa de Controle e Aquisição de Dados
Multivariável via porta paralela do PC. 20 f. Trabalho desenvolvido no departamento de
Engenharia da UFSC. Universidade Federal de Santa Catarina, 2002.
Coelho, A.A.R., Almeida, O.M., Santos, J.E.S., Sumar R.R. e Bittencourt F.; Da teoria à
prática: projeto motor taco-gerador, 29º Congresso Brasileiro de Ensino de Engenharia,
2001, Porto Alegre - Brasil, PP. 162–169.
Datasheet do Sensor SHT75 disponível em
http://www.sensirion.com/en/01_humidity_sensors/06_humidity_sensor_sht75. Acessado
em 02/11/2010.
Datasheet do microcontrolador PIC18F4550 disponível em
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010300. Acessado
em 03/11/2010.
Filho, F.L.M.C., Reis, L.L.N.; Projeto de implementação de sistema de baixo custo aplicável
em aulas práticas de controle de processos, 18º Congresso Brasileiro de Automática, 2010,
Bonito, MS - Brasil.
França, J.A., Sistemas de aquisição de dados baseados em microcontrolador. Campina
Grande, Paraíba, Brasil, Junho de 1997. Dissertação de Mestrado, Universidade Federal
da Paraíba.
Nise, N.S.; Control Systems Engineering, 2004, 4ª ed. Wiley International Edition.
Santos, L.S.L.; Sistema de comunicação USB com microcontrolador, 69 f. Trabalho de
Conclusão de Curso (Graduação em Engenharia da Computação) – Escola Politécnica de
Pernambuco, 2009.
Referência Bibliograficas
54
Sousa, M.R.; Estimação utilizando mínimos quadrados (MQR) e controle de velocidade do
motor DC Servo Trainer. 63 F. Trabalho de Conclusão de Curso (Graduação em
Engenharia Elétrica) – Universidade Federal do Ceará, 2009.
Teixeira, H.T.; Desenvolvimento de um ambiente de controle e monitoramento em tempo real
usando o Matlab e a placa de aquisição NUDAQ PCI-9112. 67 F. Trabalho de Conclusão
de Curso (Graduação em Engenharia Elétrica) – Universidade Federal do Espírito Santo,
2008.
Ziegler, J.G., Nichols, N.B.; Optimum settings for automatic controllers, 1942, Trans. ASME,
v64, pp.759-768.
APÊNDICE A CÓDIGOS DESENVOLVIDOS NO TRABALHO
56
A.1 - CONSIDERAÇÕES INICIAIS
No presente apêndice são apresentados os códigos de projeto que tornaram o
desenvolvimento da plataforma elaborada possível. Dentre os programas é possível
encontrar o programa principal do microcontrolador PIC18F4550 bem como as funções
de comunicação escritas no software Matlab. As funções desenvolvidas para o software
Scilab são bastante similares as apresentadas aqui.
A.2 – ARQUIVOS DE CÓDIGO EM C PARA PROGRAMAÇÃO DO
MICROCONTROLADOR
usb_pm_teste.c (Programa principal)
usb_biblioteca.c (Funções complementares)
usb_cdc.h (Adiciona porta COM ao PC na
comunicação com CDC)
usb_desc_cdc.h (Definição dos descritores)
USB.c (Funções para USB)
pic18_usb.c (Funções para comunicação pic -
USB)
18F4550.h (Definições do microcontrolador)
stdlib.h (Driver intrínseco ao CCS)
stddef.h (Driver intrínseco ao CCS)
string.h (Driver intrínseco ao CCS)
ctype.h (Driver intrínseco ao CCS)
driver_tlc5615cp.c (Driver para comunicação com o
conversor digital-analógico)
57
A.3 – PROGRAMA PRINCIPAL DO MICROCONTROLADOR PIC18F4550
(“usb_pm_teste.c”)
// Inclue a biblioteca basica do PIC 18F4550 #include <18F4550.h> #include <stdlib.h> #use delay(clock=48000000) // Inclue a biblioteca de funções #include <usb_biblioteca.c> #include <driver_tlc5615cp.c>//Driver para os DAs. // Atribui os Bits de configuração e define o clock do nucleo do microcontrolador #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,PUT int8 value1=0,value2=0,reg1,reg2,value=0,sel=0,stk=0,select=0; float value3=0,value4,value5,value6,value7,value8,val3,val4,val5,val6,val7,val8; void main() { int opcao; // Declaração de variaveis unsigned long int cont = 0; DA1_inicio(); DA2_inicio(); DA3_inicio(); // Inicializa, configura e enumera o dispositivo USB usb_cdc_conectar(); do { usb_task(); if (usb_enumerated()) // Verifica se o dispositivo está pronto { // Simula uma rotina de um processo qualquer usual de microcontrolador cont++; // Verifica se existe caractere para recepção if(usb_cdc_kbhit()) { // Recebe um hexadecimal opcao = gethex_usb(); if (opcao ==01) //função set_pwm_duty(canal,duty,freq). { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*16*250= 333.3us us or 3 khz setup_timer_2(T2_DIV_BY_16, 250, 1); set_pwm1_duty(value);
58
} if (opcao ==02) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*16*125= 166.67us us or 6 khz setup_timer_2(T2_DIV_BY_16, 125, 1); set_pwm1_duty(value); } if (opcao ==03) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*4*250= 83.3us us or 12 khz setup_timer_2(T2_DIV_BY_4, 250, 1); set_pwm1_duty(value); } if (opcao ==04) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*4*125= 41.67us us or 24 khz setup_timer_2(T2_DIV_BY_4, 125, 1); set_pwm1_duty(value); } if (opcao ==05) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*250= 20.83us us or 48 khz setup_timer_2(T2_DIV_BY_1, 250, 1); set_pwm1_duty(value); } if (opcao ==06)
59
{ while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*200= 16.67us us or 60 khz setup_timer_2(T2_DIV_BY_1, 200, 1); set_pwm1_duty(value); } if (opcao ==07) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*125= 10.42us us or 96 khz setup_timer_2(T2_DIV_BY_1, 125, 1); set_pwm1_duty(value); } if (opcao == 8) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*100= 8.333us us or 120 khz setup_timer_2(T2_DIV_BY_1,100, 1); set_pwm1_duty(value); } if (opcao ==9) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*16*250= 333.3us us or 3 khz setup_timer_2(T2_DIV_BY_16, 250, 1); set_pwm2_duty(value); } if (opcao ==10) {
60
while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*16*125= 166.67us us or 6 khz setup_timer_2(T2_DIV_BY_16, 125, 1); set_pwm2_duty(value); } if (opcao ==11) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*4*250= 83.3us us or 12 khz setup_timer_2(T2_DIV_BY_4, 250, 1); set_pwm2_duty(value); } if (opcao ==12) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*4*125= 41.67us us or 24 khz setup_timer_2(T2_DIV_BY_4, 125, 1); set_pwm2_duty(value); } if (opcao ==13) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*250= 20.83us us or 48 khz setup_timer_2(T2_DIV_BY_1, 250, 1); set_pwm2_duty(value); } if (opcao ==14) { while(!usb_cdc_kbhit()) {cont=cont+1;}
61
value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*200= 16.67us us or 60 khz setup_timer_2(T2_DIV_BY_1, 200, 1); set_pwm2_duty(value); } if (opcao==15) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*125= 10.42us us or 96 khz setup_timer_2(T2_DIV_BY_1, 125, 1); set_pwm2_duty(value); } if (opcao == 16) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*100= 8.333us us or 120 khz setup_timer_2(T2_DIV_BY_1,100, 1); set_pwm2_duty(value); } if (opcao==17) //função recebe_pm(canal), leitura analog. { setup_port_a(AN0); setup_adc(ADC_CLOCK_DIV_4); set_adc_channel(0); //Especifica qual o canal que será lido pela função read_adc(). value3 = read_adc(); val3 =(5*value3)/255; printf(usb_cdc_putc, "%1.2f", val3); } if (opcao==18) //função recebe_pm(canal), leitura analog. { setup_port_a(PIN_A1); setup_adc(ADC_CLOCK_DIV_4); set_adc_channel(1); //Especifica qual o canal que será lido pela função read_adc(). value4 = read_adc(); val4 =(5*value4)/255; printf(usb_cdc_putc, "%1.2f", val4); }
62
if (opcao==19) //função recebe_pm(canal), leitura analog. { setup_port_a(PIN_A3); setup_adc(ADC_CLOCK_DIV_4); set_adc_channel(3); //Especifica qual o canal que será lido pela função read_adc(). value5 = read_adc(); val5 =(5*value5)/255; printf(usb_cdc_putc, "%1.2f", val5); } if (opcao==20) //função recebe_pm(canal), leitura analog. { setup_adc_ports(AN0_TO_AN7); setup_adc(ADC_CLOCK_DIV_4); set_adc_channel(5); //Especifica qual o canal que será lido pela função read_adc(). value6 = read_adc(); val6 =(5*value6)/255; printf(usb_cdc_putc, "%1.2f", val6); } if (opcao==21) //função recebe_pm(canal), leitura analog. { setup_adc_ports(AN0_TO_AN7); setup_adc(ADC_CLOCK_DIV_4); set_adc_channel(6); //Especifica qual o canal que será lido pela função read_adc(). value7 = read_adc(); val7 =(5*value7)/255; printf(usb_cdc_putc, "%1.2f", val7); } if (opcao==22) //função recebe_pm(canal), leitura analog. { setup_adc_ports(AN0_TO_AN7); setup_adc(ADC_CLOCK_DIV_4); set_adc_channel(7); //Especifica qual o canal que será lido pela função read_adc(). value8 = read_adc(); val8 =(5*value8)/255; printf(usb_cdc_putc, "%1.2f", val8); } //função set_pwm_freq(freq,duty). if (opcao ==23) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp2(CCP_PWM); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*16*250= 333.3us us or 3 khz setup_timer_2(T2_DIV_BY_16, 250, 1); set_pwm1_duty(value); set_pwm2_duty(value); }
63
if (opcao ==24) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*16*125= 166.67us us or 6 khz setup_timer_2(T2_DIV_BY_16, 125, 1); set_pwm1_duty(value); set_pwm2_duty(value); } if (opcao ==25) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*4*250= 83.3us us or 12 khz setup_timer_2(T2_DIV_BY_4, 250, 1); set_pwm1_duty(value); set_pwm2_duty(value); } if (opcao ==26) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*4*125= 41.67us us or 24 khz setup_timer_2(T2_DIV_BY_4, 125, 1); set_pwm1_duty(value); set_pwm2_duty(value); } if (opcao ==27) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*250= 20.83us us or 48 khz setup_timer_2(T2_DIV_BY_1, 250, 1); set_pwm1_duty(value);
64
set_pwm2_duty(value); } if (opcao ==28) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // The cycle time will be (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*200= 16.67us us or 60 khz setup_timer_2(T2_DIV_BY_1, 200, 1); set_pwm1_duty(value); set_pwm2_duty(value); } if (opcao==29) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*125= 10.42us us or 96 khz setup_timer_2(T2_DIV_BY_1, 125, 1); set_pwm1_duty(value); set_pwm2_duty(value); } if (opcao == 30) { while(!usb_cdc_kbhit()) {cont=cont+1;} value=gethex_usb(); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*1*100= 8.333us us or 120 khz setup_timer_2(T2_DIV_BY_1,100, 1); set_pwm1_duty(value); set_pwm2_duty(value); } if (opcao == 31) //função envia_pm(canal,valor), saída analog. {DA1();} if (opcao == 32)//função envia_pm(canal,valor), saída analog. {DA2();} if (opcao == 33)//função envia_pm(canal,valor), saída analog. {DA3();} //função recebepm_dig(canal). if (opcao ==34) {
65
setup_adc_ports(NO_ANALOGS); stk=input(PIN_A2); printf(usb_cdc_putc, "%u", stk); } if (opcao ==35) { setup_adc_ports(NO_ANALOGS); stk=input(PIN_A4); printf(usb_cdc_putc, "%u", stk); } if (opcao ==36) { setup_adc_ports(NO_ANALOGS); stk=input(PIN_A5); printf(usb_cdc_putc, "%u", stk); } //função enviapm_dig(canal,valor). if ( opcao==37) {setup_adc_ports(NO_ANALOGS); output_high(PIN_D0); } if (opcao ==38) {setup_adc_ports(NO_ANALOGS); output_low(PIN_D0); } if (opcao ==39) {setup_adc_ports(NO_ANALOGS); output_high(PIN_D1); } if (opcao ==40) {setup_adc_ports(NO_ANALOGS); output_low(PIN_D1); } if (opcao==41)//saída pwm com entrada analog. { setup_ccp2(CCP_OFF); setup_ccp1(CCP_PWM); // O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/48000000)*4*16*250= 333.3 us or 3 khz setup_timer_2(T2_DIV_BY_16, 250, 1); setup_port_a(AN0); setup_adc(ADC_CLOCK_DIV_8); set_adc_channel(0); //Especifica qual o canal que será lido pela função read_adc(). reg1 = read_adc(); set_pwm1_duty(reg1); } if (opcao==42)//saída pwm com entrada analog. { setup_ccp1(CCP_OFF); setup_ccp2(CCP_PWM);
66
// O ciclo de trabalho será (1/clock)*4*t2div*(period+1) // (1/20000000)*4*16*250= 333.3 us or 3 khz setup_timer_2(T2_DIV_BY_16, 250, 1); setup_port_a(PIN_A1); setup_adc(ADC_CLOCK_DIV_8); set_adc_channel(1); //Especifica qual o canal que será lido pela função read_adc(). reg2 = read_adc(); set_pwm2_duty(reg2); } if (opcao==43) { // Desconecta o dispositivo usb_detach(); } if (opcao>43) { char mensagem6[] = {"\n\nDigite um valor valido !\n"}; usb_cdc_putString(mensagem6); }}}} while (TRUE); }
67
A.4 – FUNÇÕES DO MATLAB
A.4.1 – FUNÇÃO DO MATLAB (“envia_pm.m”)
function y = envia_pm(canal,valor) e=0; val1 = 0; global SerPIC % Colocar o valor de saída dentro da faixa permitida if (valor >= 5) valor = 4.9; elseif (valor < 0) valor = 0; end %Avalia qual canal foi escolhido e envia o valor informado switch canal case 1, val1 = (204.8)* valor; val1=uint8(val1/4); fprintf(SerPIC, '%c', dec2hex(31)); if(val1<=15) fprintf(SerPIC, '%X', e) ; fprintf(SerPIC, '%c', dec2hex(val1)); else fprintf(SerPIC, '%c',dec2hex(val1)); end case 2, val1 = (204.8)* valor; val1=uint8(val1/4); fprintf(SerPIC, '%c', dec2hex(32)); if(val1<=15) fprintf(SerPIC, '%X', e); fprintf(SerPIC, '%c',dec2hex(val1)); else fprintf(SerPIC, '%c', dec2hex(val1)); end case 3, val1 = (204.8)* valor; val1=uint8(val1/4); fprintf(SerPIC, '%c', dec2hex(33)); if(val1<=15) fprintf(SerPIC, '%X', e); fprintf(SerPIC, '%c',dec2hex(val1)); else fprintf(SerPIC, '%c',dec2hex(val1)); end %Se o canal não é conhecido envia mensagem otherwise disp('Canal desconhecido') end
68
A.4.2 - FUNÇÃO DO MATLAB (“recebe_pm.m”)
function y = recebe_pm(canal) global SerPIC switch canal %Avalia o canal escolhido e faz a leitura do AD case 1, fprintf(SerPIC, '%c',dec2hex(17)); y = str2double(fscanf(SerPIC,'%c', 4)); case 2, fprintf(SerPIC, '%c', dec2hex(18)); y = str2double(fscanf(SerPIC,'%c', 4)); case 3, fprintf(SerPIC, '%c', dec2hex(19)); y = str2double(fscanf(SerPIC,'%c', 4)); case 4, fprintf(SerPIC, '%c',dec2hex(20)); y = str2double(fscanf(SerPIC,'%c', 4)); case 5, fprintf(SerPIC, '%c', dec2hex(21)); y = str2double(fscanf(SerPIC,'%c', 4)); case 6, fprintf(SerPIC, '%c', dec2hex(22)); y = str2double(fscanf(SerPIC,'%c', 4)); otherwise disp('Canal desconhecido') end
A.4.3 - FUNÇÃO DO MATLAB (“setpm_pwm_duty.m”)
function y = setpm_pwm_duty(canal,duty,freq) global SerPIC if (canal==1)%Avalia canal escolhido e logo após a frequência escolhida if (freq == 3000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 1); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 6000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 2);
69
duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 12000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 3); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 24000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 4); duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 48000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 5); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 60000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 6); duty = int16((200)*duty); if(duty<=15) fprintf(SerPIC, '%X',0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c',dec2hex(duty)); end elseif (freq == 96000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 7);
70
duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else duty = dec2hex(duty); fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 120000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 8); duty = int16((100)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end else disp('Frequencia inválida. Parametros aceitos(3000, 6000, 12000, 24000, 48000, 60000, 96000, 120000).') end end if (canal==2) %Avalia canal escolhido e logo após a frequência escolhida if (freq == 3000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%X', 9); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 6000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(10)); duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 12000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c',dec2hex(11)); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0);
71
fprintf(SerPIC, '%c', dec2hex(duty)); else duty = dec2hex(duty); fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 24000) fprintf(SerPIC, '%X',0); fprintf(SerPIC, '%c', dec2hex(duty)); duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else duty = dec2hex(duty); fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 48000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(13)); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 60000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(14)); duty = int16((200)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c',dec2hex(duty)); end elseif (freq == 96000) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c',dec2hex(15)); int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 120000) fprintf(SerPIC, '%c', dec2hex(16)); duty = int16((100)*duty); if(duty<=15)
72
fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end else disp('Frequencia inválida. Parametros aceitos(3000, 6000, 12000, 24000, 48000, 60000, 96000, 120000).') end end
A.4.4 - FUNÇÃO DO MATLAB (“setpm_pwm_freq.m”)
function y = setpm_pwm_freq(freq,duty) global SerPIC % O programa avalia a freqüência escolhida e envia o pwm para dois canais if (freq == 3000) fprintf(SerPIC, '%c', dec2hex(23)); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 6000) fprintf(SerPIC, '%c',dec2hex(24)); duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 12000) fprintf(SerPIC, '%c', dec2hex(25)); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 24000) fprintf(SerPIC, '%c', dec2hex(26)); duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0);
73
fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 48000) fprintf(SerPIC, '%c',dec2hex(27)); duty = int16((250)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c',dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 60000) fprintf(SerPIC, '%c',dec2hex(28)); duty = int16((200)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c', dec2hex(duty)); end elseif (freq == 96000) fprintf(SerPIC, '%c', dec2hex(29)); duty = int16((125)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c',dec2hex(duty)); end elseif (freq == 120000) fprintf(SerPIC, '%c', dec2hex(30)); duty = int16((100)*duty); if(duty<=15) fprintf(SerPIC, '%X', 0); fprintf(SerPIC, '%c', dec2hex(duty)); else fprintf(SerPIC, '%c',dec2hex(duty)); end else disp('Frequencia inválida. Parametros aceitos(3000, 6000, 12000, 24000, 48000, 60000, 96000, 120000).') end
74
A.4.5 - FUNÇÕES DO MATLAB (“enviapm_dig.m” e “recebepm_dig.m”)
function y = enviapm_dig(canal,valor) global SerPIC %Avalia canal e valor de entrada if(canal==1 && valor==1) fprintf(SerPIC, '%c', dec2hex(37)); elseif(canal==1 && valor==0) fprintf(SerPIC, '%c', dec2hex(38)); elseif(canal==2 && valor==1) fprintf(SerPIC, '%c',dec2hex(39)); elseif(canal==2 && valor==0) fprintf(SerPIC, '%c', dec2hex(40)); else disp('Canal ou valor não identificado. Canal(1 ou 2) e Valor(1 ou 0).') end
function y = recebepm_dig(canal) global SerPIC %Avalia canal de leitura digital switch canal case 1, fprintf(SerPIC, '%c', dec2hex(34)); y = str2double(fscanf(SerPIC,'%c', 1)); case 2, fprintf(SerPIC, '%c', dec2hex(35)); y = str2double(fscanf(SerPIC,'%c', 1)); case 3, fprintf(SerPIC, '%c', dec2hex(36)); y = str2double(fscanf(SerPIC,'%c', 1)); otherwise disp('Canal desconhecido.') end
A.4.6 - FUNÇÕES DO MATLAB (“inicializa.m” e “finaliza.m”)
function y = inicializa(porta) global SerPIC %Abre porta de comunicação SerPIC = serial(porta); set(SerPIC,'BaudRate', 128000, 'DataBits', 8, 'Parity', 'none','StopBits', 1, 'FlowControl', 'none'); fopen(SerPIC);
global SerPIC fclose(SerPIC); %Fecha porta de comunicação delete(SerPIC); delete(instrfind);
75
A.5 – S-FUNCTIONS
A.5.1 – S-FUNCTION DO BLOCO “DA_pm”
function [sys, x0] = D_A(t,x,u,flag,canal); if abs(flag) == 3 % rotina envia_pm(canal,u); elseif flag == 0 % Condições iniciais %estados contínuos = 0 %estados discretos = 0 %saídas = 1 %entradas = 1 %raizes continuas. reservado deve ser 0 %direct feedtrough deve ser 1 se u usado em flag=3 sys = [0 0 1 1 0 1]; x0 = []; else sys = []; end
A.5.2 – S-FUNCTION DO BLOCO “AD_pm”
function [sys, x0] = A_D(t,x,u,flag,canal); if abs(flag) == 3 % rotina aux1 = recebe_pm(canal); sys = [aux1]; elseif flag == 0 % initial conditions sys = [0 0 1 1 0 1]; x0 = []; else sys = []; end
A.5.3 – S-FUNCTION DO BLOCO “PWM_pm”
function [sys, x0] = PWM(t,x,u,flag,freq,canal); if abs(flag) == 3 % rotina setpm_pwm_duty(canal,u,freq); elseif flag == 0 sys = [0 0 1 1 0 1]; x0 = []; else sys = []; end
76
A.5.4 – S-FUNCTION DOS BLOCOS “ENVIA_digital_pm” e “RECEBE_digital_pm”
%ENVIA_digital_pm function [sys, x0] = D_A_dig(t,x,u,flag,canal); if abs(flag) == 3 % rotina enviapm_dig(canal,u); elseif flag == 0 sys = [0 0 1 1 0 1]; x0 = []; else sys = []; end
%RECEBE_digital_pm function [sys, x0] = A_D_dig(t,x,u,flag,canal); if abs(flag) == 3 % rotina aux1 = recebepm_dig(canal); sys = [aux1]; elseif flag == 0 sys = [0 0 1 1 0 1]; x0 = []; else sys = []; end