Elektronická škrtiaca klapka: Rozdiel medzi revíziami
Z SensorWiki
(→Zadanie) |
(→Algoritmus a program) |
||
(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 == | ||
− | + | 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]] | ||
− | + | 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 === | ||
− | + | 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=" | + | <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; | + | stdout = &mystdout; |
unsigned int measuredValue; | unsigned int measuredValue; | ||
− | DDRD|=(1<<PD6); | + | DDRD|=(1<<PD6); |
+ | TCNT0=0; | ||
− | + | OCR0A=0; | |
− | + | ||
− | |||
− | |||
− | OCR0A=0; | ||
− | |||
− | |||
− | |||
− | |||
TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); | TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); | ||
− | TCCR0B|=(1<<CS02)|(1<<CS00); | + | TCCR0B|=(1<<CS02)|(1<<CS00); |
while(1) | while(1) | ||
Riadok 92: | Riadok 90: | ||
</source></tab> | </source></tab> | ||
− | <tab name=" | + | <tab name="adc.h"><source lang="c++" style="background: LightYellow;"> |
#include <avr/io.h> | #include <avr/io.h> | ||
− | void adc_init(void); | + | void adc_init(void); |
unsigned int adc_read(char a_pin); | unsigned int adc_read(char a_pin); | ||
</source></tab> | </source></tab> | ||
− | < | + | <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); | ||
+ | } | ||
− | |||
+ | </source></tab> | ||
+ | </tabs> | ||
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | ||
=== Overenie === | === Overenie === | ||
− | + | Video reprezentácia funkčného zaraidenia. | |
− | + | [[Súbor:sklapka.jpg|550px|thumb|center|Aplikácia.]] | |
− | |||
− | [[Súbor:sklapka.jpg| | ||
'''Video:''' | '''Video:''' | ||
<center><youtube>_bB7sJQAfE8</youtube></center> | <center><youtube>_bB7sJQAfE8</youtube></center> | ||
− | + | ||
[[Category:AVR]] [[Category:MIPS]] | [[Category:AVR]] [[Category:MIPS]] |
Verzia zo dňa a času 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.
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.
Vizuálna reprezentácia PWM (Pulse width modulation), šírka impulzu sa mení podľa závislosti zatlačenia pedálu.
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.
Video: