<Pi> <¶> |
<Pi>
A modern times serinette this little automated instrument could be called. It's indeed very small and really portable. In the last couple of years we were asked very often to deliver lectures on our work in musical robotics all over the world. It was always frustrating that we couldn't demonstrate any of them at these occasions, as none of the robots in the orchestra can be taken as hand luggage on an airplane. A miniature could come to rescue here. However, the idea for this tiny robot grew indirectly from a project we were involved in by Laura Maes. She needed hundredths of little circuits producing nothing but very short spikes, Here is a link. That project lead us to a period of quite intensive research into very small and cheap sound producing devices. One of the devices we thus ran into was a tiny electromagnetic buzzer, type ABT-408-RC costing only about one Euro a piece. The useful frequency response of these devices, although far from linear, ranges from ca. 920 Hz to over 8000Hz. Here is the datasheet. Curious as we are, we could not resist disassembling one of these buzzers. They are build up with a 2 mm diameter permanent magnet on which a coil is wound. A 11.2 mm diameter membrane made from 0.05 mm thin steel and with a center part diameter 4 mm doubling the thickness and spot welded on, mounted at close proximity to the magnet, makes the sound source. On the backside next to the contacts, there are two venting holes. We designed resonator tubes made from aluminum pipe 10 mm outer diameter, 8 mm inner diameter. The sound opening of the buzzers is rectangular and thus we had to bring the connecting end of the tubes in shape to match the opening. A special extruding tool was made to this end. The sound of the pipes thus formed is quite reedy, as was to be be expected from metal membranes, and thus compares quite well to a high pitched regal. For the seven top notes (midi 120-127) we had to use different buzzers as the sound pressure level of the ABT-408's was too low in the range 8000 to 12500 Hz.
For driving the buzzers we designed a circuit build around the microchip 24EP128MC202 microprocessor. One of these chips can serve 3 pitches. All sound synthesis is handled in the digital domain using PWM techniques. This is very different than the hybrid digital-analog approach we used in building the <Hybr>-series of robots. Also, in this approach, building cost is quite a bit lower than in those earlier designs using expensive analogue components. On each processor chip, three timers are used to generate the required pitches with variable duty cycles. The three PWM channels working at a base frequency of >300kHz are used for the envelope control of each individual note by multiplying their output with the variable duty cycle square wave signal from the tone generators. No low pass filtering was applied, as all possible artifacts are situated well above the normal auditory perception range. Moreover, the coils driving the membranes serve as an intrinsic low pass filter due to their inductance (900uH). We considered using analog control for the global volume control of the instrument as the power supply voltage for the buzzers controls directly the sound volume leading to a possibly better resolution in dynamics. However, after some experiments we dropped the idea mainly because it would introduce a high risk of overloading the buzzers if the instrument were given in the hands of not knowledgeable musicians.
Here is the circuit design (shown for 3 notes only, but the practical circuit on a single Eurocard PCB houses 4 processors, good for a full octave):
The resistors Rfn, Rfn+1 and Rfn+2 in the circuit are used to balance the non-linearity of the frequency response of the sounders. Their value increases as the resonant frequency is approached. Complete detailed circuit drawings are given at the bottom of this page.
The complete robot consists of four PCB's in Eurocard format (100 x 160 mm), each holding up to four 16-bit microprocessors. Here is an overview:
As each PCB houses 4 PIC microcontrollers (except the last board, having only 3 of them), there are 15 controllers to write firmware for.
To make and calculate the required pipe resonators we first made a bunch of test-pipes of different lengths and measured them out carefully using our Tektronix arbitrary function generator. After collecting the data, we wrote a small computer program to calculate by interpolation the required pipe lengths for the practical instrument. It was observed that the pipes resonate as 1/2 wavelength resonators. For the second board we had to cope with the own resonance of the membranes, specified at 2731 Hz, making it very difficult to obtain good resonance from the pipes. After many experiments, we came to the conclusion that cutting the pipes under a sharp angle, greatly improves resonance. The Q-factor for the two highest octaves is pretty low though and thus clear resonance very hard to determine exactly. The resonators in these octaves were determined by experiment and measurement only. Here is a 200% drawing op the pipe sizing for the lowest octave:
Definitive pipes as made, tuned and measured:
freq = f0 | driver | l/d | L | De | Di | Lambda/2 | R | |
84 | 1046 | ABT-408-RC | 17.0 | 136 | 10 | 8 | 82 | 19.6 |
85 | 1109 | ABT-408-RC | 15.6 | 124.5 | 10 | 8 | 77 | 18 |
86 | 1175 | ABT-408-RC | 15.1 | 120.5 | 10 | 8 | 73 | 18 |
87 | 1244 | ABT-408-RC | 14.2 | 113.5 | 10 | 8 | 69 | 18 |
88 | 1319 | ABT-408-RC | 13.5 | 108 | 10 | 8 | 65 | 16 |
89 | 1397 | ABT-408-RC | 13.1 | 105 | 10 | 8 | 61.6 | 16=>6.8 |
90 | 1480 | ABT-408-RC | 12.0 | 96 | 10 | 8 | 58 | 16=>6.8 |
91 | 1568 | ABT-408-RC | 11.4 | 91 | 10 | 8 | 55 | 16 |
92 | 1661 | ABT-408-RC | 10.4 | 83 | 10 | 8 | 52 | 14 |
93 | 1760 | ABT-408-RC | 9.63 | 77 | 10 | 8 | 49 | 14 |
94 | 1865 | ABT-408-RC | 9.13 | 73 | 10 | 8 | 46 | 13=>5.6 |
95 | 1976 | ABT-408-RC | 8.38 | 67 | 10 | 8 | 44 | 13 |
96 | 2093 | ABT-408-RC | 6.65 | 45 / 61.5 | 10 | 8 | 41 | 13=>4.7 |
97 | 2217 | ABT-408-RC | 6.37 | 43 / 59 | 10 | 8 | 39 | 12=>5.6 |
98 | 2349 | ABT-408-RC | 5.97 | 42 / 53.5 | 10 | 8 | 36 | 12=> 15 |
99 | 2489 | ABT-408-RC | 5.63 | 38 / 52 | 10 | 8 | 34 | 10=> 22 |
100 | 2637 | ABT-408-RC | 5.19 | 36 / 47 | 10 | 8 | 32 | 10=> 33 |
101 | 2794 | f res sounder = 2731 | 4.90 | 32 / 46.5 | 10 | 8 | 30.8 | 10=> 27 |
102 | 2960 | ABT-408-RC | 4.75 | 30.5 / 45.5 | 10 | 8 | 29 | 8.2=> 15 |
103 | 3136 | ABT-408-RC | 4.25 | 28 / 40 | 10 | 8 | 27.5 | 8.2=> 18 |
104 | 3322 | ABT-408-RC | 3.84 | 23.5 / 38 | 10 | 8 | 25.9 | 6.8=> 10 |
105 | 3520 | ABT-408-RC | 3.36 | 19 / 34.7 | 10 | 8 | 24.4 | 5.6=> 15 |
106 | 3729 | ABT-408-RC | 3.20 | 19.3 / 32 | 10 | 8 | 23.1 | 4.7=> 12 |
107 | 3951 | ABT-408-RC | 2.92 | 17.8 / 29 | 10 | 8 | 21.8 | 3.9 |
108 | 4186 | ABT-408-RC | 2.18 | 12 / 23 | 10 | 8 | 20.6 | 2.2 |
109 | 4435 | ABT-408-RC | 2.34 | 9.5 / 28 | 10 | 8 | 19.4 | 2.1 |
110 | 4699 | ABT-408-RC | 2.03 | 8.5 / 24 | 10 | 8 | 18.3 | 1.8 |
111 | 4978 | ABT-408-RC | 2.00 | 7 / 25 | 10 | 8 | 17.3 | 1.8 |
112 | 5274 | ABT-408-RC | 1.91 | 9 / 21.5 | 10 | 8 | 16 | 1 |
113 | 5588 | ABT-408-RC | 1.16 | 0 / 18.5 | 10 | 8 | 15.4 | 0.47 |
114 | 5920 | ABT-408-RC | 1.84 | 7.5 / 22 | 10 | 8 | 14.6 | 0.47 |
115 | 6272 | ABT-408-RC | 1.91 | 9 / 21.5 | 10 | 8 | 13.7 | 0 |
116 | 6645 | ABT-408-RC | 2.06 | 11.5 / 21.5 | 10 | 8 | 13 | 0 |
117 | 7040 | ABT-408-RC | 2.18 | 11 / 24 | 10 | 8 | 12 | 0 |
118 | 7459 | ABT-408-RC | 2.09 | 11.5 / 22 | 10 | 8 | 11.6 | 0 |
119 | 7902 | ABT-408-RC | 2.03 | 8.5 / 24 | 10 | 8 | 10.9 | 0 |
120 | 8372 | LSF-15M/S | 2.29 | 20.6 / 16.1 | 10 | 8 | 10 | 0 |
121 | 8870 | LSF-15M/S | 2.14 | 19.4 / 14.9 | 10 | 8 | 9.7 | 0 |
122 | 9397 | LSF-15M/S | 2.02 | 18.4 / 13.9 | 10 | 8 | 9.2 | 0 |
123 | 9956 | LSF-15M/S | 1.88 | 17.3 / 12.8 | 10 | 8 | 8.6 | 0 |
124 | 10550 | LSF-15M/S | 1.76 | 16.3 / 11.8 | 10 | 8 | 8.2 | 0 |
125 | 11180 | LSF-15M/S | 1.64 | 15.4 / 10.8 | 10 | 8 | 7.7 | 0 |
126 | 11840 | Kemo Dome | 0.36 | [14.6] 7.5 | 30 | 21 | 7.3 | 10mH par |
127 | 12540 | Kemo Dome | 0.36 | [13.8] 7.5 | 30 | 21 | 6.9 | 8.2mH par |
As the instrument by default is tuned in equal temperament, it also serves pedagogical purposes. It demonstrates the dissonance of fifths in the high registers extremely well. Also it can be used to demonstrate the origin of differential tones in our auditory perception system, as the sound sources in this instrument are truly independent.
An extra feature of <Pi> is that it can, next to the default equal temperament tuning, also be tuned in so called just intonation. As the intervals in any just intonation system are based on a single reference pitch, we implemented just intonation for all 12 possible base-pitches. To this end we implemented controller 21. With value 0, equal temperament is used. With values 12 to 23 just intonation is in used based on the references C to B. These are the interval ratios as implemented:
1:1 | 16:15 | 9:8 | 6:5 | 5:4 | 4:3 | 45:32 | 3:2 | 8:5 | 5:3 | 9:5 | 15:8 |
Note that changes of pitch and tuning are only applied to the next note played and thus do not affect an already playing note.
For composers <Pi> offers a wealth of subtle possibilities, a striking one being that the pipes can also produce controllable noise bands around their central pitches. Not only it can behave as an organ, but also quite well as a source of very high pitched percussive sounds. In order to explore this, just set the sustain level very low and use very high velocity values with fast attack and decay. Note that people that have undergone major exposure to rock music at sound levels above 90dBA may not even hear the highest pitches <Pi> can produce.
Midi implementation and mapping:
Midi channel: 5 (counting 0-15)
Note Off: notes 84 to 127, note release time implemented. If`release is used,
it will override the setting of ctrl.19 (global release time).
Note On: notes 84 to 127, velo implemented. The velocity byte controls the extra
level above sustain (set with ctr.#7) during the attack period.
Controllers:
#1: Wind noise or pitch instability. (Default value 0)
#7: Global volume corresponding to the sustain
level (default value 96)
#15: Waveform controller (duty cycle, default value 127).
#17: global attack control (attack time) (default value 8)
#18: global decay time (default value 6)
#19: global release time (default value 10), release starts on reception
of a note-off command. If note-off with release commands are issued, the release
byte sent will override this controller for the note released.
#21: tuning system in use. Value 0 (default) sets equal temperament. Values
12-23 set just intonation based on the notes C to B respectively.
#66: Power on/off
switch. Power off resets all controllers to their startup default values. Users
should always send #66 with value 0 when the robot is not playing.
#72 to #115: Microtuning controllers for the individual notes. Note 84 uses
ctrl.#72 etc, up to note 127 with ctrl.#115. By default all these controllers
are set to 64. The range is about a quartertone up or down. Warning: In many
sequencer programs, controllers 98 and 99 are treated as 'NRPN': non registered
parameter number. Both controllers are then handled together as a 16 bit controller,
where ctrl.99 holds the MSB and 98 the LSB.
#123: all notes off, preserving all controller
settings
Note: controllers #7,#17,#18,#19,#21 and #72 to #115 will have an effect only for the next following note played and have no effect on the note(s) sounding. Controllers #1, #15, #66 and #123 have an immediate effect.
ADSR-implementation details:
Channel aftertouch, key pressure and pitch bend are not implemented on <Pi>
Lights: One single light, a yellow bright LED, is mapped on midi note 0.
All specs given here are subject to changes during the building process.
The instrument is available for users since march 10th 2017. . |
|
Music composed for <Pi>:
Godfried-Willem Raes 'Pipi, a piece for Pi', 11' [ Pi-day, 2017] MP3-recording
of this piece.
Kristof Lauwers: 'Study for Pi' [2017]
Back to Logos-Projects page : projects.html | Back to Main Logos page:index.html | To Godfried-Willem Raes personal homepage... | To Instrument catalogue |
Construction diary:
15.02.2017: First sketches and outline for an extreme high range robot. Calculation
utility programmed in PBCC. First data sets for nine pipes and resonance's collected.
16.02.2017: Microprocessor circuit drawing sketched. First attempt to design
a PCB that at the same time would serve as a carrier for the pipe resonators.
17.02.2017: Further calculations on the hardware circuit.
18.02.2017: PCB designed for board 4, covering notes 120 to 127. PCB for board
1 etched, drilled and soldered. That took a full and long working day... Waiting
for MOSFETS and AND-gates to flow in.
19.02.2017: PCB's for boards 2 and 3 finalized. Visual design sketches made.
Here is a first picture of the work in progress:
All four microcontrollers on this board programmed. We cannot test midi operation,
as we do not have the AND-gates in place for now.
20.02.2017: The ordered AND-gates as well as the IRLZ34N came flowing in from
Farnell. We soldered then in and did a first test... indeed it seems to work.
GMT implementation added for testing. With all MOSFETS soldered in place, the
power supply oscillates and the processors do not start up. If we first start
up and when all pic's are working, connect the +5 V to the buzzer supply everything
works fine. So the undetermined state of the PIC outputs during start up causes
an overload on the power supply. One way or another we have to delay the power
for the buzzers until the PIC is up and running. Also we noticed pretty large
differences in the sound level for the different notes. It might have been better
to mount small 50 Ohm trimpots in series with the buzzers.
21.02.2017: PCB designs changed to accommodate small Omron 5 V relays to switch
the power to the buzzers after reception of a ctrl 66 command. As board 1 is
already made, we have to place the relay for this board on board 4. Boards 2
and 3 get a relay of their own. Impedance tables calculated for the sounders
and required series resistors to limit current calculated. Calculations based
on the datasheet lead to an inductance of 903uH for the sounders. Circuit drawings
updated accordingly. Vertical mounting plate cut out from 8 mm thick polycarbonate.
Steel mandrel made from steel for driving the square 6 x 6 holes into the 10
mm pipes. Some test pipes made from aluminum tube. This sounds a bit better
than PVC, probably due to the more shiny surface on the inside. The problem
with this material is in the way to connect it airtight to the mouths of the
buzzers. Epoxy glue?
22.02.2017: Further design work on the general assembly of the robot. Making
sure it will fit in an ordinary attaché case.
23.02.2017: Calculated resistors in series with the buzzers soldered in. New
pipe set made after careful tuning, from aluminum tube 10/8 for the lowest octave.
All pipe ends extruded to square holes using our special tool and an arbor press.
24.02.2017: Twelve alu pipes glued to the buzzers with fast setting epoxy glue.
Some bugs removed in the firmware: word overflows in the ADSR parameters...
A problem did rise up now however: the pipes, once glued do not resonate properly
anymore... Looks like we have to shorten them all. Thus it would be better to
first glue the buzzers to the pipes and tune them only with the buzzers in place.
Apparently, with loose tubes, the pipes resonate in a half wavelength mode with
very different end-corrections.
25.02.2017: Epoxy glue seems to be no good at all. It neither sticks well to
be buzzers nor to the pipes. All pipes removed again from board 1 and retuned/recalculated.
Now trying to glue the pipes to the buzzers using Loctite cyanoacrylate gel
glue. Although it is advertised as second-glue, the gel bubbles it makes, take
many hours to cure and dry fully. A preliminary pipe set made for board two:
notes 96 to 107. This is the board where we are expecting most tuning troubles
as this is the range of the membranes resonant frequency. PCB films made for
board 2,3 and 4. Etching done in the night... Drilling will be for tomorrow.
26.02.2017: Board for notes 120 to 127 drilled, assembled, tested and programmed.
For this board we need a different type of buzzer, as the sound level of the
ABT types is too low in this range. This board also holds the power-on relay
for board 1.
27.02.2017: Pipe construction for board 2. Decided to cut the pipes under an
angle. This greatly improves resonance and sound projection. However, we had
to construct all pipes over again... Board
2 drilled, soldered and programmed. The third microcontroler on this board failed
to program properly. It continuously reboots. Double checking the board did
not reveal any problem. Taking another chip solved the problem, so we had to
cope with a new but failing microprocessor...
28.02.2017: Instabilities observed on the 3.3 V power on board 2. Replacing
the regulator with a TO220 package 2940.3V3 chip solved the problem. Pipes for
board 2 soldered in place. Drilling of board 3. Board 3 fully populated and
tested. The pipes for this board are still under construction. Start construction
of the chassis. Although
a bit ridiculous in terms of functionality, we decided to give <Pi> four
wheels, just to match the design of the robot orchestra.
01.03.2017: Start wiring of the complete assembly with connectors. Figure-8
mains entry mount constructed. Mounting of the wheels with M5 bolts and nuts.
Finalizing the chassis. <Pi> implemented as member of the robot orchestra
in GMT. There still is a bug in the relay circuit. Controller 66 does not appear
to work. Pinning mistake? Thoroughly studying the datasheet
for the Omron relays revealed the mistake: the coils in these relays are
polarized! On boards 2 and 3 we poled them wrong. Board 4 is O.K.
02.03.2017: Bugs on relay poling on board 2 and 3 fixed. Now Ctrl.66 does work
indeed. Resonators constructed for notes 120 to 127. All notes are playing now.
Light mapped on midi note 0 tested as well. Left to be done: adjusting sound
levels for the individual pipes, intoning is what organs builders call this.
03.03.2017: ADSR coding debugged in the firmware. Here we have 9 bit resolution
on the amplitudes, as the PTPER-register is set to 512 in the code. Microtuning
implemented for all individual notes.
04.03.2017: Further development of microtuning implementation. Corrections on
the tuning seem required. Tuning code added to our GMT software. The resolution
on the highest notes is insufficient though. Also, in this very high register,
the imperfections of equal temperament become quite painfull... The fifths are
quite dissonant. For practical use, the sound levels with the transducers on
the highest board (notes 120-127) are too soft. We need to try another design
here. Start of experiments with conical resonators extruded from aluminum tube.
Series resistors on board 1 changed such as to obtain regular sound levels from
all pipes.
05.03.2017: The plastic tubes wherein DIL IC-sockets are packed make a good
material for the construction of TO220 package protectors and insulators. We
applied them to both sides of the <Pi> robot boards to protect the MOSFETS.
Further intoning work on board 2, notes 96 to 107. This is the board were we
have to deal with the own-resonance of the buzzers around the notes 100 and
101. After many hours of experimenting we must confess that's mission impossible,
for the required scalings appear to be volume and waveform dependent,.. A compromise
is unavoidable here. The tuning implementation must still have some bugs.
06.03.2017: We come to the conclusion that we need different drivers for the
notes on board 4. The KPX-G1205B drivers behave unreliably with changing volume.
Possible replacements, at least for notes 120-124, would be 15mm miniature loudspeakers.
For notes 125 to 127, our experiments led to the conclusion that only piezo
dome tweeters handle this reliably and with a reasonable volume. It must be
said however, that the waveform is quite irrelevant in this range as any overtones
fall out of the audioperception range anyway. This is what we first made, but
needed to reject:
freq = f0 | driver | l/d | L | De | Di | Lambda/4 | R | |
120 | 8372 | KPX-G1205B | 1.25 | 2.0 / 18 | 10 | 8 | 10 | 0 |
121 | 8870 | KPX-G1205B | 1.18 | 2.0 / 17 | 10 | 8 | 9.7 | 0 |
122 | 9397 | KPX-G1205B | 1.18 | 3.0 / 16 | 10 | 8 | 9.2 | 0 |
123 | 9956 | KPX-G1205B | 1 | 3.0 / 13 | 10 | 8 | 8.6 | 0 |
124 | 10550 | ABT-407-RC | 1.2 | 6.0 | 10 | 5 | 8.2 | 0 |
125 | 11180 | ABT-407-RC | 1.1 | 5.5 | 10 | 5 | 7.7 | 0 |
126 | 11840 | ABT-407-RC | 0.7 | 6.0 | 12 | 8.5 | 7.3 | 0 |
127 | 12540 | ABT-407-RC | 0.77 | 3.5 | 10 | 4.5 | 6.9 | 0 |
The notes 120 to 125 are now driven by LSF-15M/S miniature loudspeakers, 8 Ohm impedance and 800mW power. Their diameter is 15 mm. We constructed a carrier board from epoxy plate material wherin the newly made 1/2 lambda resonator fit tightly. The speakers come with an adhesive layer on their circomference, but as we didn't trust the strenght, we fastened all components with a small driplet of cyanoacrylate glue. For the last two notes, 126 and 127, we ended up with Kemo piezoelectric tweeters. These are tuned with an inductance on the PCB. Their capacitance is 16.6nF., thus the calculated inductors would have to be 10.8mH and 0.97mH. We can take 10mH for both of them. So the new sizing becomes:
freq = f0 | driver | l/d | L | De | Di | Lambda/2 | L | |
120 | 8372 | LSF-15M/S | 2.29 | 20.6 / 16.1 | 10 | 8 | 10 | |
121 | 8870 | LSF-15M/S | 2.14 | 19.4 / 14.9 | 10 | 8 | 9.7 | |
122 | 9397 | LSF-15M/S | 2.02 | 18.4 / 13.9 | 10 | 8 | 9.2 | |
123 | 9956 | LSF-15M/S | 1.88 | 17.3 / 12.8 | 10 | 8 | 8.6 | |
124 | 10550 | LSF-15M/S | 1.76 | 16.3 / 11.8 | 10 | 8 | 8.2 | |
125 | 11180 | LSF-15M/S | 1.64 | 15.4 / 10.8 | 10 | 8 | 7.7 | |
126 | 11840 | Kemo Dome | 0.36 | [14.6] 7.5 | 30 | 21 | 7.3 | 10mH par |
127 | 12540 | Kemo Dome | 0.36 | [13.8] 7.5 | 30 | 21 | 6.9 | 8.2mH |
We tried to give the two highes notes resonantors as well, but none of our
experiments lead to a convincing result. The diameter of the Kemo drivers is
just way to large to obtain resonance with a cylindric resonator. Here is a
picture of board 4:
07.03.2017: Remark with regard to capacitance measurement of piezo-electric
materials: When measuring capacitance with a Hameg LCR meter, no reliable results
can be obtained from the display as it constantly shows widely different values.
The same for the Fluke 87 IV multimeter. In long time averaging mode only, the
value of 16.6nF was obtained. The explanation for this requires a better understanding
of piezo-electric disks. Although they mostly behave as a capacitor (they do
not pass DC) , their equivalent circuit is quite complex:
(cfr. 'Piezoelectric Ceramics, properties and applications', Philips Components,1991)
So a better approach to practical measurement is by measuring the impedance
at a given frequency. However, even then, the value will be a function of the
excitation level as well. After some experimentation, we decided to use 8.2mH
and 10mH coils. All PIC's on boards 3 and 4 reprogrammed, with gradual scalings
for the wave form duty cycles. Construction of U-shaped pipe protection profiles
to be mounted on both sides. After this mount, we consider <Pi> visually
to be finished. Picture time. Further improvements will either be on the board
electronics or on the firmware. Here is another view:
and the back side with the highest pitched pipes:
08.03.2017: Some artefacts observed on notes in the highest octave. These must
be attributed to interference with the switching frequency of the power supply
modules, as the problem did not occur with our external lab supply. Starting
to implement just intonation tunings in the firmware. We succeeded in implementing
the 16-bit timers with prescalers set to 0. This is an 8-fold improvement in
pitch precision. With this coding however the lowest note we could possibly
generate would be midi 82. Not a problem for <Pi>, but it will be a problem
if we use the firmware for a commercial serinette project.
09.03.2017: Microtuning for every single note implemented, as well as just intonation
tuning tables calculated for each of the twelve possible fundamentals. Frequency
errors are now <= 0.05%. Comments on the coding can be found in the headers
of the source code for the firmware. After these firmware changes, we noticed
glitches every so often. We still have to sort this out.
10.03.2017: Version 1.6 of the firmware flashed. This version has better than
0.02% precision in frequencies and improved lookup tables for just intonation
tunings. The lookup tables are generated by a small utility program written
in PBCC based on precise real-world measurements on the test board. The formula
to be used for period calculations should be period = ((1/freq) - t)/ k. In
this formula t is the time lost in the timer ISR, measured to be 1.3 us, and
k = 1 / 60MHz, or 16.6 ns.
11.03.2017: Torture code written to test limits on polyphony. Indeed, as was
to be expected, we cannot play 44 note clusters at maximum volumes as the power
supplies go into current protection mode.
12.03.2017: There seems to be a PIC-crash condition on boards 2 and 3, when
many notes are playing at high volumes. We suspect the high frequency switching
of the inductive buzzers without protection diodes and without series resistors
cause serious glitches on the power supply lines. Better supply bypassing is
required. Another issue might be that when a single PIC sounds three notes,
the interrupt density is so high that there is no place anymore to serve the
midi interrupt properly.
13.03.2017: Demo piece for <Pi> composed and tested. This is an algorithmic
composition integrated in and playable from the <Pi> section in our GMT
software.
14.03.2017: The finishing touch on 'Pipi' on Pi-day.
Finishing the construction of a flightcase for Pi. It's a modified aluminum
attache case. Recording session of the piece. Curious to find out whether that
will work as an MP3. Here is the MP3. We also
posted the link on Facebook.
16.09.2018: <Pi> packed in its flightcase as it leaves for two months
to Manchester, together with <Krum>, <Bomi>, <Bourdonola>.
<Pi>'s role in the orchestra can in part be taken over by the newborn
<2Pi> robot.
23.10.2018: <Pi> returned from Manchester, seriously damaged... Check-up
and repair required.
25.10.2018: Connector (Weidmueller 3 pole) replaced on board 4. Pipe for note
84 repaired and fixed again.
25.02.2020: <Pi> demonstration for Luc Ponnet.
24.03.2020: A major accident happened to <Pi>. It fell down from in top
of the piano on our steel floor in the Logos tetrahedron. 18 pipes broke off
and the transducers are severely damaged. Right now <Pi> is in the intensive
care section of the Logos Hospital. Let's hope it will recover soon...
25.03.2020: Reconstruction of the 12 lowest pipes. Suffering a bit under the
quite noxious vapors from the cyanoacrylates we use to hold the pipes in place.
By midnight the PCB was reassembled again. The second octave is for tomorrow...
26.03.2020: Repair of the second octave. By the end of the day, <Pi> was
fully operational again. We should make a standing base for <Pi> such
that this kind af accident can never happen again.
07.12.2020: Timer 23 bug found and killed in the PIC 24EP code for all the PIC's
here. We must read TMR3HLD instead of TMR3 when combining timer 2 and 3 as a
32 bit timer. This explains the unpredictable amplitude glitches we had every
so often.
TO DO:
- optimizing the firmware
- extensive testing
- apply 'intellitune' in the firmware to avoid the fifth dissonances due to
equal temperament.
- suggested changes for further future designs:
Maintenance information:
Circuit diagrams:
Board 1: (notes 84-95)
Boards 2 and 3:
Board 4:
PCB for board 1: notes 84 to 95 (scaled 200%)
PCB for boards 2 and 3: notes 96 to 107 and 108 - 119 respectively (scaled 200%)
This is the board -with errors- as used with manual corrections in the <Pi> robot:
A corrected PCB design is available as well and will be used for future and further production.
PCB for board 4: notes 120 to 127 (scaled 200%)
Microcontroller firmware:
source code (to be separately compiled for each of the 15 microprocessors).
If people are interested in owning a copy of this miniature robot, I can hand make them for ca. 5000 Euro. Delivery time will be ca. 2 months. Smaller and cheaper versions would be possible as well, for instance 30 notes starting from midi note 79. Feel free to enquire. Estimated cost for a 30 note version would be 3000 Euro maximum.
Cost calculation for the Pi robot:
Main board (12 notes):
item / part | NR. | description | price |
24EP128M0202 | 4 | Microchip |
15.00
|
IC socket | 4 | 28 pins |
8.00
|
IC socket | 5 | 16 pins |
6.50
|
6N137 | 1 | optocoupler |
2.00
|
PCB | 1 | 100 x 160 + processing |
50.00
|
Sounders | 12 | ABT408RC |
14.00
|
IC socket | 1 | 8 pins |
1.00
|
SMPS 5V - 2A | 1 | XP Power ECB10US05 |
30.00
|
5-pole DIN sockets | 5 | Hirshmann |
20.00
|
74AC11008N | 4 | 3V/5V AND-gates |
6.00
|
SN75174 | 1 | quad differential line driver |
4.00
|
1 | 3V3 voltage regulator |
2.50
|
|
ICD headers 6-pins | 4 |
2.00
|
|
IRLZ34NPbF | 12 | power MOSFET |
18.00
|
2 pole Weidmueller | 2 | socket and plug |
8.00
|
3 pole Weidmueller | 1 | socket and plug |
3.50
|
Fuse | 1 | self resetting fuse |
1.00
|
Tantalum capacitors | 10 |
20.00
|
|
100nF bypass caps | 18 |
4.50
|
|
Resistors | 21 |
2.10
|
|
LED's | 5 |
2.50
|
|
220.60
|
Boards 2 and 3:
item / part | NR. | description | price |
24EP128M0202 | 4 | Microchip |
15.00
|
IC socket | 4 | 28 pins |
8.00
|
IC socket | 4 | 16 pins |
6.00
|
PCB | 1 | 100 x 160 + processing |
50.00
|
Sounders | 12 | ABT408RC |
14.00
|
SMPS 5V - 2A | 1 | XP Power ECB10US05 |
30.00
|
74AC11008N | 4 | 3V/5V AND-gates |
6.00
|
1 | 3V3 voltage regulator |
2.50
|
|
ICD headers 6-pins | 4 |
2.00
|
|
IRLZ34NPbF | 12 | power MOSFET |
18.00
|
2 pole Weidmueller | 2 | socket and plug |
8.00
|
3 pole Weidmueller | 1 | socket and plug |
3.50
|
Fuse | 1 | self resetting fuse |
1.00
|
Tantalum capacitors | 10 |
20.00
|
|
100nF bypass caps | 18 |
4.50
|
|
Resistors | 21 |
2.10
|
|
LED's | 5 |
2.50
|
|
Omron Relay | 1 | G6E-134P-ST-US |
5.00
|
190.10
|
Board 4:
item / part | NR. | description | price |
24EP128M0202 | 3 | Microchip |
10.00
|
IC socket | 3 | 28 pins |
6.00
|
IC socket | 3 | 16 pins |
4.50
|
PCB | 1 | 100 x 160 + processing |
50.00
|
Sounders | 8 |
10.50
|
|
74AC11008N | 3 | 3V/5V AND-gates |
4.50
|
1 | 3V3 voltage regulator |
2.50
|
|
ICD headers 6-pins | 3 |
1.50
|
|
IRLZ34NPbF | 9 | power MOSFET |
15.00
|
2 pole Weidmueller | 2 |
8.00
|
|
3 pole Weidmueller | 1 |
3.50
|
|
Tantalum capacitors | 10 |
20.00
|
|
100nF bypass caps | 12 |
3.00
|
|
Resistors | 40 |
4.00
|
|
LED's | 3 |
1.50
|
|
1W Power LED | 1 | Yellow, TO220 |
4.00
|
Omron Relay | 2 | G6E-134P-ST-US |
10.00
|
Kemo dome tweeters | 130269 | ||
158.50
|
Mechanical parts and general assembly::
item / part | NR. | description | price |
polycarbonate plate material | 1 | 400 x 300 x 8 |
4.00
|
aluminium brackets | 4 | 30 x 50 x 3 |
2.00
|
aluminum profile | 50 x 2 x 10 |
3.00
|
|
M3 bolts and nuts | 24 | stainless steel |
12.00
|
M4 bolts and nuts | 4 | inbus hex stainless |
3.00
|
M5 bolts and nuts | 12 |
6.00
|
|
M5 end nuts, stainless | 8 | DIN1587 RVS-A1 M5 |
5.00
|
aluminum profile square | 1 | 80 x 2 x 15 |
5.00
|
wheels | 4 |
22.00
|
|
Aluminum pipe 10/8 mm | 2 meters |
10.00
|
|
PVC pipe 10/8 mm | 2 meters |
6.00
|
|
Epoxy glue | 1 | fast setting |
10.00
|
5 mm distance holders | 16 | 3 mm |
4.00
|
Loctite Cyanoacrylate glue | 4 | gel |
38.00
|
Power cord | 1 | figure-8 plug |
2.00
|
MIDI cable, angled connector | 1 |
12.00
|
|
Flightcase (attache case) | 1 |
30.00
|
|
174.00
|
total cost for materials: 935.30 Euro
Labor and research investment:
15.02.2017 ---> 09.03.2017: 24 working days. 7.560 Euro.
End cost of prototype production: 8.500 Euro
Repair costs march 2020:
18 sounders replaced: 24 Euro
Cyanoacrylate: 12 Euro
3 working days: 945 Euro
End sum: 981 Euro.
by Godfried-Willem Raes
Further reading on this topic (some in Dutch):
Audsley, George Ashdown 'The Art of Organ-Building', ed. Dover Inc, NY,1965,
(first edition: 1905) ISBN 0-486-21314-5
D'Appolito, J. 'Luidspreker-meettechniek', ed. Segment BV, Beek , Nederland,
2000, ISBN: 90 5381 116 8
De Keyser, Ignace, 'Challenging
von Hornbostel & Sachs', in: 50 years at Logos, 2019
Philips Components, 'Piezoelectric Ceramics, properties and applications', Eindhoven,1991
Raes, Godfried-Willem 'Bug', an automated fluegelhorn (2017)
Raes, Godfried-Willem , Expression
control in musical automatons
Maintenance and disassembly instructions:
For removing the PCB's as well as for servicing the Weidmueller connectors, the 15 x 15 mm aluminum profile should be removed first.
Robody picture with <Pi>:
Candidates?
[EOF]