Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Awatar użytkownika
Hrumque
Posty: 116
Rejestracja: 09 maja 2015, 14:54
Lokalizacja: Opole

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: Hrumque » 17 kwie 2016, 11:47

Garreth pisze:
Hrumque pisze:
Garreth pisze:Da się do tego AZSMZ podłączyć PT100? Na przykład używając tego wzmacniacza: http://e3d-online.com/PT100-Amplifier-Board ?

Technicznie - da się. Ale musiałbyś zagrzebać sobie w kodzie źródłowym smothieware, i w Thermistor.cpp przerobić konwersję wyniku z ADC na temperaturę - bo tam jest zaszyta obsługa typowych termistorów NTC, a trzeba by przerobić skalę dla napięć zza wzmacniacza do pt100...


Skala to teoretycznie nie jest problem, bo e3d podaje wartości na wiki, tylko problem czy podaje ją w takiej formie w jakiej jest to wymagane w smoothie... Kurcze, brak dobrej elektroniki 32 bitowej która byłaby w stanie wykorzystać ten przetwornik...

Nie szukaj problemu tam gdzie go nie ma, nie dramatyzuj że nie ma - bo w zasadzie każda może :)
Skoro jest znana skala (zależność napięcia na wyjściu tego wzmacniacza, od temperatury), jest znany przetwornik ADC 12bit w procku LPC, to napisanie wzoru/procedury przeliczającej jedno na drugie. W zasadzie jest to do zrobienia na każdym dowolnym procku/dowolnej elektronice 32bit która ma przetwornik ADC. W najgorszym wypadku trzeba by wyrzucić pull-upy (R22,R23,R24 4.7Kohm na płytce AZSMZ, które były dla termistorów ntc), ale jak wzmacniacz ma "sztywne wyjście" to one nic nie będą zmieniać, mogą sobie zostać.

Dopóki mamy dostępne źródła, to możesz sobie dowolny przetwornik zapiąć, dowolnie jego wynik przekształcać. Mierzyć przez ADC, albo wynik pomiaru dostawać w jakikolwiek inny sposób (np osobnym małym prockiem mierzyć temperaturę, i przesyłać "do głównego" po np i2c czy uart). Możesz też zawsze zastosować zewnętrzny procesorek do kontroli danej temperatury + grzałki (lub gotowy termostat), i z softu głównego kontrolera - tylko zadawać mu temperaturę docelową i dostawać zwrotnie rzeczywistą...

Garreth
Posty: 413
Rejestracja: 25 sty 2016, 9:32
Lokalizacja: Śląsk
Kontaktowanie:

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: Garreth » 17 kwie 2016, 12:40

No dobra, trochę pojechałem:) ARMów jeszcze nie programowałem, ale wpiszę to na moją (już dość długą) listę rzeczy do zrobienia:)

Awatar użytkownika
Hrumque
Posty: 116
Rejestracja: 09 maja 2015, 14:54
Lokalizacja: Opole

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: Hrumque » 17 kwie 2016, 14:02

Garreth pisze:No dobra, trochę pojechałem:) ARMów jeszcze nie programowałem, ale wpiszę to na moją (już dość długą) listę rzeczy do zrobienia:)

ARM czy AVR czy inny pies - żadna różnica. Toż to zwykłe C/C++...
Popatrz na kod smotkie: https://github.com/Smoothieware/Smoothieware/blob/edge/src/modules/tools/temperaturecontrol/Thermistor.cpp#L283 w thermistor.cpp jest funkcja taka:

Kod: Zaznacz cały

float Thermistor::adc_value_to_temperature(uint32_t adc_value)
{
    const uint32_t max_adc_value= THEKERNEL->adc->get_max_value();
    if ((adc_value >= max_adc_value) || (adc_value == 0))
        return infinityf();

    // resistance of the thermistor in ohms
    float r = r2 / (((float)max_adc_value / adc_value) - 1.0F);
    if (r1 > 0.0F) r = (r1 * r) / (r1 - r);

    if(r > this->r0 * 8) return infinityf(); // 800k is probably open circuit

    float t;
    if(this->use_steinhart_hart) {
        float l = logf(r);
        t= (1.0F / (this->c1 + this->c2 * l + this->c3 * powf(l,3))) - 273.15F;
    }else{
        // use Beta value
        t= (1.0F / (k + (j * logf(r / r0)))) - 273.15F;
    }

    return t;
}


Prosta sprawa - funkcja która dostaje wynik pomiaru z ADC przetwornika w parametrze, a zwraca obliczoną temperaturę "t"
Trzeba tu zmienić całą funkcję, by przeliczała wg wzorów, lub wg tabeli wartości dla twojego PT100.

Jak? Już tłumaczę.
Najpierw masz w kodzie przeliczanie wyniku ADC na rezystancję w omach.(obliczenia z dzielnika rezystancyjnego, gdzie masz znany R2=4.7K, i ewentualny R1 równolegle do termistora)
To musisz wywalić, i przeliczać na napięcie, jako volty = (float)max_adc_value / adc_value * U_ref *1000 (Uref będzie pewnie 3.3v lub 2.56v). Masz już napięcie w mV w zmiennej volty

Potem masz tam dwie linijki odnoszące się do przeliczeń Rezystancja > Temperatura dla termistora NTC, w firmware można dwie metody wybrać - albo wg parametrów termistora R + beta (np 100k oraz B=3950), albo wg parametrów równania Steinharta (https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation - parametry ABC które też są podawane przez producentów w katalogach termistorów).
Tutaj musisz wstawić swój wzór/mechanizm przeliczania zmiennej Volty na t (temperaturę) wg tego co znasz dla twojego PT100 ze wzmacniaczem. Koniec, gotowe, reszty firmware możesz nie ruszać, ustawienia Beta itp dla termistora - są ignorowane.

ACZKOLWIEK uważam że to jest strzelanie z granatnika do much. Jeśli ktoś się upiera na zmianie termistora NTC na coś innego - to pójście w PT100 jest słabym (wg mnie) rozwiązaniem, skoro mamy dostępne znacznie wygodniejsze, tańsze, i lepsze układy dedykowane do termopary typu K, która kosztuje $1-2 i 600'C zmierzy bez protestu, i liniowość ma piękną...
sama termopara: http://www.aliexpress.com/item/1m-Thread-Spade-Terminals-Thermocouple-cable-screw-type-K-thermocouple-size-M6-1/1241867047.html http://www.aliexpress.com/item/Hot-Sale-High-Quality-Stainless-Steel-High-Temperature-0-To-800-Degree-Thermocouple-K-Type-1000mm/32631426082.html
albo w komplecie z interfejsem MAX6675 który rozwiązuje wszystkie problemy http://www.aliexpress.com/item/Hot-Selling-MAX6675-Module-K-Type-Thermocouple-Thermocouple-Sensor-for-Arduino/32411133001.html - kosztuje $4 i komunikuje się z procesorem już po magistrali cyfrowej, samemu mierząc temperaturę i samemu zwracając gotowy wynik:
Obrazek

olo2000pm
Posty: 913
Rejestracja: 26 kwie 2013, 20:44
Kontaktowanie:

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: olo2000pm » 17 kwie 2016, 15:03

Hrumku, a pokaż na fotce które piny zalutować i którą ścieżkę przeciąć aby można było podpiąć drugą zetkę pod E1

Awatar użytkownika
robertm
Posty: 706
Rejestracja: 10 sty 2014, 15:07
Lokalizacja: Sieeemiaaatycze

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: robertm » 17 kwie 2016, 15:50

Jeśli mają być dwa wyjścia dla Z ma być jak na obrazku (żółte pola łączą piny - czerwona linia przecina ścieżkę)
New-Version-AZSMZ-ARM-based-controller-32bit-3d-printer-CNC-Machines-Laser-cutters-Like-Azteeg-x5.jpg
cut
____
A wszystko Cokolwiek czynicie, z duszy czyńcie, jak dla Pana, nie dla ludzi, świadomi,
że od Pana otrzymacie zapłatę w dziedzictwie, bowiem Panu, Chrystusowi, służycie. Kol 3,23-24

