Operácie

Elektronická škrtiaca klapka: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
(32 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 20: Riadok 20:
== Analýza  a opis riešenia ==
== Analýza  a opis riešenia ==


Témou mojej semestrálnej práce som si vybral ovládanie škrtiacej klapky pomocou plynového pedálu.<p>
Mojou témou semestrálnej práce je ovládanie škrtiacej klapky pomocou plynového pedálu. Zapojenie a vypracovanie projektu je inšpirované cvičením 8: (http://senzor.robotika.sk/sensorwiki/index.php/A/D_prevodn%C3%ADk).<p>  
<br>
<br>
Súčiastky a diely ktoré boli použité na zostrojenie projektu:<br>
Súčiastky a diely ktoré boli použité na zostrojenie projektu:<br>
Riadok 34: Riadok 34:
• breadboard (MB-102 830/400) <br>
• breadboard (MB-102 830/400) <br>
• duPont káble M-M - 40x, 40 cm <br>
• duPont káble M-M - 40x, 40 cm <br>
<br>
Presný opis fungovania elektrického obvodu: <br>
<br>
V akej pozícií je pedál toľko energie sa vysiela na pohon škrtiacej klapky, v našom prípade s aktuálnym zapojením sa klapka začne hýbať až po prekročení 40% zatlačenia pedálu, aby sme predišli tomuto neefektívnemu ovládaniu a chceliť docieliť identický pohyb klapky a pedálu tak som pre budúce vylepšovanie do projektu zakomponoval aj predprípravu (arduino výstup A3, A1 a A2) na spätnoväzobný regulátor aby  klapka presne kopírovala polohu pedálu.
[[Súbor:schemap.jpg|500px|thumb|center|ELEKTRONICKÁ SCHÉMA]]
[[Súbor:schemap.jpg|500px|thumb|center|ELEKTRONICKÁ SCHÉMA]]


Nezabudnite doplniť schému zapojenia!
Vizuálna reprezentácia PWM (Pulse width modulation), šírka impulzu sa mení podľa závislosti zatlačenia pedálu.
 
[[Súbor:Osciloskopp.jpg|800px|thumb|center|ZÁZNAM Z OSCILOSKOPU]]
[[Súbor:Osciloskopp.jpg|800px|thumb|center|ZÁZNAM Z OSCILOSKOPU]]


Riadok 43: Riadok 48:
=== Algoritmus a program ===
=== Algoritmus a program ===


Algoritmus programu je....
Celý kód som použil z 8 cvičenia, kde sme sa mohli naučiť ovládať ledku pomocou PWM, kód je napísaný v jednom .c súbore – na spustenie treba 4 knižnice.
 


<tabs>
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
<tab name="main.c"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
#include <avr/io.h>
#include "uart.h"
#include "uart.h"
Riadok 60: Riadok 64:
   hw_init();
   hw_init();
   uart_init();
   uart_init();
   stdout = &mystdout;           // printf() works from now
   stdout = &mystdout;        
   unsigned int measuredValue;
   unsigned int measuredValue;


   DDRD|=(1<<PD6);       // Init PD5 and PD6 pins as output
   DDRD|=(1<<PD6);      


  TCNT0=0;                       


  //Initialize Timer0
   OCR0A=0;                    
 
                             
  TCNT0=0;                        // Set Initial Timer value
 
   OCR0A=0;                       // Set Initial Pulse width
 
 
                                //Set fast PWM mode + clear OC0A and set OC0B on compare match
 
   TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
   TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);


   TCCR0B|=(1<<CS02)|(1<<CS00);      // Set prescaller 1024 and start timer
   TCCR0B|=(1<<CS02)|(1<<CS00);       
    
    
   while(1)
   while(1)
Riadok 92: Riadok 90:


</source></tab>
</source></tab>
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
<tab name="adc.h"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
#include <avr/io.h>


void adc_init(void);                                   // A/D converter initialization
void adc_init(void);                                


unsigned int adc_read(char a_pin);
unsigned int adc_read(char a_pin);
</source></tab>
</source></tab>
</tabs>
<tab name="adc.c"><source lang="c++" style="background: LightYellow;">
#include <stdio.h>
#include "adc.h"
 
void adc_init(void){
ADMUX=(1<<REFS0);
ADCSRA=(1<<ADEN)
|(1<<ADPS2)|(1<<ADPS2)|(1<<ADPS0);
}
 
unsigned int adc_read(char a_pin){
a_pin &=0x07;
ADMUX =(ADMUX & 0xF8)|a_pin;
ADCSRA |=(1<<ADSC);
while(ADCSRA & (1<<ADSC));
return (ADC);
}


Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':


</source></tab>
</tabs>
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]


