TP2 Wheelie Relatorio

download TP2 Wheelie Relatorio

of 49

Transcript of TP2 Wheelie Relatorio

Electrnica Automvel

Montagem e levantamento de caractersticas do Elektor Wheelie

Autor Tiago Manuel Gomes Bacelo Numero 080503080

IndiceSumario ............................................................................................................................................. 4 Introduo......................................................................................................................................... 5 Capitulo 1: Princpio de funcionamento ............................................................................................. 6 Capitulo 2: Sensores e actuadores utilizados nas vrias partes do sistema ....................................... 13 RESUMO ...................................................................................................................................... 13 Bloco I.......................................................................................................................................... 13 ATmega 32 ............................................................................................................................... 13 Bloco II ....................................................................................................................................... 14 Acelermetro ADXL320 ............................................................................................................ 14 IDG-300.................................................................................................................................... 15 Bloco III...................................................................................................................................... 16 ATtiny25................................................................................................................................... 16 ACS755-SCB-100....................................................................................................................... 17 MIC2941 .................................................................................................................................. 17 LP2980 ..................................................................................................................................... 18 Bloco IV ...................................................................................................................................... 18 IR2184...................................................................................................................................... 18 Concluso do captulo .................................................................................................................. 19 Capitulo 3: Software de controlo...................................................................................................... 19 Funo init: .............................................................................................................................. 20 Funo Get_Angle: ................................................................................................................... 20 Funo Filter: ........................................................................................................................... 20 Funo Process: ....................................................................................................................... 20 Funo Get_speed_batt: .......................................................................................................... 20 Funo PWM_Out.................................................................................................................... 21 Funo interrupt: ..................................................................................................................... 21 Capitulo 4: Concluso ...................................................................................................................... 21 Capitulo 5: Bibliografia..................................................................................................................... 21 Anexo A ........................................................................................................................................... 22 Cdigo de programao do controlador ....................................................................................... 22 Anexo B ........................................................................................................................................... 35Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 2

Codigo de programao do controlador de corrente .................................................................... 35 Anexo C ........................................................................................................................................... 37 Motores....................................................................................................................................... 37 Anexo D ........................................................................................................................................... 39 Baterias........................................................................................................................................ 39 Anexo E ........................................................................................................................................... 40 Material utilizado......................................................................................................................... 40 Anexo F............................................................................................................................................ 41 Instrues de montagem ............................................................................................................. 41 Anexo G........................................................................................................................................... 45 Placa de circuito impresso............................................................................................................ 45

ndice de IlustraesFigura 1: Expemplo da utilizao do ElektorWheelie .......................................................................... 5 Figura 2: Diagrama de blocos e sentidos de comunicao entre os diferentes componentes.............. 7 Figura 3: Localizao da placa de controlo na parte inferior da base do veculo.................................. 8 Figura 4: Potencimetro utilizado para aquisio do ngulo da coluna de direco. ........................... 8 Figura 5: Exemplo do acoplamento do potencimetro com a coluna de direco............................... 8 Figura 6: Ligador de segurana encaixado no respectivo conector...................................................... 9 Figura 7: Esquema de ligao do acelermetro (ADXL320) e do giroscpio IDG300 .......................... 10 Figura 8: Esquema de ligao do ATmega32 com os restantes dispositivos ...................................... 11 Figura 9: Esquema de ligao de todas as partes constituintes do projecto ...................................... 12 Figura 10: Placa com todo o hardware montado .............................................................................. 13 Figura 11: Esquema de pinos do ATmega8 ....................................................................................... 14 Figura 13: Esquema de blocos funcionais do acelermetro ADXL320................................................ 15 Figura 14: Variao das sadas Xout e Yout com a inclinao ............................................................ 15 Figura 15: Esquema de blocos funcionais de IDG300 ........................................................................ 16 Figura 12: Esquema de pinos do ATtiny25 ........................................................................................ 17Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 3

Figura 16: Esquema interno do ACS755-SCB-100.............................................................................. 17 Figura 17: Esquema de pinos e ligaes do regulador de tenso MIC2941........................................ 18 Figura 18: Esquema interno do LP2980 ............................................................................................ 18 Figura 19: Esquema interno do IR2184............................................................................................. 19 Figura 20 : Fluxograma do software de controlo .............................................................................. 19

SumarioEste projecto foi efectuado no mbito da disciplina de Electrnica Automvel e tem como objectivos a Montagem e levantamento hardware ( sensores/actuadores) e software (algoritmos de controlo e comando usados) de um veculo comercial auto equilibrado de 1 eixo, o Elector WHeelie. Deste modo ser possvel o entendimento dos princpios fsicos que esto por trs deste tipo de veculos, bem como dos possveis modos associados ao seu controlo.

Na prossecuo dos objectivos apresentados o trabalho foi dividido nas seguintes partes:

Capitulo 1: Princpio de funcionamentoEste captulo explica o principio de funcionamento que mantm o equilbrio do Elektor Wheelie, indicando para isso a forma como os componentes interagem entre si, quais os sinais envolvidos e indica tambm os esquemas de ligao do hardware.

Capitulo 2: Sensores e actuadores utilizados no sistema.Neste captulo so indicados os principais componentes electrnicos que constituem o Elektor Wheelie e respectivas principais caractersticas tcnicas. Os datasheets de alguns componentes devido ao seu tamanho so fornecidos em separado com este relatrio.

Capitulo 3: Software de controloNeste captulo so explicadas as funes que controlam todo o fluxo de informao proveniente dos sensores e efectua os clculos necessrios para controlar os actuadores.

Capitulo 4: ConclusoNeste capitulo so indicadas as concluses retiradas aps se ter montado o ElecktorWheelie indicando as dificuldades encontradas na montagem.

Capitulo 5: Bibliografia

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 4

Este captulo indica quais as fontes de onde se retirou a informao necessria para a elaborao deste projecto

