• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
liczby z przecinkiem
#21
Pompy perystaltyczne też brzmią znajomo Smile
Skoro masz silnik krokowy, to sprawa jest o wiele łatwiejsza. Możesz po prostu liczyć liczbę wykonanych kroków (albo ćwierć-kroków). To będzie zawsze liczba całkowita - a wydatek, podaną dawkę itd. możesz w miarę potrzeby obliczać na podstawie tych danych.
 
Odpowiedź
#22
według mnie nic to nie zmienia
bo zamiast 100ml/min
będzie
5000 microkroków na sekundę
Undecided
 
Odpowiedź
#23
ok...
zaczaiłem... Idea
 
Odpowiedź
#24
(13-02-2020, 00:34)elvis napisał(a): Pompy perystaltyczne też brzmią znajomo Smile
Skoro masz silnik krokowy, to sprawa jest o wiele łatwiejsza. Możesz po prostu liczyć liczbę wykonanych kroków (albo ćwierć-kroków). To będzie zawsze liczba całkowita - a wydatek, podaną dawkę itd. możesz w miarę potrzeby obliczać na podstawie tych danych.
elvis....
Mógłbyś mi podpowiedzieć jak zliczać kroki silnika....?
 
Odpowiedź
#25
(21-02-2020, 23:28)zojsan napisał(a): Mógłbyś mi podpowiedzieć jak zliczać kroki silnika....?
Jeśli sterujesz silnikiem to wiesz ile kroków wygenerowałeś. Fakt, że silnik może nie poruszać się z powodu awarii albo nie sterujesz nim bezpośrednio, wtedy pozostaje enkoder.
Kod z delay to nie kod, to DEMO!
Możliwości sprzętowe uC trzeba wykorzystywać a nie /machać/. GPIO!
Jestem a usilnie chcę być amatorem to dwie różne rzeczy.

http://er-mik.prv.pl/projekty edw.php 
http://er-mik.prv.pl/projekty_avt.php
 
Odpowiedź
#26
(21-02-2020, 23:28)zojsan napisał(a): W pełnym kroku 200 kroków na obrót
Rozkręcam to do 5000Hz przy 1/4 kroku=375 obr/min
i przy tych obrotach pompa ma wydatek 90ml/min

O ile dobrze rozumiem oznacza to, że 375 obr/min = 90 ml/min, czyli 375/90 obr/ml, co przy 800 krokach na obrót daje 300000/90 k/ml (jako k oznaczam 1/4 kroki)
Celowo nie skracam 300000/90 do 3333.333333, bo wtedy byłyby błędy zaokrąleń, mamy więc 300000/90 prawie jak w szkole ;-)
Od razu widać że wychodzą duże liczby, więc można zamiast ml używać mikrolitrów (ul), dokładność będzie większa, a liczby mniejsze, mamy więc 300/90 k/ul. Teraz można pozbyć się zer i jest piękne:
30/9 k/ul
Same kroki wykonujesz niepodzielnie, więc możesz mieć zmienną z liczbą wykonanych kroków. Przeliczenie kroków na dawkę:
ul = kroki * 9 / 30;
A dawki na kroki:
k = ul * 30 / 9;
Prezentując wyniki możesz oczywiście używać liczb zmiennopozycyjnych, więc wystarczy np.
ml = ul / 1000.0f;
I takie wyniki możesz wyświetlać (o ile dokładność do mikrolitrów wystarczy).
Podobnie jest z wydatkiem - działasz używając kroków na sekundę/minutę/godzinę, a na ml/min lub ul/min tylko przeliczasz.
 
Odpowiedź
#27
(22-02-2020, 09:52)elvis napisał(a): Prezentując wyniki możesz oczywiście używać liczb zmiennopozycyjnych, więc wystarczy np.
ml = ul / 1000.0f;

A po co rzutowanie do float???
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#28
Nie wiem po co, ale jeśli float-y są do czegoś w programie potrzebne, to jak najbardziej można z nich korzystać. Przykładowo wyświetlanie ułamkowych wydatków można tak zrealizować - można też zupełnie inaczej oczywiście.
 
Odpowiedź
#29
Od początku się mówi żeby unikać fluatów jak ognia na AVR nie bez powodów. Nie po to się przechodzi na liczenie z liczb całkowitych by na końcu zrobić i tak float....

ml = ul / 1000.0f;

Taki wynik można uzyskać z liczb całkowitych i wykona się dużo szybciej

ml = ul / 1000;
fml = ul%1000;
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#30
Ja nigdzie nie pisałem żeby floatów unikać - jak ktoś chce i potrzebuje to jak najbardziej są po to żeby z nich korzystać.
W programie problemem nie było użycie arytmetyki zmiennopozycyjnej, ale błędy zaokrągleń - dlatego pojawiła się propozycja zliczania kroków. Natomiast jeśli do czegoś dawka w postaci float-a będzie potrzebna, można ją z kroków bez problemu obliczyć.
Programy można pisać na różne sposoby i takie odgórne pisanie, że delay jest złe, albo float to samo zło świadczą tylko o osobach, które takie rzeczy piszą. Trzeba umieć dobrać rozwiązanie do konkretnych potrzeb i problemu, a zarówno opóźnienia z aktywnym czekaniem, jak i floaty to po prostu jedne z wielu dostępnych opcji.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości