PWM Generator

Na tym forum rozmawiamy o elektronice nie związanej bezpośrednio z tematem CNC

jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 6
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#11

Post napisał: jarekk » 19 kwie 2008, 21:32

Podsumowując: każdy ma prawo do własnego wyboru. W zależności od posiadanej wiedzy,warsztatu, chęci i plam na słońcu będą to inne wybory. Nie próbujmy się przekonywać o wyższości Świąt Bożego Narodzenia nad Wielkanocą - zwłaszcza jeżeli dyskusja wychodzi poza tereny merytoryczne.



Tagi:


ali
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 7
Posty: 146
Rejestracja: 28 wrz 2005, 14:30
Lokalizacja: Poznań

#12

Post napisał: ali » 20 kwie 2008, 01:32

Leoo pisze:
ali pisze:Teraz pchasz wszedzie FPGA ?
Jeśli to miał być dowcip, to Koledze nie wyszedł.
Sam kolega zaczal :
Rozwiązania sprzętowe (kombinacyjne) są najszybsze, dla tego procesory nigdy nie wyprą układów programowalnych.
Chyba, ze inaczej rozumiemy "uklady programowalne" dla mnie uklad programowalny to mikroprocek i FPGA ...uklady typu 555 nie sa absolutnie programowalne, wiec jesli kolega "jedzie" po prockach tlumaczac, ze uklady programowalne sa lepsze to nasuwa sie jedno, ze kolega uzywa FPGA, stad moje pytanie...

Pomijam fakt, ze stwierdze nie, iz uklady programowalne nie wypra procesorow to mi sie wydaje, ze to troche odwrotna chronologia, gdyz w tej chwili w pewnych dzedzinach wlasnie procki zaczynaja byc wypierane przez programowalne uklady logiczne (FPGA) ze wzgledu na spadek cen (wymienic by chociazby nalezalo uklady Xilinx'a) i co za tym idzie wieksza dostepnosc. Zreszta niedlugo sie moze okazac, ze bedzie tylko FPGA, a jesli bedziemy chcieli realizowac na nim jakis mikroprocesor to go sobie tam po prostu wgramy, bo jest to absolutnie mozliwe.

Co do sensownosci, koledzy tu skacza z cena... jesli potrzeba tego milion sztuk to fakt, warto walczyc o roznice 2pln na sztuce, jesli nie to smiem twierdzic ze 5pln za procka to malo, zwlaszcza patrzac na mozliwosci, ktore on oferuje. Oczywiscie problemem pozostaje umiejetnosc programowania i tego absolutnie nie neguje, nie twierdze, ze jest to jedyna sluszna droga ani ze jest najlepsza, ale ma sporo zalet, ktore jestem w stanie wymienic i ja osobiscie zarzucilbym procka, bo bym sobie wszystko poustawial jak chce i mial pewnosc, ze te wartosci sa stabilne, bo jakby nie patrzec chodzi o generowanie sygnalu cyfrowego (jakim z pewnoscia jest PWM) a 555 dziala w oparciu o czas ladowania kondensatora i komparatory wiec full analog.

Co do zawieszania sie, to kwestia tego jak jest co napisane, windows sie wiesza, linux jakos mniej... a sa systemy serwerowe, ktore uptime maja w latach... i sie nic nie wiesza.

To jak z maszyna jesli bedzie zrobiona dobrze, to bedzie sluzyc latami i nic sie niej nie popsuje, jesli bedzie zle zrobiona to nie przepracuje tygodnia bez awarii, oczywiscie abstrahujac czynniki zewnetrzne, bo jak to mawiaja "troche czlowieka i technika sie gubi" ;)

Wiec "procki sa zle bo sie wieszaja", jest takim samym argumentem jak "mlotki sa do du** bo mi sie trzonek zlamal".

Jeszcze takie OT a propos wypowiedzi kolegi :
nie każdy musi umieć wszystko .
to za komuny każdy musiał być malarzem , elektrykiem , mechanikiem , itp.
Nie wiem jak bylo za komuny, ale teraz niestety jest podobnie. Jesli chcesz miec cos zrobione dobrze musisz umiec zrobic to sam, albo zeby faktycznie zrobic to samemu, albo zeby wiedziec czego wymagac.
Ja dlugiej kariery zawodowej nie mam (bo w sumie jeszcze dzieciak jestem), a juz takich przykladow moglbym podac kilkanascie. Gdzie nawet nie brak wiedzy co po prostu myslenia, albo brak umiejetnosci wyciagania wnioskow z wlasnych bledow, ale niestety taki narod, cale szczescie to sie zmienia bo zaczynaja sie pojawiac ludzie, ktorzy sie przykladaja do tego co robia, niestety "zbyt wolno".
pozdrawiam
Jakub Jędrzejczak


Adalber
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 1
Posty: 687
Rejestracja: 10 lip 2005, 15:13
Lokalizacja: Polska

#13

Post napisał: Adalber » 20 kwie 2008, 10:58

Może jakiś mały kompletny projekcik tyczący generatora PWM na procku lub lepiej FPGA -kolega ali nam tu przedstawi- wszyscy wtedy uwierzymy w cudowną odmianę narodu ponieważ "zaczynaja sie pojawiac ludzie, ktorzy sie przykladaja do tego co robia ".


Leoo
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 6
Posty: 4017
Rejestracja: 15 lis 2006, 22:01
Lokalizacja: Tarnobrzeg

#14

Post napisał: Leoo » 20 kwie 2008, 12:45

ali pisze:Ja dlugiej kariery zawodowej nie mam (bo w sumie jeszcze dzieciak jestem), a juz takich przykladow moglbym podac kilkanascie. Gdzie nawet nie brak wiedzy co po prostu myslenia, albo brak umiejetnosci wyciagania wnioskow z wlasnych bledow, ale niestety taki narod, cale szczescie to sie zmienia bo zaczynaja sie pojawiac ludzie, ktorzy sie przykladaja do tego co robia, niestety "zbyt wolno".
Kolega sugeruje, że jestem głupi bo zaproponowałem PWM na 555???
Proszę przeczytać tytuł wątku i pierwszy post Autora.
Jak na razie Kolega jedynie neguje i ciągle ma wiele do powiedzenia ale z goła nic konkretnego. Proszę zamieścić schemat PWM na procesorze (PIC12, ATTINY itp.), opublikować kod źródłowy. Wówczas rady Kolegi będą miały sens, na razie mamy wyłącznie puste słowa.
Forum ma pomagać a nie promować "politykierów".


ali
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 7
Posty: 146
Rejestracja: 28 wrz 2005, 14:30
Lokalizacja: Poznań

#15

Post napisał: ali » 21 kwie 2008, 00:15

Leoo nie odwracaj kota ogonem, nigdzie nie napisalem, ze jestes glupi, nie napisalem tez ze zaproponowany przez Ciebie uklad nie bedzie dzialal, nie szukaj podtekstow w tym co pisze bo ich nie ma, swoja droga strasznie drazliwi jestescie tutaj.

Przyczepilem sie do
Etap życia, kiedy wkładałem procesor gdzie popadnie, mam już za sobą. Rozwiązania sprzętowe (kombinacyjne) są najszybsze, dla tego procesory nigdy nie wyprą układów programowalnych.
I juz wyjasnilem dlaczego, piszesz ze procki sa gorsze od kombinacyjnych ukladow programowalnych I ISTOTNIE TAK JEST, problem w tym, ze zaproponowane przez Ciebie 555 nie jeste kombinacyjnym ukladem programowalnym. Wiec w kontekscie tematu jest to bzdura, stad poszlo moje pytanie czy teraz pchasz wszedzie FPGA skoro procki juz sa gorsze. I tylko tyle mi chodzi, abys wyjasnil to kwestie bez zakladania, kto tu jest glupi, kto ma jakie literki przed nazwiskiem, bo sie z Toba absolutnie zgodze, ze dzisaj nic one nie znacza.

A dla kolegi domagajacego sie kodu prosze:
Procek ATmega8 AVcc podpiete pod napiecie zasilania pomiedzy Aref a mase kondensator, potencjometr podpiety pomiedzy zasilanie i mase a "szczotka" do wejscia ADC0, na pinach wyjscia OC1A i OC1B (jedno jest negacja drugiego). T1 w trybie pracy FASTPWM czestotliwosc PWM Fosc/1024.