olo2000pm
Posty: 913
Rejestracja: 26 kwie 2013, 20:44
Kontaktowanie:

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: olo2000pm » 17 kwie 2016, 17:45

Dzięki Robertm.
A co z pinami? W configu widzę tylko jeden extruder czyli rozumiem,. że po zlutowaniu i przecięciu ścieżek ekstruder E1 staje się drugim silnikiem Y i jego PIN 2.3, a co z E2, nie widzę przypisanego pinu?

Garreth
Posty: 413
Rejestracja: 25 sty 2016, 9:32
Lokalizacja: Śląsk
Kontaktowanie:

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: Garreth » 17 kwie 2016, 18:49

Dzięki Hrumque, pomocny i zrozumiały dla mnie post, dodam sobie do ulubionych. Nie mam AZSMZ (jeszcze), najpierw złożę wszystko na obecnej RUMBIE a potem będę kombinować co jeszcze można ulepszyć:)

kaloria
Posty: 140
Rejestracja: 13 gru 2015, 23:56

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: kaloria » 05 wrz 2016, 18:03

@Garreth
Czasu minęło od ostatniego posta.
Prosto - ten twój czujnik to ordynarny dzielnik napięcia z nie najlepszym doprowadzeniem sygnałów do precyzyjnego wzmacniacza op. Tak się tego nie robi jak to zrobili. PT100 podłączasz do pełnego mostka rezystorów 100 ohm. Na przeciwsobnych węzłach zasilasz, a na dwóch pozostałych zbierasz sygnał. Będzie on wtedy zmieniał się dokładnie liniowo wraz ze zmianą temperatury PT100. Sygnał wysyłasz na wzmacniacz i go skalujesz wzmocnienie. 0 stopni to będzie 0V niezależnie od wzmocnienia*. (*No jest jeszcze tolerancja PT100 i rezystorów w mostku). Chcesz mieć 100 stopni jako 1V - proszę bardzo. Gotujesz wodę i masz ~100 stopni. Regulujesz wzmocnienie i możesz być pewny że przy 200 stopniach będziesz miał 2V. Pomiar tak zmieniających się się napięć i skalowanie ich na temperaturę to marzenie programisty. Żadnych tablic, wszytko liniowo.

Jeśli chodzi o same PT100 to nie jest zbyt lubiany sensor ze względu na małą rezystancję. Sumarycznie mostek ma w 0 stopniach tylko 100ohm. Przy zasilaniu 5V wydziela się na nim 250mW ciepła co może powodować pływanie rezystorów w mostku. Stąd pewnie i taki dziki sposób podłączenia PT100 we "wzmaczniaczu", na który IMO każdy grosz był groszem niepotrzebnie wydanym.

W T.. lub innych sklepach z elektroniką znajdziesz czujniki PT1000. Działa to dokładnie na tej samej zasadzie jak PT100, tylko ma 1k w 0 stopni Celsjusza. Budujesz mostek z trzema rezystorami 1k, które możesz sobie dodatkowo wyselekcjonować z większej grupy. Sygnał z takiego mostka z PT1000 jest wystarczająco silny (np w porównaniu do mostka tensometrycznego), że po "wytrymowaniu" zwykłych tanich OPków finalnie otrzymał byś precyzję pomiaru nieosiągalną dla wersji z termistorami. Cena czujnika PT1000 do 500 stopni ~13PLN, pozostałe elementy nie więcej jak 1PLN.

Garreth
Posty: 413
Rejestracja: 25 sty 2016, 9:32
Lokalizacja: Śląsk
Kontaktowanie:

Re: Kolejne wcielenie bazujące na Smoothie - AZSMZ 32bit ARM

Postautor: Garreth » 05 wrz 2016, 18:24

