Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 9 wrz 2025, o 20:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 17 lut 2013, o 15:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lip 2012
Posty: 35
Lokalizacja: Gostyń
Pomógł: 0

Witam
Potrzebuję wykonać pwm-a na atmega8 i mam następujący probelm:
Znalazłem w sieci kod źródłowy pwm-a o stałej częstotliwości 3,9kHz i regulowanym wypełnieniu 0-100%, regulacja odbywa się poprzez potencjometr 10k podłączony do portu adc.

Poniżej kod żródłowy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Program działa bardzo dobrze, ale potrzebuję uzyskać częstotliwość ok. 100kHz.
Niestety zdążyłem przeczytać tylko 50 str. książki Mirka, siedze już pół dnia nad kodem i dowiedziałem się że za częstotliwość tzn. preskaler częstotliwości jest odpowiedzialny bit CS20 , próbowałem go zmieniać metodą prób i błędów ale wychodziła tylko mniejsza częstotliwość niż oryginalnie.

Kod w C wklejamy przy pomocy [syntax=c] - Zielony J.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2013, o 16:32 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

1. To 3,9kHz wnika z częstotliwości taktowania i 8-bitowego timera (oraz jego preskalera, ale dla CS20 jest podział przez 1) -> 1MHz / 256 = 1000kHz / 256 = 3,9kHz
2. Przy tak napisanym programie możesz zwiększyć częstotliwość PWM zwiększając częstotliwość taktowania mikrokontolera, ale nie wiele to da i potrzebna będzie modyfikacja linii dotyczących częstotliwości taktowania przetwornika.
4. Możesz skorzystać z programowego generowania PWM. Chcesz mieć częstotliwość przebiegu 100kHz. Zakładając, że chciałbyś regulować wypełnienie z krokiem 1% musisz generować przerwanie z częstotliwością 100 razy większą, czyli 10MHz, a masz taktowanie 1MHz. - To rozwiązanie również odpada.
5. Wracamy do sprzętowego generowania PWM i szukamy odpowiedniego procesora, który musi być wyposażony w timer taktowany częstotliwością minimum 25,6MHz, a takim jest np. ATTINY25


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2013, o 21:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lip 2012
Posty: 35
Lokalizacja: Gostyń
Pomógł: 0

W takim razie ile jestem w stanie kHz wycisnąć z Atmegi8 jeśli dodam zewnętrzny rezonator kwarcowy 12MHz / 16MHz ?
Czy wystarczy dodać kwarc i zmienić w programie częstotliwość atmegi na 12/16MHz i zostawiając reszce programu tak jak jest uzyskam tą max. częstotliwość? Czy trzeba pisać program od nowa?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 10:28 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

12 MHz / 256 = 46,875 kHz
16 MHz /256 = 62,5 kHz
W programie należy dodać 1 linię przy wybraniu częstotliwości taktowania przetwornika:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zwracam uwagę, że ATMEGA8L może być taktowana częstotliwością do 8 MHz, a druga wersja do 16 MHz. Oczywiście są to zalecenia producenta. Przykładowo w MK-USBASP jest 12 MHz zamiast 8 MHz i działa niezawodnie.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 19:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Myślę, że dokładnie o to Ci chodziło:

http://www.youtube.com/watch?v=jrId8fthrPg

Oczywiście polecam oglądać na YT a nie w tym małym okienku... Na youtube najlepiej ustawić jakość HD - na niższych mało co widać..

I kod do sprawdzenia przez lepszych ode mnie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Fast PWM prawie dokładnie 100kHz.. Niestety dokładniej się nie da (albo nie umiem).
To co płynie z ADC czyli potencjometru jest dokładnie przedstawiane jako wypełnienie PWM. Jedynie nie polecam dawać na 100% i 0%... chociaż jeśli to problem to szybko dopiszę kilka linijek :)


Wszystko napisałem korzystając głównie z datasheeta Atmegi 8, a trochę z niebieskiej knigi :)
Ciekaw jestem co mi wypunktujecie! :mrgreen:


PS.
Krauser napisał(a):
5. Wracamy do sprzętowego generowania PWM i szukamy odpowiedniego procesora, który musi być wyposażony w timer taktowany częstotliwością minimum 25,6MHz, a takim jest np. ATTINY25
No to narobiłem... Jednak jak widać udało się spokojnie na 8MHz :D Ale szacuneczek Krauser, podziwiem Twoje projekty.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 19:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lip 2012
Posty: 35
Lokalizacja: Gostyń
Pomógł: 0

Damian bardzo dziękuję Ci za program i zaangażowanie, zaraz złoże układ i dam znać jak działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 19:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Doman nie Damian :)
Proszę bardzo, dla mnie to dobra rozrywka ;) Wirtualnym piwkiem nie pogardzę :P

Tam w kodzie jest podane wypełnienie początkowe, to może trochę śmiecić przy włączaniu układu. Polecam zmianę na swoją liczbę.
I jeszcze tak patrzę na kod podany w Twoim pierwszym poście - jest tam #define F_CPU... jeśli nie korzystasz z eclipse to musisz dodać tam linijkę, ale ustawioną na 8MHz.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 20:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lip 2012
Posty: 35
Lokalizacja: Gostyń
Pomógł: 0

Sprawdizłem przed chwilą układ i niestety nie działa. Sprawdzałem go na oscyloskopie i mierniku laboratoryjnym i nic :cry: Może ja coś zrobiłem źle ale wątpie aby tak było, więc może komuś uda się uruchomić ten program.
Ale i tak dziekuje doman za poświęcony czas na pisanie programu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 20:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Rozrysuj może schemat. W jakim programie kompilujesz program?
Zaraz dojdziemy co nie bangla.

Albo zagadaj na:
#gg 777132
#jabber/aqq : domanoid@aqq.eu

:)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 21:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lip 2012
Posty: 35
Lokalizacja: Gostyń
Pomógł: 0

Doman nie dało mi to spokoju i jednak doszłem do tego że źle przekompilowałem program w eclipse, więc zmontowałem układ i wszystko działa tylko zamiast 100kHz jest 12,45kHz :shock:

Skompilowałem jeszce kod pierwszy tak jak radził kolega Krauser
więc ustawiając ósemkę na 8MHz powinno wyjść na porcie 8MHz/256=31,25kHz a jest nadal 3,9kHz, więc coś jest nie tak.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Podsumowując rekord jaki uzyskałem dzięki koledze Domanoid wynosi 12,45kHz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 23:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Dobrze, że napisałeś przynajmniej jaką otrzymujesz częstotliwość :) Teraz wiem, że błąd nie leży w moim programie... Ustaw fuse bity bo masz w tej chwili ustawione 1MHz... Przestaw na 8MHz i będzie jak trzeba.
(w symulacji otrzymuję dokładnie 12,45kHz dla taktowania 1MHz... stąd moja pewność).

Jeśli nie będzie dokładnie 100kHz to zmień w linijce 63. kodu ICR1 = 0x004F; na wyższą wartość, np. 0x0050 0x0051 albo 0x0052... czy ile tam podpasuje... Bo tutaj już dużą rolę gra dokładność wbudowanego rezonatora. Chyba, że przestawisz fuse bity na zewnętrzny kwarc i na xtal podasz 8MHz.

Dla wewn. 8MHz jest LOW FUSE: 0xE4 HIGH FUSE: 0xD9


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2013, o 07:56 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Domanoid napisał(a):
Krauser napisał(a):
5. Wracamy do sprzętowego generowania PWM i szukamy odpowiedniego procesora, który musi być wyposażony w timer taktowany częstotliwością minimum 25,6MHz, a takim jest np. ATTINY25
No to narobiłem... Jednak jak widać udało się spokojnie na 8MHz

No właśnie od tego jest forum, żeby przedyskutować pewne tematy. Wszyscy na tym skorzystają.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2013, o 08:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lip 2012
Posty: 35
Lokalizacja: Gostyń
Pomógł: 0

Przed chwilą wgrałem soft i ustawiłem fusy na taki jak mówiłeś........ I sukces jest 100kHz na oscyloskopie pięknie zmienia się wypełnienie. Muszę jeszcze wrzucić to na radiator, bo atmega u mnie będzie sterowała driver a driver będzie otwierał 3 mosfety. Mosfety będą obciążone prądem przy pracy ciągłej do 40A i napięciu 12V więc jeszcze odezwę się jak się zachowuje w takim układzie.
Bardzo dziękuję wam za pomoc a w szczególności koledze Domanoid, proszę podaj mi na pw swój adres zamieszkania, wyśle Ci prezent za pomoc, który napewno przyda Ci się w swoim warsztacie-co to jest-niespodzianka. Ale paczkę wyślę dopiero za miesiąc, ponieważ nie mam jeszcze u siebie tego urządzenia, wartość urządzenia wynosi ok.200zł (jak dla mnie), markowe takie urządzenia w tej klasie dokładności i z takimi opcjami kosztują ok 1500zł (a i tak brakuje im kilku funkcji).

Z tym czym nie mogłem sobie poradzić przez miesiąc kol. Domanoid zrobił to przez jeden dzień, jeszce raz gratulacje.

Było to dla mnie bardzo ważne pomieważ, przy małej częstotliwości (1kHz) i natężeniu 40A mogłem na radiatorze usmażyć sobie jajecznice :D Przy takiej częstotliwości i dodaniu dwóch wentylatorów myślę że temperatura radiatora będzie do ogarnięcia.

Pozdrawiam i na razie dziękuję za pomoc, wkrótce się odezwe.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2013, o 11:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

Michał11 napisał(a):

Było to dla mnie bardzo ważne pomieważ, przy małej częstotliwości (1kHz) i natężeniu 40A mogłem na radiatorze usmażyć sobie jajecznice :D Przy takiej częstotliwości i dodaniu dwóch wentylatorów myślę że temperatura radiatora będzie do ogarnięcia.



Myślę że twój problem nie leży w częstotliwości PWM lecz w stratach dynamicznych spowodowanych zbyt słaby driverem- straty na mosfecie głównie powstają podczas ładowania/rozładowania pojemności bramki. Im wyższa częstotliwość tym trudniej w krótkim czasie przeładować tą pojemność- straty rosną.

Nie wiem jakie masz obciążenie ale ja bym częstotliwość wybrał możliwie najniższą- zmieniłbym driver na bardziej wydajny, zresztą przy trzech tranzystorach optymalnym rozwiązaniem są trzy osobne drivery.

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2013, o 11:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Hmm, jeśli można.. to może podpowiemy coś więcej jeśli byśmy wiedzieli jakie drivery i jakie mosfety, typ obciążenia. Wiemy że do 40A ciągłego prądu. Możliwe, że coś jeszcze zrobimy w zakresie pomocy dla Twojego projektu :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2013, o 14:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lip 2012
Posty: 35
Lokalizacja: Gostyń
Pomógł: 0

Co do tego regulatora, zastosowałem trzy mosfety IRFP2807 połączone równolegle, jeden driver tc4429, obciążenie ciągłe 0-40A , odbiorniki będą różne ale najczęściej silniki i odbiorniki rezystancyjne.
Układ ma na wyjściu kondensator 14,000uF i diodę zabezpieczająca SB560.

Poprzednio robiłem testy na ne555 częstotliwości 1,2kHz jednym mosfecie IRFP064N bez drivera, kondensatorze 14,000uF i diodzie zabezpieczającej SB560 na wyjściu. Mosfet odlatywał przy 30A a radiator żebrowany,aluminiowy 15x9cm wys.2,5cm był tak gorący że bym mógł sobie na niego czajnik wstawić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO