Znaleziono 18 wyników

autor: markcomp77
12 paź 2013, 19:24
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

pwmgen.c to plik źródłowy komponenta HAL, o którym nie koniecznie trzeba wiedzieć...
jednak w tym pliku najlepiej opisane jest jak działa PwnGen...
Plik ten znajduje się w katalogu pozostałych komponentów hal:

Kod: Zaznacz cały

...linuxcnc-dev/src/hal/components
w wersji źródłowej... oczywiście

poza czytaniem tam informacji, nic nie trzeba z tym robić
nie trzeba przekompilowywać...

w tym miejscu znajdują sie również komponenty pozwalające na generowanie sygnału częstotliwości (przynajmniej trzy mogą to robić: siggen.c, stepgen.c, freqgen.c)

naszym zadaniem będzie modyfikowanie plików *.hal z katalogu konfiguracji naszej maszyny
autor: markcomp77
12 paź 2013, 17:04
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

noel20 pisze:A może w linuxie da się zmienić, żeby zmieniając prędkość wrzeciona w programie zmieniała się częstotliwość, a nie wypełnienie?
tak
tylko konfiguracje hal generaowaną ze stepgen trzeba zmodyfikować
tj. zamienić moduł pwngen na coś co generuje częstotliwość proporcjonalną do chcianego napięcia...

[ Dodano: 2013-10-12, 17:07 ]

Kod: Zaznacz cały

linuxcnc-dev/linuxcnc-dev/src/hal/components$ ls *.c
at_pid.c    encoder_ratio.c  mux_generic.c  siggen.c        supply.c
boss_plc.c  freqgen.c        pid.c          sim_encoder.c   threads.c
counter.c   lcd.c            pwmgen.c       stepgen.c       watchdog.c
debounce.c  matrix_kb.c      sampler.c      streamer.c      weighted_sum.c
encoder.c   modmath.c        sampler_usr.c  streamer_usr.c
tyle mamy do wybodu

[ Dodano: 2013-10-12, 17:18 ]
siggen.c
'siggen.c', is a HAL component that generates square, triangle, sine, cosine, and sawtooth waves. I expect that it will mostly be used for testing. It is a realtime component.

It supports any number of signal generators, as set by the insmod parameter 'num_chan'. Alternatively,use the names= specifier and a list of unique names separated by commas. The names= and num_chan= specifiers are mututally exclusive.

Each generator has a number of pins and parameters, whose names begin with 'siggen.x.', where 'x' is the generator number.
Generator numbers start at zero.

Each generator is controlled by three pins. 'frequency' sets the frequency in Hertz. 'amplitude' sets the peak amplitude, and 'offset' sets the DC offset. For example, if 'amplitude' is 1.0 and 'offset' is 0.0, the outputs will swing from -1.0 to +1.0. If 'amplitude' is 2.5 and 'offset' is 10.0, then the outputs will swing from 7.5 to 12.5.

There are six output pins: 'square', 'triangle', 'sine', 'cosine', 'clock', and 'sawtooth'. All six run at the same frequency, amplitude, and offset.

This component exports one function per signal generator, called 'siggen.x.update'. It is a floating point function.


[ Dodano: 2013-10-12, 17:21 ]
stepgen.c
'stepgen.c', is a HAL component that provides software based step pulse generation. The maximum step rate will depend on the speed of the PC, but is expected to exceed 5KHz for even the slowest computers, and may reach 25KHz on fast ones. It is a realtime component.

It supports up to 16 pulse generators. Each generator can produce several types of outputs in addition to step/dir, including quadrature, half- and full-step unipolar and bipolar, three phase,
and five phase. A 32 bit feedback value is provided indicating the current position of the motor in counts (assuming no lost steps), and a floating point feedback in user specified position units is also provided.


[ Dodano: 2013-10-12, 17:23 ]
freqgen.c
'freqgen.c', is a HAL component that generates step pulses at a specific frequency in software. The maximum step rate will depend on the speed on the PC, but is expected to exceed 1KHz for even the slowest computers, and may reach 10KHz on fast ones. It is a realtime component.

Note that this is _not_ the preferred step pulse generator for EMC2. This module simply generates a frequency (velocity). A separate PID or other loop is needed to turn EMC's position commands into velocity commands, and the PID loop needs to be tuned, which adds unneccessary complexity to the machine setup. For EMC and other applications that use position instead of velocity commands, the component "stepgen" is preferred. It contains a built in, pre-tuned position to velocity converter. This module is provided only for special cases where it is more appropriate.
autor: markcomp77
11 paź 2013, 18:06
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

procesorowi można zadać wartość precyzyjnie jakimś protokołem...
i podmienić pwmgen w halu
autor: markcomp77
11 paź 2013, 17:21
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

wszyscy jesteśmy z maowieckiego
jutro ładna pogoda...

zapraszam do dalszej dyskusji o PWM... itp itd
na grilla do Puszczy ;)

na spotkaniu planują być:
ObrazekObrazekObrazekObrazekObrazekObrazek

adres.. w stopce
autor: markcomp77
10 paź 2013, 23:02
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

idę spać - bye :)
autor: markcomp77
10 paź 2013, 22:33
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

mc2kwacz pisze:Powtarzam, że są tu inne źródła błędów, konsekwentnie ignorowane, i nie ma nad nimi kontroli.
niby...
Mądrej głowie dość dwie słowie
ale czemu nie ;)
autor: markcomp77
10 paź 2013, 21:02
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

mc2kwacz pisze:Najprostszy układ z transoptorem będzie bardziej nieliniowy ale za to zdecydowanie bardziej powtarzalna
układ zrobiony przez piko-twórce faktycznie ma optoizolację na wejściu
moduł pwm2d biorący sygnału z płyty głównej, która już może mieć transoptory.. nie musi powtarzać opto...
natomiast można dać na wejściu układ gwarantujący dobra amplitudę.. dobry prostokąt (bo transoptor raczej stromość psuje)

można dać jakieś 4011... albo wzmacniacz operacyjny ustawiony na duże wzmocneinie (czy komparator).

[ Dodano: 2013-10-10, 21:07 ]
mc2kwacz pisze:Chodzi o to, żeby najpierw się nauczyć i zrozumieć a potem zabierać za robotę.
hehe...
ja staram się wyjaśniać innym nawet to czego sam nie rozumiem
i po jakimś czasie zaczynam rozumieć nawet ja ;)
autor: markcomp77
10 paź 2013, 20:06
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

Obrazek
w przedstawionym układzie rezystory pętli zwrotnej (20k i 50k) wzmacniacza operacyjnego określają wzmocnienie układu

wzmocnienie = 1 + R(50k) / R(20k)


jeśli amplituda kluczowania PWM ma niską wartość, to wzmocnienie jest potrzebne...
jeśli amplituda PWM osiąga już wartość 10-12V... wzmacniacz operacyjny można ustawić na wzmocnienie 1 (czyli bez 20k a 50k zamieniamy zwarciem)

[ Dodano: 2013-10-10, 20:16 ]
mc2kwacz pisze:Kwantyzacja czyli rozdzielczość sygnału cyfrowego to jego minimalna możliwa zmiana a nie stosunek czegoś do czegoś.
tutaj minimalna zmiana to jest stosunek...
ilość możliwych do ustawiania różnych wartości przez modulacje PWM będzie równa stosunkowi okresu wątku rysującego (czyli base) do okresu sygnału wybranego jako nośna PWM (np. 1kHz)

jeśli base ma 10us (100KHz)
a pwm ma 1000us (1kHz)

to wątek PWM może narysować 1000/10 różnych przebiegów PWM...
po prostu kwantem czasu zmiany wypełnienia jest 10us - czyli okres rysowania (base)
a okres PWM traw jedynie 100 takich kwantów

[ Dodano: 2013-10-10, 20:18 ]
200R w zasilaniu można wyeliminować
natomiast wyjściowy rezystor 300R - to jest zabezpieczenie przed spalenie wzmacniacza.. przy zwarciu do masy

kondensator uśredniający -- oczywiście większy w tej aplikacji... zwłaszcza, gdy znacznie zmniejszymy częstotliwość nośną PWM

[ Dodano: 2013-10-10, 20:19 ]
między nóżkami zasilania i masy wzmacniacza operacyjnego koniecznie trzeba dać kondensator odsprzęgający... np. 100n ceramik
autor: markcomp77
10 paź 2013, 19:53
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

przemyślałem.. w przerwie na herbatę
rozdzielczość/kwantyzacja to właśnie będzie stosunek okresu pwm do okresu base... tyle będzie można zrobić kombinacji sygnału

[ Dodano: 2013-10-10, 19:55 ]
noel20 pisze:Nie wiele z tego zrozumiałem :(
A o co chodzi z trybem regulacji gęstości?
tutaj są obrazki:
http://en.wikipedia.org/wiki/Pulse-density_modulation
Obrazek

[ Dodano: 2013-10-10, 19:58 ]
składam autorowi wątku propozycję przyznania punktu koledze tuxcnc
teraz wiemy, że zmiana wartości będzie bardziej płynna gdy wartość częstotliwości PWM będzie bardzo niska... czyli kondensator w układzie uśredniania ma być duuży - i wszystko będzie miodzi :)
autor: markcomp77
10 paź 2013, 19:45
Forum: Elektronika CNC
Temat: Układ zamieniający impulsy na wartość napięcia 0-10V
Odpowiedzi: 93
Odsłony: 9137

tuxcnc pisze:Otóż :

Cytat:
Because software-generated PWM uses a fairly slow timebase (several to many microseconds), it has limited resolution. For example, if make-pulses is called at a 20KHz rate, and pwm-freq is 2KHz, there are only 10 possible duty cycles.
( http://linuxcnc.org/docs/...9/pwmgen.9.html )
to faktycznie wymaga prześwietlenia...

z pliku pwmgen.c
This file, 'pwmgen.c', is a HAL component that generates Pulse Width Modulation or Pulse Density Modulation signals in software. Since the timing granularity of a software based scheme is rather large compared to a hardware, either the output frequency, or the resolution, or both, will be less than expected from hardware implementations.

The driver exports two functions. 'pwmgen.make-pulses', is responsible for actually generating the PWM/PDM signals. It must be executed in a fast thread to reduce pulse jitter and improve resolution. The other function, pwmgen.update, is normally called from a much slower thread. It reads the command and sets internal variables used by 'pwm.make-pulses'. 'update' uses floating point, 'make-pulses' does not.


wystąpienia "pwm" w konfiguracji hal

Kod: Zaznacz cały

loadrt pwmgen output_type=0
addf pwmgen.make-pulses base-thread
addf pwmgen.update servo-thread
net spindle-cmd <= motion.spindle-speed-out => pwmgen.0.value
net spindle-enable <= motion.spindle-on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 1000.0
setp pwmgen.0.scale 8877.77777778
setp pwmgen.0.offset 0.04887359199
setp pwmgen.0.dither-pwm true
net spindle-pwm => parport.0.pin-01-out
definicje wątków: base i servo

Kod: Zaznacz cały

BASE_PERIOD = 16666
SERVO_PERIOD = 1000000

loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
base = 60KHz (16.66us)
servo=1kHz (100us)

ta różnica pomiędzy czasem wątku "rysującego" impuls a wątkiem "zmiany" częstotliwości decyduje możliwej szybkości zmiany wartości... a nie o kwantyzacji ustalonej wartości pwm, czyli napięcia ustawianego...

cóż - jutro sprawdzę to organoleptycznie...

Wróć do „Układ zamieniający impulsy na wartość napięcia 0-10V”