kaloria pisze:@Garreth
Czasu minęło od ostatniego posta.
Prosto - ten twój czujnik to ordynarny dzielnik napięcia z nie najlepszym doprowadzeniem sygnałów do precyzyjnego wzmacniacza op. Tak się tego nie robi jak to zrobili. PT100 podłączasz do pełnego mostka rezystorów 100 ohm. Na przeciwsobnych węzłach zasilasz, a na dwóch pozostałych zbierasz sygnał. Będzie on wtedy zmieniał się dokładnie liniowo wraz ze zmianą temperatury PT100. Sygnał wysyłasz na wzmacniacz i go skalujesz wzmocnienie. 0 stopni to będzie 0V niezależnie od wzmocnienia*. (*No jest jeszcze tolerancja PT100 i rezystorów w mostku). Chcesz mieć 100 stopni jako 1V - proszę bardzo. Gotujesz wodę i masz ~100 stopni. Regulujesz wzmocnienie i możesz być pewny że przy 200 stopniach będziesz miał 2V. Pomiar tak zmieniających się się napięć i skalowanie ich na temperaturę to marzenie programisty. Żadnych tablic, wszytko liniowo.

Jeśli chodzi o same PT100 to nie jest zbyt lubiany sensor ze względu na małą rezystancję. Sumarycznie mostek ma w 0 stopniach tylko 100ohm. Przy zasilaniu 5V wydziela się na nim 250mW ciepła co może powodować pływanie rezystorów w mostku. Stąd pewnie i taki dziki sposób podłączenia PT100 we "wzmaczniaczu", na który IMO każdy grosz był groszem niepotrzebnie wydanym.

W T.. lub innych sklepach z elektroniką znajdziesz czujniki PT1000. Działa to dokładnie na tej samej zasadzie jak PT100, tylko ma 1k w 0 stopni Celsjusza. Budujesz mostek z trzema rezystorami 1k, które możesz sobie dodatkowo wyselekcjonować z większej grupy. Sygnał z takiego mostka z PT1000 jest wystarczająco silny (np w porównaniu do mostka tensometrycznego), że po "wytrymowaniu" zwykłych tanich OPków finalnie otrzymał byś precyzję pomiaru nieosiągalną dla wersji z termistorami. Cena czujnika PT1000 do 500 stopni ~13PLN, pozostałe elementy nie więcej jak 1PLN.


Żeś odkopał:) Gdyby tapatalk nie dał powiadomienia to pewnie bym nie zauważył.

1. Cena - tu jest rzecz obiektywna, ale zauważ, że nie wspomniałem w żadnym poście o tym, że rozwiązanie od e3d jest dla mnie za drogie. Bo nie jest. Zapłaciłem więcej niż jest to warte? Spoko, ale mój czas też kosztuje, zwłaszcza przeliczając na roboczogodziny z etatu:) Dostałem idealny jak na moje potrzeby blok grzewczy dopasowany do reszty elementów od e3d, z sondą temperaturową wkręcaną w blok w pół minuty. Nie musiałem lutować, kombinować, wkurzać się, że coś nie działa, zamawiać kolejnych elementów, wiercić w bloku czy robić samodzielnie jakiś chałupnicze rozwiązanie montażu pt100 kupionego za złotówkę.
2. Doprowadzenie sygnałów nie wiem czy jest najlepsze, najgorsze czy cholera wie jakie. Wkładałem sondę od nich do wody mierzonej innym termometrem - pokazywało dobrze w niskich temperaturach. Hot airem testowałem temperatury rzędu 200-350 stopni, w całym przedziale miałem to co nastawiłem na hotair na wyświetlaczu drukarki z dokładnością do 1-2 stopni (co można tłumaczyć też wpływem temperatury z pokoju, bo nie zrobiłem żadnej komory do testowania tego pt100.
3. Płytka od e3d działa na 5V i na 3.3V. W repetierze wystarczyło wybrać odpowiednia tablicę.

Działa? Działa:) Więcej do drukarki 3d mi nie trzeba, to nie laboratorium. Dokładność jest bardzo satysfakcjonująca jak dla mnie i moje możliwości jej sprawdzenia. Dodatkowo każdy filament i tak trzeba osobno skalibrować.


Wróć do „Elektroniki 32-bitowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości