PWM - Motor Control

A "new fashioned" televisor, using an Arduino to drive the motor and display.

Moderators: Dave Moll, Andrew Davie, Steve Anderson

Re: PWM - Motor Control

Postby Andrew Davie » Mon Mar 13, 2017 8:54 pm

gary wrote:The only thing is I don't see the need for the 7 ohm resistor in the emitter leg. The transistor is just acting as a switch (that is it is in saturation), and, unlike the diodes, the motor doesn't need current limiting (unless your supply voltage exceeds the motors rating or it's current at that supply voltage exceeds the limit of your transistor).


Although the motor hovers at (say) 200 mA during use, when I put the multimeter across it I occasonally saw >800 mA spikes. Just a flash. I think they disappeared when I put the schottky diode in, so it would have been the motor as a dynamo, right? But just in case it was something else, then 7 ohm resistor can't hurt, right?
User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby Andrew Davie » Mon Mar 13, 2017 9:46 pm

Shrugging off my great disappointment, I decided to test the Arduino pins. The motor was on pin #3.
I used the LED code and just changed the pinout, then watched the pins with the oscilloscope.
Looks like I have functional PWM on pins #3,6,9,10,11,13
Well, that's good news - I have not fried the PWM output pin. Mhh.
OK, so LED board is working - although I'm going to add a 1K resistor to that just as a precaution - between arduino and the TIP122 base.
I'm going to assume the TIP122 on my motor control board is damaged, or the wiring on that board is suspect.
Best, then, to junk the board and build a replacement - WITH the 1K resistor.
I feel a little less depressed than I was before I confirmed health of those Arduino pins.
User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby gary » Mon Mar 13, 2017 9:54 pm

No I am not contradicting Klaas, as I said UNLESS your supply voltage exceeded the spec of the motor there was no need for it. I didn't realise your supply voltage was so high (in your schematic you have the positive side tied to ground :-)). In that case you have no choice but to have a resistor (acting as a voltage divider) if you want the transistor to go into saturation (which you do). The resistor could now just as easily be in the emitter leg (Klaas presumably had it in the collector to eliminate the need for the base resistor but as you now see that has a potential disadvantage). There is no other advantage either way but be aware that whatever current your motor is pulling will now be passing through that resistor and being dissipated as heat (power = square(I) x R ~ 1.75 watts @ 0.5A).
gary
 

Re: PWM - Motor Control

Postby Andrew Davie » Mon Mar 13, 2017 10:54 pm

gary wrote:No I am not contradicting Klaas, as I said UNLESS your supply voltage exceeded the spec of the motor there was no need for it. I didn't realise your supply voltage was so high (in your schematic you have the positive side tied to ground :-)). In that case you have no choice but to have a resistor (acting as a voltage divider) if you want the transistor to go into saturation (which you do). The resistor could now just as easily be in the emitter leg (Klaas presumably had it in the collector to eliminate the need for the base resistor but as you now see that has a potential disadvantage). There is no other advantage either way but be aware that whatever current your motor is pulling will now be passing through that resistor and being dissipated as heat (power = square(I) x R ~ 1.75 watts @ 0.5A).


Then I've drawn the diagram wrong. I will review and correct.
I built a new power board. It is working again!
A few notes
The motor came up to speed really slowly. Obviously that 7 ohm resistor. I shorted it, and now it's back to how it was. Down a rabbit hole, really - the motor needs more current than I thought, and in any case the 1K resistor protects the Arduino. So I learned some stuff, all good. And the Arduino is not fried: even better.

OK, Klaas put the resistor on the emitter, going to ground. If my diagrams show it on the collector, they're wrong. I labeled the pins on the TIP122 E B C to be clear.
If you are saying that beause of the orientation of the schottky diode that defines the positive side of the motor, then the diode is drawn the wrong way around - I did put a note there to that effect. Otherwise, I have a real problem in my circuit sketch and need to understand/correct.

All appears to be working now - I'm back to where I was before I stupidly decided to play with the motor board.

Diagnosis:
a) I blew up the TIP122 because it did have a lot of heat for a fair while when I was soldering - i had to desolder globs and took some time. I noticed it was really hot.
b) I screwed up the wiring/circuit somehow.
c) When I was testing PWM from the pin, I did that wrong, or somehow other parts of the circuit were affecting it.