Capitulo 6: AnexosEste captulo tem a informao complementar para melhor compreenso do projecto.

IntroduoO ElecktorWheelie consiste num veculo com apenas 1 eixo de auto equilbrio para transporte de um passageiro. O controlo do equilbrio obtido atravs da leitura e processamento de dados por um microprocessador, o Atmega32. Os dados para controlo de velocidade angular e equilbrio provm de dois sensores, um acelermetro e um giroscpio. Aps o processamento do algoritmo de controlo o microprocessador envia sinais de comando para dois motores CC de imanes permanentes, de 500W, que esto acoplados s rodas por meio de redutores de razo aproximadamente 6.67:1. Sendo que o veculo pode mover-se em qualquer direco com uma velocidade mxima de, aproximadamente, 18Km/h. O sistema alimentado por duas baterias de chumbo, AGM, de 12V 9Ah, que permitem uma autonomia de entre uma hora a uma hora e meia dependendo da inclinao do terreno e da velocidade.

Figura 1: Expemplo da utilizao do ElektorWheelie

Na figura 1 mostra um exemplo de como o Elektor Wheelie pode transportar as pessoas Para a conduo deste veculo o utilizador tem que se inclinar na direco que pretende que o veculo se desloque mas apenas para andar para a frente ou para trs. Isto , para andar para a frente inclina o corpoMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 5

ligeiramente para a frente. Para andar para trs inclina o corpo para trs. Inclinar o corpo para trs serve tambm para reduzir a velocidade quando se est a movimentar para a frente. A direco controlada pela inclinao da coluna de direco que ao movimentar-se faz rodar um potencimetro que indica ao controlador (ATmega32) a direco pretendida.

Capitulo 1: Princpio de funcionamento

Neste captulo ser explicado o modo como os diversos componentes interagem para o bom funcionamento do Elecktor Whellie.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 6

Figura 2: Diagrama de blocos e sentidos de comunicao entre os diferentes componentes

Na figura anterior mostrado um diagrama de blocos que ilustra a ligao entre os diversos componentes e o sentido do fluxo de informao Como descrito anteriormente o movimento do veculo controlado pela inclinao da sua base, isto porque os sensores de inclinao esto montados na parte inferior da base onde do veculo e tendo assim esta como referncia para o ngulo de inclinao do veculo.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 7

Figura 3: Localizao da placa de controlo na parte inferior da base do veculo

Para o equilbrio do veculo so usados dois sensores que so o giroscpio IDG300 e o acelermetro ADXL320 e para a direco usado um potencimetro (ver figura 4) acoplado ao volante de direco

Figura 4: Potencimetro utilizado para aquisio do ngulo da coluna de direco.

Figura 5: Exemplo do acoplamento do potencimetro com a coluna de direco

A figura anterior mostra a forma como o potencimetro acoplado a coluna de direco para que efectue os mesmos movimentos que esta. Os sinais de acelerao provenientes do acelermetro e de posio do giroscpio so lidos e interpretados pelo microcontrolador ATmega32 que controla a direco e aplica a fora necessria a cada um dos motores utilizando duas sadas em PWM e com MOSFETs em ponte (ver figura 8), permitindo assim aplicar diferentes potncias aos motores e realizar curvas ou mesmo fazer o veculo girar sobre ele prprio. Para efeitos de proteco utilizado o sensor que efeito de Hall (ACS755 SCB-100) que interpretado pelo microcontrolador ATtiny25 que, verificando uma corrente excessiva (superior a 80A a fluir pelo sistema, possivelmente devido a um curto circuito, corta a corrente de 15V do circuito de alimentao da ponte utilizado para esse efeito a entrada de shutdown do regulador (MIC2941). Caso ocorra uma falha total nos circuitos ou fique fora de controlo, para proteco do utilizador, usado um sistema electromecnico que consiste num ligador que se deve encontrar preso ao utilizador de forma que caso acontea uma queda esta se desligue devido a ser puxada dos seus contactos.Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 8

Figura 6: Ligador de segurana encaixado no respectivo conector

Existe tambm um interruptor de p que informa ao ATmega32que se encontra algum a utilizar o do veculo, e caso este interruptor deixe de ser pressionado, 2 segundos depois cortada a alimentao dos motores evitando assim que o veculo se desloque sem controlo. Em modo normal de funcionamento o ATtiny25 usado para informar o ATmega32 quando a corrente no motor excede o valor nominal de 25A o que leva a que o ATmega32 controle a corrente tentando diminuir os sinais de controlo PWM. Os sinais provenientes dos sensores acelermetro, giroscpio e do potencimetro que se encontra acoplado ao volante so lidos pelas entradas A/D do ATmega32 sendo amostradas a uma frequncia de 100Hz A tenso da bateria tambm monitorizada pelo ATmega32 noutra entrada do conversor A/D e posteriormente visualizada em 3 leds (verde, amarelo, vermelho) que indicam o estado de carga das baterias. O equilbrio e estabilizao, como dito anteriormente, esto a cargo de dois sensores, o acelermetro de 2 eixos ADXL320 e do giroscpio de 2 eixos IDG30. O acelermetro mede a posio/inclinao do veculo, em relao ao plano horizontal, devido ao ngulo que a gravidade actua sobre o plano em que se encontra o dispositivo estando esses valores disponveis nas sadas Xout e Yout que variam respectivamente com a inclinao do plano no eixo dos X e dos Y. O giroscpio mede a velocidade de viragem que a velocidades elevadas apresenta na sua sada uma tenso de valor elevado que varia rapidamente e quando se encontra parado a tenso na sua sada aproximadamente metade da tenso de alimentao (3,3V).

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 9

Figura 7: Esquema de ligao do acelermetro (ADXL320) e do giroscpio IDG300

A figura anterior mostra o esquema de ligao dos sensores numa placa independente do restante circuito. Esta placa conectada ao restante circuito pelos conectores K1 e K2. A estabilidade ento obtida determinando a inclinao da plataforma em cada instante de tempo, para isso a sada do acelermetro integrada durante um longo perodo de tempo para se obter um sinal mais suave e posteriormente adicionado o sinal do giroscpio em propores empiricamente optimizadas pelos criadores deste projecto. O sinal da acelerao entregue ao controlador do motor ento calculado como uma combinao linear do erro de inclinao ou seja a diferena entre o ngulo de inclinao da plataforma e o ngulo pretendido que ser o mais horizontal possvel para que o utilizador se equilibre com mais facilidade, em termos prticos quanto maior for a inclinao da base, maior vai ser a velocidade e a potncia a entregar aos motores para corrigir o ngulo de inclinao.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 10

Figura 8: Esquema de ligao do ATmega32 com os restantes dispositivos

O controlo do motor efectuado pelo esquema indicado na figura anterior no qual se encontra o Atmega32 com um cristal a funcionar a frequncia de 16MHz e directamente ligado a um conector de programao ISP. A placa de sensores encontra-se separada desta e ligada no conector K2 que por sua vez liga as sadas dos sensores correspondentes aos eixos as entradas ADC2 e ADC5e no pino 32 (Aref) aplicada uma tenso de 3V proveniente do regulador de tenso da placa dos sensores.Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 11

Uma tenso de 3V tambm aplicada atravs do conector K3 ao potencimetro que controla a direco e que posteriormente fornece uma tenso na entrada ADC6 que indica a posio do volante. A tenso da bateria monitorizada na entrada ADC0 atravs de um divisor de tenso (R10 e R11). A posio interruptor do p monitorizado pela entra entrada ADC7 que se encontra ligado pelo conector K3. O sinal de deteco de falha proveniente do integrado que monitoriza a corrente ATtiny25 aplicado na entrada de interrupo INT0 que por sua ver recebe o sinal proveniente do sensor de efeito de HALL (ACS755SCB-100) que oferece um funcionamento linear at 100A e atravs do ATtiny25 coloca a varivel CURRFLAG em nvel alto fazendo assim com que a corrente no motor seja limitada atravs da limitao dos sinais de PWM. Os sinais que controlam a ponte de MOSFETs so PWM-L, PWM-R, CW/CCW-A e CW/CCW-B e quando combinados determinam a potencia e sentido da rotao dos motores. Sendo assim cada motor controlado por dois sinais e um andar em ponte H completa constituda por dois circuitos integrados de meia ponte do tipo IR2184 e 4 MOSFETs IRF4105. O circuito da ponte alimentado pelos 24V provenientes das baterias e os excitadores de meia ponte recebem a sua prpria tenso de alimentao de 15V do regulador MIC2941. O MIC2941 est tambm ligado ao ATtiny25 que o informa caso detecte um excesso de corrente, o que desliga a alimentao dos motores. Todos os restantes componentes esto alimentados a 5V pelo regulador 7805.

Figura 9: Esquema de ligao de todas as partes constituintes do projecto

A figura anterior indica a forma como os componentes externos placa principal so ligados como as baterias de alimentao, o interruptor de p, o potencimetro da direco, o interruptor principal, o fusvel de proteco e o interruptor de segurana.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 12

Figura 10: Placa com todo o hardware montado

Na figura anterior mostrado o aspecto na placa de controlo que se encontra montada na parte inferior da base com todos os componentes montados.

Capitulo 2: Sensores e actuadores utilizados nas vrias partes do sistemaRESUMOEste captulo ilustra as caractersticas tcnicas dos sensores, actuadores, e processadores associados ao diagrama de blocos de funcionamento do sistema apresentado no bloco anterior.

Bloco IEste bloco responsvel pelo controlo e gesto de todas as entradas e sadas do sistema sendo constitudo pelo microcontrolador principal.ATmega 32O ATmega32 o controlador utilizado neste projecto para a leitura do sensor de acelerao, do giroscpio e do potencimetro e processamento desses dados para posterior actuao dos motores, sendo por isso muito til a o facto de j ter conversores A/D incorporados, sendo as suas principais caractersticas: Micro controlador de 8 bits AVR de capacidade elevada, baixa potncia Arquitectura avanada RISC 131 instrues poderosas - a maioria de execuo num impulso de clock 32 x 8 registos de uso geral de funcionamento Operao inteiramente de esttica

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 13

Velocidades de clock at 16 MHz Memria no voltil de programa e de dados 1024 bytes EEPROM 2K byte SRAM interno Relao de JTAG (padro 1149.1 de IEEE complacente) Programao do flash, do EEPROM, dos fusveis, e dos bocados do fechamento atravs da relao de JTAG Caractersticas perifricas Dois temporizadores/contadores de 8 bits com Prescalers separado e modo de comparao Temporizador/contador de 16 bits com Prescaler separado, modo de comparao, e modo de captura Contador tempo real com oscilador separado Quatro canais de PWM 8 canais, 10 bit ADC 8 canais Single-ended 7 canais diferenciais 2 canais diferenciais com ganho programvel em 1x, em 10x, ou em 200x Interface srie por dois fios USART srie programvel Interface srie mestre/escravo SPI Temporizador de Watchdog programvel com o oscilador separado On-chip Comparador do analgico Oscilador interno RC Fontes da interrupo externa e interna

Figura 11: Esquema de pinos do ATmega8

Bloco II Este bloco ser responsvel pela aquisio do posicionamento e velocidade angular do Elektor Wheelie, constitudo pelo acelermetro ADXL320 que detecta a inclinao e pelo giroscpio IDG300 que detecta a velocidade angular.

Acelermetro ADXL320O ADXL320 um acelermetro de estado slido de baixo custo e de baixo consumo, que como o prprio nome indica mede a acelerao do corpo baseando-se no princpio no qual um corpo por aco da inrcia temMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 14

tendncia a conservar a sua velocidade deslocando-se em relao ao eixo, sendo essa deslocao a magnitude da acelerao. Possui duas sadas analgicas condicionadas em tenso que variam conforme a acelerao seja no eixo dos X ou Y. A acelerao medida numa escala at 5G (tpico). Pode igualmente medir a acelerao dinmica (vibrao) e a acelerao de esttica (gravidade).

Figura 12: Esquema de blocos funcionais do acelermetro ADXL320

Na figura anterior podemos verificar o esquema de blocos funcionais do ADXL320 que constitudo por um amplificador de corrente contnua, que amplifica os sinais X e Y provenientes do sensor e de seguida so rectificados para se obter um sinal mais preciso, no final os sinais so de novo amplificados por amplificadores independentes para cada canal X e Y ficando o sinal analgico disponvel nas sadas Xout e Yout .

Figura 13: Variao das sadas Xout e Yout com a inclinao

IDG-300 O IDG 300 um sensor de deslocao angular, giroscpio, de dois eixos (X e Y). Para isso utiliza dois sensores independentes cujo funcionamento baseado na teoria da vibrao do silicone1. No qual um desses sensores detecta a rotao em torno do eixo dos X e o outro detecta a rotao em torno do eixo dos Y. Quando um destes sensores roda em torno do eixo X ou Y origina uma vibrao provocada pelo efeito de Coriolis2 que detectada por um detector capacitivo, o resultado final

1

http://invensense.com/mems/gyro/documents/whitepapers/MEMSGyroComp.pdfO efeito Coriolis resultante de uma fora inercial que se aplica a corpos que se movimentam sobre uma superfcie em

2

rotao, como a Terra. A fora inercial actua esquerda da direco do movimento para rotao em sentido horrio e direita para rotao em sentido anti-horrio. O efeito Coriolis causa uma deflexo aparente na trajectria de um objecto que se move em linha recta num sistema de coordenadas em rotao. O objecto na verdade no se desvia da linha recta, mas aparenta faz-lo em funo do movimento da superfcie sob ele.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 15

amplificado, demodulado e filtrado para produzir uma sada em tenso analgica proporcional ao ngulo de inclinao. Todos estes circuitos electrnicos esto integrados num nico mdulo para a sua rpida aplicao.Sendo as suas principais caractersticas: Tenso de alimentao de 3V Escala completa de +/- 67 graus/segundo Sensibilidade de 15mV graus/segundo Auto calibrao Sensor de temperatura integrado Resistentes a choques at 10000 g

Figura 14: Esquema de blocos funcionais de IDG300

Bloco IIIEste bloco o responsvel pela alimentao, regulao da tenso e proteco de todos os componentes, sendo constituda pelo microcontrolador ATtiny25 que monitoriza o excesso de corrente cujo valor fornecido pelo ACS755-SCB-100. O MIC2941 um regulador de corrente que regula tenso de 15V do circuito de alimentao das pontes H e o LP2980 que monitoriza a tenso das baterias. ATtiny25O ATtiny25 um microcontrolador da Atmel e utilizado neste projecto para o controlo de corrente para evitar sobrecargas nos circuitos de controlo e nos motores, sendo as suas principais caractersticas: 2KB Flash programvel, 128 Bytes de EEPROM programvel, 128 Bytes de SRAM interna, Dois Temporizadores/contadores de 8 bits com PWM e prescaler, 10-bit ADC, USI-Universal Serial Interface.Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 16

debugWIRE for on-chip-debug. Frequncia de operao at 20 MHz.

Figura 15: Esquema de pinos do ATtiny25

ACS755-SCB-100Este dispositivo consiste num circuito que actua como um sensor de corrente por efeito de HALL e para isso possui no seu interior um circuito condutor em cobre que, quando percorrido por uma determinada corrente, gera um campo magntico que convertido numa tenso proporcional corrente que o percorre. A amostragem de tenso de sada ento obtida quando a corrente flui do terminal 4 para o terminal 5 ou seja entre IP+ e IP- (ver figura 16) Para que as medidas sejam as mais exactas possveis e com o menor nmero de perdas a resistncia interna do condutor de cobre muito baixa, cerca de 100. Este produto j se encontra descontinuado.3

Figura 16: Esquema interno do ACS755-SCB-100

MIC2941O MIC2940 um regulador de tenso que se encontra disponvel em configurao de tenses fixas (3.3V, 5V, e 12V) e em configuraes ajustveis de tenso de 1,24V at 26V. Os dispositivos MIC2940Axx so trs reguladores de 3 pinos de tenso fixa. Mas o MIC2941A usado neste projecto possui uma entrada lgica de shutdown programada, que permite o regulador de ser ligado ou desligado atravs de um sinal proveniente do ATtiny25 caso seja detectado um excesso de corrente.

3

O efeito Hall refere-se diferena de potencial (potencial de Hall) nos lados opostos de uma fina folha de material condutor ou semicondutor na forma de uma 'barra Hall' (ou um elemento de van der Pauw) atravs da qual uma corrente elctrica flui, criada por um campo magntico aplicado perpendicularmente ao elemento Hall. A razo da tenso mdia pela intensidade de corrente conhecida como resistncia Hall, e caracterstica do material. O fsico Edwin Herbert Hall descobriu esse efeito em 1879.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 17

Figura 17: Esquema de pinos e ligaes do regulador de tenso MIC2941

LP2980Este componente tem como funo fazer a monitorizao da tenso da bateria em que o transstor NPN regula a tenso e corrente por dissipao de energia, assim a corrente de sada pode ir at 400mA.

Figura 18: Esquema interno do LP2980

Bloco IVEste bloco responsvel pela ligao entre o sinal de PWM proveniente do microprocessador e os motores, sendo os seus constituintes o IR2184 que corresponde a meia ponte H e sendo necessrios dois destes componentes para criar a ponte H de cada motor. IR2184Este componente um dos constituintes da ponte H que alimenta os motores sendo que cada componente representa meia ponte que aguenta uma carga mxima de 600V que consiste num MOSFET de alta tenso e de um IGBT alta velocidade com as sadas high e low dependentes. As entradas lgicas so compatveis com CMOS ou LSTTL, activadas at uma tenso mnima de 3.3V. Devido as altas correntes que percorrem o MOSFET IRF1405 aconselhvel a colocao de dissipadores de calor para evitar sobreaquecimentos e a consequentemente a destruio do componente.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 18

Figura 19: Esquema interno do IR2184

Concluso do captuloNeste captulo foi explicado de uma forma mais pormenorizada as caractersticas dos principais componentes electrnicos que constituem o Elektor Wheelie. A explicao de alguns dos componentes foi baseada nos respectivos datasheets que se encontram em anexo a este relatrio.

Capitulo 3: Software de controlo

Figura 20 : Fluxograma do software de controlo

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 19

O software tem como funo o controlo e processamento do fluxo de dados provenientes dos inputs do sistema (sensores) e posterior comando dos actuadores, para isso o fluxo de dados proveniente dos sensores actualizado a uma frequncia de 100Hz fazendo assim com que o controlo do veculo seja suave. Aps efectuadas as devidas inicializaes de todas as variveis, configuraes do Timer0 como interrupo, o Timer 1 como PWM, ler os valores iniciais de calibrao e activar as interrupes, todas as rotinas so efectuadas dentro da rotina de interrupo em constante loop gerado pela interrupo do Timer0. Nessas rotinas inseridas no loop so ento lidos os valores provenientes dos vrios canais dos conversores A\D, ento calculado o valor do ngulo que necessrio corrigir, integrar o valor do giroscpio e do acelermetro, seguidamente calculado o valor que deve ser entregue aos drivers dos motores para compensar a inclinao tendo tambm em conta o valor proveniente da coluna de direco para calcular a direco do movimento e faz ainda a verificao de existncia de alarme de excesso de corrente e se o interruptor de p est pressionado. Caso a velocidade mxima seja atingida e seja necessrio corrigir o ngulo da plataforma ento enviada um potencia extra para os motores (em modo normal funcionam a 70% da sua potncia mxima) que empurra o condutor para trs e diminui a velocidade. O software foi desenvolvido utilizando a plataforma Bascom-AVR e encontra-se transcrito no anexo A e pelo que seguidamente se explica as principais funes envolvidas.

Funo init:Inicializa as configuraes TIMER0, TIMER1, as sadas PWM, as variveis e calibra o giroscpio, o acelermetro e o controlo de direco.

Funo Get_Angle:L os valores das entradas analgicas, integra os valores do giroscpio e da bateria durante um perodo de 50 amostras e ento calcula a velocidade angular (Angle_Rate) e a inclinao absoluta(Tilt_angle).

Funo Filter:Calcula a alterao necessria na acelerao dos motores (Balance_Diff) e a velocidade final dos motores (Drive_Speed).

Funo Process:Utiliza a velocidade e a posio actual do volante para obter a alterao necessria na velocidade dos motores para virar o veculo no sentido pretendido, sendo que por motivos de segurana quanto maior for a velocidade menor ser o ngulo de viragem. Verifica se o controlador de corrente reportou algum evento de sobrecarga de corrente nos motores e reduz a velocidade (Drive_Speed) caso necessrio. A condio de sobrecarga e o alarme de estado do interruptor de p so sinalizados pelos LEDs a piscar. A funo invoca tambm a funo Get_speed_batt.

Funo Get_speed_batt:Esta funo adiciona o valor Angle_correction no caso da velocidade mxima seja ultrapassada e define o estado dos leds indicadores do estado da bateria.

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 20

Funo PWM_OutConfigura as sadas PWM de acordo com a acelerao necessria para os motores se bem como as sadas que indicam o sentido de rotao desejado. Impem tambm um limite mximo para a potncia de excitao (PWM_MAX)

Funo interrupt:Esta funo funciona a frequncia de 100Hz, invocando para isso as funes: Get_Angle, Filter, PWM_Out.Eliminado:

Capitulo 4: ConclusoA montagem de todo o hardware com concluda com sucesso bem como os testes de funcionamento do Elektor Wheelie. Verificou-se ser um veculo de fcil conduo e apenas necessitando de poucos minutos para o utilizador se habituar a sua utilizao. Sendo o seu funcionamento suave no se notando movimentos bruscos dos motores para controlar o veculo. Devido a sua potncia limitada e caso a inclinao da base seja muito elevada os motores podero no ter potncia suficiente para voltar a equilibrar o veculo o que pode provocar a queda do utilizador. A montagem no ofereceu muita dificuldade no entanto alguns materiais de alguns componentes no se mostraram muito resistentes o que levou a que por exemplo fosse necessrio reforar o tubo da coluna de direco com madeira no seu interior para aumentar a sua resistncia, as rodas nomeadamente o seu eixo foi necessrio reforar porque se verificou que aps alguma utilizao o parafusos comeavam a ficar soltos e as rodas oscilavam muito pelo que se procedeu ao seu reforo com mais parafusos j que estas apenas vm presas por um nico parafuso por roda. Como sugesto de melhoria as baterias deviam ser trocadas por umas com maior autonomia, e a estrutura das rodas deveriam ser mais robusta para aguentar melhor o peso do utilizador.

Capitulo 5: BibliografiaRevista Elektor Julho/Agosto 2009 Edio Portuguesa N295/296 pg 10 a 19; Datasheets dos vrios componentes; www.elektor.com.pt http://invensense.com/mems/gyro/documents/whitepapers/MEMSGyroComp.pdf www.invensense.com/shared/pdf/DS_IDG300.pdfMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 21

www.analog.com/static/imported-files/data_sheets/ADXL320.pdf

Capitulo 6: AnexosPelo facto de as datasheets de alguns componentes ser demasiado extensas para colocar em anexo foi decidido as colocar em PDFs separado deste relatrio.

Anexo ACdigo de programao do controlador' 080718-1 (c)2009 Elektor International Media B.V. / Chris Krohne ' -----------------------------------------------------------------------------' -----------------------------------------------------------------------------' Purpose ' Elektor-Wheelie motor control board source code ' ' Changes Log ' - 2.6 : final beta source code for publication ' - 2.4b : initial beta source code for publication ' ' Notes ' Nothing special, may come later... ' -----------------------------------------------------------------------------$crystal = 16000000 $baud = 19200 Pwm_al Alias Ocr1al Pwm_bl Alias Ocr1bl Led3 Alias Portb.4 Led2 Alias Portb.3 Led1 Alias Portb.2 Cw_ccw_a Alias Portd.6 Cw_ccw_b Alias Portd.7 Config Porta = Input Config Portb = Input Config Pinb.4 = Output Config Pinb.3 = Output Config Pinb.2 = Output Config Portc = Output Config Portd = Output Config Pind.2 = InputMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 22

Config Adc = Single , Prescaler = 128 , Reference = Off Start Adc Config Timer0 = Timer , Prescale = 1024 On Timer0 Tinter Dim Buzzer As Byte Dim Ad_adxl As Long Dim Ad_gyro As Long Dim Ad_batt As Integer Dim Ad_swi As Integer Dim Total_adxl_gyro As Long Dim Average_gyro As Long Dim Average_batt As Long Dim Drivea As Integer Dim Driveb As Integer Dim Buf1 As Long Dim Buf As Long Dim Buf2 As Long Dim Buf5 As Integer Dim Tilt_angle As Long Dim Drive_a As Integer Dim Drive_b As Integer Dim Tcount As Integer Dim Drivespeed As Long Dim Steeringsignal As Long Dim Anglecorrection As Long Dim Angle_rate As Long Dim Balance_moment As Long Dim Mmode As Byte Dim Drive_sum As Long Dim Ad_rocker As Integer Dim Blinkcount As Byte Dim Timeout As Long Dim Delta As Byte Dim Buf3 As Long Dim Rockersq As Long Dim Rocker_zero As Integer Dim Adxl_zero As Word Dim Gyro_zero As Word Dim Loopct As Integer Dim Limitcurr As Integer Dim Errno As Byte Dim Adxl_offset As Integer Const First_adc_input = 0 Const Last_adc_input = 6 Const Adc_vref_type = $0x40 Const Mdrivesumlimit = 20000 Const Total_looptime = 500 Const Total_looptime10 = 50

' / / Looptime For Filters ' / / Looptime For Filters Pgina 23

Montagem e levantamento de caractersticas do Elektor Wheelie

Const _run = 1 Const _standby = 0 Const _warmup = 2 Const _down = 3 Const Safespeed = 5000 Const Msafespeed = -5000 Const Sw_down = 50 Const Critical = 80 Const Max_pwm = 180 Const Mmax_pwm = -180 Const Battdead = 487000 Const Battok = 505000 Declare Sub Get_tilt_angle Declare Sub Set_pwm Declare Sub Algo Declare Sub Process Declare Sub Ini Declare Sub Getspeedlimit Declare Sub Err_value Pwm_al = 255 Pwm_bl = 0 'Init Variables' Gosub Ini ' Give some blinks Set Led1 Waitms 150 Set Led2 Waitms 150 Set Led3 Waitms 250 Reset Led1 Reset Led2 Reset Led3 '---------------------------------------------------------' 'check pushbutton' Ad_swi = 0 For Buf = 1 To 10 Ad_swi = Ad_swi + Getadc(7) Waitms 1 Next Buf 'calculate middel' Ad_swi = Ad_swi / 10 Waitms 100

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 24

'must be closed If Ad_swi < 100 Then Errno = 4 Goto Err_value End If '---------------------------------------------------------' 'Get Steering_zero Position' Ad_rocker = 0 For Buf = 1 To 10 Ad_rocker = Ad_rocker + Getadc(6) Waitms 1 Next Buf 'calculate middel' Rocker_zero = Ad_rocker / 10 Waitms 100 '---------------------------------------------------------' 'Get gyro_zero Ad_gyro = 0 For Buf = 1 To 10 Buf1 = Getadc(5) Buf1 = 1024 - Buf1 Ad_gyro = Ad_gyro + Buf1 Waitms 5 Next Buf 'calculate middel' Gyro_zero = Ad_gyro / 10 'set average_gyro Average_gyro = Total_looptime * Gyro_zero '---------------------------------------------------------' 'Get adxl_zero Ad_adxl = 0 For Buf = 1 To 10 Buf1 = Getadc(3) Ad_adxl = Ad_adxl + Buf1 Waitms 5 Next Buf 'calculate middel' Adxl_zero = Ad_adxl / 10 ' check if in rage If Adxl_zero < 400 Then Errno = 3 Goto Err_value End If If Adxl_zero > 600 Then Errno = 3 Goto Err_value End If If Gyro_zero < 350 ThenMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 25

Errno = 2 Goto Err_value End If If Gyro_zero > 750 Then Errno = 2 Goto Err_value End If Enable Interrupts Enable Timer0 'main loop S1: ' nothing to do, all work is done in the interrupt ;) Goto S1 '----------------------------------------------------------' '----------------------------------------------------------' Sub Set_pwm 'Limiting PWM' If Drive_a > Max_pwm Then Drive_a = Max_pwm End If If Drive_a < Mmax_pwm Then Drive_a = Mmax_pwm End If 'set direction bit' If Drive_a < 0 Then Drivea = Drive_a * -1 Cw_ccw_a = 1 End If If Drive_a >= 0 Then Drivea = Drive_a Cw_ccw_a = 0 End If 'Inverse signal to have 180 phaseshift to PWMB Pwm_al = 255 - Drivea 'Limiting PWM' If Drive_b > Max_pwm Then Drive_b = Max_pwm End If If Drive_b < Mmax_pwm Then Drive_b = Mmax_pwm End If 'set direction bit' If Drive_b < 0 ThenMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 26

