Sistemas de Telecomunicações IIhmiranda/st2/microcontroller_radar_report.pdf · gunn oscilator fo...
Embed Size (px)
Transcript of Sistemas de Telecomunicações IIhmiranda/st2/microcontroller_radar_report.pdf · gunn oscilator fo...
-
Faculdade de Engenharia da Universidade do Porto Licenciatura em Engenharia Electrotcnica e dos
Computadores Ano Lectivo de 2002/2003
Sistemas de Telecomunicaes II
Relatrio sobre Radar compacto de onda contnua na banda X para a medio de
velocidade de veculos
Trabalho realizado por: Jos Pedro Gomes Ferreira n ee98156 Nuno Beleza Jernimo n ee98042
-
pgina 1
ndice Objectivos ............................................................................................................................2 Introduo ............................................................................................................................2
O efeito de doppler e os radares de onda contnua ..........................................................2 Esquema geral do trabalho...................................................................................................4 Circuito de condicionamento de sinal..................................................................................5 Processamento do sinal ......................................................................................................10
Esquema de montagem do microprocessador ................................................................10 Cdigo desenvolvido para o microprocessador .............................................................10
Teste do RADAR...............................................................................................................14 Concluso...........................................................................................................................15 Anexo.................................................................................................................................16
-
pgina 2
Objectivos O trabalho consiste em realizar um radar de onda contnua compacto, fazendo uso do efeito de doppler. Ser usado um gunnplexer da banda X com uma frequncia de 10.5GHz, o qual ir alimentar um circuito de condicionamento de sinal. A sua sada ir ento ser ligada a um microprocessador que funcionar como um frequncimetro, fazendo a converso do sinal para velocidade mostrando o resultado num mostrador.
Introduo
O efeito de doppler e os radares de onda contnua Os radares detectam a presena e localizam a sua posio, transmitindo energia electromagntica e observando o eco retornado. Nos radares de onda contnua, o eco um sinal bastante fraco, em relao ao sinal transmitido. Uma forma de contornar essa diferena de potncias usando antenas separadas para a transmisso e para a recepo, mas normalmente o isolamento no suficiente. Uma outra tcnica para separar os dois sinais, quando existe movimento relativo entre o alvo e o radar, o facto de haver uma mudana de frequncia entre o eco e o sinal transmitido. Esta aparente mudana de frequncia devido ao efeito de doppler, que a base dos radares de onda contnua. Se R for a distncia do radar ao alvo, o nmero total de comprimentos de onda ? contidos na ida e volta 2R/ ?, assumindo que R e ? so medidos na mesmas unidades. Como um comprimento de onda corresponde a uma excurso angular de 2p rad, a excurso angular total ? provocada pela onda electromagntica durante o seu trajecto de ida e volta 4pR/ ? rad. Se o alvo estiver em movimento, R e ? esto a mudar continuamente. Uma mudana em ?, em respeito ao tempo, equivalente a uma frequncia. Isto a frequncia angular doppler ? d, em que:
rddv
dtdR
dtd
f44
2 ====
onde fd a frequncia de doppler e vr a velocidade radial do alvo em relao ao radar. A frequncia de doppler :
cfvv
f rrd 022
==
em que f0 a frequncia transmitida e c a velocidade de propagao da luz no vazio. A velocidade relativa, vr, pode ser escrita como vr = v/cos(a).
-
pgina 3
Sendo ento observvel que para a = 90, vr ser zero. Um radar de onda contnua simples pode ser representado da seguinte maneira:
O transmissor, no caso do trabalho o gunnplexer, gera continuamente uma oscilao frequncia f0, que radiada pela antena. Uma poro da energia radiada interceptada pelo alvo e espalhada, alguma dela em direco ao radar. Se o alvo estiver em movimento com uma velocidade radial relativa ao radar de vr, o sinal recebido ter um desvio relativo a f0 de +fd, no caso do alvo se estar a aproximar e fd se o alvo se estiver a afastar. O eco recebido de frequncia f0 fd, recebido no radar pela antena, sendo misturado no mixer com a poro f0 transmitida, retirando-se o sinal diferena fd, sendo o seu sinal perdido no processo. Pode-se ento aplicar o sinal a um amplificador, seguido por exemplo de um frequncimetro para efectuar as medies de velocidade. O uso de uma nica antena para transmisso/recepo possvel, pois pode-se fazer o isolamento entre os dois sinais, fazendo uso da sua separao em frequncia derivada do efeito de doppler. Na prtica a sua separao total no possvel, embora o facto de haver uma pequena fuga do sinal transmitido para o eco recebido no seja de todo negativo, pois pode-se usar essa fuga moderada para servir de referncia na deteco da frequncia de doppler.
fo
fofd
gunn oscilatorfo
mixer
fo
fo fofd
fd
a
-
pgina 4
Esquema geral do trabalho O seguinte diagrama de blocos faz uma breve descrio do trabalho:
O sinal proveniente do gunnplexer ser aplicado a um amplificador para elevar a amplitude do sinal de eco recebido e depois ser ligado a um comparador para se obter um sinal do tipo onda quadrada, livre de rudo e com uma excurso de 0V a 5V aproximadamente. Esse sinal ser ento aplicado ao microprocessador que retirar a frequncia do sinal fazendo a contagem dos impulsos, fazendo a sua converso para velocidade de acordo com os parmetros seleccionados:
O cculo da velocidade correspondente feito mediante o valor do ngulo (0 : 85) relativo entre o radar e o alvo seleccionado e a seleco da frequncia do gunnplexer instalado (10.5GHZ ou 24.1GHz). O microprocessador tm ainda um
Gunnplexer
Amplificador Comparador Microprocessador
Display
Condicionamento do sinal Processamento do sinal
Frequncimetro
Display
ngulo
Converso Frequncia Velocidade
Frequncia do Gunnplexer
Microprocessador
-
pgina 5
pequeno menu de navegao que permite fazer o ajuste dos parmetros mostrando essa informao no display:
Esta navegao feita atravs de trs botes de presso: boto de modo que possibilita a passagem pelos vrios modos e botes de mais e menos para seleccionar os valores. Existe ainda um led para distinguir os dois modos de actualizar a velocidade, estando este aceso no modo de velocidade mxima.
Circuito de condicionamento de sinal A entrada do circuito provm do gunnplexer, sendo este alimentado um regulador (LM2940) de 8V:
Velocidade instantnea
Velocidade mxima
Ajuste da frequncia
Ajuste do ngulo
0 : 85 2570 | 1120 A velocidade mxima retida
durante 1s aps a passagem do
Velocidade actualizada frequncia de amostragem
-
pgina 6
o condensador de 10F e 1 F evitam que a sada do regulador oscile, atenuando a variao de tenso na sada, devido ao ajuste automtico de tenso de sada. Os terminais do gunnplexer esto ligados da seguinte forma:
tendo o seguinte diagrama de blocos:
Como j foi explicado na introduo, h uma poro do sinal emitido que alimenta o mixer, de forma a ser possvel, do sinal recebido, extrair fd. Essa pequena fuga conseguida desviando o dodo de emisso (dodo de Gunn) do dodo de recepo. Esse desvio o que tambm garante que o sinal transmitido, no danifica o dodo de recepo (burnout).
-
pgina 7
A alimentao do circuito de condicionamento (tambm microprocessador e display), faz uso tambm de um regulador de 5V (LM2940), alimentado a 12V:
tendo o condensador a mesma funo referida em cima.
Na amplificao foi usada uma montagem do tipo no inversora:
o condensador de 4.7F tem como funo fazer a acoplagem do sinal proveniente do gunnplexer. O sinal ento posto sobre uma componente contnua de 2.5V, atravs do
-
pgina 8
divisor resistivo, isto para o sinal ficar dentro da gama de operao do amplificador. A montagem no inversora tem um ganho de:
VVK
Ganho / 1000100
1001 =+=
O condensador de 10F tem a funo de no amplificar a componente contnua do sinal, visto para DC o condensador ser um circuito aberto, comportando-se assim o amplificador, para DC, como um seguidor de tenso. O paralelo da resistncia de 100 Ohms com o condensador de 470 pF, implementa o filtro passa-baixo com frequncia de corte:
KhzpKRC
fc 4.3470*100*21
21 ==
o que limita a medida de velocidade para um valor de:
hKmG
kf
cfvr d /1756.3*
5.10*210*3*4.3
6.3*2
* 8
0
==
Esta limitao de banda ir melhorar a capacidade do radar alcanar uma distncia de medio de velocidade maior, visto estarmos a eliminar o rudo fora da banda de passagem, aumentando assim a relao sinal/rudo. De seguida o sinal amplificado tratado de forma a eliminar o rudo e obter-se um sinal do tipo onda quadrada, com valores de tenso de 0V e 5V (0 ou 1 lgico). Isso conseguido usando um comparador com uma janela de histerese de 200 mV:
-
pgina 9
sendo as resistncias calculadas da seguinte forma:
VKK
KKL
RR
RRVV
VKK
KKL
RR
RRVV
REFTH
REFTL
6,20100
9,3100
9,315,221
211
4,25100
9,3100
9,315,221
211
=
+=
+=
=
+=
+=
+
tendo o comparador a seguinte curva de caracterstica:
sendo L- e L+ 0V e 5V respectivamente, VREF 2,5V conseguidos atravs do divisor resistivo entrada do terminal negativo do AmpOp, conseguindo desta forma que o sinal de entrada do comparador pendurado nos 2,5V, tenha uma janela de 200 mV, como foi calculado. Assim eliminamos, alm do rudo, eventuais falsas transies e que o rudo quando no nenhum alvo em movimento, no provoque transies no sinal. Pode-se agora aplicar este sinal na porta do microprocessador, para se fazer a medio de velocidade.
-
pgina 10
Processame nto do sinal
Esquema de montagem do microprocessador
Cdigo desenvolvido para o microprocessador
Para o processamento do sinal obtido sada do comparador, foi usado um microprocessador da famlia 80c51, mais concretamente o 89C51RD+, tendo este como principais diferenas a incluso de um terceiro timer (Timer 2) e memria do tipo flash. O microprocessador foi basicamente programado para funcionar como um frequncimetro, que de seguida fazia a converso frequncia/velocidade. Comeou-se por definir duas variveis globais, counter usada para contabilizar as interrupes (Timer 0) e impulsos onde iro ser guardados os impulsos contabilizados pelo Timer 1. Foram tambm definidas as portas a serem usadas, P1.5 Chip enable, P1.6 Serial data, etc. Foram criadas trs funes alm da funo main: init, display e timer0. Na funo init so efectuadas as vrias inicializaes dos registos e variveis, que configuram o microprocessador e o inicializam para a tarefa desejada, a deteco de frequncia e sua converso em velocidade em Km/h. So configurados os registos SCON, TMOD, T2CON, TH0, TL0, TH1, TL1, RACAPL, RACAPH e IE. SCON o registo que configura a porta srie, o qual foi configurado para trabalhar no modo 01, o qual corresponde a ter um baud rate varivel, isto , poder ser ajustado no inicio para um valor desejado, sem ter que um valor pr determinado, mas sim configurvel. Neste registo ainda TI posto a 1 para ser possvel escrever na porta srie atravs de printf, sem que o utilizador se tenha que preocupar com a sua gesto.
-
pgina 11
Em TMOD temos a configurao dos Timer 0 e Timer 1, estando o Timer 1 configurado para funcionar como counter no modo de 16 bit s, contando s quando houver impulsos na porta TR1 (pino 15). O Timer 0 est configurado para funcionar com timer no mod de 16 bit s.
T2CON serve para configurar o timer extra, o qual fica programado para funcionar como timer, para gerar o baud rate da porta srie ( logo arrancado na sua configurao TR2=1). RACAPL e RACAPH, so os registos que vo ser utilizados para determinar o baud rate a ser gerado pelo Timer 2. Deste modo eles so carregados com valores de modo a ter-mos baud rate = 9600:
[ ][ ] ( )[ ]
654979600*32
1265536*32*960065536*32
129600
,(65536*32_
_
=
=
=
Mx
xMhz
RACAPLRACAPHosciladorFrequncia
RateBaud
TH1 E TL1 so ambos carregados com 0, pois so os contadores que vo contabilizar os impulsos. TH0 e TL0 so carregados com o valor 25535, de modo a os impulsos serem amostrados a cada 200 ms. (ser explicado em pormenor na descrio da funo timer0) O registo IE corresponde ao registo de activao das interrupes, onde so activadas as interrupes dos Timer 0 e Counter 1, no sendo activadas a do Timer 2 visto no serem necessrias para a gerao do baud rate. ainda inicializado o array send, que contm a trama correspondente s siglas FEUP a serem mostradas no display, P1=0, led acende e serial clock e serial data para o display inicializados, mudando-se ce para 1 (display no apto a receber). ento enviada a trama que contem FEUP (nesta situao ainda no usada a funo display pois esta no contm as siglas, a explicao do envio ser feito na funo display). Esta informao mantm-se no display cerca de um segundo, ento posto a 0 e desligado o led e arrancados os Timer 0 e Counter 1 (TR0=1 e TR1=1). A funo display est encarregue de enviar a informao para os mostradores de oito segmentos. Esta funo tem como argumentos um valor numrico a ser tratado e enviado para o display, e outro que define a maneira como a informao deve ser tratada e visualizada. Nesta funo existe uma tabela onde est contida a informao correspondente aos vrios dgitos e s letras A e F. Cada linha contm a trama correspondente ao seu dgito (0-9), havendo ainda duas linhas suplementares correspondentes ao A e ao F. Nas colunas temos o valor correspondente a cada segmento (mais o ponto), ficando estes acesos quando a coluna 1 e desligados quando 0. O array send, onde fica a trama a enviar, inicializado com tracinhos nos segmentos centrais, correspondendo ao fim de escala (999!!!). Caso a velocidade a ser mostrada seja inferior a esse valor, ento construda uma nova trama com esse valor. De seguida so calculados os dgitos das centenas, dezenas e unidades, podendo assim desta forma serem usados directamente na tabela, para servirem de ndices (j que
-
pgina 12
o 0 est na linha 0, o 1 na 1, ). A trama comeada por um 1, sendo depois a trama povoada com os restantes smbolos (4, um para cada mostrador) e finalizada com 0. Existem trs modos de visualizao: um para a velocidade instantnea e mxima, um para o ajuste do ngulo e outro para o ajuste da frequncia do gunnplexer. No primeiro modo (velocidade), os trs primeiros mostradores so carregados com os seus dgitos correspondentes e quarto deixado desligado (no se espera velocidades na casa dos milhares, nem perto do valor de fim de escala!). Para a seleco do ngulo, so usados os dois primeiros mostradores para o ngulo em questo (0:85), o terceiro deixado em branco e o quarto mostra a letra A (posio 10 da tabela). O modo de ajuste de frequncia semelhante ao do ngulo com a diferena de ser mostrado um F (posio 11 da tabela). Aps se ter a trama construda (36 bits, 1 ini,4*8+2(leds extras), 1 fim), esta enviada para o display, fazendo-se o chip enable (ce=0), e depois para cada bit a transmitir tem que se gerar um sinal de clock, para validar esse bit. feito ento, no fim da trama, o chip disable (ce=0). Todos estes sinais tm que respeitar tempos de guarda (referenciados na folha de caractersticas). A funo timer0, corresponde funo de atendimento do Timer0 (interrupt 1). Nesta funo os registos TH0 e TL0 so logo carregados com os valores no incio, mais quatro unidades (o que corresponde a menos contagens) para compensar os dois movs dos valores, conseguirmos gerar a amostragem de 200 ms. Este valor conseguido da seguinte forma:
interrupo gerada a cada 40000 s (12/12Mhz*(65535-2535)) em cada interrupo, counter incrementado ao fim de 5 interrupes, os impulso so amostrados reinicia-se counter e o contador de impulsos (TH1 e TL1) Neste processo o Timer 1 parado para no se fazer contagens erradas, sendo o caso mais desfavorvel o seguinte:
1 0*1001 011 1 001
TLTHimpulsosTLTHFFTLTH
+=====
Ou seja, quando devamos ter contabilizado 256 impulsos, vamos contabilizar 0! Isto deve-se ao facto da multiplicao e soma no serem realizadas instantaneamente, e o counter funcionar independentemente. Parando o counter evitam-se estas situaes e o erro introduzido muito reduzido, e constante, e podia mesmo ser eliminado, bastando para isso ter em conta os ciclos perdidos na operao, e entrar com eles no carregamento de TH1 e TL1.
Finalmente temos a funo main. Nesta funo criada a tabela de co-senos, tabela esta, que devido ao facto de no haver livraria de floats disponvel, foi multiplicada por 10000, de forma a contornar o facto de s termos disponvel a diviso inteira. Na tabela figuram valores do co-seno, para os ngulos de 0 a 85 (passo de 5). Em main construdo um pequeno conjunto de menus, nos quais possvel visualizar a velocidade instantnea, fazer o ajuste do ngulo, o ajuste da
-
pgina 13
frequncia do gunnplexer (no mudar a frequncia do gunnplexer, mas poder mudar de gunnplexer) e finalmente visualizar a velocidade mxima.
No modo de velocidade instantnea, a velocidade actualizada taxa de amostragem (200 ms), isto se houver mudana no nmero de impulsos contados. Tambm s existe actualizao se tiver havido novo carregamento da varivel impulsos (atravs da varivel set), ou seja s vamos efectuar o clculo da velocidade e seu respectivo envio para o display (no modo 0) quando se justifique: quando houve uma amostragem e essa amostragem foi diferente da anterior. O clculo da velocidade feito atravs da seguinte expresso:
)cos(/* cfreqimpulsosvr =
O valor c_freq dependente da frequncia do gunnplexer pelo que ser calculado,
quando for falado no modo de ajuste da frequncia do gunnplexer. Durante esse processo, tambm verificado se o boto de mudana de modo
premido. Alm dessa verificao, ainda garantido que o mostrador vai a zero, isto porque pode acontecer que aps registar x impulsos, na altura de actualizar a varivel que fica com o nmero de impulsos anterior (impa), haja uma nova amostragem, e essa amostragem seja zero (no h nenhum veiculo a passar). Deste modo ir ficar registado no display uma velocidade, quando deveria mostrar 0. Essa velocidade fica registada porque quando for verificado se houve uma contagem diferente, ambas as variveis vo conter zero, no havendo desta forma nova actualizao do display. Mas entretanto fica registado um valor no display, at haver uma nova passagem de um veculo.
Quando o boto de modo premido, passamos para a configurao do ngulo relativo entre o radar e o veculo. Aqui o ngulo pode ser ajustado atravs dos botes mais e menos. O ngulo mudado, actualizando o ndice da tabela de co-senos, e a varivel angulo, que passada funo display (no modo 1), para ser possvel visualizar qual o ngulo seleccionado.
Se o boto de modo for premido mais uma vez, passamos para o modo de ajuste da frequncia. Neste modo se o boto mais ou menos for premido mudado entre a possibilidade de se ter um gunnplexer de 10.5 GHz e um de 24.1GHz. Esta mudana feita atravs da actualizao da varivel c_freq. Para cada um dos gunnplexers temos um c_freq diferente. De seguida mostra-se o seu clculo:
2/*6.3*10000*5_ =freqc
1120_0124.01.242570_0286.05.10
==
freqcGHzfofreqcGHzo
Comeando pelo factor de multiplicao 5, este deve-se ao facto de estarmos a
amostrar o sinal a uma taxa de 200 ms. Ficamos assim desta forma com a frequncia em Hz. O 10000 advm do facto de termos previamente multiplicado toda a tabela de ngulos por esse valor e o 3.6 para termos um valor em Km/h.
-
pgina 14
A varivel freq (assume o valor 10 ou 24) usada na chamada a display (modo 2), para poder ser possvel ver qual a frequncia do gunnplexer seleccionada.
Premindo novamente o boto de modo, fica seleccionado o modo de reteno da velocidade mxima, acendendo-se um led para ser possvel fazer a distino entre este modo e o de velocidade instantnea.
Este modo em todo semelhante ao de velocidade instantnea, com a diferena do display s ser actualizado quando for detectada uma velocidade superior actual, alm das condies do modo de velocidade instantnea. Quando o veculo sair do raio de deteco do radar, a velocidade retida por cerca de um segundo, antes de retornar a zero.
Finalmente, se for premido o boto de modo mais uma vez, retorna-se ao modo de velocidade instantnea.
Visto ter sido configurada a porta srie, sempre que se envia informao para o
display, tambm se envia os mesmos dados para porta srie, tendo isso, no mbito de desenvolvimento do trabalho, servido apenas para debuging. Esta funcionalidade poder vir a ser usada para outras aplicaes futuras, como registar velocidades ao longo do tempo, ficando assim estas registadas, podendo depois serem extradas informaes como as velocidades mdias de passagem.
O cdigo encontra-se em Anexo.
Teste do RADAR Os primeiros teste foram efectuados em laboratrio, consistindo estes, para o condicionamento de sinal, em verificar se aps a sada do comparador tnhamos um sinal, do tipo onda quadrada, com uma excurso entre os 0V e 5V. Numa primeira fase ligou-se o gerador de sinal ao circuito, aplicando-se uma onda sinusoidal sua entrada. Foi verificado que o comparador apresentava sua sada, como tinha sido projectado, um sinal do tipo onda quadrada, com a excurso desejada (muito perto dos valores de saturao), variando apenas a frequncia de acordo com o sinal de entrada. De seguida foi feito o mesmo teste mas ligando desta vez a sada do gunnplexer entrada do circuito, de modo a verificar se quando no havia alvos em movimento frente do gunnplexer, no havia sinal sada do comparador e se com presena de sinal no havia falsas transies do sinal, devido a rudo. Para o ganho projectado na altura, ambos os requisitos foram alcanados. Aps ser validado o circuito de condicionamento, foi a vez de submeter o microprocessador a testes. Verificou-se, aplicando uma onda quadrada com uma excurso de 0V a 5V, proveniente do gerador de sinal, e que este fazia uma converso correcta para velocidade, consoante a frequncia aplicada sua entrada. Neste teste ficou tambm comprovado que o microprocessador no apresentava qualquer problema em fazer converses de velocidade, at valores de fim de escala (os 999Km/h impostos, correspondendo a uma frequncia de aproximadamente 19.4KHz).
-
pgina 15
Os testes finais foram efectuados com o circuito completo, no exterior, usando o velocmetro do veculo como referncia. O ganho de 100, projectado inicialmente, mostrou-se insuficiente, pelo que devido falta de disponibilidade foi aumentado logo para 1000. Desta forma no havendo outro condensador para compensar o aumento da resistncia, e manter a mesma frequncia de corte, os testes foram realizados sem filtro passa alto. O teste consistiu em colocar o radar na berma da estrada, sendo o ngulo do mesmo ajustado para 5 (esta medio foi feita sem recurso a qualquer aparelho de medio), e fazer algumas passagens. Foram registadas as velocidades indicadas pelo velocmetro e pelo radar, as quais so apresentados de seguida:
Velocmetro Radar
20 km/h 19 km/h
40 km/h 38 km/h
60 km/h 55 km/h
>85 km/h 82 km/h >105 km/h 98 km/h
Dos valores registados pode-se supor, visto no terem sido feitas muitas medies e no haver um radar de referncia calibrado, que o radar projectado faa uma deteco correcta, j que o erro do velocmetro dos automveis costuma aumentar com o aumento da velocidade. Partindo deste pressuposto pode-se afirmar que o radar mostrou um muito bom desempenho, visto tambm, o seu alcance ser prximo dos trinta metros (possivelmente at superior, j que nesse sentido no se fez nenhuma medio). Pese embora que em situao limite (prximo do alcance mximo), as medies oscilam-se muito, podendo isto dever-se ao facto da ausncia do filtro passa baixo, que podia ter melhorado o seu desempenho para estas distncias.
Concluso Em termo de concluso, pode-se apenas referir que o projecto inicial era para fazer a medio da velocidade de veculos, mas como o ganho foi aumentado de uma s vez para mil, alvos como pessoas, passaram tambm a ser detectados, mesmo a distncias razoveis (>10 m). Caso houve-se mais tempo podia-se ter calibrado o ganho para s detectar alvos de dimenses superiores (veculos motorizados), tendo em conta a sua aplicao inicial. Sendo esta o radar ficar colocado numa das pontes da FEUP, que passam por cima dos acessos da mesma.
-
pgina 16
Anexo *-------------------------------------------------------------------------------/
-
pgina 17
/ / / Sistemas de Telecomunicacoes II 2002/2003 / / / / ee98156 Jose Ferreira / / ee98042 Nuno Jeronimo / / / /-------------------------------------------------------------------------------*/ #include //define 8051 registers #include //define I/O functions void timer0(void); void init(void); void display(int v,char tipo); unsigned char counter=0; unsigned int impulsos; sbit modo = P1^0; //atribuicao nomes as portas sbit plus = P1^4; sbit minus =P1^2; sbit led = P1^3; //ATRIBUICOES DISPLAY sbit ce = P1^5; //Clock enable sbit sdata= P1^6; //Serial data sbit sclk = P1^7; //Serial clock void display(int v,char tipo){ //tabela com codificacao de 0-9 mais 'A' e 'F'(pos 10 e 11) char tabela[12][8] = {{1,1,1,1,1,1,0,0},{0,1,1,0,0,0,0,0},{1,1,0,1,1,0,1,0},{1,1,1,1,0,0,1,0},{0,1,1,0,0,1,1,0},{1,0,1,1,0,1,1,0},{1,0,1,1,1,1,1,0},{1,1,1,0,0,0,0,0},{1,1,1,1,1,1,1,0},{1,1,1,1,0,1,1,0},{1,1,1,0,1,1,1,0},{1,0,0,0,1,1,1,0}}; char d,i,j,c,u; char send[36]={1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0}; if(v
-
pgina 18
for(i=0;i
-
pgina 19
IE=0x8F; counter=0; P1=0; //led de modo vr max. sdata=0; //inicializa entrads do display sclk=0; ce=1; /*------------------------ Display "FEUP" -------------------------------*/ ce=0; for(i=0;i
-
pgina 20
set=0; vr=(unsigned long) impulsos*c_freq/cos[i_cos]; //calcula velocidade(Km/h) display((int)vr,0); //envia para display printf("vr=%d impulsos=%d\n",(int)vr,(int)impulsos); impa=impulsos; } if(impulsos==0 && set==1 && vr!=0){ vr=0; display((int)vr,0); printf("vr=%d impulsos=%d\n",(int)vr,(int)impulsos); } if(modo) //activa modo de ajuste de angulo { while(modo){} //garante so uma activacao modo_s=1; display((int)angulo,1); printf("Angulo = %d\n",(int)angulo); } /*--------------------------------------- principio modo angulo -----------------------*/ while(modo_s==1) { if(minus && angulo>0) //reduzir angulo de 5 { while(minus){} angulo-=5; i_cos--; display((int)angulo,1); printf("Angulo = %d\n",(int)angulo); } if(plus && angulo
-
pgina 21
} } /*------------------------------------- fim modo ajuste freq. gun. -------------------------*/ while(modo_s==3) { if(impulsos!=impa && set==1) //se houver contagens calcula velocidade { set=0; vr=(unsigned long) impulsos*c_freq/cos[i_cos]; //calcula velocidade(Km/h) if(vr>max){max=(int)vr;} //actualiza max display(max,0); //envia para display printf("vr max=%d\n",max); impa=impulsos; } if(impulsos==0 && max!=0 && set==1) //vr chegou a zero, volta-se a nova medicao; { max=0; for(vr=0;vr