Been an interesting few hours.
User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby Andrew Davie » Mon Mar 13, 2017 11:17 pm

I'll leave the old version up and put a note there that it's wrong.
Here's a revised circuit drawing reflecting the current layout. If I have errors please let me know. I need L plates to stick on my soldering iron.

protectivemotor2.jpg
protectivemotor2.jpg (86.39 KiB) Viewed 11561 times
User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby Andrew Davie » Mon Mar 13, 2017 11:28 pm

Here's the source code as it stands...
This is reading IR signals through a comparator interrupt, giving "pretend" RPM speeds of the disc. Pretend because the clock is screwed because I played with the system clock timer. The IR signals are, nonehtless, perfect in terms of being detected. The calcualted RPM is used as an input to a PID. The PID is given a target speed, hardwired at the moment. Based on the entries, the PID calculates a duty cycle for the PWM running the motor. This all works - the motor comes up to the selected RPM and maintains it quite accurately. Finally, the LED is being driven by a pulsating loop just for testing - it's running of another PWM pin.

IR signal --> RPM estimate based on time delta --> PID calculation --> PWM duty cycle --> motor speed controlled


Code: Select all
// Arduino Mechanical Televisor
// Andrew Davie, March 2017

// BUGS/TODO
// timer 0 is buggered - switch to timer3 so clock isn't affected
// ONLY... we don't NEED the clock - because it's going to be the sync code controlling the speed
// LED code - get PWM running on A2
// put a duty query back in and write values to LED, check brightness
// Change frequency of PIN_LED?  is 490Hz enough to drive LEDs?


//-----------------------------------------------------------------------------------------
// Arduino Micro pin usage for Televisor...

//  PIN       USE
//  3         Motor control         20kHz
//  9         LED control           ?~490Hz
//  7 (PE)    IR sensor input       analog comparitor
//-----------------------------------------------------------------------------------------

#define PIN_MOTOR   3
#define PIN_LED     9
#define MAX_DUTY    99

/*
 *   pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
*/



//-- PID --

#include <PID_v1.h>

double PID_desiredRPM, PID_motorDuty;
volatile double PID_currentRPM;
PID rpmPID(&PID_currentRPM, &PID_motorDuty, &PID_desiredRPM,5,0.5,2, DIRECT);


//------------------------------------------------------------------------------------------------------
// Setup...

void setup() {

  setupOutputPins();
  setupIRComparator();
  setupPID();
  setupMotorPWM();

  pinMode(PIN_LED,OUTPUT);      // because trial and error
 
  // Debug console...
  Serial.begin(9600);
  while (! Serial);
}

void setupOutputPins() {
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);   //?
  pinMode(13,OUTPUT);
}


//------------------------------------------------------------------------------------------------------
// Comparator interrupt for IR sensing

void setupIRComparator() {
 
  ACSR &= ~bit(ACIE);         // disable interrupts on AC

  ACSR &= ~bit(ACD);          // switch on the AC
 
  ACSR &= ~bit(ACIS0);        // falling trigger
  ACSR |= bit(ACIS1);

  ACSR |= bit(ACIE);          // re-enable interrupts on AC
  SREG |= bit(SREG_I);        // GLOBALLY enable interrupts
}

//-- Analog comparator interrupt service routine -------------------------------------------------
// Triggered by sync hole on IR sensor connected to A0 pin

volatile boolean syncHoleDetected = false;
volatile unsigned long timeDiff = 0;
volatile unsigned long lastDetectedIR = 0;