Driveb = Drive_b * -1 Cw_ccw_b = 1 End If If Drive_b >= 0 Then Driveb = Drive_b Cw_ccw_b = 0 End If Pwm_bl = Driveb Return End Sub '----------------------------------------------------------' '----------------------------------------------------------' Sub Algo 'Buf = Tilt_angle + Anglecorrection Buf = Tilt_angle Buf = Buf * 17 '19 Buf1 = Angle_rate * 17 ' 19 'calculate balance moment Balance_moment = Buf1 + Buf 'calculate drive_sum Drive_sum = Drive_sum + Balance_moment ' limitting If Drive_sum > 55000 Then Drive_sum = 55000 End If If Drive_sum < -55000 Then Drive_sum = -55000 End If 'calculate drive speed' Buf = Drive_sum / 155 Buf1 = Balance_moment / 165 Drivespeed = Buf + Buf1 Return End Sub '----------------------------------------------------------' '----------------------------------------------------------' Sub Getspeedlimit Buf1 = 0 If Drive_sum > 0 Then Buf1 = Drive_sum - Mdrivesumlimit End If

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 27

Buf1 = Buf1 / 70 Adxl_offset = 0 If Buf1 > 13 Then Buf1 = 13 If Buf1 < 0 Then Buf1 = 0 If Buf1 > 0 Then Adxl_offset = Buf1 Buzzer = 2 End If If Buzzer = 0 Then 'check batt voltage If Average_batt > Battok Then Set Led1 Reset Led2 Reset Led3 End If If Average_batt < Battok Then Set Led2 Reset Led3 Reset Led1 End If If Average_batt < Battdead Then Reset Led2 Reset Led1 Set Led3 End If End If Return End Sub '----------------------------------------------------------' '----------------------------------------------------------' Sub Process Tcount = Tcount + 1 'do some logs or something else If Tcount > 10 Then If Buzzer = 1 Then Set Led1 Set Led2 Set Led3 End If If Buzzer = 2 Then Set Led3 End If End IfMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 28