=== Overenie ===
=== Overenie ===


Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.  
Video reprezentácia funkčného zaraidenia.
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
[[Súbor:sklapka.jpg|550px|thumb|center|Aplikácia.]]
 
[[Súbor:sklapka.jpg|400px|thumb|center|Aplikácia.]]


'''Video:'''
'''Video:'''
<center><youtube>_bB7sJQAfE8</youtube></center>
<center><youtube>_bB7sJQAfE8</youtube></center>


Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
 


[[Category:AVR]] [[Category:MIPS]]
[[Category:AVR]] [[Category:MIPS]]

Verzia z 18:02, 26. máj 2024

Záverečný projekt predmetu MIPS / LS2024 - Peter Szovics


Zadanie

Zostrojte a naprogramujte ovladanie škrtiacej klapky pomocou plynového pedálu.



Vývojová doska Arduino UNO R3

Literatúra:


Analýza a opis riešenia

Mojou témou semestrálnej práce je ovládanie škrtiacej klapky pomocou plynového pedálu. Zapojenie a vypracovanie projektu je inšpirované cvičením 8: (http://senzor.robotika.sk/sensorwiki/index.php/A/D_prevodn%C3%ADk).


Súčiastky a diely ktoré boli použité na zostrojenie projektu:

• elektronický plynový pedál (1K2 721 503 AJ)
• elektronická škrtiaca klapka (047 133 062)
• sacie potrubie (047 129 743 G)
• arduino r3 doska (Microchip ATmega328P)
• adaptér 230V/9V (ASSA107E-090100)
• napatovy stabilizator (7805)
• mosfet transistor (IRF540N)
• rezistory 1kΩ, 220Ω
• breadboard (MB-102 830/400)
• duPont káble M-M - 40x, 40 cm

Presný opis fungovania elektrického obvodu:

V akej pozícií je pedál toľko energie sa vysiela na pohon škrtiacej klapky, v našom prípade s aktuálnym zapojením sa klapka začne hýbať až po prekročení 40% zatlačenia pedálu, aby sme predišli tomuto neefektívnemu ovládaniu a chceliť docieliť identický pohyb klapky a pedálu tak som pre budúce vylepšovanie do projektu zakomponoval aj predprípravu (arduino výstup A3, A1 a A2) na spätnoväzobný regulátor aby klapka presne kopírovala polohu pedálu.

ELEKTRONICKÁ SCHÉMA

Vizuálna reprezentácia PWM (Pulse width modulation), šírka impulzu sa mení podľa závislosti zatlačenia pedálu.

ZÁZNAM Z OSCILOSKOPU


Algoritmus a program

Celý kód som použil z 8 cvičenia, kde sme sa mohli naučiť ovládať ledku pomocou PWM, kód je napísaný v jednom .c súbore – na spustenie treba 4 knižnice.

#include <avr/io.h>
#include "uart.h"
#define F_CPU 16000000UL
#define BAUDRATE       9600
#include <stdio.h>
FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
                              
int main(void)
{
  adc_init();
  hw_init();
  uart_init();
  stdout = &mystdout;          
  unsigned int measuredValue;

  DDRD|=(1<<PD6);       

  TCNT0=0;                        

  OCR0A=0;                      
                              
  TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);

  TCCR0B|=(1<<CS02)|(1<<CS00);      
  
  while(1)
  {
	measuredValue = adc_read(4);
	printf("hodnota: %04d \r",measuredValue);
	
	OCR0A=measuredValue/4;
  }
  
  return(0);
}
#include <avr/io.h>

void adc_init(void);                                  

unsigned int adc_read(char a_pin);
#include <stdio.h>
#include "adc.h"

void adc_init(void){
	ADMUX=(1<<REFS0);
	ADCSRA=(1<<ADEN)
		|(1<<ADPS2)|(1<<ADPS2)|(1<<ADPS0);		
}

unsigned int adc_read(char a_pin){
	a_pin &=0x07;
	ADMUX =(ADMUX & 0xF8)|a_pin;
	ADCSRA |=(1<<ADSC);
	while(ADCSRA & (1<<ADSC));
	return (ADC);
}

Zdrojový kód: zdrojaky.zip

Overenie

Video reprezentácia funkčného zaraidenia.

Aplikácia.

Video: