Spisu treści:
- Krok 1: Opis
- Krok 2: Timery AVR – tryb PWM
- Krok 3: Pomiar natężenia światła - ADC i LDR
- Krok 4: Sterownik silnika prądu stałego i moduł sterownika silnika z podwójnym mostkiem H-L298N
- Krok 5: Pisanie kodu programu w C. Ładowanie pliku HEX do pamięci Flash mikrokontrolera
- Krok 6: Obwód elektryczny
Wideo: Mikrokontroler AVR. Modulacja szerokości impulsów. Kontroler silnika prądu stałego i natężenia światła LED.: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Cześć wszystkim!
Modulacja szerokości impulsu (PWM) jest bardzo powszechną techniką w telekomunikacji i sterowaniu zasilaniem. jest powszechnie używany do sterowania mocą dostarczaną do urządzenia elektrycznego, niezależnie od tego, czy jest to silnik, dioda LED, głośniki itp. Jest to zasadniczo technika modulacji, w której szerokość impulsu nośnego zmienia się zgodnie z analogowym sygnałem wiadomości.
Wykonujemy prosty obwód elektryczny do sterowania prędkością obrotową silnika prądu stałego w zależności od natężenia światła. Zamierzamy użyć funkcji Light Dependent Resistor i mikrokontrolera AVR, takich jak konwersja analogowo-cyfrowa, aby zmierzyć natężenie światła. Zamierzamy również użyć modułu sterownika silnika z podwójnym mostkiem H-L298N. Jest zwykle używany do kontrolowania prędkości i kierunku silników, ale może być używany do innych projektów, takich jak sterowanie jasnością niektórych projektów oświetleniowych. Dodaliśmy również przycisk do naszego obwodu, aby zmienić kierunek obrotów silnika.
Krok 1: Opis
Każde ciało na tym świecie ma pewną bezwładność. Silnik obraca się, gdy jest włączony. Jak tylko zostanie wyłączony, będzie się zatrzymywać. Ale to nie kończy się natychmiast, zajmuje trochę czasu. Ale zanim całkowicie się zatrzyma, jest ponownie włączany! W ten sposób zaczyna się poruszać. Ale nawet teraz osiągnięcie pełnej prędkości zajmuje trochę czasu. Ale zanim to się stanie, jest wyłączany i tak dalej. Zatem całkowitym efektem tego działania jest to, że silnik obraca się w sposób ciągły, ale z mniejszą prędkością.
Modulacja szerokości impulsu (PWM) to stosunkowo nowa technika przełączania zasilania zapewniająca pośrednie ilości energii elektrycznej między poziomami pełnego włączenia i całkowitego wyłączenia. Zwykle impulsy cyfrowe mają taki sam czas włączania i wyłączania, ale w niektórych sytuacjach potrzebujemy, aby impuls cyfrowy miał więcej/mniej czasu/wyłączenia. W technice PWM tworzymy impulsy cyfrowe o nierównej ilości stanów włączenia i wyłączenia, aby uzyskać wymagane wartości napięcia pośredniego.
Cykl pracy jest określony przez procent czasu trwania wysokiego napięcia w pełnym impulsie cyfrowym. Można go obliczyć na podstawie:
% cyklu pracy = T on /T (czas okresu) x 100
Weźmy oświadczenie o problemie. Musimy wygenerować sygnał PWM 50 Hz z 45% współczynnikiem wypełnienia.
Częstotliwość = 50 Hz
Okres czasu, T = T(wł.) + T(wył.) = 1/50 = 0,02 s = 20 ms
Cykl pracy = 45%
W ten sposób, rozwiązując zgodnie z powyższym równaniem, otrzymujemy
T(on) = 9 ms
T(wył) = 11 ms
Krok 2: Timery AVR – tryb PWM
Do tworzenia PWM, AVR zawiera osobny sprzęt! Korzystając z tego, procesor instruuje sprzęt, aby wytworzył PWM o określonym cyklu pracy. ATmega328 posiada 6 wyjść PWM, 2 znajdują się na timerze/liczniku0 (8bit), 2 są zlokalizowane na timerze/liczniku1 (16bit), a 2 znajdują się na timerze/liczniku2 (8bit). Timer/Counter0 to najprostsze urządzenie PWM w ATmega328. Timer/Counter0 może działać w 3 trybach:
- Szybki PWM
- PWM z korekcją fazy i częstotliwości
- PWM z korekcją fazową
każdy z tych trybów może być odwrócony lub nieodwrócony.
Zainicjuj Timer0 w trybie PWM:
TCCR0A |=(1 << WGM00)|(1 << WGM01) - ustaw WGM: Szybki PWM
TCCR0A |= (1 << COM0A1)|(1 << COM0B1) - ustaw tryb porównania wyjścia A, B
TCCR0B |= (1 << CS02) - ustaw timer z preskalerem = 256
Krok 3: Pomiar natężenia światła - ADC i LDR
Light Dependent Resistor (LDR) to przetwornik, który zmienia swoją rezystancję, gdy światło pada na jego powierzchnię.
LDR są wykonane z materiałów półprzewodnikowych, aby umożliwić im zachowanie właściwości światłoczułych. Te LDR lub FOTOREZYSTORY działają na zasadzie „fotoprzewodnictwa”. Ta zasada mówi, że za każdym razem, gdy światło pada na powierzchnię LDR (w tym przypadku), przewodność elementu wzrasta lub innymi słowy opór LDR maleje, gdy światło pada na powierzchnię LDR. Tę właściwość zmniejszenia rezystancji dla LDR osiąga się, ponieważ jest to właściwość materiału półprzewodnikowego stosowanego na powierzchni. LDR są najczęściej używane do wykrywania obecności światła lub do pomiaru natężenia światła.
Aby przenieść zewnętrzne informacje ciągłe (informacje analogowe) do systemu cyfrowego/obliczeniowego, musimy przekonwertować je na wartości całkowite (cyfrowe). Ten rodzaj konwersji jest realizowany przez konwerter analogowo-cyfrowy (ADC). Proces konwersji wartości analogowej na wartość cyfrową jest znany jako konwersja analogowo-cyfrowa. Krótko mówiąc, sygnały analogowe to sygnały z otaczającego nas świata rzeczywistego, takie jak dźwięk i światło.
Sygnały cyfrowe to analogowe odpowiedniki w formacie cyfrowym lub numerycznym, które są dobrze rozumiane przez systemy cyfrowe, takie jak mikrokontrolery. ADC jest jednym z takich urządzeń, które mierzą sygnały analogowe i wytwarzają cyfrowy odpowiednik tego samego sygnału. Mikrokontrolery AVR mają wbudowaną funkcję ADC do konwersji napięcia analogowego na liczbę całkowitą. AVR konwertuje go na 10-bitową liczbę z zakresu od 0 do 1023.
Do pomiaru natężenia światła wykorzystujemy analogowo-cyfrową konwersję poziomu napięcia z obwodu dzielnika z LDR.
Zainicjuj ADC:
TADCSRA |= (1<<ADEN) - Włącz ADC
ADCSRA |= (1<<ADPS2)| (1<<ADPS1)| (1ADPS0) - ustaw preskaler ADC = 128
ADMUX = (1 << REFS0) - ustaw napięcie odniesienia = AVCC; - ustaw kanał wejściowy = ADC0
Obejrzyj film ze szczegółowym opisem mikrokontrolera ADC AVR: Mikrokontroler AVR. Pomiar natężenia światła. ADC i LDR
Krok 4: Sterownik silnika prądu stałego i moduł sterownika silnika z podwójnym mostkiem H-L298N
Używamy sterowników silników prądu stałego, ponieważ mikrokontrolery generalnie nie są w stanie dostarczyć prądu nie większego niż 100 miliamperów. Mikrokontrolery są inteligentne, ale nie mocne; ten moduł doda trochę mięśni do mikrokontrolerów do napędzania silników prądu stałego o dużej mocy. Może sterować jednocześnie 2 silnikami prądu stałego do 2 A każdy lub jednym silnikiem krokowym. Możemy sterować prędkością za pomocą PWM, a także kierunkiem obrotów silników. Służy również do sterowania jasnością taśmy LED.
Opis pinezki:
Port OUT1 i OUT2, który służy do podłączenia silnika prądu stałego. OUT3 i OUT4 do podłączenia taśmy LED.
ENA i ENB są pinami aktywującymi: podłączając ENA do wysokiego (+5V) włącza port OUT1 i OUT2.
Jeśli podłączysz pin ENA do niskiego (GND), wyłączy to OUT1 i OUT2. Podobnie dla ENB i OUT3 i OUT4.
IN1 do IN4 to piny wejściowe, które zostaną podłączone do AVR.
Jeśli IN1-high(+5V), IN2-low(GND), OUT1 staje się wysokie, a OUT2 niskie, w ten sposób możemy napędzać silnik.
Jeśli IN3-high(+5V), IN4-low(GND), OUT4 ma stan wysoki, a OUT3 niski, co oznacza, że dioda LED świeci.
Jeśli chcesz odwrócić kierunek obrotów silnika, po prostu odwróć polaryzację IN1 i IN2, podobnie dla IN3 i IN4.
Poprzez zastosowanie sygnału PWM do ENA i ENB możesz kontrolować prędkość silników na dwóch różnych portach wyjściowych.
Płyta może przyjąć nominalnie od 7V do 12V.
Zworki:Istnieją trzy styki zworki; Zworka 1: Jeśli silnik potrzebuje więcej niż 12V zasilania, musisz odłączyć zworkę 1 i podać żądane napięcie (maks. 35V) na zacisku 12V. Podłącz kolejne zasilanie 5 V i wejście na zacisk 5 V. Tak, musisz podać 5 V, jeśli chcesz zastosować więcej niż 12 V (gdy zworka 1 jest usunięta).
Wejście 5V służy do prawidłowego funkcjonowania układu scalonego, ponieważ usunięcie zworki spowoduje wyłączenie wbudowanego regulatora 5V i ochronę przed wyższym napięciem wejściowym z zacisku 12V.
Terminal 5 V działa jako wyjście, jeśli napięcie zasilania wynosi od 7 V do 12 V i działa jako wejście, jeśli zastosujesz więcej niż 12 V, a zworka zostanie usunięta.
Zworka 2 i zworka 3: Jeśli usuniesz te dwie zworki, musisz wprowadzić sygnał włączenia i wyłączenia z mikrokontrolera, większość użytkowników woli usunąć dwie zworki i podać sygnał z mikrokontrolera.
Jeśli zachowasz dwie zworki, wyjścia OUT1 do OUT4 będą zawsze włączone. Zapamiętaj zworkę ENA dla OUT1 i OUT2. Zworka ENB dla OUT3 i OUT4.
Krok 5: Pisanie kodu programu w C. Ładowanie pliku HEX do pamięci Flash mikrokontrolera
Napisanie i zbudowanie aplikacji mikrokontrolera AVR w kodzie C z wykorzystaniem Zintegrowanej Platformy Programistycznej - Atmel Studio.
#ifndef F_CPU#define F_CPU 16000000UL // mówienie częstotliwości kryształu kontrolera (16 MHz AVR ATMega328P) #endif
#include //header, aby włączyć kontrolę przepływu danych przez piny. Definiuje piny, porty itp. #include //header, aby włączyć funkcję opóźnienia w programie
#define BUTTON1 2 // przełącznik przyciskowy podłączony do portu B pin 2 #define DEBOUNCE_TIME 25 // czas oczekiwania na przycisk "odbicia" #define LOCK_INPUT_TIME 300 // czas oczekiwania po naciśnięciu przycisku
// Timer0, inicjalizacja PWM void timer0_init() { // ustawienie timera OC0A, pin OC0B w trybie przełączania i trybu CTC TCCR0A |= (1 << COM0A1)|(1 << COM0B1)|(1 << WGM00)| (1 << WGM01); // ustaw timer z preskalerem = 256 TCCR0B |= (1 << CS02); // zainicjuj licznik TCNT0 = 0; // zainicjuj porównywaną wartość OCR0A = 0; }
// Inicjalizacja ADC void ADC_init() { // Włącz ADC, częstotliwość próbkowania=osc_freq/128 ustaw preskaler na maksymalną wartość, 128 ADCSRA |= (1<<ADEN) | (1<<ADPS2)| (1<< ADPS1)| (1<<ADPS0);
ADMUX = (1<<REFS0); // Wybierz napięcie odniesienia (AVCC)
// Status przełącznika przycisku unsigned char button_state() {
/* przycisk jest wciśnięty, gdy bit BUTTON1 jest wyczyszczony */
jeśli (!(PINB & (1<
{
_delay_ms (DEBOUNCE_TIME);
jeśli (!(PINB & (1<
}
zwróć 0;
}
// Inicjalizacja portów void port_init() { DDRB =0b00011011; //PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2 - BUTTON SWITCH BEZPOŚREDNI PORTB=0b00010110;
DDRD = 0b01100000; //PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD=0b00000000;
DDRC = 0b00000000; // PC0-ADC PORTC=0b00000000; // Ustaw wszystkie piny PORTC w stan niski, co spowoduje jego wyłączenie. }
// Ta funkcja odczytuje wartość konwersji analogowo-cyfrowej. uint16_t get_LightLevel() { _delay_ms(10); // Poczekaj trochę czasu, aż kanał otrzyma wybrany ADCSRA |= (1<<ADSC); // Rozpocznij konwersję ADC, ustawiając bit ADSC. Napisz 1 do ADSC
while(ADCSRA & (1<<ADSC)); // Poczekaj na zakończenie konwersji
// ADSC ponownie staje się 0 do tego czasu, uruchom pętlę w sposób ciągły _delay_ms(10); powrót (ADC); // Zwróć wynik 10-bitowy
}
// Ta funkcja ponownie mapuje liczbę z jednego zakresu (0-1023) na inny (0-100). uint32_t map(uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
int główny (unieważniony)
{ uint16_t i1=0;
port_init();
timer0_init(); ADC_init(); // inicjalizacja ADC
gdy (1)
{ i1=mapa(get_LightLevel(), 0, 1023, 0, 100);
OCR0A=i1; // Ustaw wyjście porównaj rejestr kanał A OCR0B=100-i1; // Ustaw wyjście porównaj rejestr kanału B (odwrócone)
if (button_state()) // Jeśli przycisk jest wciśnięty, przełącz stan i opóźnienie diody LED o 300ms (#define LOCK_INPUT_TIME) { PORTB ^= (1<<0); // przełączanie aktualnego stanu pinu IN1. PORTB ^= (1<<1); // przełączanie aktualnego stanu pinu IN2. Odwróć kierunek obrotów silnika
PORTB ^= (1<<3); // przełączanie aktualnego stanu pinu IN3. PORTB ^= (1<<4); // przełączanie aktualnego stanu pinu IN4. Taśma LED jest wyłączona/włączona. _delay_ms (LOCK_INPUT_TIME); } }; powrót (0); }
Programowanie zakończone. Następnie zbuduj i skompiluj kod projektu do pliku hex.
Wgrywanie pliku HEX do pamięci flash mikrokontrolera: wpisz w okienku DOS polecenie:
avrdude –c [nazwa programisty] –p m328p –u –U flash:w:[nazwa pliku szesnastkowego]
W moim przypadku jest to:
avrdude –c ISPProgv1 –p m328p –u –U flash:w:PWM.hex
To polecenie zapisuje plik hex do pamięci mikrokontrolera. Obejrzyj film ze szczegółowym opisem wypalania pamięci flash mikrokontrolera: Wypalanie pamięci flash mikrokontrolera…
Ok! Teraz mikrokontroler pracuje zgodnie z instrukcjami naszego programu. Sprawdźmy to!
Krok 6: Obwód elektryczny
Połącz elementy zgodnie ze schematem ideowym.
Zalecana:
Arduino kontroluje prędkość i kierunek silnika prądu stałego za pomocą potencjometru, wyświetlacza OLED i przycisków: 6 kroków
Arduino kontroluje prędkość i kierunek silnika prądu stałego za pomocą potencjometru, wyświetlacza i przycisków OLED: W tym samouczku dowiemy się, jak używać sterownika L298N DC MOTOR CONTROL i potencjometru do sterowania prędkością i kierunkiem silnika prądu stałego za pomocą dwóch przycisków i wyświetlania wartości potencjometru na wyświetlaczu OLED. Obejrzyj film demonstracyjny
Płynny rozruch silnika prądu stałego, prędkość i kierunek za pomocą potencjometru, wyświetlacza OLED i przycisków: 6 kroków
Płynny rozruch, prędkość i kierunek silnika prądu stałego za pomocą potencjometru, wyświetlacza OLED i przycisków: W tym samouczku dowiemy się, jak używać sterownika L298N DC MOTOR CONTROL i potencjometru do sterowania płynnym rozruchem, prędkością i kierunkiem silnika prądu stałego za pomocą dwóch przycisków i wyświetl wartość potencjometru na wyświetlaczu OLED.Obejrzyj film demonstracyjny
Przetwornica prądu BOOST 1A do 40A dla silnika prądu stałego o mocy do 1000 W: 3 stopnie
Konwerter prądu 1A do 40A do silnika prądu stałego o mocy do 1000 W: Cześć! W tym filmie dowiesz się, jak wykonać obwód wzmacniający prąd dla silników prądu stałego o wysokim natężeniu do 1000 W i 40 A z tranzystorami i transformatorem z odczepem środkowym. prąd na wyjściu jest bardzo wysoki, ale napięcie będzie r
Prosta (i brudna) modulacja szerokości impulsu (PWM) z zegarem 555: 3 kroki
Prosta (i brudna) modulacja szerokości impulsu (PWM) z zegarem 555: Prosty obwód sterowania prędkością silnika prądu stałego (sterowanie prędkością wentylatora, ściemnianie światła / LED itp.) za pomocą timera 555. Jest to również dobry punkt wyjścia dla nowicjuszy, którzy chcą uzyskać ręce brudne z 555 timera IC. Niektórzy twierdzą, że to nie jest najbardziej
Latarka LED z modulacją szerokości impulsu: 8 kroków
Latarka LED z modulacją szerokości impulsu: Modulacja szerokości impulsu (PWM) może być używana do zmiany mocy, prędkości lub jasności wielu urządzeń. W przypadku diod LED PWM można wykorzystać do ich przyciemnienia lub rozjaśnienia. Z ich pomocą zrobię małą latarkę ręczną. Diodę można przyciemnić, szybko ją włączając i