If Tcount > 16 Then If Buzzer > 0 Then Reset Led1 Reset Led2 Reset Led3 Blinkcount = Blinkcount + 1 End If Tcount = 1 'alarm reset' If Blinkcount > 10 Then Blinkcount = 0 Buzzer = 0 End If End If 'calculate steering' Rockersq = Rocker_zero - Ad_rocker 'Steering depends on speed' Buf1 = Drive_sum / 20000 If Buf1 < 0 Then Buf1 = Buf1 * -1 End If If Buf1 < 1 Then Buf1 = 1 Rockersq = Rockersq / Buf1 'some safety lines, limits steering 'drivesum 55000 max = +- 5 Buf1 = Drive_sum / 2000 If Buf1 < 0 Then Buf1 = Buf1 * -1 If Buf1 > 22 Then Buf1 = 22 Buf1 = 27 - Buf1 Buf2 = Buf1 * -1 If Rockersq > Buf1 Then Rockersq = Buf1 If Rockersq < Buf2 Then Rockersq = Buf2 Steeringsignal = Rockersq 'overcurren situation? If Pind.2 = 0 Then Limitcurr = 125Montagem e levantamento de caractersticas do Elektor Wheelie

'6000

Pgina 29

End If If Pind.2 = 1 Then If Limitcurr < 30000 Then Limitcurr = Limitcurr + 1 End If Buzzer = 1 End If Drivespeed = Drivespeed * 125 Drivespeed = Drivespeed / Limitcurr 'set speed and steering Drive_a = Drivespeed - Steeringsignal Drive_b = Drivespeed + Steeringsignal 'need some seconds to compensate the gyro temp-drift If Mmode = _warmup Then Drive_a = 0 Drive_b = 0 Drivespeed = 0 Anglecorrection = 0 'Overspeed = 0 Drive_sum = 0 Total_adxl_gyro = 0 Tilt_angle = 0 If Loopct > 200 Then Mmode = _standby End If End If If Mmode = _standby Then Drive_a = 0 Drive_b = 0 Drivespeed = 0 Anglecorrection = 0 'Overspeed = 0 Drive_sum = 0 Total_adxl_gyro = 0 Tilt_angle = 0 Buf2 = Ad_adxl - Adxl_zero Buf2 = Buf2 + Adxl_offset Timeout = 0 'stand on platform If Ad_swi > Sw_down Then Mmode = _run End If

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 30

End If If Mmode = _run Then 'check platform buttons If Ad_swi > Sw_down Then 'Person on board, Timeout = 0 End If If Ad_swi < Sw_down Then 'no Person on board!, check savespeed If Drive_sum < 0 Then If Drive_sum < Msafespeed Then Buzzer = 1 Timeout = Timeout + 1 End If End If If Drive_sum > 0 Then If Drive_sum > Safespeed Then Buzzer = 1 Timeout = Timeout + 1 End If End If If Timeout > Critical Then Mmode = _down End If End If End If If Mmode = _down Then For Buf1 = 1 To 255 If Drive_a > 0 Then Drive_a = Drive_a - 1 End If If Drive_a < 0 Then Drive_a = Drive_a + 1 End If If Drive_b > 0 Then Drive_b = Drive_b - 1 End If If Drive_b < 0 Then Drive_b = Drive_b + 1Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 31

End If Waitms 2 Gosub Set_pwm Next Buf1 Mmode = _standby End If Return End Sub

'-----------------------------------------------------------------------'

Sub Ini ' do some assembler inits $asm ldi r16,0 Out Porta , R16 Out Ddra , R16 ldi r16,0 Out Portc , R16 ldi r16,255 Out Ddrc , R16 ldi r16,$34 Out Portd , R16 ldi r16,251 Out Ddrd , R16 ldi r16,$b1 Out Tccr1a , R16 ldi r16,$01 Out Tccr1b , R16 ldi r16,0 Out Tcnt1h , R16 Out Tcnt1l , R16 Out Icr1h , R16 Out Icr1l , R16 Out Ocr1ah , R16 ldi r16,$ff Out Ocr1al , R16 ldi r16,0 ldi r16,0 Out Ocr1bl , R16 Out Assr , R16 Out Tccr2 , R16 Out Tcnt2 , R16

'b1=8bit ,b2=9bit,b3=10bit ' 01 no prescaler!

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 32

Out Ocr2 , R16 $end Asm Total_adxl_gyro = 0 Average_gyro = 0 Average_batt = Battok * Total_looptime Drivea = 0 Driveb = 0 Tilt_angle = 0 Drive_a = 0 Drive_b = 0 Drivespeed = 0 Steeringsignal = 0 Anglecorrection = 0 Angle_rate = 0 'Voltage = 0 Balance_moment = 0 'Overspeed = 0 Mmode = _standby 'Overspeed_flag = 0 Drive_sum = 0 Ad_rocker = 0 Tcount = 0 Steeringsignal = 0 Timeout = 0 Delta = 0 Loopct = 0 Limitcurr = 100 Blinkcount = 0 Adxl_offset = 0 End Sub '----------------------------------------------------' Tinter: Disable Interrupts Gosub Get_tilt_angle Gosub Getspeedlimit Gosub Algo Gosub Process Gosub Set_pwm Timer0 = 100 Enable Interrupts Return '----------------------------------------------------' Sub Err_value S3:Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 33

For Buf = 1 To Errno Set Led3 Waitms 150 Reset Led3 Waitms 150 Next Buf Wait 2 Goto S3 End Sub '----------------------------------------------------' Sub Get_tilt_angle Ad_gyro = Getadc(5) Ad_gyro = 1024 - Ad_gyro Ad_adxl = Getadc(3) Ad_batt = Getadc(0) Ad_rocker = Getadc(6) Ad_swi = 1024 - Getadc(7) Buf = Total_adxl_gyro / Total_looptime Total_adxl_gyro = Total_adxl_gyro - Buf ' ADXL part Buf = Ad_adxl - Adxl_zero Buf = Buf + Adxl_offset Total_adxl_gyro = Total_adxl_gyro + Buf ' Gyro part Buf1 = Average_gyro / Total_looptime Average_gyro = Average_gyro - Buf1 Average_gyro = Average_gyro + Ad_gyro Buf1 = Average_gyro / Total_looptime10 ' calculate the Angle Rate Buf = Ad_gyro * 10 Buf1 = Buf1 - Buf Buf1 = Buf1 * 35 Buf1 = Buf1 / 100 Angle_rate = Buf1 ' calculate the Tilt Angle Total_adxl_gyro = Total_adxl_gyro + Angle_rate Tilt_angle = Total_adxl_gyro / Total_looptime10 'calculate batt_voltage Buf1 = Average_batt / Total_looptime Average_batt = Average_batt - Buf1Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 34