ISR(ANALOG_COMP_vect) {

  syncHoleDetected = true;

  // calculate current RPM for PID - must correct for prescalar buggering up clock!

  // TODO: millis() is not returning expected value due to prescalar
  //  prolly have to use the frequency(20kHz) as an adjustment.
 
  timeDiff = millis();
  if (lastDetectedIR != 0) {
    PID_currentRPM = 60. * 20* (1000. / (timeDiff - lastDetectedIR));         // current RPM
  }
  lastDetectedIR = timeDiff;
 
}

//------------------------------------------------------------------------------------------------------
// PID to adjust motor speed

void setupPID() {
  PID_currentRPM = 0;
  PID_desiredRPM = 500;       // kludged "about right" rpm based on incorrect speed calculations
  PID_motorDuty = MAX_DUTY;
  rpmPID.SetOutputLimits(0, MAX_DUTY);
  rpmPID.SetMode(AUTOMATIC);              // turn on PID
}

//------------------------------------------------------------------------------------------------------
// PWM to control motor speed @ 20 kHz

void setupMotorPWM() {

  pinMode(PIN_MOTOR, OUTPUT);

  // Setup the PWM
  // WGM02|WGM01|WGM00  = waveform generation
  //                    = fast PCM with OCRA controlling the counter maximum
  // CS01               = clock scalar /8
  // COMA               = toggle on compare match (01)

  TCCR0A = bit(COM0A0) | bit(COM0B1) | bit(WGM01) | bit(WGM00);
  TCCR0B =  bit(WGM02) | bit(CS01);

  OCR0A = 99;          // the compare limit (reduce this for higher frequency PWM)  - F = 16MHz/scalar/(OCR0A+1)
 
  // Output A is fixed frequency - use B instead
  // Output B is based on the duty cycle written to OCR0B;  i.e., (OCRB+1)/(OCRA+1)%
 
  OCR0B = 0;            // start with duty 0%
}

//------------------------------------------------------------------------------------------------------
//https://www.instructables.com/id/Arduino-Audio-Input/

void setupAudioSampler() {

  //set up continuous sampling of analog pin 0 (you don't need to understand this part, just know how to use it in the loop())
 
  ADCSRA = 0;
  ADCSRB = 0;
 
  ADMUX |= bit(REFS0);                //set reference voltage
  ADMUX |= bit(ADLAR);                //left align the ADC value- so we can read highest 8 bits from ADCH register only
 
  ADCSRA |= bit(ADPS2) | bit(ADPS0);  //set ADC clock with 32 prescaler- 16mHz/32=500kHz
  ADCSRA |= bit(ADATE);               //enable auto trigger
  ADCSRA |= bit(ADEN);                //enable ADC
  ADCSRA |= bit(ADSC);                //start ADC measurements

  //TODO: in use (ISR?) do   incomingAudio = ADCH;//get new value from A0 
}

//------------------------------------------------------------------------------------------------------

int duty;
int delay2 = 0;

void loop() {
     
  if (syncHoleDetected) {
    Serial.print("RPM=");
    Serial.println(PID_currentRPM);
    syncHoleDetected = false;
  }

  // Try the LED array
//  pinMode(5,OUTPUT);
//  pinMode(9,OUTPUT);
//  pinMode(10,OUTPUT);
//  pinMode(11,OUTPUT);
//  pinMode(13,OUTPUT);
//  pinMode(2,OUTPUT);

  delay2++;
  if (delay2>200) {
    delay2 = 0;
    duty++;
    if (duty>255)
      duty = 0;
//    Serial.print("Duty=");
//    Serial.println(duty);
  }
//  analogWrite(PIN_LED,(duty/1000)&255);
  analogWrite(PIN_LED,duty);
 
  rpmPID.Compute();
//  Serial.print("Motor=");
//  Serial.println(PID_motorDuty);
  OCR0B = PID_motorDuty;         // PWM duty value for motor control
 
}

User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby gary » Mon Mar 13, 2017 11:36 pm

That was quick!

