Znaleziono 7 wyników

autor: ali
26 kwie 2008, 21:56
Forum: Elektronika ogólna
Temat: PWM Generator
Odpowiedzi: 24
Odsłony: 9051

jarekk pisze:
ali pisze:[...]
EDIT: myslalem o zbudowaniu czegos takiego :
http://www.homanndesigns.com/ModIO.html
Ma bardzo poważną wadę - czas reakcji jest powolny ( szaczuję że gdzie na poziomie 10..100 ms). Ale jak komus to nie przeszkadza to może być.
Konkretnie chodzilo mi o kwadraturowe wejscia zeby zrobic pilota z osobnymi pokretlami dla kazdej osi, gdzie opoznienie nawet na poziomie 0,1sek mysle ze nie ma znaczenia, tak samo mozna to zastosowac do wlaczania wentylatora, odkurzacza etc, wiem, ze jak sobie pierwsza "full wypasiona" wersje obczujnikowania maszyny rozpisalem to zabraklo mi pinow w dwoch portach LPT.

Kolega nigdy chyba nie programował w C ?!?
Propounuje obejrzeć pakiety typu WinAvr - standardowa biblioteka załatwi wszystko ( zarówno stały jak i zmienny przecinek). Można używać nawet zmiennych 64 bitowych.
[...]
Każde zastosowanie ma inne potrzeby. Dla sterownika krokowca napisałaem cały kod w assemblerze (Mega88)- tam szybkosc była krytyczna. Ale do zastosowania typu "potencjometr -PWM" - pisanie tego w assemblerze to *STRATA CZASU*
To prawda na procki w C nie pisalem, ale nigdzie sie nie upieralem, ze trzeba pisac w assemblerze, ja zaczynalem od projektow krytycznych czasowo(i to jeszcze na 8051) jakos tak wyszlo, ze sie przyzwyczailem do assemblera, wiec co kto lubi, poki co piszac rozne projekty to o wiele wiecej czasu zajmuje zrobienie interfejsu (uzywam Visual Studio 2008 i pisze w C#) i zrobienie dokumentacji niz pisanie kodu na procka (a projekty sa rozne).
W przypadku gen PWM to do zaimplementowania jest raptem jedno proste rownanie, wiec roznica w czasie bedzie niewielka, dysponujac bibliotekami z obsluga tych funkcji sprowadzi sie jedynie do przepisania wartosci do odpowiednich rejestrow i wywolania tej funkcji.
Ostatnio z takich prostych to pisalem emulator sygnalu walu korbowego do opla (jest tam kolo zebate 60-2) zmiana obrotow jest liniowa, caly kod razem z dzieleniem komentarzami zajmuje 250 lini, a tu jest jeszcze mniej roboty przeciez.

Edit:
Dalem sie podpuscic ale niech strace, generatorek PWM z przestrajana czestotliwoscia w zakresie od Fosc / 257 do Fosc / 65536 potki pod ADC0 i ADC1 wyjscie OC1B, czas wykonania <1h .
autor: ali
21 kwie 2008, 22:02
Forum: Elektronika ogólna
Temat: PWM Generator
Odpowiedzi: 24
Odsłony: 9051

jarekk pisze: 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 ).
Z tego co pamietam, jest w machu cos takiego jak modbus i z tego co przeczytalem wynikalo iz jest to jakis konkretny protokol komunikacji umozliwiajacy podpiecie dodatkowych wejsc/wyjsc za posrednictwem portu szeregowego, ale glowy sobie za to uciac nie dam.
EDIT: myslalem o zbudowaniu czegos takiego :
http://www.homanndesigns.com/ModIO.html

oczywiscie przy obecnym kursie dolara mialoby to aspekt raczej hobbystyczny ;)

Leoo pisze: 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!!!


Ehhh Leoo, widze, ze latwiej Ci coraz smieszniejsze ataki przypuszczac niz odpowiedziec na konkretnie pytanie, az dziwne bo jestes tu osoba ogolnie szanowana i zawsze mialem wrazenie, ze wiesz o czym piszesz.

Oczywiscie kod mozna napisac w C, ale pewnie i tak bedzie musialabyc jakas biblioteka z procedurami wielobajtowego dzielenia bo tego nie ma sprzetowo zrealizowanego w procku. Wiec w czym bys nie pisal i tak jakis kod bedzie to musial zrealizowac, wiec czy go wrzuce w postaci procedury w assemblerze czy dodam w postaci biblioteki w naglowku to jest w zasadzie bez znaczenia. Tak czy owak trzeba zapakowac odpowiednie komorki dzielna i dzielnikiem i wywolac odpowiednia procedure. Komentowac smiesznosci stwierdzenia "gnebic matematyke" w odniesieniu do prostego mnozenia i dzielenia nie bede, dla Twojego dobra.