.nolist
.include "m8def.inc"
.list


.def mpr1 = r16

.org 0x00
rjmp start
.org ADCCaddr ; ADC Conversion Complete
rjmp ADC_int




start:
ldi mpr1,low(RAMEND)
out spl,mpr1
ldi mpr1,high(RAMEND)
out sph,mpr1


ldi mpr1,(0<<REFS1|1<<REFS0)
out admux,mpr1
ldi mpr1,(1<<ADEN|1<<ADSC|0<<ADFR|1<<ADIE|1<<ADPS2|1<<ADPS1|1<<ADPS0)
out adcsra,mpr1


ldi mpr1,(1<<COM1A1|0<<COM1A0|1<<COM1B1|1<<COM1B0|1<<WGM11|1<<WGM10)
out TCCR1A,mpr1
ldi mpr1,(1<<WGM12|0<<WGM13|0<<CS12|0<<CS11|1<<CS10)
out TCCR1B,mpr1

sei

praca: rjmp praca


ADC_int:

in zl,adcL
in zh,adcH

out OCR1AH,zh
out OCR1AL,zl
out OCR1BH,zh
out OCR1BL,zl

sbi ADCSRA,ADSC

reti


Mam nadzieje, ze Kolega wybaczy brak kodu na FPGA, ale nie mam obecnie zainstalowanego webpacka i nie pisalem juz na spartany z pol roku, wiec dla celow czystego przycwaniaczenia na forum nie chce mi sie tego robic.

pozdro
pozdrawiam
Jakub Jędrzejczak


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 6
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#16

Post napisał: jarekk » 21 kwie 2008, 00:26

A dla kolegi domagajacego sie kodu prosze:
Kod pewnie będzie działał, ale mam pewną praktyczną uwagę - rzadko kiedy dane z przetwornika A/C są zupełnie czyste więc używanie ich na żywca ( bez filtracji cyfrowej) może dać nie do końca stabilny sygnał na PWM.


Autor tematu
mag32
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 391
Rejestracja: 31 paź 2004, 13:34
Lokalizacja: Bytom
Kontakt:

#17

Post napisał: mag32 » 21 kwie 2008, 07:57

jarekk pisze: Kod pewnie będzie działał, ale mam pewną praktyczną uwagę - rzadko kiedy dane z przetwornika A/C są zupełnie czyste więc używanie ich na żywca ( bez filtracji cyfrowej) może dać nie do końca stabilny sygnał na PWM.
Czyli pewnie wystarczyłoby wyciągać średnia z pewnej liczby próbek.

Ja jednak zastosuje 555 kolego Leoo, ale i to może być ciekawe, gdyby nie fakt, że jak rozumiem jest tu regulacja tylko wypełnienia, a mnie potrzeba też częstotliwość. Aczkolwiek pozwolę sobie przy najbliższej okazji przetestować i ten pomysł, choć nie bardzo widzę tu możliwość właśnie ustawiania częstotliwości.

Kod: Zaznacz cały

Procek ATmega8 
AVCC podpięte pod napięcie zasilania 
pomiędzy Aref a masę kondensator, 
potencjometr podpięty pomiędzy zasilanie i masę a "szczotka" do wejścia ADC0, 
na pinach wyjścia OC1A i OC1B (jedno jest negacja drugiego). 
T1 w trybie pracy FASTPWM 
częstotliwość PWM Fosc/1024.


.nolist
.include "m8def.inc" 
.list


.def mpr1 = r16

.org 0x00
rjmp start
.org ADCCaddr ; ADC Conversion Complete
rjmp ADC_int




start: 
ldi mpr1,low(RAMEND) 
out spl,mpr1
ldi mpr1,high(RAMEND) 
out sph,mpr1


ldi mpr1,(0<<REFS1|1<<REFS0) 
out admux,mpr1
ldi mpr1,(1<<ADEN|1<<ADSC|0<<ADFR|1<<ADIE|1<<ADPS2|1<<ADPS1|1<<ADPS0) 
out adcsra,mpr1


ldi mpr1,(1<<COM1A1|0<<COM1A0|1<<COM1B1|1<<COM1B0|1<<WGM11|1<<WGM10) 
out TCCR1A,mpr1
ldi mpr1,(1<<WGM12|0<<WGM13|0<<CS12|0<<CS11|1<<CS10) 
out TCCR1B,mpr1

