Beruflich Dokumente
Kultur Dokumente
e Robótica
16 de fevereiro de 2011
Sumário
1 Introdução 3
1.1 Sistema de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . 5
1.2 Estrutura do Programa . . . . . . . . . . . . . . . . . . . . . . . 5
3 Display LCD 26
3.1 Interface com microcontrolador . . . . . . . . . . . . . . . . . . . 26
3.2 Instruções e dados . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.1 Instruções . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.2 Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4 Biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4 Encoder 34
5 Experiências 37
5.1 Montagem do circuito em placa padrão . . . . . . . . . . . . . . . 37
5.1.1 Desenvolvimento de software . . . . . . . . . . . . . . . . 40
5.1.2 Relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2 Conversão A/D com display LCD . . . . . . . . . . . . . . . . . . 42
1
SUMÁRIO 2
5.2.1 Relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3 Comunicação serial . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.3.1 Análise dos sinais de comunicação serial . . . . . . . . . . 44
5.3.2 Relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.4 Movimentando o motor com PWM . . . . . . . . . . . . . . . . . 45
5.4.1 Relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.5 Leitura de encoder . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.5.1 Relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.6 Medição de velocidade . . . . . . . . . . . . . . . . . . . . . . . . 48
5.6.1 Relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Capítulo 1
Introdução
além, é claro, dos conceitos adquiridos nas disciplinas que compõe a grade cur-
ricular, cursadas anteriormente.
Procura-se com esta atividade:
• Aplicar os conhecimentos essenciais para a construção de um dispositivo
mecatrônico, envolvendo hardware mecânico e eletrônico, software e con-
troles;
• Criar um ambiente propício para o exercício da atividade de projeto em
Engenharia, por exigir que os alunos organizem-se em equipes, coordenem
suas atividades e respeitem seus cronogramas;
• Unificar, num único trabalho, parte da avaliação de diversas disciplinas,
fazendo com que o aluno possa aproveitar melhor o tempo.
• Preparar o aluno para as atividades de projeto mais complexas que seguem-
se em seu curso, particularmente PMR2450 – Projeto de Máquinas e
PMR2500/PMR2550 – Projeto de Conclusão de Curso.
3
CAPÍTULO 1. INTRODUÇÃO 4
• acionamento de motores
• projeto de hardware com microcontroladores
• projeto e construção de mecanismos
• modelagem e implementação de software para controle
#d e f i n e . . . // t o d a s a s d e f i n i ç õ e s u s a d a s no programa
/∗ C o n f i g u r a ç ã o dos f u s í v e i s
ver pic1687x . h
WDTDIS − d e s a b i l i t a watchdog t i m e r
HS − c r i s t a l de a l t a v e l o c i d a d e ( 2 0MHz)
LVPDIS − d e s a b i l i t a programação de b a i x a t e n s ã o
BORDIS − d e s a b i l i t a brown out r e s e t ∗/
__CONFIG(WDTDIS & HS & LVPDIS & BORDIS ) ;
/∗ V a r i á v e i s G l o b a i s ∗/
/∗ S u b r o t i n a s ∗/
/∗ Rotina de t r a ta m e n t o de i n t e r r u p ç õ e s ∗/
CAPÍTULO 1. INTRODUÇÃO 6
void i n t e r r u p t i s r ( void ) {
/∗ Programa P r i n c i p a l ∗/
v o i d main ( v o i d ) {
// −> D e c l a r a ç ã o de variáveis
// −> I n i c i a l i z a ç ã o de v a r i á v e i s
// −> C o n f i g u r a ç õ e s do p r o c e s s a d o r
// −> i n i c i a l i z a ç ã o dos d i s p o s i t i v o s
w h i l e ( 1 ) { // Loop P r i n c i p a l
} // fim do Loop P r i n c i p a l
} // fim do Programa P r i n c i p a l
Capítulo 2
7
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 8
• Interrupções
• Watchdog Timer (WDT)
• SLEEP
• Proteção de código
• Localização de identificadores
• Programação serial em circuito (ICSP)
• Programação serial em circuito com baixa tensão
• Depuração em circuito
Algumas dessa caracteristicas podem ser definidas através da programação de
bits de configuração, enquanto que outras estão sempre presentes no micro-
controlador e não permitem alteração de configuração. Além disso, somente
algumas dessas características são relevantes para esse curso e somente algumas
devem ser definidas. As demais possuem seus detalhes descritos no data sheet
do PIC16F87X. Na documentação original do PIC16F87X essa seção vem no
final do documento, mas no caso desse curso inicia-se esse capítulo por aqui
pois correspondem a primeira inicialização presente no programa.
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 9
2.1.2 RESET
A família PIC16F87X diferencia entre vários tipos de RESET dos quais alguns
podem ser definidos através de bits de configuração. O pino MCLR (Master
Clear) é o sinal de hardware usado para causar um RESET no microcontrolador,
tanto em operação normal quanto se o microcontrolador se encontrar no modo
SLEEP. Uma das características especiais dessa família de microcontroladores
é a existência de um sistema de RESET ao ligar (POR – Power-on Reset) que
elimina componentes RC externos normalmente usados para criar um pulso de
Limpa-ao-ligar no pino de RESET do microcontrolador. Esse sistema gera um
pulso interno quando uma subida do VDD é detectada (na faixa de 1,2V a
1,7V). Para se utilizar essa característica basta ligar o pino MCLR diretamente
(ou através de um resistor) ao VDD . Durante o processo de RESET o Timer
de inicialização do oscilador (OST) provê um atraso de 1024 ciclos do oscilador
(da entrada OSC1) após o atraso do Timer de Power-up (PWRT) terminar (se
PWRT estiver habilitado). Esse procedimento garante que o oscilador a cristal
ou ressonador tenha iniciado e estabilizado. O time-out do OST somente ocorre
para os modos LP, XT e HS e somente no POR ou acordando do modo SLEEP.
Os outros tipos de RESET podem ser definidos pela programação de bits de
configuração:
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 10
2.1.3 Interrupções
O PIC16F873 possui 13 interrupções1 agrupadas num único pedido geral de
interrrupção para o microcontrolador. Cada interrupção pode ser mascarada
individualmente, através de um bit específico. Além disso, todas podem ser
habilitadas e desabilitadas através do bit GIE (INTCON<7>). Se GIE = 1
todas a interrupções que não estiverem mascaradas poderão gerar um pedido
de interrupção para o microcontrolador. Caso contrário, se GIE = 0, todas as
interrupções estarão desabilitadas e não serão tratadas pelo microcontrolador.
Na ocorrência de um pedido de interrupção atendido o GIE é automati-
camente limpo (GIE = 0), desabilitando assim qualquer pedido de interrupção
subsequente. No retorno da rotina de interrupção, o GIE é automaticamente re-
habilitado (GIE = 1) permitindo que novas interrupções não mascaradas sejam
tratadas.
É importante observar que cada interrupção que ocorre levanta2 um flag
específico e que esse flag é levantado independente das interrupções estarem
habilitadas ou não. Por exemplo, no caso da interrupção do Timer 0, seu estouro
causará o flag T0IF a se tornar "1", mesmo que GIE = 0. Por outro lado, mesmo
que GIE = 1, no caso da interrupção do Timer 0, essa só será atendida se T0IE
= 1, isto é, se a interrupção estiver desmascarada.
Assim, deverá existir uma única rotina geral para tratamento de interrupções
que deverá testar se cada interrupção a ser tratada possui seu flag de pedido
igual a "1" e se está desmascarada. Essa rotina não aceita parâmetros e não
1 Alguns microcontroladores da família PIC16F87X possuem 14 interrupções
2 não encontrei uma tradução direta para o português, em inglês é o verbo "to set": to set
a flag
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 11
/∗ Programa b i t s de c o n f i g u r a ç ã o :
HS − o s c i l a d o r de a l t a f r e q u e n c i a
WDTDIS − d e s a b i l i t a watchdog t i m e r
LVPDIS − não u t i l i z a programação ICSP com b a i x a t e n s ã o ,
i s s o l i b e r a o uso do p i n o RB3/PRGM para I /O
BORDIS − d e s a b i l i t a o brown out r e s e t
∗/
__CONFIG(HS & WDTDIS & LVPDIS & BORDIS ) ;
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 14
2.3 Timer 0
O módulo do Timer 0 possui as seguintes características:
• contador/timer de 8-bits (sempre incrementando)
• pode ser escrito e lido
• prescaler de 8-bits programável por software
• seleção de clock interno ou externo
• interrupção no transbordo de FFh para 00h
• seleção de borda para o clock externo
O Timer 0 possui dois modos de operação: contador e timer. No modo contador,
o Timer 0 conta pulsos que entram no pino RA4/T0CKI. Já no modo timer,
é utilizado o clock interno do microcontrolador (CLKOUT) que corresponde a
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 15
// e x e c u t a a q u i o que f o r n e c e s s á r i o
}
}
7. Ler o registrador RCSTA para pegar o nono bit (se estiver habilitado) e
determinar se algum erro ocorreu durante a recepção.
8. Ler os 8 bits de dados recebidos através da leitura do registrador RCREG.
9. Se algum erro ocorreu, limpar o erro limpando o bit CREN.
Para a utilização dessas funções deve ser incluido o header serial.h e antes
dele o always.h que contém definições utilizadas pelo serial.h.
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 20
Os seguintes passos devem ser seguidos para se fazer uma conversão A/D:
1. Configurar o módulo A/D:
2.6 PWM
PWM significa Pulse Width Modulation ou modulação por largura de pulso.
Um sinal de PWM possui um periodo constante e a cada ciclo o tempo que
o sinal permanece no nível lógico HIGH em relação ao período total pode ser
descrito por uma porcentagem. Essa porcentagem é chamada de Duty Cycle.
Por exemplo, um sinal de PWM com Duty Cycle de 50% tem a forma de uma
onda quadrada, na metade do período o sinal está em nível lógico HIGH e na
outra metade do período o sinal está em nível lógico LOW. A Figura 2.2 mostra
algumas situações para os valores do Duty Cycle.
Um sinal de PWM pode ser utilizado para variar a energia entregue a um
determinado dispositivo. Um valor de 0% de Duty Cycle significa que nenhuma
energia é entregue ao dispositivo. Por outro lado, 50% de Duty Cycle significa
que 50% de energia é entregue ao dispositivo. Uma das aplicações de um sinal
de PWM é o controle a corrente que passa pelo enrrolamento de um motor
CC e consequentemente variação de sua velocidade. A Figura 2.3 mostra um
arranjo para controle de velocidade em malha fechada de um motor CC com
um microcontrolador gerando um sinal de PWM e lendo sinais digitais de um
encoder. A leitura de encoder será explicada posteriormente no Capítulo 3 na
experiência correspondente.
A geração de sinais de PWM é feita através dos módulos CCP no PIC16F873.
Existem 2 módulos CCP (Captura/Comparação/PWM) na família PIC16F87X.
Cada módulo contém um registrador de 16-bits que pode operar como:
CAPÍTULO 2. MICROCONTROLADOR PIC 16F873 23
Figura 2.2: Forma de onda de um sinal PWM com vários valores de Duty Cycle.
Os seguites passos devem ser feitos para configurar o módulo CCP para
operação em PWM:
1. Definir o período do PWM escrevendo no registrador PR2.
2. Definir o Duty Cycle do PWM escrevendo no registrador CCPR1L e nos
bits 5 e 4 do registrador CCP1CON.
3. Definir o pino CCP1 com saída limpando o bit TRISC<2>.
4. Definir o valor de prescale do TMR2 escrevendo no registrador T2CON
5. Configurar o módulo CCP1 para operação em PWM
Capítulo 3
Display LCD
A maioria dos displays de LCD utilizam chips controladores que seguem o mesmo
padrão de conexão com um microcontrolador e com comandos muito similares.
O display utilizado no laboratório usa um chip HD44780U da Hitachi cuja docu-
mentação está disponível no site da disciplina (http://www.poli.usp.br/pmr/
lpa/pmr2415). Neste documento é apresentado um resumo dos pontos mais
importantes para se utilizar o display de LCD, caso se deseje modificar o funci-
onamento do display deve-se consultar a documentação completa do controlador
HD44780U. A conexão física do display de LCD com o microcontrolador é vista
nas aulas de teoria em detalhes.
26
CAPÍTULO 3. DISPLAY LCD 27
Seleciona registradores.
0: Registador de comandos (escrita) ou Flag de ocupado
RS C I e contador de endereços (leitura)
1: Registrador de dados (escrita e leitura)
sinal RS está em nível lógico HIGH e o sinal R/W está em nível lógico HIGH, o
que significa que é leitura de dados. Observe que o sinal E pulsa de LOW para
HIGH cada vez que um dado está estável no barramento de dados DB4 a DB7.
Este é o sinal de strobe que comanda a transferência.
Como na implementação desse laboratório o sinal R/Westá sempre em nível
lógico LOW são realizadas somente operações de escrita no display LCD e nunca
operações de leitura. A limitação dessa abordagem é que não é possível ler o
flag de ocupado e os endereços do registrador de dados (se RS = 0) nem o
conteúdo do registrador de dados (se RS = 1). Como consequência, entre duas
escritas consecutivas é necessário esperar um tempo fixo, cerca de 40 �s, para
o controlador do display voltar para um estado desocupado. O não respeito a
esse intervalo de tempo causa a perda de dados.
3.2.1 Instruções
O registrador de instruções (IR) pode conter instruções em 4 categorias:
Especificação de funcões do HD44780U, tais como formato do display, com-
primento de dados, etc.
• Definição de endereços da RAM interna
• Realização transferência de dados com a RAM interna
• Realização de funções diversas
A Tabela 3.2 apresenta todas as instruções disponíveis com o seu tempo de
execução.
3.2.2 Dados
A RAM de dados do display (DDRAM) armazena os dados que são visíveis no
display num código de 8-bits por caracter. A quantidade total de caracteres
que podem ser armazenados nessa memória é de 80 caracteres. Existe uma re-
lação entre o endereço da DDRAM e a apresentação dos caracteres no display.
Num display de 2 linhas a relação dos endereços é apresentada na Figura 3.2.
Observa-se que os 40 primeiros endereços a partir do endereço 00h correspondem
à primeira linha do display e os 40 endereços apartir do endereço 40h correspon-
dem à segunda linha. No display LCD utilizado no laboratório uma janela de 8
caracters por 2 linhas sobre essa organizaçào de endereços da DDRAM sempre
estará visível. Ou seja, se a janela estiver sobre os 8 primeiros endereços serão
mostrados no display os caracteres armazenados nos endereços 00h a 07h para
a primeira linha e nos endereços 40h a 47h para a segunda linha. Essa janela
pode ser deslocada através das instruções adequadas. A Figura 3.3 mostra a
posição da janela de 8 caracteres por 2 linhas sobre o início da DDRAM, depois
no caso de deslocamento para a esquerda e por último no caso de deslocamento
para a direita.
3.3 Caracteres
Os caracteres que podem ser mostrados no display LCD são representados com
um código de 8-bits e são armazenados internamente numa memória ROM no
HD44780U. Os caracteres com o bit mais significativo igual a 0 e entre os códigos
20h e 7Fh são representados com o código ASCII, o que mantém compatibilidade
do display com a maioria dos sistemas. Por outro lado, os códigos que possuem
bit mais significativo igual a 1 são particulares de cada fabricante e mostrarão
caracteres por ele definidos. Os primeiros 16 códigos podem ser usados para
mostrar caracteres definidos pelo usuário e armazenados numa memória apro-
priada (CGRAM) dentro do HD44780U. A Tabela 3.3 mostra os caracteres que
podem ser mostrados no display por código. As linhas contém os 4-bits menos
significativos de cada código enquanto que as colunas contém os 4-bits mais
significativos.
CAPÍTULO 3. DISPLAY LCD 32
Tabela 3.3: Caracteres que podem ser mostrados no display LCD [1].
CAPÍTULO 3. DISPLAY LCD 33
3.4 Biblioteca
Está disponível uma biblioteca para o HI-TECH C para acesso ao display LCD
no laboratório. Essa bilbioteca foi configurada para a implementação de hard-
ware utilizada nesse laboratório. Caso seja alterado algum bit utilizado da Porta
B ou C, a biblioteca deverá ser modificada. Para utilizá-la deve incluir o header
lcd.h no programa. As funções dessa biblioteca são as seguintes:
• void lcd_init(void) – Essa função inicializa o controlador do display
LCD para utilizar uma interface de 4-bits, somente para escrita, com 2
linhas, com cursor piscando, com deslocamento de caracteres da esquerda
para a direita a cada novo caracter e formato de caracter com matriz de 5
x 8 pontos. Essa função pode ser alterada caso se deseje iniciar o display
de outra maneira, como por exemplo, com cursor apagado.
• void lcd_clear(void) – Essa função limpa o display e coloca o cursor
na primeira posição da primeira linha.
Encoder
Figura 4.1: Disco codificado com regiões claras e escuras, sensores ópticos em
quadratura, sinais dos canais A e B para rotação no sentido horário e anti-
horário [4].
34
CAPÍTULO 4. ENCODER 35
Figura 4.2: Sinais dos canais A e B motrados como um par de bits para o sentido
horário e anti-horário[4].
Experiências
37
CAPÍTULO 5. EXPERIÊNCIAS 38
Figura 5.3: Conexão da placa montada com os outros dispositivos que compre-
endem o arranjo experimental utilziado em todas as experiências do semestre.
Figura 5.4: Tela do MPLAB IDE após a conexão com o programador ICD2.
serial.h, serial.c
main.c
Esses arquivos estão disponíveis para cópia no diretório de reposição "C:\pmr2415\software".
Cada grupo deverá manter sua cópia local no diretório de trabalho e poderá
modificar caso deseje. Os arquivos do diretório de reposição não deverão ser
modificados nunca.
Criar um novo projeto através do menu "Project" > "New...". Na ja-
nela que se abrirá, escolher um nome para o projeto e um diretório de tra-
balho. Esse diretório deverá ser criado obrigatóriamente no seguinte caminho:
"C:\Users\<nome do grupo>". Terminar com Ok. Caso não visualize as jane-
las de Projeto e Saída, usar o menu "View" > "Projetct" e "View" > "Output"
para abrí-las.
Clicando com o botão da direita sobre os itens da árvore recém criada na
janela de projeto pode-se adicionar os arquivos que foram copiados para o dire-
tório de trabalho.
Adicionar os seguintes arquivos no item "Source Files":
adc.c
delay.c
lcd.c
serial.c
main.c
Adiconar os seguintes arquivos no item "Header Files":
adc.h
always.h
delay.h
lcd.h
serial.h
O arquivo main.c contém um programa exemplo que deverá funcionar se o
hardware montado estiver correto. A partir deste momento pode-se compilar o
projeto e carregá-lo no PIC. Para compilar todos os arquivos do projeto e gerar
um arquivo que pode ser carregado no PIC pode-se utilizar a botão de cor preta
da barra de ferramentas mostrado na Fig. 5.5(a). Esse botão compila somente
os arquivos que tiverem sido modificados. O botão de cor vermelha serve para
compilar todos os arquivos novamente.
Caso a compilação tenha sido bem sucedida, isto é, se não houverem erros
de sintaxe nem de símbolos não encontrados, aparecerá uma mensagem corres-
pondente na janela de saída. Após a confirmação de compilação bem sucedida,
CAPÍTULO 5. EXPERIÊNCIAS 42
5.1.2 Relatório
O relatório desta experiência deve ser entregue numa folha A4 contendo a iden-
tificação do grupo, disciplina e experiência com duas figuras contendo uma foto
colorida da placa montada do lado dos componentes e outra do lado de baixo,
na melhor resolução possível. Serão avaliados para a nota os seguintes itens:
• Distribuição dos componentes na placa observando a otimização na dis-
posição dos mesmos.
• Qualidade da montagem em relação à fiação e soldagem.
• Qualidade das imagens das figuras. Imagens de má qualidade que não
permitam a avaliação dos itens acima acarretarão redução na nota.
miliVolts no display LCD. O intervalo de tempo deve ser controlado com uma
interrupção periódica. O valor do sinal analógico deve ser alterado pelo poten-
ciômetro presente no módulo de motor e LCD.
O PIC 16F873 possui 5 canais de conversão A/D, cada canal converte um
sinal analógico para um valor digital de 10-bits. Os valores limites do sinal
analógico podem ser configurados por software e/ou hardware. Nesse laboratório
será utilizada a faixa de 0 V a 5 V configurada por software.
A placa montada na experiência anterior conecta o potenciômetro do módulo
de motor e LCD ao canal 0 (zero) de conversão A/D do PIC que corresponde ao
pino RA0/AN0. O uso desse pino como entrada analógica precisa ser configu-
rado através dos registradores ADCON0 e ADCON1 e o resultado da conversão
é apresentado nos registradores ADRESH e ADRESL do PIC. Os detalhes da
configuração e utilização dos canais de conversão A/D foram apresentados no
Capítulo 2. Nesta experiência deverão ser usadas as rotinas em C disponíveis
na biblioteca fornecida para realizar a configuração e conversão A/D.
O programa deve seguir a seguinte estrutura:
1. Criar uma interrupção periódica a cada 0,5 segundo com um timer interno.
O aluno deverá avaliar qual é o melhor timer a ser utilizado e os cálculos
deve ser apresentados no relatório
2. Na interrupção efetuar a conversão do sinal analógico e armazenar o re-
sultado numa variável global
3. No programa principal, ficar num loop infinito que fica realizando as se-
guintes operações:
Para que seja possível mostrar o valor correto em miliVolts no display LCD deve
ser levantada uma curva de calibração entre o valor resultante da conversão A/D
e o nível de tensão real do sinal. Pode-se aplicar um método de regressão linear
com a medida de 5 pontos entre o mínimo e o máximo.
5.2.1 Relatório
No relatório deverão estar identificados os membros do grupo, turma, disciplina
e experiência e deverão constar os seguintes itens:
1. Discussão e justificativa para escolha do timer usado para interrupção
2. Cálculo dos valores do timer
CAPÍTULO 5. EXPERIÊNCIAS 44
padrão DOS ou UNIX nos programas de Terminal. Se for DOS são enviados dois caracteres
CR (0Dh ou ’\r’) e LF (0Ah ou ’\n’) e se for UNIX é enviado somente o caracter LF.
CAPÍTULO 5. EXPERIÊNCIAS 45
5.3.2 Relatório
No relatório deverão estar identificados os membros do grupo, turma, disciplina
e experiência e deverão constar os seguintes itens:
1. Cálculo e programação dos bits dos registradores do PIC para taxa de
19.200 bps com palavra de 8-bits e sem paridade.
2. Desenhos das formas de ondas dos 4 pontos do circuito indicados, mos-
trando que caracter é que aparece nas formas de onda, tempos e tensões
dos sinais. Incluir verificação de que os tempos de um bit nas formas de
onda acima correspondem aos valores programados para taxa de baud.
Mostrar o tempo de atraso entre a recepção e a transmissão.
3. Código fonte com comentários explicando o funcionamento do programa.
4. Pesquisar e projetar o hardware e software necessários para transformar
um canal serial RS232 em RS485. Incluir uma descrição do funcionamento
do RS485, mostrar que circuito utilizar e desenhar o diagrama lógico do
projeto. Essa atividade será utilizada no PI7.
5.4.1 Relatório
No relatório deverão estar identificados os membros do grupo, turma, disciplina
e experiência e deverão constar os seguintes itens:
1. Cálculo do período do PWM baseado no clock do microcontrolador e de-
terminação do valor a ser programado no registrador PR2.
2. Cálculo da conversão do valor do parâmetro de entrada da rotina pwm_set
para o valor a ser programado no registrador CCPR1L e CCP1CON
3. Desenhos das formas de onda para 25%, 50% e 75% de duty cycle mos-
trando os tempos que o sinal fica em nível lógico HIGH, e o período do
PWM. Cálcular a percentagem do PWM para verificar que o software está
correto.
4. Código fonte com comentários explicando o funcionamento do programa.
5.5.1 Relatório
No relatório deverão estar identificados os membros do grupo, turma, disciplina
e experiência e deverão constar os seguintes itens:
1. Desenhar as formas de ondas dos canais A e B do encoder e mostrar os
tempos anotados da largura dos pulsos e da defasagem entre os canais
para o PWM de 50%
2. Mostrar os cálculos para determinar a velocidade da roda em mm/s a
partir da % do PWM. Plotar um gráfico de % PWM x velocidade (mm/s)
e achar uma função que converta % PWM em velocidade em mm/s.
3. Código fonte com comentários explicando o funcionamento do programa.
5.6.1 Relatório
No relatório deverão estar identificados os membros do grupo, turma, disciplina
e experiência e deverão constar os seguintes itens:
1. Apresentar um gráfico levantado com pelo menos 5 pontos da velocidade
da roda em mm/s em função da % PWM e comparar com o gráfico da
experiência anterior.
CAPÍTULO 5. EXPERIÊNCIAS 49
[1] Hitachi; HD44780U (LCD-II) (Dot Matrix Liquid Crystal Display Control-
ler/Driver); Rev. 0.0; 1999
[2] Microchip Technology Inc.; PIC16F87X Data Sheet 28/40-Pin 8-Bit CMOS
FLASH Microcontrollers; 2001
[3] Microchip Technology Inc.; HI-TECH C for PIC10/12/16 User’s Guide; 2009
[4] Storr, Wayne; Basic Electronics Tutorials: Position Sensors; http://www.
electronics-tutorials.ws/io/io_2.html; acessado em 31/01/2011
50
51
5 4 3 2 1
VCC
R1
10k VCC
D D
D1 R2 R3 U1
1N4148 330 10k
ICSP 2 11
3 RA0/AN0 RC0/T1OSO/T1CKI 12
VCC 4 RA1/AN1 RC1/T1OSI/CCP2 13
RA2/AN2/VREF- RC2/CCP1
Lógico
6 D2 5 14
5 6 RA3/AN3/VREF+ RC3/SCK/SCL 15
LED RA4/T0CKI RC4/SDI/SDA
4 7 16
RA5/SS/AN4 RC5/SDO J2
3 17 U2
2 21 RC6/TX/CK 18
1 22 RB0/INT RC7/RX/DT 4 3 RXD 3
23 RB1 10 19 R1IN R1OUT 20 2
24 RB2 OSC2/CLKOUT R2IN R2OUT TXD 1
25 RB3/PGM 2 5
J1 26 RB4 1 T1IN T1OUT 18
27 RB5 T2IN T2OUT
28 RB6/PGC 8 RS232C
RB7/PGD 13 C1+
9 11 C1-
OSC1/CLKIN 15 C2+
C C
1 10 C2+
MCLR/VPP/THV 16 C2-
20 14 C2-
VDD 12 V+
17 V-
+ C1 PIC16F873 V-
10 uF
REFERÊNCIAS BIBLIOGRÁFICAS
MAX233
Y1
5
OUT
J3
VCC
20MHz
AIN2 2 1 AIN1
B B 4 3 A B
SW2
GND 6 5 VCC
4 3 POT 8 7 PWM
RS 10 9 E
DB5 12 11 DB4
DB7 14 13 DB6
1 2
MOTOR_LCD
B1
Apêndice 1 – Diagrama
A A
Title
Laboratório de PMR2415 - Microcontrolador
53
Apêndice 3 – Bibliotecas de
Software
adc.h
/∗
∗ Header f i l e f o r t h e ADC u n i t
∗ See adc . c f o r more i n f o
∗/
/∗−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
I n i t i a l i s i n g t h e ADC c h a n n e l s
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−∗/
e x t e r n v o i d a d c _ i n i t ( u n s i g n e d c h a r ADC_Channel ) ;
/∗−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Reads t h e ADC l e v e l i n p u t on a s p e c i f i e d ADC c h a n n e l .
Takes i n an 10− b i t ADC c h a n n e l number .
Returns an 10 b i t number t h a t s i g n i f i e s t h i s l e v e l .
Approximate s a mp li n g time = 7 6 . 8 us
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−∗/
e x t e r n u n s i g n e d i n t adc_read ( u n s i g n e d c h a r ADC_Channel ) ;
lcd.h
54
REFERÊNCIAS BIBLIOGRÁFICAS 55
/∗
∗ LCD i n t e r f a c e h e a d e r f i l e
∗ See l c d . c f o r more i n f o
∗/
/∗ w r i t e a s t r i n g o f c h a r a c t e r s t o t h e LCD ∗/
e x t e r n v o i d lcd_puts ( c o n s t c h a r ∗ s ) ;
/∗ Go t o t h e s p e c i f i e d p o s i t i o n ∗/
e x t e r n v o i d lcd_goto ( u n s i g n e d c h a r pos ) ;
/∗ i n t i a l i z e t h e LCD − c a l l b e f o r e a n y t h i n g e l s e ∗/
extern void lc d _in i t ( void ) ;
serial.h
/∗
∗ S e r i a l chennel header f i l e
∗ See s e r i a l . c f o r more i n f o
∗/
void s e r i a l _ i n i t ( void ) ; // i n i t i a l i z e s e r i a l c h a n n e l
v o i d putch ( u n s i g n e d c h a r c ) ; // output c h a r a c t e r
u n s i g n e d c h a r u s art_ tim e ou t ( v o i d ) ; //
// [ j o : 0 9 1 2 1 1 ] i f c h a c a r t e r i s not r e c e i v e d u n t i l
// timeout , r e t u r n
u n s i g n e d c h a r getch_timeout ( v o i d ) ;
// r e t u r n c h a r a c t e r
u n s i g n e d c h a r chkchr ( v o i d ) ;
v o i d p u t i n t h e x ( u n s i g n e d i n t c ) ; // output i n t e g e r i n h e x a d e c i n a l form