Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

PWM , czyli Atmega + NE555 + DS2890

kogan77 17 Feb 2011 10:51 7000 27
  • #1
    kogan77
    Level 17  
    Witam serdecznie.

    Nigdy tego wcześniej nie robiłem, ale zachodzi potrzeba stworzenia PWM w zakresie 0-100%, gdzie elementem wykonawczym będzie MOSFET, gdzie za jego stopień otwarcia odpowiadać będzie timer NE555 z potencjometrem cyfrowym 1-Wire firmy Dallas, czyli nie produkowany już DS2890.
    Rozwiązanie takie, a nie inne ponieważ tutaj akurat nie mogę zastosować klasycznego i najprostrzego PWM + Mosfet.


    Dorwałem taki oto znany zapewne schemat :


    PWM , czyli Atmega + NE555 + DS2890

    Zamiast tranzystora na schemacie oczywiście będzie MOSFET.

    Moje pytanie dotyczą :



    1) na schemacie widać potencjometr 1M. Czy zmiana na wspomniany cyfrowy o wartości 100k zmieni mi zakres procentowy regulacji ?

    2) Napięcie zasilania DS2890 to max 6V, w związku z tym całość powinna byc zasilana tym napięciem, co niestety wpłynie fatalnie na sterowanie (pełne otwarcie) mosfeta. Czy mogę zastosować przed mosfetem optotranzystor i do otwarcia mosfeta użyć napięcia powiedzmy 12V ?

    3) Proszę o wyrozumiałość - szukałem, ale nie znalazłem odpowiedzi na to konkretne zagadnienie.
    Czy potencjometr DC2890 po prostu wstawiam zamiast 1M na schemacie?

    Poniżej DS2890

    PWM , czyli Atmega + NE555 + DS2890

    Może ktoś z Was szanowni koledzy juz przerabiał ten temat.

    Proszę o pomoc.
  • Helpful post
    #2
    LordBlick
    VIP Meritorious for electroda.pl
    Jaka jest przyczyna, że nie można bezpośrednio korzystać z wbudowanego w AVR PWM-a ? Można w tym celu dać np ATtiny10 do samego PWM. Na zwiechy jest watchdog, na spadek napięcia - BOD... Co do transoptorów do MOSFET - TLP250
  • #3
    kogan77
    Level 17  
    Jeden mikrokontroler (Atmega32) w całym układzie, sterowanie NE555 poprzez 1-wire DS2890. Opto na PC847.
    Inaczej nie mogę - sztywne wytyczne!
  • #4
    LordBlick
    VIP Meritorious for electroda.pl
    Ja bym podyskutował z tymi wytycznymi, bo to dla mnie to takie idiotyzmy jak w polskich urzędach... :D
    - W czym degradujące się elementy bierne z dwoma układami scalonymi są lepsze od innego układu scalonego bez tych elementów, który i tak jest już w układzie ?
    - DS890 w tym układzie raczej może się nie sprawdzić, jaka częstotliwość nośna PWM ?
    - PC847 też ma swoje ograniczenia częstotliwościowe...
  • #5
    hamerg
    Level 20  
    Wytyczne są takie:
    - Atmega32
    - pomiar co 0,2s wejść ADC ( czyli przerwanie np Timer1)
    - PWM ( i tu musi byc osobny układ lub druga atmega) częstotliwość ok 1kHz
    - oczywiście ewentualna zmiana aktualnego procentu wypełnienia PWM też co 0,2 sek.

    Z tego co sie orientuje to wykorzystanie 2 przerwań nie jest proste, a my tego nie potrafimy. Ważne jest to że w podprogramie przerwania jest ważny algorytm, wykonywujący si e ok 0,16s, a reszta, czyli program główny tylko wyświetla odpowiednie wartości na LCD.
    Myślałem nad wykorzystaniem 2 atmeg np 32 oraz 8 dla PWM, ale problem znowu z tym że obydwie atmegi musiały by zczytywać wartości z ADC ( pomiar napięć).
    Czyli
    Przerwanie T1
    pętla główna
    obsługa wyświetlacza

    podprogram przerwania
    zczytanie min 600 próbek z ADC
    obróbka danych
    skomplikowany algorytm sprawdzający dane


    a gdzie tu wpleść PWM który będzie działać z częstotliwością 1kHz??
  • #6
    asembler
    Level 32  
    Pewnie chodzi o to żeby mozna było odłączyć atmegę a PWM sam sobie pracował a ustawianie za pomocą 1-wire.
    Jak to juz ma być 555 to nicprostrego wziąsc attiny namalować na nim 555 a wsrodku zrobic program na sterowanie tym attiny po 1-wire.
    Tez abstrakcyjne rozwiązanie.
    A czy sie da osiągnąc 0-100% na zaproponowanym "sztywnym" to nie jestem taki pewny.
    Inaczej mówiąc wrzuć na luz.
  • #7
    LordBlick
    VIP Meritorious for electroda.pl
    Podstawowy błąd programistyczny, to podejście "z księżyca" do obsługi przerwań. Ten problem idzie rozwiązać na ATmega8, a może i nawet ATtiny26 i procesor będzie ziewać...
  • #8
    asembler
    Level 32  
    hamerg wrote:


    a gdzie tu wpleść PWM który będzie działać z częstotliwością 1kHz??

    Ale PWM nie potrzebuje przerwania chyba że chcesz koniecznie programowy.
    Po to wymyślono PWM sprzętowy żeby własnie takich cudów nie wymyślac.
    A zabierze on 0.0001% czasu procesora łącznie uz uaktualnianiem co 0.2s.
    Jak chcesz umiescic w przerwaniu 0.16s to nawet 3 atmegi64 sobie nie poradzą
  • #9
    hamerg
    Level 20  
    Ok, w takim razie proszę o wskazówkę jak pogodzic timer1 dla PWM i zrobić przerwanie co 0,2s dla wykonania podprogramu ( czas wykonywania ok. 0,16s). Przerwanie musi być dokładne ze względu na wyliczenia ilości energii. Jak narazie wszelkie próby na układzie A8, spełzły na niczym. Brak możliwości zastosowania PWM i drugiego licznika Timer 2 wywołania przerwania.
    Dodatkowo podczas sprawdzania PWM zaobserwowałem że jest różnica czasowa wykonywania się programu głównego przy PWM=0 a PWM=255. Zapalając i gasząc diodę co pewną ilość cykli zauważyłem że przy PWM=0 przerwy są mniejsze.
  • #10
    asembler
    Level 32  
    Jeszcze jest licznik T0, ale dopóki nie opowiesz jakie zasoby już wykorzystuje i dlaczego to nie ma dyskusji. I dlaczego ten super wązny algorytm musi być wykonywany w całości, bo to tak odczytuje, czyli ty w ogóle nie możesz przerwań zastosować.
    JA bym ten algorytm dał do programu głownego, a wyniki które podejrzewam są ważne do wykonywania dlaszego programu użwywał dopiero jak ten "algorytm" na przykład ustawi flagę że już skonczył.
  • #11
    LordBlick
    VIP Meritorious for electroda.pl
    hamerg wrote:
    Dodatkowo podczas sprawdzania PWM zaobserwowałem że jest różnica czasowa wykonywania się programu głównego przy PWM=0 a PWM=255. Zapalając i gasząc diodę co pewną ilość cykli zauważyłem że przy PWM=0 przerwy są mniejsze.
    Jakieś cuda na gwoździu/kiju... PWM sprzętowy nie ma wpływu na czas wykonywania programu (przynajmniej u mnie w asemblerze... ;) )... Może jakieś fragmenty kodu testowego do oceny ?
  • #12
    asembler
    Level 32  
    Light-I wrote:
    hamerg wrote:
    Dodatkowo podczas sprawdzania PWM zaobserwowałem że jest różnica czasowa wykonywania się programu głównego przy PWM=0 a PWM=255. Zapalając i gasząc diodę co pewną ilość cykli zauważyłem że przy PWM=0 przerwy są mniejsze.
    Jakieś cuda na gwoździu/kiju... PWM sprzętowy nie ma wpływu na czas wykonywania programu... Może jakieś fragmenty kodu testowego do oceny ?


    Niestety napisał że nie można używać PWM sprzetowego ani licznika T2.
    U mnie też nie ma wływu na czas wykonywania programu :-)
  • #13
    hamerg
    Level 20  
    asembler wrote:
    Jeszcze jest licznik T0, ale dopóki nie opowiesz jakie zasoby już wykorzystuje i dlaczego to nie ma dyskusji. I dlaczego ten super wązny algorytm musi być wykonywany w całości, bo to tak odczytuje, czyli ty w ogóle nie możesz przerwań zastosować.
    JA bym ten algorytm dał do programu głownego, a wyniki które podejrzewam są ważne do wykonywania dlaszego programu użwywał dopiero jak ten "algorytm" na przykład ustawi flagę że już skonczył.

    A więc tak.
    Program ma działac tak jak tu www.windtechenergy.com
    Czyli , program główny wyświetla dane na LCD
    Podprogram wywoływany przerwaniem :
    - odczytuje ADC(0) i ADC(1) 300 razy każdy
    - zamienia to na odpowiednio przeliczone wartości I, U, W, E.
    - reszta podprogramu odpowiedzialna jest za analizę i ustawienie odpowiednich portów wyjściowych ( zabezpieczenie aku przed przeładowaniem).
    Chcemy teraz zamiast zmiany portów zastosować PWM setujący Mosfetami, dla płynnej zmiany obciążenia.
    Ten program wgrany do A8 na stronce działa nieprzerwanie od 6 miesięcy i nie ma problemu z tym aby praktycznie cały program był w podprogramie.
  • #15
    asembler
    Level 32  
    Link nie działa. Ustawianie portów bedzie tak samo długo trwało jak ustawienie PWM więc nie widze problemu w miejscu gdzie ustawia sie porty wysłac odpowiednia informacje (ustawić jakis rejestr) dla PWM (nie 1-wire bo tutaj dopiero zaczną sie schody).
    Takie pytanie z ciekawości "podprogram wywoływany przerwaniem do odczytu ADC 300 razy) Jakim przerwaniem jest wywoływany?
  • #17
    hamerg
    Level 20  
    asembler wrote:
    Link nie działa. Ustawianie portów bedzie tak samo długo trwało jak ustawienie PWM więc nie widze problemu w miejscu gdzie ustawia sie porty wysłac odpowiednia informacje (ustawić jakis rejestr) dla PWM (nie 1-wire bo tutaj dopiero zaczną sie schody).
    Takie pytanie z ciekawości "podprogram wywoływany przerwaniem do odczytu ADC 300 razy) Jakim przerwaniem jest wywoływany?

    Nie podprogram wywoływany jest po przepełnieniu Timer1 co 0,2s, ale w pętli jest próbkowanie 300 razy z ADC(0), puźniej 300 razy z ADC(1).DLa A8 i zegara 8MHz to trwa mniej niż 8 ms, reszta podrogramu zajmuje dość czasu ze względu na operowanie na zmiennych single ( a to pochłania procka).
    Co do schematu to nie ma tam nic ciekawego lub nadzwyczajnego( rezonatory, zasilanie, parę rezystorów do pomiaru napięcia i prądu z bocznika. Generalnie chcemy aby pod PB0 lub PB1 był podłaczony zestaw MOSFETów na 100-150A do sterowania "płynnie" obciążeniem prądnicy i niedopuszczeniem do przeładowania aku. Systemy kaskadowe załączania obciążeń nie są wystarczające.
    Co do wsadu to jeśli jest ktoś w stanie pomóc to mogę oczywiście część kodu podrzucić na PW.

    Link poprawiłem.
  • #18
    asembler
    Level 32  
    Coś podobnego mam zrobione.
    W przerwaniu mierzony jest prąd, napiecie i klawiatura analogowa.
    w nastepnym przerwaniu mierzony jest czas rzeczywisty i dwa liczniki zegarowe (pomiar mocy i czasów działania/niedzialania)
    W jeszcze jednym przerwaniu ma programowy PWM 9 bit do sterowania tyrystorem.
    W kolejnym przerwaniu właczony jest głosnik do sygnalizacji naciskania klawiszy lub stanów alarmowych/budzik itp.
    Algorytmy sprawdzajace liczące moc i inne bzdury są w programie głownym bo inaczej nie byłoby w ogóle programu głownego:-)
    PWM do regulacji kontrastu i podswietlenia wyswietlacza graficznego.
    Rozbudowane MENU do ustawień.
    I to wszystko miesci sie spokonie w ATMEGA8 i zajmuje ledwo 36% czas procesor (orientacyjnie)
    Wiec sie na pewno da ale z innym podejsciem do przerwań przede wszystkim.

    Dziwie sie na przykład tej wartości 0.2s to nijak sie nie da w systemie dwójkowym, ja bym raczej zastosował 0.25s a reszte przeciez mozna przeliczyc do nowej wartosci.
    Ja tu widze jedno: napisac program od nowa:-)
  • #19
    hamerg
    Level 20  
    Nie ma znaczenia czy pętla główna jest pusta czy nie. Ja uczyłem się na programie właśnie tak skomponowanym. Cały program był wykonywany podczas przepełnienia licznika. Co do podziału to proszę ATMEGA 8 na zegarze 8MHz
    Code:
    Config Timer1 = Timer , Prescale = 256                      'konfiguracja timera
    
    On Timer1 Cykl                                              'realizacja podprogramu cykl po przepełnieniu
    Enable Interrupts                                           'globalne włączenie przerwań
    Enable Timer1                                               'włączenie timera
    Timer1 = 59286
  • #20
    asembler
    Level 32  
    Dlaczego 300 razy pod rząd. Mam rozumiec że po kazdym starcie konwersli musisz czekac na wynik?

    Dodano po 2 [minuty]:

    hamerg wrote:
    Cały program był wykonywany podczas przepełnienia licznika.

    I tu jest źródło problemu tego nie wolno nigdy robić chyba że sie chce potem na eletrodzie pytać czemu nie dziala.
  • #21
    hamerg
    Level 20  
    Nie pisze że w tej formie która jest nie działa. Wręcz przeciwnie działa od 6 miechów bez zwiech. Ale teraz chcemy dołożyć PWM do tego co mamy i tu jest problem.
    To część programu. Ważne elementy algorytmów są wycięte, bo nie maja znaczenia dla poruszanego problemu.
    Jeśli jest możliwość dołożenia PWM z timera1 to proszę o pomoc.
    Proszę niezwracać uwagi na podpięcie LCD pod wyjście PWM, gdyż to jest już zmienione na nowej płytce. Ważne jest aby podprogram wykonywany był co 0,2s.
    Code:
    ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Listing_4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    $crystal = 8000000 ‘deklaracja Częstotliwości Kwarcu
    $regfile "m8def.dat" ‘biblioteka Mikrokontrolera

        Deflcdchar 1 , 4 , 14 , 31 , 31 , 14 , 14 , 10 , 14     ' zapalona
        Deflcdchar 2 , 4 , 10 , 17 , 17 , 10 , 14 , 10 , 14     ' zgaszona
                                                              'definicja dwóch nowych znaków wyświetlanych podczas powitania





                                                        ' ustawia na stan wysoki

    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.4 , E = Portb.2 , Rs = Portb.1




                                                                   'deklaracja pinów do połaczenia z wyświetlaczem LCD
    Display On                                                  'inicjacja wyświetlacza
    Cursor Off                                                  'wyłączenie wyświetlania kursora
    Cls                                                         'czyszczenie zawartości wyświetlacza                                   'wyświetlamy napis


    Cls
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    '--------------------------------------------------------
    ' deklaracje zmiennych
    '
    '
    '
    '--------------------------------------------------------
    Start Adc                                                   'uruchomienie przetwornika ADC





    Gosub Start1



    Config Timer1 = Timer , Prescale = 256                      'konfiguracja timera
    On Timer1 Cykl                                              'realizacja podprogramu cykl po przepełnieniu
    Enable Interrupts                                           'globalne włączenie przerwań
    Enable Timer1                                               'włączenie timera
    Timer1 = 59286


    Do
    If Ok_sw = 0 Then
    Disable Timer1
    Sound Portc.3 , 1000 , 150
    Gosub Menu
    End If

    If Down_sw = 0 Then
    Sound Portc.3 , 1000 , 150
    Waitms 30
    Mocmax = 0
    End If



    'wyświetlanie wyników
    Locate 1 , 1
    Lcd "U=" ; Volts3 ; "V"
    Locate 1 , 12
    Lcd "I=" ; Current3 ; " A"
    Locate 2 , 1
    Lcd "P=" ; Moc1 ; " "
    Locate 2 , 8
    Lcd "W "
    Locate 2 , 11
    Lcd "Pm=" ; Mocmax1 ; " "
    Locate 2 , 19
    Lcd "W"
    Locate 3 , 1
    Lcd "E=" ; Ah_licznik2 ; " Ah"

    Locate 4 , 1
    If Ups = 0 Then
       Lcd "MEW "
       Else
       Lcd "Ze  "
    End If
    If S_t = 1 Then
    Lcd "   S T O P    "
    Else
    If Hamowanie = 1 Then
       Lcd "--HAMOWANIE-- "
       Else
          If Pk_2 = 0 Then
          Lcd "obc1" ; Chr(2)
              Else
              Lcd "obc1" ; Chr(1)
          End If
                      If Pk_3 = 0 Then
                      Lcd "  obc2" ; Chr(2) ; "  "
                         Else
                            Lcd "  obc2" ; Chr(1) ; "  "
                      End If
                  Locate 4 , 19

    End If
    End If
    Loop
    End

    '------------------------------------------------------
     'podprogram realizowany po przepełnieniu timera co 0,2s
    Cykl:
    Timer1 = 59286
    Gosub Pomiar_v
    Gosub Moc_energia

    ' algorytm sprawdzający i zmieniający stany portów
    ' tu ma być docelowo oblicznie wartości PWM na podstawie danych I, U.


    Return
    Return
    '--------------------------------------podprogramy----------------------------

    Pomiar_v:                                                   ' podprogram pomiar napięcia
    Sredniav = 0
    Sredniac = 0
    Incr Czas_ah
    For Krokv = 1 To 300
    Current1 = Getadc(0)
    Sredniac = Sredniac + Current1
    Next Krokv
    Sredniac = Sredniac / Krokv
    Current2 = Sredniac * Przelicznika
    If Current2 < 0.251 Then Current2 = 0.0
    Current3 = Fusing(current2 , "##.&")

    For Krokv = 1 To 300
    Volts1 = Getadc(1)
    Sredniav = Sredniav + Volts1
    Next Krokv
    Sredniav = Sredniav / Krokv
    Volts2 = Sredniav * Przelicznikv
    Korekta = Current2 * 0.028
    Volts2 = Volts2 - Korekta
    Volts3 = Fusing(volts2 , "##.&&")




    Ah_licznik1 = Current2 * 0.2
    Ah_licznik1 = Ah_licznik1 / 3600
    Ah = Ah + Ah_licznik1
    Ah_licznik2 = Fusing(ah , "####.&&&&")

    If Czas_ah = 9000 Then
    Ah_ee = Str(ah)
    Writeeeprom Ah_ee
    End If
    Return






    Moc_energia:                                                'obliczanie mocy i energii
    Moc = Volts2 * Current2                                     'obliczenie mocy
    Moc2 = Moc
    Moc1 = Str(moc2)

    If Moc > Mocmax Then
    Mocmax = Moc
    End If
    Mocmax2 = Mocmax
    Mocmax1 = Str(mocmax2)


    Return

    Start1:
    'pobieranie z pamięci eeprom danych ustawczych

    Return

    Dzwiek:
    Sound Portc.3 , 1000 , 150
    Return


    '----------------------------------------------menu--------------------------------------
    Menu:
    Stop Timer1
    Cls

    Locate 1 , 4
    Lcd "***************"
    Locate 2 , 4
    Lcd "*   M E N U   *"
    Locate 3 , 4
    Lcd "***************"
    Wait 1
    Cls
    Gosub Dzwiek
    .                                                      'ustawianie przelicznika V
    .
    .
    .
    .
    .
    .
    Wait 1
    Cls
    Enable Timer1
    Timer1 = 59286
    Start Timer1
    Return

    Co do próbkowania jest ważne aby nie był to jeden odczyt tylko 300 dla uśrednienia wartości ( prądnica wiatraka działa na małych częstotliwościach i mogły by być duże przekłamania)
  • #22
    asembler
    Level 32  
    Ok że można próbkować tylko czemu nie w przerwaniu od adc?
    Wtedy miałbys po pierwsze odczyty w regularnych odstępach czasu.
    Po drugie mozna by zastosowac dłuższy czas konwersji przez co sygnałby całkowany po stronie analogowej.
    Po trzecie te odczyte w regularnych odstepach czasu które daje przerwanie niejako z definicji robi całkę napiecie i nateżenia po czasie i mamy co? (bez przeliczania)

    To że program działa to fajnie ale skoro został tak napisany że żaden upgrade jesy niemożliwy to druga sprawa. Widocznie ktoś tylko tak umiał i to wystarczy.
    Dla mnie jest niezrozumiałe angażowac licznik T! do przerwania co 0.2s. W ogóle to 0.2 sek to jakis poroniony pomysł. po to jest system dwójkowy aby go uzywać. Licznik T2 z zegarkowy kwarzem załatwilby to o wiele lepiej a na dodatek mógłbys puścic program na wewnetrznym z dowolną szybkościa.
    Ten LCD na filmie to strasznie zacina chyba przez obsługę algorytmu albo Youtube.

    To że piszesz w 'C' wcale nie znaczy że musisz wysztko liczyc dziesiętnie tym bardziej ze C ma rozkazy które jednoznacznie podpowiadają kompilatorowi ja ma kod tworzyć i wtedy dla przykładu te twoje 0.16s zrobilo wy sie na powiedzmy 0.016s a to już by rozwiazało sprawę.
    Znowu 300 zamiast 256 dlaczego?
  • #23
    hamerg
    Level 20  
    Sorki , ale nie mam doświadczenia, które pomogło by mi napisac to w C. Dlatego piszę w bascomie. Nie jestem też orłem więc padła prośba o pomoc. Jak narazie to tylko krytyka. Przecież proszę wraz z kolega o pomoc. A wystarczy podać przepis jak pogodzic PWM z Timera 1 wraz z wywoływaniem podprogramu "CYKL" co 0,2s. To w zupełności wystarczy
    Co do przerwań z ADC to nie wiem o czym mowa. Pisząc tą aplikację podpierałem sie kilkoma programami znalezionymi w sieci ( zresztą głównie to były urządzenia typu zasilacz regulowany )oraz swoją wiedza z czasów basica. Co do tego że w podprogramie od przerwania są realizowane wszystkie funkcje uwarunkowane jest tym że nadzór nad pracą wiatraka musi być cały czas i to z jak największą częstotliwością, a algorytm do obróbki danych i odpowiednim reagowaniem nie jest krótki. Wcześniejsze próby umieszczenia go w petli głównej niesprawdziły się.
    Po wprowadzeniu PWM oczywiście czas realizowania podprogramu się skruci ze względu na brak skomplikowanej plątaniny warunków do sprawdzenia.
  • #24
    asembler
    Level 32  
    Krytyka ? bo kto robi przerwanie 0.2s. toż to lepiej by to zrobic wszystko bez przerwań (nie żartuje) i lepiej by to chodziło.
    Ja ci nie pomogę choć to prosta sprawa dla zasady że nie przyłoże reki do tak skopanego programu.
  • #25
    hamerg
    Level 20  
    No to tak dla zasady po co jest to forum, czyż nie do tego aby pomóc innym. Nie chcę poprawiania programu, a wskazówek .
    Wiem że można pozbyć się przerwania, ale należy wtedy sprawdzać ilość cykli zegara przy każdym naliczaniu ilości energii. Moja wiedza niedoszła do pisania w ten sposób . Może program nie jest pierwszych lotów i może niepoprawny, ale działa bezawaryjnie, więc w czym problem. Programowanie to tak samo jak malowanie obrazów czy komponowanie muzyki, każdy robi to tak jak czuje. Nie ma idealnego programu, bo każdy można napisać na miliony sposobów.
    Nie mam zamiaru wykłucać się tylko proszę o pomoc. Nie musi to być gotowiec, ale przynajmniej z czego mam skorzystać i w jakiej formie.

    Dodam że elektrownia wiatrowa to nie zegarek ani inne urządzonko mierzące temperaturę. W nieodpowiedni sposób kontrolowana może spowodować katastrofę i nie tylko budowlaną. A jeśli program działa i się nie zawiesza, to znaczy że spełnia swoją rolę, bez względu jak jest napisany.
    Mam nadzieję że znajdzie się ktoś kto odpowie na tyle sensownie , abym mógł sobie z problemem PWM poradzić.
  • #26
    asembler
    Level 32  
    ja widze że nie jestes w stanie poprawic tego programu, wiec mam taka propozycje - ty go nie poprawiaj ale dobuduj urzadzenie które bedzie interpretowac ustawiane wyjscia i odpowiednio reagować.
    A przykład obrazów bardzo dobry, skoro to juz piccaso to ja bym raczje nie ruszał (znasz ceny)
    Cieżko ci doradzic skoro zagarnąłes wszystkie peryferia i nie chcesz oddac.
    A tak z innej beczki bo akurat jestem zainteresowany wiatrakami - jak jest mozliwe że dołaczanie obciazenia nie daj efektów. Inną sprawą jest że przy oszczednosciowym projektowaniu wiatraka hamulec mechaniczny jest nieodzowny chyba że przewidzisz w kostrukcji że końcówki będą w stanie pracować powyżej prędkości dźwięku.
    No własnie jest miliony sposobów a ty wybrałes ten z poza tego zbioru:-)
  • #27
    hamerg
    Level 20  
    Tak jak pisałem wzorowałem się na innych programach w sieci np tu http://www.portalnaukowy.edu.pl/miernik_mocy.htm
    Myślę że autor z tej strony byłby bardzo rozżalony na wiadomość że żle napisał swój program, bo właśnie rdzeń i koncepcja jest od niego.
    Ale nie mam zamiaru wykłucać sie , skoro działa to znaczy że jest ok.

    Jesli interesujesz się wiatrakami i masz zbudowany układ kontroli to pewnie wiesz że ładowanie aku i kaskada do załączania obciążeń zwłaszcza gdy masz 3 grzałki i prądnicę 5kW nieidzie w parze. I dlatego będzie budowany sterownik z PWM.
    To nie jest miejsce do przekomażania się.
    Proszę o konstruktywne wypowiedzi w tej sprawie a nie nabijanie licznika. Wyjaśnić dlaczego tak a nie inaczej mogę na PW.
  • #28
    asembler
    Level 32  
    Jak chcesz wyciągnąc z układu jak najwiecej to faktycznie problem, ale jak zgodzisz sie na straty to zamiast podłączac coraz to nowe obciązenia równolegle wystarczy może wpiac dodatkową na przyklad grzałke szeregowo? Ja jakos nie widze PWM 10bit w tym zastosowaniu skoro faktycznei 2,3 bity wystarczą.