Average_batt = Average_batt + Ad_batt

Loopct = Loopct + 1 Return End Sub End

Anexo BCodigo de programao do controlador de corrente' 080718-1 (c)2009 Elektor International Media B.V. / Chris Krohne ' -----------------------------------------------------------------------------' -----------------------------------------------------------------------------' Purpose ' Elektor-Wheelie current controller ' ' Changes Log ' - 2.0 : initial beta source code for publication ' - 0.1 : initial source code for publication ' ' Notes ' Nothing special, may come later... ' -----------------------------------------------------------------------------$regfile = "attiny25.dat" $crystal = 8000000 ' fuses ' 0xFF, 0xDD, 0xE2 Const Cur25 = 27000 Const Curdead = 76500 Portb = 1 Config Portb = Input Config Adc = Single , Prescaler = Auto Start Adc Config Portb.1 = Output Config Portb.0 = Output Dim Ad_curr As Long Dim Buf As Long Dim Av_curr As Long Dim Cflag As ByteMontagem e levantamento de caractersticas do Elektor Wheelie

Pgina 35

Portb = 1 'disable vreg Cflag = 0 'wait a little Waitms 200 'Now give power to the chip ' enable vreg Portb = 0 Av_curr = 0 S1: Ad_curr = Getadc(2) Buf = Av_curr / 75 Av_curr = Av_curr - Buf Av_curr = Av_curr + Ad_curr 'Curr Flag If Cflag = 0 Then '0.8A' If Av_curr > Cur25 Then Portb = 2 Else Portb = 0 End If End If 'over current, disable vreg ' 3.5A' If Av_curr > Curdead Then Portb = 3 Cflag = 1 End If Goto S1 End

Montagem e levantamento de caractersticas do Elektor Wheelie

Pgina 36

Anexo C

MotoresTransmisso elctrica Unite MY1020Z2 450W 24V 12,6 Nm Nome do produto: 450W DC 24V motor elctrico de corrente contnua com caixa de velocidades 6.7:1 Fabricante: Zhejiang Unite Motor Electric Co., Ltd.. Nome do produto, descrio e preo: MY1020Z2

CaracteristicasSada Corrente nominal (= carregado) Velocidade (= carregado) velocidade mxima (= sem carga) Corrente nominal (= sem carga) Binrio Transmisso de potncia

450 W (500W) / 24 V