sei

praca: rjmp praca


ADC_int: 

in zl,adcL
in zh,adcH

out OCR1AH,zh
out OCR1AL,zl
out OCR1BH,zh
out OCR1BL,zl

sbi ADCSRA,ADSC

reti 
Czy na wejście analogowe można podać aż taki zakres napięć, nie ma tam przypadkiem ograniczenia do połowy napięcia zasilania ?
Nie pamiętam już not tego scalaczka, ale cos takiego mi się kojaży.
Mierz co mierzalne,
a niemierzalne uczyń także mierzalnym"
(Galileo Galilei)


ali
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 7
Posty: 146
Rejestracja: 28 wrz 2005, 14:30
Lokalizacja: Poznań

#18

Post napisał: ali » 21 kwie 2008, 10:35

Kod pewnie będzie działał, ale mam pewną praktyczną uwagę - rzadko kiedy dane z przetwornika A/C są zupełnie czyste więc używanie ich na żywca ( bez filtracji cyfrowej) może dać nie do końca stabilny sygnał na PWM.
Absolutnie sie z tym zgodze, ale juz nie chcialo mi sie wczoraj poznym wieczorem pisac usredniania po ostatnich 16 czy 32 wartosciach. Dodatkowo wstawilbym rezystor w szereg ze szczotka, i pomiedzy wejscie ADC0 a mase dal kondensator.
Czy na wejście analogowe można podać aż taki zakres napięć, nie ma tam przypadkiem ograniczenia do połowy napięcia zasilania ?
Mozna zastosowac 3 rozne napiecia odniesienia. Wewnetrzne rowne 2.56V , zewnetrzne podlaczone pod Aref, lub przyjac AVcc za napiecie odniesienia, w tym przypadku bedzie ono rowne napieciu zasilania i napieciu na potencjometrze, co spowoduje, ze nawet plywanie napiecia zasilania nie bedzie mialo wplywu na odczyt wartosci (ustawienie PRka) gdyz zmiany beda proporcjonalne.

I uklad faktycznie jest generatorem o stalej czestotliwosci, aby uzyskac zmienna czestotliwosc trzeba ustawic timer w inny tryb (tak aby moc ustawiac wartosc TOP ja poszedlem na latwizne i wybralem tryb 10bit gdzie wartosc TOP = 0x3ff).

Jesli chodzi o "recepte" to ja bym zrobil to tak:
wyznaczyl czestotliwosci jakie mnie interesuja (graniczne).
Sprawdzil czy da sie te czestotliwosci uzyskac z tego samego ustawienia bitow prescalera, i sprawdzil czy przy takim ustawieniu rozdzielczosc pwm dla czestotliwosci najwyzszej mnie satysfakcjonuje. Jesli jest to mozliwe, wystarczy sie bawic 16 bitami, ktore odpowiadaja za wartosc TOP, jesli nie trzeba by jeszcze wlaczyc w to zabawe bitami prescalera tego timera... tak uzyskamy czestotliwosc.
Zabawe 16 bitami mozna zrobic na rozne sposoby, jesli potrzebna bedzie jakas dziwna charakterystyka przestrajania tej czestotliwosci polecam wrzucic tablice (pamieci mamy 8k wiec spoko sie zmiesci) bo nawet jak ktos na kozaku pojdzie, ze chce uzyskac 10bit rozdzielczosc to jest 1024 x 3 bajty = 3k zajmie tablica.

Uzyskanie wypelnienia przy zmiennej dlugosci impulsu bedzie troche trudniejsze niz w kodzie, ktory jest wyzej, ale dalej absolutnie mozliwe do wykonania.

