Własnie o modbus teraz myślę może będziesz w stanie pomóc (sprawa nie jest prosta)
rs485-jak-zaczac-falownik-linuxcnc-ardu ... 85#p674050
Ok widzę że sam znalazłeś temat
gniazdo pisze:nie prościej zrobić sobie nowy "wątek" do czego służy funkcja hal "threads"
przykład:
a nie jest przypadkiem tak zasada że każdy kolejny wątek będzie wolniejszy od głównego?
jeśli ktoś nie jest wstanie uzyskać 12,5kHz z głównego to chyba jak zrobi sobie nowy wątek to nic mu to nie da - a może się mylę?
próbowaliśmy i z serwo i z innym i nic z tego nie wyszło
pozwolę sobie wkleić rozmowę z YT
DOHC358
DOHC358
1 miesiąc temu
Może być osobny plik hal ale może być główny plik hal maszyny. (wklej to na końcu)
Powinno to wyglądać mniej więcej tak:
loadrt siggen
addf siggen.0.update base-thread
set siggen.0.frequency 12500
net siggen.0.square => parport.0.pin-17-out
ten kawałek kodu po wklejeniu w w plik hal powinien na pinie 17 lpt wygenerować 12.5 khz. Jeśli pin 17 był już z czymś wcześniej połączony to linuxcnc rzuci błędem. Pisze to z głowy bez sprawdzenia na linuxie ale powinno działać. Polecam manuale do linuxcnc bo tam jest wszystko napisane.
Pozdrawiam
Adam Maszynotwór
Adam Maszynotwór
1 miesiąc temu
@DOHC358 spróbowałem to ale cały czas się pluje błędem addf siggen.0.update needs FP
jedyny błąd jaki znalazłem (chyba) to set siggen.0.frequency 12500 ma być setp - brakło "p"
ale to nie pomogło.
nie wiem co to FP i jak to ugryźć
DOHC358
DOHC358
1 miesiąc temu
FP to floating point czyli obliczenia na liczbach nie całkowitych, możliwe że w wątku bazowym nie są obsługiwane takie obliczenia, dlatego trzeba funkcję uruchomić w wątku servo-thread, spróbuj tak:
loadrt siggen
addf siggen.0.update servo-thread
setp siggen.0.frequency 12500
net siggen.0.square => parport.0.pin-17-out
Adam Maszynotwór
Adam Maszynotwór
1 miesiąc temu
@DOHC358 teraz przeszło ale jest kolejny problem
Debug file information:
./pompa.hal:61: Signal name 'siggen.0.square' must not be the same as a pin. Did you omit the signal name?
3546
czegoś tu jeszcze brakuje ..
dodatkowo chyba całość jeszcze trzeba wyposażyć w dodatkową funkcje tzn. pompa wygląda tak:
#charge pump (pin 17)
loadrt charge_pump
addf charge-pump servo-thread
net emcOn motion.motion-enabled => charge-pump.enable
net cpump charge-pump.out => parport.0.pin-17-out
wydaje mi się że to coś net emcOn motion.motion-enabled => charge-pump.enable
sprawdza czy linuxcnc jest wałczony i dopiero uruchamia generowanie sygnału i zapewne trzeba by te siggen jakoś z tym połączyć
DOHC358
DOHC358
1 miesiąc temu
Wrzuć tak (dodałem nazwe sygnału) i wywal/wykomentuj wszystko co wstawiłeś w związku z charge pump. To już Ci nie jest potrzebne.
minimum tej linijki musisz się pozbyć ->"net cpump charge-pump.out => parport.0.pin-17-out"
loadrt siggen
addf siggen.0.update servo-thread
setp siggen.0.frequency 12500
net prostokat siggen.0.square => parport.0.pin-17-out
Adam Maszynotwór
Adam Maszynotwór
1 miesiąc temu
@DOHC358 Tak cała pompa jest usunięta pracuje tylko na tym co mi tu podsyłasz
Teraz się pluje że "prostokąt " jest Float i nie może być na pinie parport.0.pin-17-out bo jest on typu bit
DOHC358
DOHC358
1 miesiąc temu
Ok. Trzeba jeszcze zmienić typ sygnału z float na bit. A konkretniej z float na s32, a następnie z s32 na bit.
loadrt siggen
addf siggen.0.update servo-thread
setp siggen.0.frequency 12500
setp siggen.0.amplitude 0.5
setp siggen.0.offset 0.5
loadrt conv_float_s32
addf conv-float-s32.0 servo-thread
net prostokat_float_s32 siggen.0.square => conv-float-s32.0.in
loadrt conv_s32_bit
addf conv-s32-bit.0 servo-thread
net prostokat_s32_bit conv-float-s32.0.out => conv-s32-bit.0.in
net prostokat_bit conv-s32-bit.0.in => parport.0.pin-17-out
Wklej cały ten fragment. Powinno hulać ale na linuxie nie sprawdzałem. W racie problemów daj znać.
DOHC358
DOHC358
1 miesiąc temu
net prostokat_bit conv-s32-bit.0.in => parport.0.pin-17-out
Poprawka linijka wyżej powinna wyglądać tak:
net prostokat_bit conv-s32-bit.0.out => parport.0.pin-17-out
Adam Maszynotwór
Adam Maszynotwór
1 miesiąc temu
@DOHC358 dziękuję że tak się dla mnie meczysz aż mi głupio ... teza błędu nie ma z tym że przebiegu też nie ani fizycznie na oscyloskopie ani na HalScope ;/ (nawet zmniejszyłem z 12,5 na 5khz bo namyślam że może nie wyrabia ale to nie to ;/ )
DOHC358
DOHC358
1 miesiąc temu
Sprawdziłem to na linuxie i okazuje się że siggen działa do 500 hz. Ogarniemy to inaczej, za pomocą stepgena. Daj mi tylko chwilę czasu to w wolnej chwili przygotuje Ci rozwiązanie.
Adam Maszynotwór
Adam Maszynotwór
1 miesiąc temu
@DOHC358 spokojnie to nie ma żadnego pośpiechu ogólnie w ogóle zauważyłem coś dziwnego ponieważ mam dwa komputery dość podobne jednak na jednym test opóźnienia wychodzi bardzo dobrze a na drugim tak średnio ok 18000
mimo to podczas konfiguracji i wpisania tych wartości w kreatorze koniec końców pliku ini base period posiada tą samą wartość a gdy użyję Charger pomp to na obu komputera uzyskuje całkiem odmienne wyniki na oscyloskopie na jednym tym lepszym mam 5kHz A na tym gorszym mam 500 Hz nie wiem dlaczego
w instrukcji Jest napisane że charge pomp oblicza to przecież z tej wartości
Dodatkowo jeszcze z kolegą z kanału inżynier domu prowadzimy pracę nad sprzętowym obejście problemu Czyli po prostu chcemy użyć Arduino żeby użytkownik który ma właśnie taki problem jak ja że jego komputer nie jest w stanie osiągnąć tych 12,5 kilohertz będzie mógł zaprogramować sobie Arduino żeby działało dla innej częstotliwości.
Adam Maszynotwór
Adam Maszynotwór
1 miesiąc temu
Znalazłem jeszcze przed chwilą taki temat możliwe że to jest rozwiązanie z tym że jedno pwm już wykorzystuje do sterowania prędkością wrzeciona
https://emc-users.narkive.com/1RwkEl2b/charge-pump
DOHC358
DOHC358
1 miesiąc temu
Powiem Ci szczerze że już dawno nie robiłem latancy testu. Z tego co pamiętam to duży wpływ na niego miały wszelkie dodatki oszczędzające energię, wielowątkowość itp. Ja w ważniejszych maszynach stosuje karty mesa i kroki są generowane sprzętowo dlatego ten latancy test nie ma takiego wpływu. Te karty trochę kosztują ale dają duże możliwości, np. w tokarce mam na wrzecionie enkoder 2500 imp/obr i nic się nie gubi.
Co do samego komponentu charge pump to nie znam go nie wiem jak jest napisany.
Co do arduino to nie wiem czy nie przerost formy nad treścią. Czy przypadkiem tego schematu który Ty wrzuciłeś nie da się zmodyfikować dokładając pojemność do bramki tranzystora żeby działał przy innej częstotliwości?