Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I wrote two objects for doing PWM in Pd, one at message rate, the
other at audio rate:
There also is a PWM in the docs, which doesn't need any externals: 3.audio.examples/K01.pulse.width.mod.pd
Frank Barknecht _ ______footils.org_ __goto10.org__
On May 25, 2006, at 12:22 PM, Frank Barknecht wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I wrote two objects for doing PWM in Pd, one at message rate, the other at audio rate:
There also is a PWM in the docs, which doesn't need any externals:
I should mention then that these objects are written in Pd, and only
rely on some purepd objects, which are also written in Pd.
3.audio.examples/K01.pulse.width.mod.pd
Unfortunately, this patch is missing from CVS, so it doesn't make it
into Pd-extended. But in any case, this is the PWM knowledge wrapped
up into a easy to use form.
.hc
"Information wants to be free." -Stewart Brand
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
On May 25, 2006, at 12:22 PM, Frank Barknecht wrote:
There also is a PWM in the docs, which doesn't need any externals:
I should mention then that these objects are written in Pd, and only
rely on some purepd objects, which are also written in Pd.
Except one external from zexy. ;)
3.audio.examples/K01.pulse.width.mod.pd
Unfortunately, this patch is missing from CVS, so it doesn't make it
into Pd-extended. But in any case, this is the PWM knowledge wrapped
up into a easy to use form.
Sorry, I think it's called 3.audio.examples/J03.pulse.width.mod.pd now, but for years it was called 3.audio.examples/22.pulse.width.mod.pd and for some time 3.audio.examples/E05.pulse.width.mod.pd as well. ;)
It's just substracting two [phasor~]'s with slightly different frequencies, which is equivalent to PWM.
Frank Barknecht _ ______footils.org_ __goto10.org__
On May 25, 2006, at 2:59 PM, Frank Barknecht wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
On May 25, 2006, at 12:22 PM, Frank Barknecht wrote:
There also is a PWM in the docs, which doesn't need any externals:
I should mention then that these objects are written in Pd, and only rely on some purepd objects, which are also written in Pd.
Except one external from zexy. ;)
3.audio.examples/K01.pulse.width.mod.pd
Unfortunately, this patch is missing from CVS, so it doesn't make it into Pd-extended. But in any case, this is the PWM knowledge wrapped up into a easy to use form.
Sorry, I think it's called 3.audio.examples/J03.pulse.width.mod.pd now, but for years it was called 3.audio.examples/ 22.pulse.width.mod.pd and for some time 3.audio.examples/E05.pulse.width.mod.pd as well. ;)
It's just substracting two [phasor~]'s with slightly different frequencies, which is equivalent to PWM.
Ah yes, [pwm~] is using zexy's [>~]. I was looking at [pwm]. That
example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very
simple, but as it is, it is not usable. Notice how the LOW and HIGH
change values. PWM needs be 0 for LOW and 1 for HIGH. That example
is usable in an audio context, since DC offset doesn't really
matter. I guess you could rely on the DAC in the soundcard to remove
the DC, but that is probably asking for trouble.
I am open to suggestions for a different algorithm. Or perhaps
someone should write [>~] in Pd.
.hc
Man has survived hitherto because he was too ignorant to know how to
realize his wishes.
Now that he can realize them, he must either change them, or perish.
-William Carlos
Williams
Hans-Christoph Steiner wrote:
Ah yes, [pwm~] is using zexy's [>~]. I was looking at [pwm]. That
example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very
simple, but as it is, it is not usable. Notice how the LOW and HIGH
change values. PWM needs be 0 for LOW and 1 for HIGH. That example is usable in an audio context, since DC offset doesn't really matter. I guess you could rely on the DAC in the soundcard to remove the DC, but that is probably asking for trouble.I am open to suggestions for a different algorithm. Or perhaps someone should write [>~] in Pd.
Maybe min~ would work better. The code is in d_arithmetic.c so it seems trivial to make a >~ (and <~, >=~, <=~, ==~, !=~) that uses essentially the same code except for one or two lines in the perform routine. ...except for the error caused by the finite sampling rate, which means that you never know exactly when the signal switches inside of one sample time, so you get extra unwanted frequencies. Possible solution to this would be some kind of interpolation between samples so that the output of >~ could be intermediate between 0 and 1 if the transition occurred during the sample time and not at the exact edge. A generalized band-limited pwm~ object could also be used as a squarewave.
Martin
On May 25, 2006, at 5:23 PM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
Ah yes, [pwm~] is using zexy's [>~]. I was looking at [pwm].
That example (I am looking at K01.pulse.width.mod.pd from 0.38.4)
is very simple, but as it is, it is not usable. Notice how the
LOW and HIGH change values. PWM needs be 0 for LOW and 1 for
HIGH. That example is usable in an audio context, since DC
offset doesn't really matter. I guess you could rely on the DAC
in the soundcard to remove the DC, but that is probably asking
for trouble. I am open to suggestions for a different algorithm. Or perhaps
someone should write [>~] in Pd.Maybe min~ would work better. The code is in d_arithmetic.c so it
seems trivial to make a >~ (and <~, >=~, <=~, ==~, !=~) that uses
essentially the same code except for one or two lines in the
perform routine. ...except for the error caused by the finite sampling rate, which
means that you never know exactly when the signal switches inside
of one sample time, so you get extra unwanted frequencies. Possible
solution to this would be some kind of interpolation between
samples so that the output of >~ could be intermediate between 0
and 1 if the transition occurred during the sample time and not at
the exact edge.
Feel free to make my PWM objects perfect, you can commit directly.
A generalized band-limited pwm~ object could also be used as a
squarewave.
I had [square~] sitting around on my drive for a while, I just
committed it:
externals/hcs/square~.pd
.hc
"Looking at things from a more basic level, you can come up with a
more direct solution... It may sound small in theory, but it in
practice, it can change entire economies."
- Amy Smith
Hallo, Martin Peach hat gesagt: // Martin Peach wrote:
A generalized band-limited pwm~ object could also be used as a squarewave.
A non-bandlimited square is described here: http://crca.ucsd.edu/~msp/techniques/latest/book-html/node180.html http://crca.ucsd.edu/~msp/techniques/latest/book-html/node192.html
It doesn't wander about. ;)
Frank Barknecht _ ______footils.org_ __goto10.org__
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
Ah yes, [pwm~] is using zexy's [>~]. I was looking at [pwm]. That
example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very
simple, but as it is, it is not usable. Notice how the LOW and HIGH
change values. PWM needs be 0 for LOW and 1 for HIGH. That example
is usable in an audio context, since DC offset doesn't really
matter. I guess you could rely on the DAC in the soundcard to remove
the DC, but that is probably asking for trouble.
Well, the phasor-substraction is the classical analog synth pwm, where you can do pwm with substracting two sawtooth waves. It is limited because of the DC wandering, but it works quite okay for sound.
Attached is your patch where I replaced the zexy object with a crude waveshaper. I also replaced the phase-inlet with a frequency inlet, because I think, this is more useful to have than an inlet to reset the phase. Of course both inlets would be useful in the end.
Attached patch is more a proof of concept and not recommended for real use.
Frank Barknecht _ ______footils.org_ __goto10.org__
On May 25, 2006, at 5:47 PM, Frank Barknecht wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
Ah yes, [pwm~] is using zexy's [>~]. I was looking at [pwm]. That example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very simple, but as it is, it is not usable. Notice how the LOW and HIGH change values. PWM needs be 0 for LOW and 1 for HIGH. That example is usable in an audio context, since DC offset doesn't really matter. I guess you could rely on the DAC in the soundcard to remove the DC, but that is probably asking for trouble.
Well, the phasor-substraction is the classical analog synth pwm, where you can do pwm with substracting two sawtooth waves. It is limited because of the DC wandering, but it works quite okay for sound.
Attached is your patch where I replaced the zexy object with a crude waveshaper. I also replaced the phase-inlet with a frequency inlet, because I think, this is more useful to have than an inlet to reset the phase. Of course both inlets would be useful in the end.
Attached patch is more a proof of concept and not recommended for real use.
I should say, I forgot that PWM was used in synthesis some, so I was
thinking about electronics and control when I was talking about PWM.
That's why my PWM objects are tailored towards, but should work fine
in the audio context too, unless you need the wandering DC offset.
.hc
There is no way to peace, peace is the way.
-A.J. Muste
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I was
thinking about electronics and control when I was talking about PWM.
That's why my PWM objects are tailored towards, but should work fine
in the audio context too, unless you need the wandering DC offset.
The DC wanderer is not needed, but according to: http://www.soundonsound.com/sos/Mar03/articles/synthsecrets47.asp it generally is considered to be like this:
Note that Figure 3 shows a low-frequency amplitude modulation at the LFO speed (hence the downward and upward slope to the resulting PWM wave). Don't worry about this; the prominence of the modulation in the diagram is a consequence of the limited space available for the drawing. If the audio waves are pitched at a few hundred Hertz (somewhere in the middle of the piano keyboard) and modulated by an LFO running at a fraction of a Hertz, this modulation is of no significance, provided that you allow sufficient headroom to accommodate it. If you want, you can use a high-pass filter to remove it, but it's rarely worth the effort.
Aliasing/foldover is a much bigger concern with this naive kind of PWM/rectangle wave generation in Pd.
Frank Barknecht _ ______footils.org_ __goto10.org__
On May 25, 2006, at 7:19 PM, Frank Barknecht wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I was thinking about electronics and control when I was talking about PWM. That's why my PWM objects are tailored towards, but should work fine in the audio context too, unless you need the wandering DC offset.
The DC wanderer is not needed, but according to: http://www.soundonsound.com/sos/Mar03/articles/synthsecrets47.asp it generally is considered to be like this:
Note that Figure 3 shows a low-frequency amplitude modulation at the LFO speed (hence the downward and upward slope to the resulting PWM wave). Don't worry about this; the prominence of the modulation in the diagram is a consequence of the limited space available for the drawing. If the audio waves are pitched at a few hundred Hertz (somewhere in the middle of the piano keyboard) and modulated by an LFO running at a fraction of a Hertz, this modulation is of no significance, provided that you allow sufficient headroom to accommodate it. If you want, you can use a high-pass filter to remove it, but it's rarely worth the effort.
Aliasing/foldover is a much bigger concern with this naive kind of PWM/rectangle wave generation in Pd.
Aliasing is not so relevant for the quick and dirty PWM control
signal. But it would be nice to have a clean signal. I suppose I
should put a low pass to prevent that.
Or does someone have a better algorithm for a bandwidth limited PWM?
.hc
"I have the audacity to believe that peoples everywhere can have
three meals a day for their bodies, education and culture for their
minds, and dignity, equality and freedom for their spirits."
- Martin Luther King, Jr.
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
Aliasing/foldover is a much bigger concern with this naive kind of PWM/rectangle wave generation in Pd.
Aliasing is not so relevant for the quick and dirty PWM control
signal. But it would be nice to have a clean signal. I suppose I
should put a low pass to prevent that.Or does someone have a better algorithm for a bandwidth limited PWM?
A lowpass alone doesn't prevent foldover, because the frequencies that have folded over are already lower than the highest frequencies you want to keep. Miller's book has some approaches to fight foldover here and ff.: http://crca.ucsd.edu/~msp/techniques/latest/book-html/node188.html
Frank Barknecht _ ______footils.org_ __goto10.org__
Hans-Christoph Steiner wrote:
Aliasing is not so relevant for the quick and dirty PWM control
signal. But it would be nice to have a clean signal. I suppose I
should put a low pass to prevent that.Or does someone have a better algorithm for a bandwidth limited PWM?
I'm thinking of an object that uses something like a tanh curve output at the desired frequency. (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/tanh.html) Something based on osc~, it would have inputs for frequency, phase, pulsewidth and bandwidth; has that been done yet?
Martin
On May 26, 2006, at 5:29 PM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
Aliasing is not so relevant for the quick and dirty PWM control
signal. But it would be nice to have a clean signal. I suppose
I should put a low pass to prevent that. Or does someone have a better algorithm for a bandwidth limited PWM?I'm thinking of an object that uses something like a tanh curve
output at the desired frequency. (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/tanh.html) Something based on osc~, it would have inputs for frequency, phase,
pulsewidth and bandwidth; has that been done yet?
No it hasn't AFAIK. It would be nice to have.
.hc
"If nature has made any one thing less susceptible than all others of
exclusive property, it is the action of the thinking power called an
idea, which an individual may exclusively possess as long as he keeps
it to himself; but the moment it is divulged, it forces itself into
the possession of everyone, and the receiver cannot dispossess
himself of it."
- Thomas
Jefferson
Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I was
thinking about electronics and control when I was talking about PWM.
That's why my PWM objects are tailored towards, but should work fine in the audio context too, unless you need the wandering DC offset.
For controlling things with PWM I think you'll need to modify your sound card if you want DC output. AFAIK they all have capacitors on the ouput to block DC. I find it easier to program a PIC to do the PWM and talk to it from PD using MIDI continuous controller messages for 14-bit resolution, or noteon with velocity meaning pulsewidth for 7-bits.
Martin
Very true. The DC blockers in most s/c are going to be limiting. But there's no reason to assume people using Pd for more serious experimental applications won't use correct DAC hardware. I think its very exciting to see the emergence of Pd as an application for wider research in engineering, rapid prototyping etc and I applaud HC for thoroughness and attention to detail in the code. The beauty of sw over hw is extensibility, on a 64 bit system you could use this to position a radio telescope or whatever, far beyond the grain you'd ever get with 7bit microcontrollers.
On Thu, 25 May 2006 13:24:16 -0400 Martin Peach martinrp@alcor.concordia.ca wrote:
Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I was
thinking about electronics and control when I was talking about PWM.
That's why my PWM objects are tailored towards, but should work fine in the audio context too, unless you need the wandering DC offset.For controlling things with PWM I think you'll need to modify your sound card if you want DC output. AFAIK they all have capacitors on the ouput to block DC. I find it easier to program a PIC to do the PWM and talk to it from PD using MIDI continuous controller messages for 14-bit resolution, or noteon with velocity meaning pulsewidth for 7-bits.
Martin
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
padawan12 wrote:
Very true. The DC blockers in most s/c are going to be limiting. But there's no reason to assume people using Pd for more serious experimental applications won't use correct DAC hardware. I think its very exciting to see the emergence of Pd as an application for wider research in engineering, rapid prototyping etc and I applaud HC for thoroughness and attention to detail in the code. The beauty of sw over hw is extensibility, on a 64 bit system you could use this to position a radio telescope or whatever, far beyond the grain you'd ever get with 7bit microcontrollers.
The grain depends on the clock speed, not the bus width. MIDI is 7-bit, the micro is 8-bit, but nothing stops you from implementing a 64-bit register on a microcontroller, but you'd need 10 MIDI messages to fill it. As you say, it's all in the software. A 64-bit system just calculates faster, it doesn't do anything an 8-bit system can't, given enough time. A lot of PICs have a 10-bit PWM module built-in but it's only one channel. In software it's not too hard to make an 8-channel 16-bit PWM machine using an 8-bit microcontroller such as a PIC16F628 for less than the cost of a soundcard. The software method will have more jitter though unless you're careful to write code that executes in equal time for every possibility.
Martin
On Thu, 25 May 2006 13:24:16 -0400 Martin Peach martinrp@alcor.concordia.ca wrote:
Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I was
thinking about electronics and control when I was talking about PWM.
That's why my PWM objects are tailored towards, but should work fine in the audio context too, unless you need the wandering DC offset.For controlling things with PWM I think you'll need to modify your sound card if you want DC output. AFAIK they all have capacitors on the ouput to block DC. I find it easier to program a PIC to do the PWM and talk to it from PD using MIDI continuous controller messages for 14-bit resolution, or noteon with velocity meaning pulsewidth for 7-bits.
Martin
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
yeah, but...there's just no replacement for hardware level PWM, when we're talking about high carrier frequencies...you could use Pd to control the on/off switches of your transistor bridge when the carrier freq is low (say ~1-2 kHz), but often you want to get a carrier frequency in the neighborhood of say, 200 kHz... No one in the right mind would use Pd for synchronous/asynchronous motor control in the first place. am I wrong?
Chuck
On May 25, 2006, at 11:33 PM, Charles Henry wrote:
yeah, but...there's just no replacement for hardware level PWM, when we're talking about high carrier frequencies...you could use Pd to control the on/off switches of your transistor bridge when the carrier freq is low (say ~1-2 kHz), but often you want to get a carrier frequency in the neighborhood of say, 200 kHz... No one in the right mind would use Pd for synchronous/asynchronous motor control in the first place. am I wrong?
I guess my mind is not right, because I was using Pd and the [pwm]
object to control a DC motor via MIDI at about 20-40 Hz. It worked,
can't say much more than that.
.hc
"Looking at things from a more basic level, you can come up with a
more direct solution... It may sound small in theory, but it in
practice, it can change entire economies."
- Amy Smith
I just realized the answer to my question about getting positive-only
voltages from the sound card. The DC filters will probably remove
the DC offset, therefore, the output voltage on a PWM signal will
also be centered again on 0, and therefore swing from negative to
positive. I do remember getting some very low frequencies out of a
computer when testing speakers. But I haven't actually tested this
[pwm~] object for electronics. But it would be nice to have a very
well implemented [pwm~], so its great that this discussion happened.
I did use the [pwm] object with a MIDI-controlled relay box, worked
quite well at 30-60Hz on a biggish DC motor.
.hc
On May 26, 2006, at 11:39 AM, padawan12 wrote:
Very true. The DC blockers in most s/c are going to be limiting. But there's no reason to assume people using Pd for more serious experimental applications won't use correct DAC hardware. I think its very exciting to see the emergence of Pd as an application for wider research in engineering, rapid prototyping etc and I applaud HC for thoroughness and attention to detail in the code. The beauty of sw over hw is extensibility, on a 64 bit system you could use this to position a radio telescope or whatever, far beyond the grain you'd ever get with 7bit microcontrollers.
On Thu, 25 May 2006 13:24:16 -0400 Martin Peach martinrp@alcor.concordia.ca wrote:
Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I was thinking about electronics and control when I was talking about PWM. That's why my PWM objects are tailored towards, but should work
fine in the audio context too, unless you need the wandering DC offset.For controlling things with PWM I think you'll need to modify your
sound card if you want DC output. AFAIK they all have capacitors on the
ouput to block DC. I find it easier to program a PIC to do the PWM and
talk to it from PD using MIDI continuous controller messages for 14-bit resolution, or noteon with velocity meaning pulsewidth for 7-bits.Martin
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
"The arc of history bends towards justice."
- Dr. Martin Luther King,
Jr.
Hans-Christoph Steiner wrote:
I just realized the answer to my question about getting positive-only
voltages from the sound card. The DC filters will probably remove the DC offset, therefore, the output voltage on a PWM signal will also be centered again on 0, and therefore swing from negative to positive. I do remember getting some very low frequencies out of a computer when testing speakers. But I haven't actually tested this [pwm~] object for electronics. But it would be nice to have a very well implemented [pwm~], so its great that this discussion happened.I did use the [pwm] object with a MIDI-controlled relay box, worked
quite well at 30-60Hz on a biggish DC motor.
But that sounds like you're sending MIDI messages at a rate determined by the [pwm], so bandwidth is limited by MIDI to ~1kHz. Better to program your relay box to do pwm with the pulse width controlled by MIDI, instead of using MIDI just to turn the motor on and off.
Martin
On May 26, 2006, at 5:33 PM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
I just realized the answer to my question about getting positive- only voltages from the sound card. The DC filters will probably
remove the DC offset, therefore, the output voltage on a PWM
signal will also be centered again on 0, and therefore swing from
negative to positive. I do remember getting some very low
frequencies out of a computer when testing speakers. But I
haven't actually tested this [pwm~] object for electronics. But
it would be nice to have a very well implemented [pwm~], so its
great that this discussion happened. I did use the [pwm] object with a MIDI-controlled relay box,
worked quite well at 30-60Hz on a biggish DC motor.But that sounds like you're sending MIDI messages at a rate
determined by the [pwm], so bandwidth is limited by MIDI to ~1kHz.
Better to program your relay box to do pwm with the pulse width
controlled by MIDI, instead of using MIDI just to turn the motor on
and off.
Sometimes you make do with what you have in the amount of time you
have. I make no claims that this was a great solution. But it does
work.
.hc
"Terrorism is not an enemy. It cannot be defeated. It's a tactic.
It's about as sensible to say we declare war on night attacks and
expect we're going to win that war. We're not going to win the war
on terrorism."
- retired U.S. Army general,
William Odom
On May 25, 2006, at 7:24 PM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I
was thinking about electronics and control when I was talking
about PWM. That's why my PWM objects are tailored towards, but
should work fine in the audio context too, unless you need the
wandering DC offset.For controlling things with PWM I think you'll need to modify your
sound card if you want DC output. AFAIK they all have capacitors on
the ouput to block DC. I find it easier to program a PIC to do the
PWM and talk to it from PD using MIDI continuous controller
messages for 14-bit resolution, or noteon with velocity meaning
pulsewidth for 7-bits.
No, you don't need DC at all with PWM, unless you call the HIGH
section of the pulse DC. But since that section lasts in the range
of milliseconds to microseconds, I think its safe to call it AC. ;)
Actually the audio range of 20-20,000 is a good working range for
cheap PWM. High-quality PWM is much higher frequency. The Atmel
ATMEGA8 in the Arduino, for example, has three hardware PWMs which
operate at ~30kHz. That means in order to ensure its a real square
wave, it has to have a frequency response that covers much higher
that 30kHz.
The question I wonder about when using a sound card to output a PWM
control signal is whether you can reliably get a positive-only
voltage range, and not the usual -1 to 1 of audio.
.hc
¡El pueblo unido jamás será vencido!
Hans-Christoph Steiner wrote:
On May 25, 2006, at 7:24 PM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
I should say, I forgot that PWM was used in synthesis some, so I
was thinking about electronics and control when I was talking about PWM. That's why my PWM objects are tailored towards, but should work fine in the audio context too, unless you need the wandering DC offset.For controlling things with PWM I think you'll need to modify your
sound card if you want DC output. AFAIK they all have capacitors on
the ouput to block DC. I find it easier to program a PIC to do the
PWM and talk to it from PD using MIDI continuous controller messages for 14-bit resolution, or noteon with velocity meaning pulsewidth for 7-bits.No, you don't need DC at all with PWM, unless you call the HIGH section of the pulse DC. But since that section lasts in the range of milliseconds to microseconds, I think its safe to call it AC. ;)
Actually for digital electronics you need to have signal levels that are very close to zero and the positive supply, anything in between causes undefined behaviour and can destroy the device. If a motor driver is switched on halfway it's output transistors will probably burn out. (power = current squared times resistance; when the transistor is fully on, its resistance is near zero, when it is off the resistance is near infinite, ideally no power is dissipated in the device. In-between states dissipate too much heat)
Actually the audio range of 20-20,000 is a good working range for cheap PWM. High-quality PWM is much higher frequency. The Atmel ATMEGA8 in the Arduino, for example, has three hardware PWMs which operate at ~30kHz. That means in order to ensure its a real square wave, it has to have a frequency response that covers much higher that 30kHz.
As a digital chip the atmel has a frequency response in the hundreds of MHz. The hardware PWM is just a digital counter and a digital comparator. It clocks at some subharmonic of the system clock frequency. If it's a 10-bit pwm it needs to clock at around 30MHz to have full resolution. (30kHz*1024)
The question I wonder about when using a sound card to output a PWM
control signal is whether you can reliably get a positive-only voltage range, and not the usual -1 to 1 of audio.
The voltage range is determined by your output amplitude, and always tends to be symmetric about zero because of the output capacitors. If you can hack your soundcard, take the output right at the dac and buffer it with an op-amp. Then you can use DC levels.
Martin
.hc
¡El pueblo unido jamás será vencido!
Cool
On 5/25/06, Hans-Christoph Steiner hans@eds.org wrote:
Man has survived hitherto because he was too ignorant to know how to realize his wishes. Now that he can realize them, he must either change them, or perish. -William Carlos Williams
Hallo,
Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
That example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very simple, but as it is, it is not usable. Notice how the LOW and HIGH change values. PWM needs be 0 for LOW and 1 for HIGH.
I just found a *veryvery* simple solution to get rid of the DC wandering: Just scale the signal so that it's always larger than the range (0,1) with e.g. [*~ 10] and then use [clip~ 0 1] to clip excess values outside that range. Voila, DC's gone.
Frank Barknecht _ ______footils.org_ __goto10.org__
I was experimenting with this:
[num
|
[osc~] [num
| /
[+~]
|
[*~ 1000000]
|
[clip~ 0 1]
It works for making a signal just 0s and 1s, but the osc input would have to be scaled to make the width change linearly with the control. I guess an appropriately scaled phasor~ should do it. I was searching for ways to create 2-bit audio in Pd, then amplify, but I couldn't do it.
On 5/26/06, Frank Barknecht fbar@footils.org wrote:
Hallo,
Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
That example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very simple, but as it is, it is not usable. Notice how the LOW and HIGH change values. PWM needs be 0 for LOW and 1 for HIGH.
I just found a *veryvery* simple solution to get rid of the DC wandering: Just scale the signal so that it's always larger than the range (0,1) with e.g. [*~ 10] and then use [clip~ 0 1] to clip excess values outside that range. Voila, DC's gone.
Ciao
Frank Barknecht _ ______footils.org_ __goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
[>~ 0] sort of does it, you only get two values, either a zero for zero or less or a one for anything else positve.
On Fri, 26 May 2006 19:04:58 -0400 "Chuckk Hubbard" badmuthahubbard@gmail.com wrote:
I was experimenting with this:
[num
| [osc~] [num
| / [+~] | [*~ 1000000] | [clip~ 0 1]It works for making a signal just 0s and 1s, but the osc input would have to be scaled to make the width change linearly with the control. I guess an appropriately scaled phasor~ should do it. I was searching for ways to create 2-bit audio in Pd, then amplify, but I couldn't do it.
On 5/26/06, Frank Barknecht fbar@footils.org wrote:
Hallo,
Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
That example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very simple, but as it is, it is not usable. Notice how the LOW and HIGH change values. PWM needs be 0 for LOW and 1 for HIGH.
I just found a *veryvery* simple solution to get rid of the DC wandering: Just scale the signal so that it's always larger than the range (0,1) with e.g. [*~ 10] and then use [clip~ 0 1] to clip excess values outside that range. Voila, DC's gone.
Ciao
Frank Barknecht _ ______footils.org_ __goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-- "Far and away the best prize that life has to offer is the chance to work hard at work worth doing." -Theodore Roosevelt
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On Fri, 26 May 2006, Frank Barknecht wrote:
Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote: I just found a *veryvery* simple solution to get rid of the DC wandering: Just scale the signal so that it's always larger than the range (0,1) with e.g. [*~ 10] and then use [clip~ 0 1] to clip excess values outside that range. Voila, DC's gone.
er? i don't understand. Are you sure you are talking about DC ? The DC is always the average of a signal, so if a signal is either 0 or 1, and spends a fraction x of its time in the 1 state, then its DC is also x.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
Hallo, Mathieu Bouchard hat gesagt: // Mathieu Bouchard wrote:
On Fri, 26 May 2006, Frank Barknecht wrote:
Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote: I just found a *veryvery* simple solution to get rid of the DC wandering: Just scale the signal so that it's always larger than the range (0,1) with e.g. [*~ 10] and then use [clip~ 0 1] to clip excess values outside that range. Voila, DC's gone.
er? i don't understand. Are you sure you are talking about DC ?
No.
Frank Barknecht _ ______footils.org_ __goto10.org__
Hans-Christoph Steiner wrote:
On May 25, 2006, at 2:59 PM, Frank Barknecht wrote:
I should mention then that these objects are written in Pd, and only rely on some purepd objects, which are also written in Pd.
Ah yes, [pwm~] is using zexy's [>~]. I was looking at [pwm]. That example (I am looking at K01.pulse.width.mod.pd from 0.38.4) is very
...
I am open to suggestions for a different algorithm. Or perhaps someone should write [>~] in Pd.
excuse my ignorance, but i thought that with the current zexy [>~] is available both as C-external and as pd-patch (i admit it is using another externals (expr~) but i guess we can live with that)
fmga.sdr IOhannes
On Sat, 27 May 2006, IOhannes m zmoelnig wrote:
I am open to suggestions for a different algorithm. Or perhaps someone should write [>~] in Pd.
excuse my ignorance, but i thought that with the current zexy [>~] is available both as C-external and as pd-patch (i admit it is using another externals (expr~) but i guess we can live with that)
how external is an external when even Miller bundles it? how much holier can one get?
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
Is this way too expensive?
On 5/25/06, Frank Barknecht fbar@footils.org wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I wrote two objects for doing PWM in Pd, one at message rate, the other at audio rate:
There also is a PWM in the docs, which doesn't need any externals: 3.audio.examples/K01.pulse.width.mod.pd
Ciao
Frank Barknecht _ ______footils.org_ __goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
The current [pwm~] is quite simple, if that is what you are asking.
.hc
On May 25, 2006, at 6:14 PM, Chuckk Hubbard wrote:
Is this way too expensive?
On 5/25/06, Frank Barknecht fbar@footils.org wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I wrote two objects for doing PWM in Pd, one at message rate, the other at audio rate:
There also is a PWM in the docs, which doesn't need any externals: 3.audio.examples/K01.pulse.width.mod.pd
Ciao
Frank Barknecht _ ______footils.org_ __goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
-- "Far and away the best prize that life has to offer is the chance to work hard at work worth doing." -Theodore Roosevelt <pwm.pd> _______________________________________________ PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
"Information wants to be free." -Stewart Brand
I didn't know there was one. The one you have linked doesn't appear to be for Windows.
On 5/25/06, Hans-Christoph Steiner hans@eds.org wrote:
The current [pwm~] is quite simple, if that is what you are asking.
.hc
On May 25, 2006, at 6:14 PM, Chuckk Hubbard wrote:
Is this way too expensive?
On 5/25/06, Frank Barknecht fbar@footils.org wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I wrote two objects for doing PWM in Pd, one at message rate, the other at audio rate:
There also is a PWM in the docs, which doesn't need any externals: 3.audio.examples/K01.pulse.width.mod.pd
Ciao
Frank Barknecht _ ______footils.org_ __goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
-- "Far and away the best prize that life has to offer is the chance to work hard at work worth doing." -Theodore Roosevelt <pwm.pd> _______________________________________________ PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
"Information wants to be free." -Stewart Brand
Its writing in Pd, and uses core Pd except for [>~] from zexy. It
should work fine on any platform.
.hc
On May 25, 2006, at 6:29 PM, Chuckk Hubbard wrote:
I didn't know there was one. The one you have linked doesn't appear to be for Windows.
On 5/25/06, Hans-Christoph Steiner hans@eds.org wrote:
The current [pwm~] is quite simple, if that is what you are asking.
.hc
On May 25, 2006, at 6:14 PM, Chuckk Hubbard wrote:
Is this way too expensive?
On 5/25/06, Frank Barknecht fbar@footils.org wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner
wrote:
I wrote two objects for doing PWM in Pd, one at message rate,
the
other at audio rate:
There also is a PWM in the docs, which doesn't need any externals: 3.audio.examples/K01.pulse.width.mod.pd
Ciao
Frank Barknecht _ ______footils.org_
__goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
-- "Far and away the best prize that life has to offer is the
chance to
work hard at work worth doing." -Theodore Roosevelt <pwm.pd> _______________________________________________ PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
"Information wants to be free." -Stewart Brand
-- "Far and away the best prize that life has to offer is the chance to work hard at work worth doing." -Theodore Roosevelt
"Computer science is no more related to the computer than astronomy
is related to the telescope."
-Edsger
Dykstra
My [fexpr~] version and [clip~] version were in response to you saying you were open to suggestions for a different algorithm. I thought only using native Pd objects was a consideration. I am only a musician, but the problem is interesting just for the challenge.
-Chuckk
On 5/25/06, Hans-Christoph Steiner hans@eds.org wrote:
Its writing in Pd, and uses core Pd except for [>~] from zexy. It should work fine on any platform.
.hc
On May 25, 2006, at 6:29 PM, Chuckk Hubbard wrote:
I didn't know there was one. The one you have linked doesn't appear to be for Windows.
On 5/25/06, Hans-Christoph Steiner hans@eds.org wrote:
The current [pwm~] is quite simple, if that is what you are asking.
.hc
On May 25, 2006, at 6:14 PM, Chuckk Hubbard wrote:
Is this way too expensive?
On 5/25/06, Frank Barknecht fbar@footils.org wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner
wrote:
I wrote two objects for doing PWM in Pd, one at message rate,
the
other at audio rate:
There also is a PWM in the docs, which doesn't need any externals: 3.audio.examples/K01.pulse.width.mod.pd
Ciao
Frank Barknecht _ ______footils.org_
__goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
-- "Far and away the best prize that life has to offer is the
chance to
work hard at work worth doing." -Theodore Roosevelt <pwm.pd> _______________________________________________ PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
"Information wants to be free." -Stewart Brand
-- "Far and away the best prize that life has to offer is the chance to work hard at work worth doing." -Theodore Roosevelt
"Computer science is no more related to the computer than astronomy is related to the telescope." -Edsger Dykstra