Your schematic was correct except for you putting a ground symbol where you had Vin on your original that's all (all I am saying is neither of your schematics mentioned 26V although even if it did I wouldn't have known if that was correct for the motor or not anyway - I have just assumed whatever it was matched the motor - in the sense that if you connected that supply direct;y to the motor it would spin up to some reasonable speed and not blow up). The diode is the right way around BTW (if it wasn't THAT would have been the reason it didn't work before, although I assume you hadn't changed that from the original version that did work.

BTW have you connected it to the 26V with an ammeter in series to see if it a) runs ok, b) draws a lot of current?

Having said that, if you went and did that and it blew up you would blame me ha ha.

I always find that the DC resistance of the motor gives me a feel for what you can safely power it with.

Working with an unknown motor is always a bit of a pain.

Ok now you have a working circuit(?) and it is one I am happy with at least. Klaas will probably come on soon and blow it out of the water.

I am way past my bed time...
gary
 

Re: PWM - Motor Control

Postby Andrew Davie » Tue Mar 14, 2017 12:01 am

gary wrote:That was quick!
BTW have you connected it to the 26V with an ammeter in series to see if it a) runs ok, b) draws a lot of current?
I am way past my bed time...



OK, there's a bit of a historical reason here. The high motor voltage idea came about because of my original televisor and whatever was wrong with that hodgepodge I put together, I ended up powering the motor through the same input as the LEDs, which was about 26V. In any case in the new televisor I've actually been powering the motor from around 10V or so. I find that when I use higher voltages the motor has more "oomph" and gets up to speed much more quickly. But it works from anything about 8V or so, I think, up to 26+. When it's on about 17V it takes about 5 seconds to get up to speed and lock to the desired RPM. When its on 10V it takes something like 30 seconds.

Yes, I have a working circuit right now :) Since it's following Klaas's advice too I don't think there are too many problems. I think all the issues have been my silly decisions or misunderstandings, and anyway how else am I going to learn :)

As to the diode; I put it on the diagram one way and figured I'd have a 50% chance :) After your comment I checked on the actual hardware and made sure it was correct. I did test putting it in the wrong way to confirm my understanding that the motor would not work that way, which it didn't. But that was a week or two back.

Motor current on highest voltage was about 250 mA when maintaining speed, and about 350 mA when getting up to speed - but with occasional 800 mA spikes before I put in that diode. So I'm not entirely sure, but those are ballpark. When I choose lower voltages on the motor, the current also goes down and I think on the lowest voltage I run, the current to keep at the desired RPM was about 120 mA. I haven't really paid that much attention but those figures should be thereabouts.

I really appreciate your help and patience - thanks!
User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby Klaas Robers » Wed Mar 15, 2017 9:07 pm

The diodes should be CURRENT-driven. So for 100% light there should be a certain CURRENT sinked from the bottom of the LED array. That current should be 200 mA for 8 strings of 25 mA LEDs. The current is set by the voltage at the emitter and the value of the resistor. (17.4 ohm = 18 ohm. We always see an deviation of 10% as a deviation of zero.)

The circuit that I described for you and that you built is called "a current source" (in this case a current sink, but that is an unknown word). So the current that goes from the bottom of the LED-array to ground is always 200 mA, as long as the voltage at the collector is kept high enough, that is more than 5 volt.

For the motor in PWM you need VOLTAGE drive, NOT a current drive. That is done with a transistor that is saturated and a constant voltage at the top of the motor. The trick is the diode and the fact that a motor has a (parasitic) internal inductance. Due to the internal inductance, which can be seen as a series inductance, the voltage over the motor-part of the motor is proportional to the duty cycle of the driving voltage. So, as Gary said, you need a transistor with the emitter to ground and a base input current that is large enough, and defined by the resistor from output port to the base of the transistor.

There is no reason to make that current smaller than you can provide. A large base current makes that the transistor is better saturated. That is seen back in a voltage at the collector that is low as long as it needs to be low. For a single transistor the collector voltage might be 0.1 volt above ground (emitter) or even less. For a Darlington it will be 0.7 volt, due to the small driving transistor. If you see that the voltage tends to go up during the "low-time", that is an indication that the base current is still too low.

If the max. output current of the arduino is 40 mA (I think that I have read numbers like that) you may make the base current as large as 40 mA.
- The base voltage of a saturated darlington is about 1.4 volt,
- so the difference between Arduino output and base is 5 - 1.4 = 3.6 volt,
- and the resistor may be as low as 90 ohm.
So a resistor of 1k is rather high. If you see (oscilloscope) positive voltage excursions during the low time, make the 1k lower, say 220 ohm.
Last edited by Klaas Robers on Wed Mar 15, 2017 9:14 pm, edited 1 time in total.
User avatar
Klaas Robers
"Gomez!", "Oh Morticia."
 
Posts: 1656
Joined: Wed Jan 24, 2007 8:42 pm
Location: Valkenswaard, the Netherlands

Re: PWM - Motor Control

Postby Andrew Davie » Wed Mar 15, 2017 9:13 pm

Klaas Robers wrote:The diodes should be CURRENT-driven. So for 100% light there should be a certain CURRENT sinked from the bottom of the LED array. That current should be 200 mA for 8 strings of 25 mA LEDs. The current is set by the voltage at the emitter and the value of the resistor. (17.4 ohm = 18 ohm. We always see an deviation of 10% as e deviation of zero.)

The circuit that I described for you and that you built is called "a current source" (in this case a current sink, but that is an unknown word). So the current that goes from the bottom of the LED-array to ground is always 200 mA, as long as the voltage at the collector is more than 5 volt.

For the motor in PWM you need VOLTAGE drive, NOT a current drive. That is done with a transistor that is saturated and a constant voltage at the top of thee motor. The trick is the diode and the fact that a motor has a parasitic internal inductance. Due to the internal inductance, which can be seen as a series inductance, the voltage over the motor-part of the motor is proportional to the duty cycle of the driving voltage. So, as Gary said, you need a transistor with the emitter to ground and a base input current that is large enough, and defined by the resistor from output port to the base of the transistor.

There is no reason to make that current smaller than you can provide. A large base current makes that the transistor is better saturated. That is seen back in a voltage at the collector that is low as long as it needs to be low. For a single transistor the collector voltage might be 0.1 volt or even less, for a darlington it will be 0.7 volt, due to the small driving transistor. If you see that the voltage goes up during the "low-time", that is an indication that the base current is still too low.

If the max. output current of the arduino is 40 mA (I think that I have read numbers like that) you may make the base current 40 mA.
- The base voltage of a darlington is about 1.4 volt,
- so the difference between Arduino output and base is 5 - 1.4 = 3.6 volt,
- and the resistor may be as low as 90 ohm.
A resistor of 1 k is rather high. If you see (oscilloscope) positive voltage excursions during the low time, make the 1k lower, say 220 ohm.



Thank you.
User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby Klaas Robers » Wed Mar 15, 2017 9:15 pm

Andrew, you might have to read it again, I editted it to clarify here and there. You were too fast for me.
User avatar
Klaas Robers
"Gomez!", "Oh Morticia."
 
Posts: 1656
Joined: Wed Jan 24, 2007 8:42 pm
Location: Valkenswaard, the Netherlands

Re: Setback

Postby Klaas Robers » Thu Mar 30, 2017 3:03 am

A transistor only dissipates heat if at a certain moment there is a voltage from collector to emitter and at the same time there is a collector current running. The PWM trick is that there is no current running when there is a voltage, and when there is a current running, that then the voltage is zero.

So if you look at the voltage on the collector, there should be a pure square wave, and no slanted lines in between.

A small point is that for a Darlington transistor the lowest voltage is not say 0.1 volt, but about 1 volt. That is because the collector of the driving (small) transistor is connected to the collector of the power transistor. You can solve that by replacing the darlington by a non darlington power transistor and adding a small transistor (e.g. BC337) as driver.

In this way:
- base of the driver transistor to the output of the Arduino,
- no series resistor needed.
- collector of the driver transistor to +5 volt,
- emitter of driver transistor via 47 ohm to the base of the power transistor,
- emitter of the power transistor to ground,
- collector of the power transistor to the motor.
- Don't forget the fast diode over the motor.
- And don't have a capacitor over the motor.

Now the "low" voltage on the collector should be 0.1 volt or less. The "high" voltage will be your 13 volt, may be 0.7 volt higher, so 13.7 volt. This should give a clean square wave on the collector.
User avatar
Klaas Robers
"Gomez!", "Oh Morticia."
 
Posts: 1656
Joined: Wed Jan 24, 2007 8:42 pm
Location: Valkenswaard, the Netherlands

Re: Setback

Postby Andrew Davie » Thu Mar 30, 2017 4:28 pm

Klaas Robers wrote:A transistor only dissipates heat if at a certain moment there is a voltage from collector to emitter and at the same time there is a collector current running. The PWM trick is that there is no current running when there is a voltage, and when there is a current running, that then the voltage is zero.

So if you look at the voltage on the collector, there should be a pure square wave, and no slanted lines in between.

A small point is that for a Darlington transistor the lowest voltage is not say 0.1 volt, but about 1 volt. That is because the collector of the driving (small) transistor is connected to the collector of the power transistor. You can solve that by replacing the darlington by a non darlington power transistor and adding a small transistor (e.g. BC337) as driver.

In this way:
- base of the driver transistor to the output of the Arduino,
- no series resistor needed.
- collector of the driver transistor to +5 volt,
- emitter of driver transistor via 47 ohm to the base of the power transistor,
- emitter of the power transistor to ground,
- collector of the power transistor to the motor.
- Don't forget the fast diode over the motor.
- And don't have a capacitor over the motor.

Now the "low" voltage on the collector should be 0.1 volt or less. The "high" voltage will be your 13 volt, may be 0.7 volt higher, so 13.7 volt. This should give a clean square wave on the collector.



motor.jpg
motor.jpg (110.54 KiB) Viewed 11480 times



Thank you. SO I think what you have advised is like the diagram above.
However, I don't quite understand why I shouldn't be using a MOSFET for this - wouldn't it be simpler than two transistors?
User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

Re: PWM - Motor Control

Postby Klaas Robers » Thu Mar 30, 2017 6:05 pm

You may try it. But I don't know if the 5 volt from the Arduino is enough to make the FET low impedance enough. Any way then connect the gate of the FET directly to the Arduino output port. No resistor in between. The gate should be switched as fast as possible. This gate forms a capacitor to ground (source) and that should be charged and discharged in little time.

I have done comparable things by using a special integrated circuit for it, a so called H-bridge, or motor controller. YOU need only half that bridge, as you want the disc to run only in one direction. With the H-bridge the motor can be steered in both directions.

In this bridge the diode is replaced by a FET that is "on" when the "bottom FET" is off. This replaces the fast diode and works better than that. What I used is a STK681-320 of ON semiconductors. I made a small PCB for it, as this IC has not a 0.1 inch pin pitch.

H-brug op print.JPG
H-brug op print.JPG (62.69 KiB) Viewed 11476 times

The HEF4001 is to prevent an unwanted condition (input = 1 - 1) for braking and stopping the motor. Now the motor always stops with 0 - 0.
User avatar
Klaas Robers
"Gomez!", "Oh Morticia."
 
Posts: 1656
Joined: Wed Jan 24, 2007 8:42 pm
Location: Valkenswaard, the Netherlands

Re: PWM - Motor Control

Postby Andrew Davie » Thu Mar 30, 2017 8:31 pm

User avatar
Andrew Davie
"Gomez!", "Oh Morticia."
 
Posts: 1590
Joined: Wed Jan 24, 2007 4:42 pm
Location: Queensland, Australia

PreviousNext

Return to Andrew Davie's Arduino Televisor

Who is online

Users browsing this forum: No registered users and 3 guests

cron