Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'pwm'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Strona

Znaleziono 14 wyników

  1. Od kiedy tylko ludzie zaczęli interesować się akwarystyką od tego momentu postanowili na każdym kroku ułatwiać sobie pracę. Powstawały coraz to nowsze urządzenia – napowietrzacze, filtry, oświetlenia i tym podobne. Także w tej dziedzinie pojawiły się urządzenia w pełni zautomatyzowane (sterowane za pomocą różnego rodzaju przełączników oraz czujników). Przykładem takiego rozwiązania był chociażby sterownik akwariowy “Skalar”. Jako że powstał on w czasach gdy o diodach mało kto słyszał a sterowanie PWM już chyba nikt postanowiłem stworzyć własny sterownik akwariowy Bella. Jest to kompletny sterownik oparty na Arduino Nano v3. Sterownik akwariowy Bella – lista materiałów do budowy Obudowa uniwersalna Z1W Panel przedni MN-Tech Panel tylny MN-Tech Płytka prototypowa Bella Compact 1.1 moduł pod driver PWM firmy Meanwell (5 kanał) – opcjonalny arduino nano wraz z programem sterownika akwariowego Bella zegar ds1307 wyświetlacz LCD 20×4 znaki na szynie I2C termometr DS18b20 wodoodporny na kablu – 1 szt drivery firmy Meanwell serii LDD (dowolny model) (max 5 szt) przekaźnik 1 kanałowy – 2 szt przekaźnik 4 kanałowy – 1 szt kable połączeniowe FF długości 20cm do podłączenia modułów (30 szt – liczone z zapasem) gniazdo na goldpin 3 pinowe – 8 szt gniazdo na goldpin 4 pinowe – 2 szt (do wyświetlacza) gniazdo na goldpin 5 pinowe – 1 szt (do klawiatury) gniazdo na goldpin 6 pinowe – 2 szt (przekaźnik 4 kanałowy) zworka 2 pinowa (używana w przypadku braku sondy pH) przycisk chwilowy – 4 szt (jako klawiatura) włącznik kołyskowy okrągły – 2 szt gniazdo montażowe płaskie (GS-035) – 6 szt gniazdo zasilające na kabel ósemka – 1 szt gniazdo + wtyk 3 pinowy mini CB (termometr) gniazdo + wtyk 2 pinowy mini CB do podłączenia zasilania driverów 2x gniazdo + 2x wtyk 4 pinowy CB na listwę led (każde na 2 kanały oświetlenia) lub 1 gniazdo CB 8 pinowe na 4 kanały gniazdo montażowe do zasilania arduino 5,5/2,1 gniazdo bezpiecznikowe – 1 szt śruby czarne M3 długość 12mm – około 30szt nakrętki M3 – około 60 sztuk Oświetlenie Najważniejszym założeniem sterownika akwariowego Bella było oczywiście sterowanie oświetleniem. Sterownik obsługuje 5 kanałów PWM. Na samej płytce jest miejsce na zamontowanie 5 driverów z firmy Meanwell (dowolnych od LDD-300L do LDD-1500H). 4 z nich znajdują się na płytce natomiast piąty można zamontować osobno na dodatkowej płytce. Napięcie zasilania driverów jest w zakresie od 12 do 48V. Na płytce zostały wyciągnięte piny pwm oraz masy do podłączenia dodatkowych driverów. Moc każdego kanału można ustawić dowolnie w granicy 0-100% (wartości 0-255 na wyświetlaczu). Wszystkie kanały włączają się jednocześnie i gaszą o tej samej godzinie (wyjątkiem są kanały 1 i 2, które w przypadku ustawienia oświetlenia nocnego gaszą się dopiero o północy. W przypadku kiedy moc któregoś z kanałów jest zmniejszona jego ściemnianie / rozjaśnianie działa tak samo długo lecz jest proporcjonalnie wolniejsze (skoki są mniejsze). Długości i zakresy które można ustawić w tym dziale zostaną opisane w ostatnim akapicie “Zakresy”. Termostat Kolejnym punktem jest zastosowanie wodoodpornego termometru DS18b20 i możliwość podłączenia do niego dwóch niezależnych urządzeń (np grzałki oraz chłodnicy czy też wentylatora). Jak w poprzednim punkcie zakresy zostały opisane na końcu. W przypadku awarii / odpięcia termometru temperatura na wyświetlaczu znika (zostaje zastąpiona przez znaki –. Dodatkowo w ramach zabezpieczenia w takim przypadku gniazda zarówno grzania jak i chłodzenia zostają odłączone od zasilania. W przypadku tej funkcjonalności mamy dostępne 2 zmienne. Pierwsza to temperatura (oznaczająca temperaturę dolną) poniżej której uruchomiona zostanie grzałka. Druga to histereza. Główną wartością jest temperatura – jest to deklarowana wartość dolna poniżej której uruchomiony zostanie przekaźnik odpowiadający za grzałkę. Na wyświetlaczu zmieni się opis z G-OFF na G- ON. Temperatura będzie rosła do momentu przekroczenia 1x histerezy w górę. W przypadku jeśli temperatura przekroczy wartość zadaną + 2x histerezę uruchomi się chłodzenie i będzie działać do momentu w którym włączyło się grzanie (T+H). Stycznik 1 oraz stycznik 2 Stycznik 1 może zostać ustawiony w 2 trybach – pierwszym z nich jest to tryb pracy do sterowania elektrozaworem do CO2 (sterowanie uruchamia się automatycznie po podłączeniu sondy pH). Drugim trybem jest uruchamianie się 1x dziennie na dowolny okres (od 1 minuty do 23 godzin i 59 minut). W przypadku gdy nie ma podpiętej sondy pH do sterownika należy zrobić mostek pomiędzy pinem A7 a pinem GND – program automatycznie zmienia działanie stycznika na tryb pracy 1x dziennie. Stycznik 2 działa tylko jako uruchamiany 1x dziennie (jak wyżej). Stycznik 3 oraz stycznik 4 Działają one automatycznie w zależności od pór dnia. Stycznik numer 3 uruchamia się w momencie rozpoczęcia świtu i wyłącza w momencie gdy kończy się zmrok. Stycznik numer 4 uruchamia się tylko w czasie trwania dnia. Sonda pH Program obsługuje sondy pH opisane w tym artykule. Podpinana jest ona do pinu A7. Za jej pomocą sterowany jest stycznik numer 1 do którego można podpiąć jak pisałem powyżej elektrozawór dozujący CO2. W momencie w którym nie mamy podpiętej sondy pH należy zewrzeć piny A7 oraz GND. Dzięki temu stycznik nr 1 przełącza się na działanie 1x dziennie. Wartości które możemy zmieniać to dolna granica pH oraz histereza. Po przekroczeniu górnej granicy uruchomiony zostaje stycznik (do którego można podłączyć elektrozawór dozujący CO2) i działa on do momentu obniżenia pH poniżej zadanej wartości. Oświetlenie awaryjne Pin analogowy A6 został przygotowany jako uruchamianie oświetlenia awaryjnego. W przypadku gdy pin zwarty jest do masy (za pomocą rezystora 10kOhm program działa w normalnym trybie. Gdy włącznik zostanie uruchomiony i zwarty do pinu 5V oświetlenie zacznie świecić na około 50% mocy (na tyle mocno żeby było widać lecz aby nie oślepiać). W tryb pracy awaryjnej zostaną uruchomione kanały 1 oraz 2. Do uruchomienia oświetlenia awaryjnego służy przycisk na boku obudowy (z przodu) po stronie wyświetlacza. Wyłącznik oświetlenia Istnieje także możliwość wyłączenia całkowicie napięcia podawanego na diody. Do tego celu służy przełącznik znajdujący się z boku obudowy (od strony wyświetlacza z tyłu). Dzięki temu możemy w sytuacji w której jest potrzeba odpięcia oświetlenia od sterownika odłączyć całkowicie zasilanie driverów. Wyświetlacz LCD Sterownik akwariowy Bella oferuje dwa tryby działania. Pierwszym z nich jest tryb wyświetlania informacji znajdujących się na sterowniku. Poniżej znajduje się właśnie taki układ. Na żółto zostały oznaczone pola odpowiednio od góry: Grzałka, Wentylator, Stycznik 1 (jeśli używamy sondy pH zmienia się jego nazwa z S na C – można podpiąć do niego elektrozawór CO2) oraz Stycznik S2. Styczniki S3 oraz S4 (ich godziny działania) wyświetlane są w menu rotacyjnym na dole ekranu. Kolejnym trybem w jakim pracuje ten sterownik akwariowy jest tryb menu. Aby go uruchomić należy jednocześnie przytrzymać przyciski + oraz – (góra i dół). W tym momencie układ wyświetlacza zmieni się całkowicie na prezentowany poniżej: Funkcje menu (nazwa, dostępne wartości oraz ich skoki) W trybie ustawień zmieniają się dwa dolne wiersze na wyświetlaczu. Na górnym jest informacja o aktualnie zmienianej funkcji oraz jej wartości. W dolnym rzędzie pokazany jest dostępny zakres w jakim może być on zmieniany. Dokładna struktura menu zakresy oraz skoki są dostępne w tabeli poniżej. Po uzyskaniu maksymalnej wartości (dla przykładu PWM1 – 255) jeśli nadal będzie włączony przycisk + wartości będą liczone dalej od najniższej. Podobnie dzieje się w przypadku uzyskania najniższej wartości i trzymania przycisku -. W tym przypadku wartość zmieni się na największą. Więcej informacji znajdziecie w filmie:
  2. Siema wszystkim Potrzebuje pomocy! Wykonałem płytkę #PCB nie dawno z poradnika homemade 102 Poradnik tutaj Gotowa płytka wygoda tak(zdjęcia) Sprawdziłem działa ale tylko z silnikiem 250W a z silnikiem 350W nie działa CO ZROBIĆ ŻEBY 350W DZIAŁAŁAł?? Bateria lito-jonowa #18650 #li-ion 7s6p Komponenty: Transformatory irf3205 Tranzystor S8050 npn Tranzystor S8550 pnp Kondensator 4700uF/50V Kondensator 470uF/50v Rezystor 2, 2K powinna być 2k Rezystor 1K Rezystor 4, 7R Kondensator 104 Dioda 1N4148 Dioda LED Dioda 1N4007 Układ scalony NE555 EAFLE sch i brd.rar
  3. Witam, przymierzam się do rozpoczęcia budowy urządzenia które mam zamiar przedstawić w pracy inżynierskiej. Z założenia ma to być chłodzenie szaf sterowniczych za pomocą modułu Peltiera. Projekt wydaje się prosty, natomiast posiadam Raspberry Pi 2B i pomyślałem, że projekt sobie utrudnie Mój pomysł wygląda następująco, chciałbym odczytywać temperature z wnętrza obudowy, jeżeli ta przekroczy dopuszczalną wartość, na moduł Peltiera jak i wentylatory dostarczane jest napięcie do momentu uzyskania porządanej temperatury wnętrza szafy. Na ten moment te kwestie są dla mnie niejsane: czy jest możliwośc podłączenia bezpośrednio miernika temperatury do maliny, czy potrzebny jest przetwornik ADC? w jaki sposób kontrolować Peltiera z maliny? Gdybym nie używał maliny zrobiłbym to za pomocą kontrolera PWM, ale jak wygląda to w tym przypadku Proszę również o rady, spostrzerzenia odnośnie projektu, jestem osobą a bardzo nikłym doświadczeniu z mikrokontrolerami i dosłownie wszystko w tym temacie będzie dla mnie wartościowe
  4. Jako że Trinket jest mały i w miarę w rozsądnej cenie, chciałem wykonać sterowanie jasnością taśmy LED, czy PowerLEDa. W tym celu zmontowałem układ jak na rysunku: Natomiast pojawił się problem z programem. W założeniu obroty w lewo enkodera mają ściemniać, a w prawo rozjaśniać. Do tego chciałem zaimplementować liniowość zmiany jasności LED, bo jak wiadomo zmiana widocznej jasności nie idzie w parze z wielkością wypełnienia PWM. Jako że inni już przede mną temat rozkminiali, to na bazie ich osiągnięć próbuję napisać program. Źródła to: Implementacja liniowej zmiany jasności LED<=> PWM https://gist.github.com/netmaniac/8be83f2e66ae25e949f1 Tu trochę bardziej rozpisana: https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/ Oraz projekt na Trinketa - sterowanie głośnością muzyki w PC za pomocą enkodera i portu USB. https://learn.adafruit.com/trinket-usb-volume-knob Z uwagi na to że nie interesuje mnie sterowanie przez port USB to zmodyfikowałem w/w kod z uwzględnieniem liniowości jasności LED: https://pastebin.com/BHe8FKth #include <avr/power.h> #include <avr/pgmspace.h> #define PIN_ENCODER_A 0 #define PIN_ENCODER_B 2 #define TRINKET_PINx PINB #define PWM_PIN 1 #define krok 9 #define CIELPWM(a) (pgm_read_word_near(CIEL8+a)) const uint8_t CIEL8[] PROGMEM ={ 0,1,2,3,4,5,7,9,12,15,18,22,27,32,38,44, 51,58,67,76,86,96,108,120,134,148,163,180, 197,216,235,255}; static uint8_t enc_prev_pos = 0; static uint8_t enc_flags = 0; short int stan_pwm =0; void stepCorrectedPWM(int b) { analogWrite(PWM_PIN,CIELPWM(b)); } void setup() { if(F_CPU == 16000000) clock_prescale_set(clock_div_1); // set pins as input with internal pull-up resistors enabled pinMode(PIN_ENCODER_A, INPUT); pinMode(PIN_ENCODER_B, INPUT); pinMode(PWM_PIN, OUTPUT); digitalWrite(PIN_ENCODER_A, HIGH); digitalWrite(PIN_ENCODER_B, HIGH); analogWrite(PWM_PIN,0); // get an initial reading on the encoder pins if (digitalRead(PIN_ENCODER_A) == LOW) { enc_prev_pos |= (1 << 0); } if (digitalRead(PIN_ENCODER_B) == LOW) { enc_prev_pos |= (1 << 1); } } void loop() { int8_t enc_action = 0; // 1 or -1 if moved, sign is direction uint8_t enc_cur_pos = 0; // read in the encoder state first if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_A)) { enc_cur_pos |= (1 << 0); } if (bit_is_clear(TRINKET_PINx, PIN_ENCODER_B)) { enc_cur_pos |= (1 << 1); } // if any rotation at all if (enc_cur_pos != enc_prev_pos) { if (enc_prev_pos == 0x00) { // this is the first edge if (enc_cur_pos == 0x01) { enc_flags |= (1 << 0); } else if (enc_cur_pos == 0x02) { enc_flags |= (1 << 1); } } if (enc_cur_pos == 0x03) { // this is when the encoder is in the middle of a "step" enc_flags |= (1 << 4); } else if (enc_cur_pos == 0x00) { // this is the final edge if (enc_prev_pos == 0x02) { enc_flags |= (1 << 2); } else if (enc_prev_pos == 0x01) { enc_flags |= (1 << 3); } // check the first and last edge // or maybe one edge is missing, if missing then require the middle state // this will reject bounces and false movements if (bit_is_set(enc_flags, 0) && (bit_is_set(enc_flags, 2) || bit_is_set(enc_flags, 4))) { enc_action = 1; } else if (bit_is_set(enc_flags, 2) && (bit_is_set(enc_flags, 0) || bit_is_set(enc_flags, 4))) { enc_action = 1; } else if (bit_is_set(enc_flags, 1) && (bit_is_set(enc_flags, 3) || bit_is_set(enc_flags, 4))) { enc_action = -1; } else if (bit_is_set(enc_flags, 3) && (bit_is_set(enc_flags, 1) || bit_is_set(enc_flags, 4))) { enc_action = -1; } enc_flags = 0; // reset for next time } } enc_prev_pos = enc_cur_pos; if (enc_action > 0) { // Jaśniej stan_pwm = stan_pwm + krok; } if (enc_action < 0) { //ciemniej stan_pwm = stan_pwm - krok; } if (stan_pwm >= 255) { stan_pwm=255; } if (stan_pwm <=1) { analogWrite(PWM_PIN,0); } else { stepCorrectedPWM(abs(stan_pwm/8)); } } I teraz problem. Kod działa w pewnym zakresie poprawnie. Tzn. gdy zwiększam jasność diody (enkoderem obrót w prawo) jasność wzrasta aż do maksymalnej i dalsze obracanie już jej nie zmienia, ale co ważne "odkręcanie" jasności (obrót w lewo) od razu reaguje zmianą wypełnienia PWM i spadkiem jasności. I ta część działa poprawnie. Ściemniając diody dochodzimy do wygaszenia i... dalsze obracanie w lewo niby już nic nie robi, ale niestety zakres obrotu domyślam się że nie kończy się na wygaszeniu tylko dalej obracając niejako "nabija się licznik" kroków. Czyli np. wykonując po wygaśnięciu diody jeszcze np. 4 obroty enkodera w lewo, musimy wykonać tyle samo w prawo + troszkę by znów dioda zaczęła jaśnieć. Moim założeniem jest to by przedział zmian jasności był 0-255 (tak jak w sygnale PWM), a nie jak obecnie również poniżej zera. Po prostu po wygaszeniu diody, niezależnie ile jeszcze obrotów w lewo wykonamy, jeden krok w prawo powinien już włączać diodę i zwiększać jej jasność. Problem niby trywialny, ale nie potrafię znaleźć gdzie tkwi błąd. Jako mniej eleganckie rozwiązanie, zawsze zostaje reset układu (przycisk w enkoderze), no ale to ostateczność. Coś doradzicie?
  5. W moim autku na BT koła miały problem z rozkręcaniem się najprawdopodobniej przez niecałkowite otwarcie się MOSFET-u, gdyż silniczki w aucie są na max. 6 v a układ sterujący na 12 v (jak mi zasugerował stary gracz w tym temacie) i powiedział też, żebym zastosował logikę ujemną, lub sterowanie masą jak kto woli, no i zabieram się do tego i tu jest problem, bo jak na pojedynczych komponentach wiem co robić, tak tutaj nie wiem, od czego zacząć, a nie chciałbym sobie usmażyć czegoś, także co zrobić? Będę wdzięczny za każdą sugestię i odpowiedź
  6. Cześć, mam pytanie o regulator PID z biblioteki dla procesorów ARM: arm_math.h. W bibliotece tej są 3 funkcje do obsługi regulatora: - arm_pid_f32(), - arm_pid_q31(), - arm_pid_q15(). 1. W jakich przypadkach powinno się używać której wersji? 2. Której wersji najlepiej użyć w przypadku potrzeby regulacji prądu generowanego przez PWM? Prąd jest regulowany poprzez ustawianie odpowiedniego wypełnienia sygnału PWM.
  7. Cześć, Jestem świeżo po zrobieniu kursów podstaw elektroniki + arduino i chciałbym zrobić swój pierwszy (dość prosty) projekt. W związku z tym chciałbym prosić o weryfikację poniżej opisanych założeń i pomysłów. Cel projektu: sterowanie podświetlaniem schodów paskami LED z możliwością płynnego ściemniania, gdzie każdy stopień jest sterowany niezależnie. Z częścią softwarową nie powinienem mieć problemu, więc zależy mi głównie na weryfikacji części hardwarowej. Sterownik (oparty na Arduino Uno rev3) ma się komunikować z domowym serwerem Home Assistant za pośrednictwem MQTT, skąd otrzyma informacje o wykrytym ruchu na górze lub na dole schodów (jeśli kogoś to interesuje, to czujki ruchu bezprzewodowe po zigbee, wykorzystane w Home Assistant też w innych celach). Do sterowania jest 17 niezależnych pasków LED, każdy o długości 1m. Parametry paska to 12V DC, 4,8W/m. Paski są już zamontowane i wpięte (oczywiście równolegle) do zasilacza 12V/120W. W tej chwili posiadam tylko zestawy do kursów, więc z tego co się nauczyłem i sam znalazłem muszę dokupić: Shield Ethernet (lub WiFi - jeszcze się waham, czy ciągnąć kabel) Shield dodający co najmniej 11 wyjść ze sprzętowym PWM, np. taki + zestaw złączy żeńskich (żeby łatwo wpiąć się do wyjść PWM z bazowego Arduino) Moduł z tranzystorem MOSFET i gotowymi złączami śrubowymi - 17 sztuk Trochę przewodów męsko-żeńskich Do tej pory poza wspomnianymi kursami przetestowałem na płytce stykowej (taki PoC), że jestem w stanie sterować ściemnieniem jednego odcinka paska za pomocą tranzystora MOSFET BS170 (dołączonego do zestawu szkoleniowego), jednak ten mały tranzystor szybko się mocno nagrzał. Daje mi to jednak nadzieję, że jestem w stanie to zrobić Poza tym planuję zabrać się teraz za kurs lutowania, bo będzie mi to potrzebne do zlutowania shielda z punku 2. (i tak chciałem się tego nauczyć ) Pytania jakie mam na początek: Czy tak opisany zestaw będzie optymalny pod względem kosztów/jakości? W założeniach sterownik ma chodzić 24h/dobę (chociaż przez większość czasu oświetlenie będzie po prostu wyłączone). Czy mogę zasilać arduino z tego samego zasilacza co LEDy (12V)? Czy lepiej kupić osobny mniejszy zasilacz impulsowy (np. taki). W czym zamknąć cały sterownik? Są gotowe obudowy/puszki na takie zestawy? Całość nie musi być ani ładna, ani mała (będzie ukryta w szafie). Z góry dzięki za pomoc!
  8. Cześć! Zbudowałem na płytce stykowej taką przetwornicę typu Buck jak na zdjęciu i mam problem z regulacją napięcia. Równolegle z obciążeniem jakim jest rezystor 100om dołożyłem dzielnik napięcia z rezystora 51k i 10k do pomiaru napięcia wyjściowego. Dzielnik jest podpięty do wejścia ADC3 (PC3). Zadaję napięcie wyjściowe przetwornicy za pomocą potencjometru podpiętego do wyjścia ADC1 (PC1). I wszytko ładnie śmiga, napięcie na dzielniku jest równe zawsze napięciu na potencjometrze do czasu gdy nie włączę równolegle do opornika 100om drugi opornik 10om. Napięcie na wyjściu z zadanych 9V spada do 8V i napięcia na dzielniku i potencjometrze się nie zgadzają. Ale gdy zwiększę napięcie zadane na powiedzmy 10V to napięcie na wyjściu wynosi z powrotem 9V. Więc uważam że to jest problem ze złym sterowaniem PWMem Problemem raczej nie jest niedostatek mocy. Przetwornica jest zasilana z prostownika a prostownik ze 100W transformatora (12V, 8A). Gdy dokładam ten opornik 10om to napięcie na wyjściu prostownika wynosi ok 13V więc jest zapas mocy. Parametry przetwornicy L=3mH 2A Cwyj=2000uF Mosfet= IRF630 Cbootstrap=2,2uF Najbardziej mnie interesuje to czy uważacie że kod jest poprawny i tak zaprogramowana atmega może regulować napięcie #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile uint8_t napiecie,pwm, kanal=3, zadane; int main(void){ //ADC ADMUX|=(1<<REFS1)|(1<<REFS0)|(1<<MUX1)|(1<<MUX0)|(1<<ADLAR); ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // //TIMER DDRB|=(1<<PB3); TCCR2|=(1<<WGM21)|(1<<WGM20)|(1<<COM21)|(1<<CS20); TIMSK|=(1<<TOIE2); //OCR2=100; // sei(); while(1){ //pomiar napiecia na wyjsciu ADCSRA|=(1<<ADSC); while (ADCSRA&(1<<ADSC)); napiecie=ADCH; kanal=1;// zmiana kanalu napomiar napiecia z potenncjometru ADMUX&=(0xE0); ADMUX|=(kanal & 0x0F); //pomiar napiecia zadanego ADCSRA|=(1<<ADSC); while (ADCSRA&(1<<ADSC)); zadane=ADCH; kanal=3;//zmiana kanalu na wyjscie przetwornicy ADMUX&=(0xE0); ADMUX|=(kanal& 0x0F); } } ISR(TIMER2_OVF_vect){ // regulacja pwm // mosfet jest sterowany przez tranzystor bipolarny // gdy na wyjsciu pwm atmegi jest stan niski na bramce //jest stan wysoki if(napiecie>zadane){ if(pwm<255) pwm++; } if(napiecie<zadane){ if(pwm>0) pwm--; } OCR2=pwm; }
  9. Cześć, potrzebuję ekspandera na minimum 2 piny na magistralę i2c. Nie byłby to problem tylko że muszę mieć sygnał PWM o częstotliwości najlepiej 25kHz. Ale może być coś w zakresie 21-28kHz. Zna ktoś taki układ który by się do tego nadawał?
  10. Witam, jestem w trakcie robienia sterownika do akwarium na raspberry pi zero w i domoticz. Sterownik do celowo ma załączać pompę, grzałkę, odczytywać temperaturę itd... i załączać oświetlenie stopniowo rozjaśniajac i przyciemniając. Nie potrafię uruchomić sterowania pwm. Z załacz/wył. poradziłem sobie dopisujac komendy do pliku domoticz.sh np: /usr/bin/gpio export 17 out A co mam dopisać by wyjście gpio 13 było PWM? Kilka dni już błądzę po internecie i już nie wiem co mam zrobić...
  11. Witam, Jestem w trakcie budowy robota typu line follower na bazie Arduino. Do wykonania przedniego panelu z czujnikami zdecydowałem się wykorzystać sensory CNY70 oraz komparatory LM311P które za zadanie mają zamieniać sygnał analogowy na cyfrowy zależnie od progu decyzji wysłanego z arduino poprzez PWM. Wiem że sygnał PWM trzeba przefiltrować i myślałem o pasywnym filtrze RC, ale nie mam pojęcia jakie powinny być wartości kondensatorów i rezystora, żeby wszystko dobrze działało i pytanie czy taki filtr jest w ogóle w stanie dobrze spełniać swoje zadanie? Jeśli nie to czym można go zastąpić? Drugie pytanie, czy wygenerowany jeden sygnał PWM z mikrokontrolera może "obskoczyć" wszystkie komparatory wyznaczając dla nich taki sam próg decyzji?
  12. Chcę napisac program ktory bedzie zaswiecal stopniowo diode a nastepnie ja gasil w czasie 4s. Znalazlem w reference manual takie informacje na temat przerwania SysTick: więc ustawilem zegar procesora takim taktowaniem jak jest opisane Obliczylem rowniez ze aby dioda zaswiecala sie cyklicznie w czasie 4s trzeba aktualizowac stannapiecia PWM co 40cyklow przerwań, zas timer ustawilem tak aby sygnal PWM przyjmowal 100 wartosci posrednich. Po odpaleniu programu w debugerze wyskakuje mi jakis błąd ktorego nawet nie wiem jak interpretować. Zamieszczam rowniez kod, ktos moze bedzie wiedzial w czym jest problem. main.rar https://forbot.pl/blog/kurs-stm32-f4-8-zaawansowane-funkcje-licznikow-id13473 Robie ten kurs tylko na innym mikrokontrolerze, STM32F303re
  13. Dzień dobry! Planuje zrobić instalacje oświetlenia LED i mam takie pytanie jak w tytule. Potrzebne mi to jest do obliczenia spadku napięcia i zastosowanie odpowiedniej grubości kabla. Za wszelką pomoc z góry dziękuje.
  14. Mam problem z wygenerowaniem sygnału PWM na TIM1 kanał 1. Pracuję na CubeMX i Eclipse.. Korzystam z biblioteki HAL. Na STM32F746 Disco generuję PWM jak należy. Czy muszę dodać bibliotekę BSP?
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.