Ja osobiscie na AVRy pisze w assemblerze jakos bardziej go czuje jest dla mnie czytelniejszy (glownie chodzi o kwestie zasobow, ktore sa dosc ograniczone w uC), ale jesli ktos woli pisac w innym jezyku to jego sprawa, mozliwe, iz bedzie lepiej.

Co do bulki z maslem, to faktycznie jest bulka z maslem i pisania kodu na jeden wieczor, to co wyzej wkleilem powstalo w 10 min. Jezeli dla Ciebie taki prosty program jest wyzwaniem, to faktycznie dobrze, ze przestales pakowac wszedzie procki, bo trzeba sobie ograniczac stres w zyciu. Program jest bardzo prosty, wiekszosc roboty jest odwalona sprzetowo... cala nasza praca polega zapakowaniu rejestrow odpowiednimi wartosciami, na ktorych wyliczenie mamy mase czasu. Jezeli Leoo masz cos konstruktywnego do powiedzenia prosze bardzo, mozemy podyskutowac, natomiast na Twoje 'zaczepki' odpowiadac juz nie bede.

Jesli by, ktorys z kolegow zdecydowal sie jednak na pisanie tego i mial jakies problemy smialo mozna do mnie pisac w miare mozliwosci pomoge.
autor: ali
21 kwie 2008, 10:35
Forum: Elektronika ogólna
Temat: PWM Generator
Odpowiedzi: 24
Odsłony: 9051

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.
autor: ali
21 kwie 2008, 00:15
Forum: Elektronika ogólna
Temat: PWM Generator
Odpowiedzi: 24
Odsłony: 9051

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
autor: ali
20 kwie 2008, 01:32
Forum: Elektronika ogólna
Temat: PWM Generator
Odpowiedzi: 24
Odsłony: 9051

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".
autor: ali
19 kwie 2008, 12:08
Forum: Elektronika ogólna
Temat: PWM Generator
Odpowiedzi: 24
Odsłony: 9051

Teraz pchasz wszedzie FPGA ? Co ma programowalny uklad kombinacyjny do 555 ?

Absolutnie sie zgodze, ze wszystko ma plusy i minusy.
Jesli uklad ma byc prosty nie musi byc precyzyjny, ani miec scisle okreslonej charakterystyki istotnie 555 styknie, mozna na tym zrobic mruganie lampkami choinkowymi i pewnie nikt nie zauwazy roznicy pomiedzy 555 a mikroprockiem.

Natomiast jesli sa juz jakies wymagania co do precyzyji, albo charakterystyki przestrajania to jednak mikroprocek bedzie lepszym wyborem... kwestia ceny wspomniany przezmnie ATmega8 to koszt niecalych 5pln, wiec mysle ze nie zabija, a sa tez tansze jeszcze.
Oczywiscie trzeba umiec programowac!!
Srodowisko programistyczne mozna sciagnac ze strony producenta ZA DARMO (i masz tam: kompilator i debugger(symulator)), programator mozna zrobic na paru elementach, ktore beda mniej kosztowac niz obudowa do nich.

Co do wieszania sie, dobrze napisany program z dobrze skonfigurowanym prockiem nie ma prawa sie zawiesic. Zreszta w FPGA tez mozna zrobic uklad, ktory da sie wzbudzic i zrobi sie piekny generator bo czasy propagacji pomiedzy bramkami sa niezerowe wiec 'wieszalnosc' ukladu zalezy glownie od konstruktura.

Uzywa sie tego co jest wygodne i ma sens.
Nie jest tak, ze mikroporcki sa 'BE' a FPGA jest 'AJA' jedno sie sprawdzi tu drugie gdzie indziej. Ja wyroslem z podejscia, ze "nie bede polowal armata na muche" , jesli lata mi mucha a ja mam armate pod reka to z niej wale bo szkoda mojego czasu na szukanie lapki, a i moze sie okazac, ze w obstawie muchy bylo stado szerszeni wiec i tak po armate siegnac trzeba.
autor: ali
18 kwie 2008, 17:39
Forum: Elektronika ogólna
Temat: PWM Generator
Odpowiedzi: 24
Odsłony: 9051

Tez bym polecal zastosowanie mikroprocka, bez problemu bedzie mozna uzyskac dowolne charakterystyki przestrajania. Jesli nie zalezy na gabarytach to ATmega8 sa latwo dostepne tanie i maja mase zasobow.

Wróć do „PWM Generator”