Musimy zastosowac procedury 24 lub 32 bitowego mnozenia i dzielenia (16 bit mozna sciagnac ze strony atmela i sprobowac stuningowac, ale wielu entuzjastow AVRow zamieszcza gotowe procedury dzielnia/mnozenia na swoich stronach... wiec chwila pogooglania zalatwi sprawe) nastepnie bierzemy wartosc odczytana z kanalu ADC ktory jest odpowiedzialny za wypelnienie, mnozymy ta wartosc razy wartosc TOP i nastepnie dzielimy przez wartosc maksymalnego wskazania kanalu ADC (jesli skorzystamy z calej mozliwej rozdzielczosci czyli 10 bitow maksymalne wskazanie to 0x3ff).
Uzyskana wartosc wrzucamy do rejestrow OCR i voila. Wykorzystanie powyzszych procedur sprowadza sie do zapakowania odpowiednich rejestrow i wywolania procedury. Oczywiscie jesli ktos ma wene, to moze sobie samemu napisac procedure dzielenia bo w tym konkretnym przypadku nie musi byc ona szybka. Realizacja PWM jest calkowicie sprzetowa, ADC chodzi na przerwaniach, oczywiscie w kazdym przypadku trzeba zadbac o to aby nam przerwania nie mogly nic popsuc w liczeniu, czyli rejestry wykorzystane do obslugi przerwania na poczatku procedury obslugi przerwania zrzucic na stos + oczywiscie rejestr statusu, i po zakonczeniu obslugi przerwania sciagnac je ze stosu.

PS. powyzszy kod, ktory popelnilem wczoraj jak widze teraz zawiera maly blad, a konkretnie trzeba ustawic piny OC1A i OC1B jako wyjsciowe, czyli brakuje dwoch lini
ktore bym umiescil zaraz po ustawieniu timera (przed komenda sei).

sbi ddrb,pb0
sbi ddrb,pb1

Za niedoskonalosc przepraszam, jestem tylko czlowiekiem.

PS2. jesli by koledzy chcieli pisac jakis wspolny projekt mikroprocesorowy to ja chetnie podziele sie wiedza i doswiadczeniem jesli mowa o jakims konkretnym pomysle, to z tego co widzialem w mach'u jest mozliwosc zwiekszenia wejsc/wyjsc przez podlaczenie dodatkowego urzadzenia przez port szeregowy, niestety nie udalo mi sie znalezc protokolu komunikacji, ale przyznam szczerze, ze jakos specjalnie sie nie wysilalem.
pozdrawiam
Jakub Jędrzejczak


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 6
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#19

Post napisał: jarekk » 21 kwie 2008, 11:25

ali pisze:PS2. jesli by koledzy chcieli pisac jakis wspolny projekt mikroprocesorowy to ja chetnie podziele sie wiedza i doswiadczeniem jesli mowa o jakims konkretnym pomysle, to z tego co widzialem w mach'u jest mozliwosc zwiekszenia wejsc/wyjsc przez podlaczenie dodatkowego urzadzenia przez port szeregowy, niestety nie udalo mi sie znalezc protokolu komunikacji, ale przyznam szczerze, ze jakos specjalnie sie nie wysilalem.
W machu aby podłączyć inne urządzenie należy napisać plugin ( jest do tego SDK, przykłady i nieco dokumentacji). Jestem w trakcie budowy takiego urządzenie ( projekt komercyjny dla Step2Cnc ).


Leoo
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 6
Posty: 4017
Rejestracja: 15 lis 2006, 22:01
Lokalizacja: Tarnobrzeg

#20

Post napisał: Leoo » 21 kwie 2008, 11:30

ali pisze:Musimy zastosowac procedury 24 lub 32 bitowego mnozenia i dzielenia (16 bit mozna sciagnac ze strony atmela i sprobowac stuningowac, ale wielu entuzjastow AVRow zamieszcza gotowe procedury dzielnia/mnozenia na swoich stronach... wiec chwila pogooglania zalatwi sprawe) nastepnie bierzemy wartosc odczytana z kanalu ADC ktory jest odpowiedzialny za wypelnienie, mnozymy ta wartosc razy wartosc TOP i nastepnie dzielimy przez wartosc maksymalnego wskazania kanalu ADC (jesli skorzystamy z calej mozliwej rozdzielczosci czyli 10 bitow maksymalne wskazanie to 0x3ff)...
Nieźle Koledze idzie. Proszę kontynuować. Może zamiast gnębić matematykę, lepiej ściągnąć kompilator wyższego rzędu np. Basic albo C? Kiedy możemy spodziewać się działającego projektu? Faktycznie to bułka z masłem!!!

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika ogólna”