Print Page | Close Window

tach frequency to voltage

Printed From: the12volt.com
Forum Name: General Discussion
Forum Discription: General Mobile Electronics Questions and Answers
URL: https://www.the12volt.com/installbay/forum_posts.asp?tid=110209
Printed Date: April 29, 2024 at 2:29 AM


Topic: tach frequency to voltage

Posted By: redstealthrt
Subject: tach frequency to voltage
Date Posted: December 31, 2008 at 3:03 PM

Hey all i am in need of some help getting my tach wire from frequency to voltage so that my arduino can read it.

I have found a frequency to voltage chip on Mouser:
https://www.mouser.com/Search/ProductDetail.aspx?qs=29ancymodYe1kMY57d%252bPzQ%3d%3d
but i am unable to see how it would hook up since there are so many pins on it.... Could someone post how to hook up the tach wire from the ECU to one of these things?

Thanks for your time!

David



Replies:

Posted By: ckeeler
Date Posted: December 31, 2008 at 3:11 PM
Tach signal is voltage. it is pulsed DC voltage.




Posted By: redstealthrt
Date Posted: December 31, 2008 at 3:13 PM
ckeeler: So are you saying that i do not need anything in order to read it from the arudino?

David




Posted By: ckeeler
Date Posted: December 31, 2008 at 3:21 PM
I dont know tons about them, but im sure you can program it to do it. they seem pretty flexible. pm KPierson and ask him, he'll know for sure.




Posted By: redstealthrt
Date Posted: December 31, 2008 at 3:23 PM
I will do that ckeeler! Thanks :)

David




Posted By: KPierson
Date Posted: December 31, 2008 at 4:30 PM

Most tach signals are a pulsing DC voltage.  The faster the motor turns the faster the signal pulses.  Most tach signals are (-) outputs with a pull up resistor to 12vdc.  This means that although a meter will read 12vdc there isn't actually any current behind the 12vdc side of the signal and any load on that circuit will more then likely significantly drag the voltage down.  The (-) side of the signal will be able to deliver a decent amount of current.

You are on the right track with a frequency to voltage converter.  I've never used that exact chip but I've used a similar one (https://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=LM2907N-ND).  Check out that datasheet - it has circuit diagrams in it to show you exactly how to hook it up.  Unfortunately I never had much luck with it and could never get it to work right for my application so I abandoned it.  When I was messing around with it I was trying to use components I had on hand instead of ordering the exact ones they specify. 

Another alternative would be to run the tach signal through a high impedence voltage follower (op amp) and then use a PWM to analog voltage converter circuit to convert the pulsing signal to a voltage (https://www.ontrak.net/pwm.htm).  If you go this route you MUST use the voltage follower to isolate the converting circuit from the tach circuit, otherwise you could alter the tach signal to the point that the car won't run.

The easiest way to do what you are trying to do, though, is to use a digital input on the arduino processor board and then use firmware to measure the time in between pulses.  That project is open source so I would ask around and see if anyone has already done the programming.  It is not very hard to set up an external interupt and a timer (assuming an ext int and a timer are available).  Every pulse on the external interupt would capture the value in the timer and then reset the timer and the program could act upon the information as necesarry depending on what exactly you are trying to do!

I've messed around with several "projects" that involve tach signals (shift lights and push button starts) and in both cases I used a microcontroller to time the time between pulses.  This has worked the best for me, but I'm sure there are other ways. 



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: December 31, 2008 at 4:55 PM
Thanks for the quick response KPierson.

I did a little check with my volt meter and this is what i get:

Car off              = 0v (duh)
Car ON/ACC   = 0.17v and less (hum??)
Car Starting     = -0.11v to -0.01
Car Started      = 0.63v and less

The point to all of this is that i want to check to see when the car has started. And i guess u know that some of the pins on the Arduino have PWM... but like i said, i think the max is 5v.. anything higher would burn the chip.

David




Posted By: KPierson
Date Posted: December 31, 2008 at 5:21 PM

The PWM pins are most likely outputs, not inputs.

If you put a 'scope on the tach signal you would see the actual signal.  You can use a transistor circuit (or a zener diode IF you use a voltage follower) to clamp the voltage at 5vdc.  Since actual voltage isn't important (time, not voltage, is what you are actually measuring) it won't effect the signal.

I'm guessing you are trying to get the board to control your push button start you installed?  When I was doing my research I found that a car starter cranks a motor around 300 RPM.  The "normal" car starts idling right around 1000 RPM.  This gives quite a bit of margin of error in detecting when combustion start spinning the motor over the starter.  You can take the RPM and break it down based on the tach signal you are using and determine the actual frequency (and time) of what you are working with.



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: December 31, 2008 at 5:32 PM
KPierson: So what all would i need to do just that? The RPM reading? Lets say the code is checking for RPM of 850 or greater.. If its less than that then the car must still be trying to start... if its equal to or greater than 850 then the car must be started and i need to quit trying to start it! :oP

Dont really get what all the parts i need?

Tach wire->Zener Diode->Arduino Pin

David




Posted By: KPierson
Date Posted: December 31, 2008 at 11:01 PM

If you're shooting for 850 RPM and you're using a fuel injector you can calculate frequency -

An injector fires one time per 2 motor revolutions, so your fuel injector, at 850rpm, would pulse 425 times per minute.  That would equal 7.08 pulses per second which would be 7.08hz.   

So, if you want to know when the motor is spinning faster then 850RPM you would need the time between pulses to be equal to 0.141 seconds or lower. 

Now, keep in mind that you can't shut the motor off as soon as you hit your setpoint, you'll want several confirmation pulses before shutting the starter off.

If you go this route you can use a bjt transistor (such as a 2n3906) and run the output of the transistor directly to the uC.  With the transistor you won't need a zener diode. 

If you were to use a voltage follower the output would be 12vdc (equal to the input) so a zener diode could be used to clamp that voltage down to 5.1vdc (standard value). 



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: December 31, 2008 at 11:26 PM
KPierson: Would something like this work (or is this something u are talking about) https://2.bp.blogspot.com/_ZlBzpWAhs1E/SOdsafZjT2I/AAAAAAAAADA/c-7cD9NyQJ0/s1600-h/RPM+2x16+Display+Schematik.JPG? Of course i do not know what type of resister they are using there...

Or how about this https://www.arduino.cc/playground/Main/ReadingRPM? but they both really do not go into detail what all was used and where to put it...

But going back to what u described:
Tach wire->2n3906->Arduino pin?

And is it normal for a car to have volts when in ACC/ON position? (Car ON/ACC = 0.17v and less)

BTW, HAPPY NEW YEAR 2009!posted_image

David




Posted By: KPierson
Date Posted: January 01, 2009 at 12:21 AM

The first picture just shows how to hook up an LCD screen.  The second picture shows (and tells I believe) how to hook up a hall effect sensor to monitor RPM - this is basically what you want.  A hall effect sensor will pulse once per revolution so  its the same theory.  Now, his code looks like he is sending the RPM out to an LCD, you'll need to modify that slightly, but to what extent is hard to say since I'm not familiar with the platform.

I don't consider 0.17v voltage.  Anything less then about .5 volts can be considered 0.  Once you get closer to 0.7 you'll get in to a range that is triggerable as a voltage by some electronics.



-------------
Kevin Pierson




Posted By: Mad Scientists
Date Posted: January 01, 2009 at 9:36 AM
KPierson wrote:

If you're shooting for 850 RPM and you're using a fuel injector you can calculate frequency -

An injector fires one time per 2 motor revolutions, so your fuel injector, at 850rpm, would pulse 425 times per minute.  That would equal 7.08 pulses per second which would be 7.08hz.   

So, if you want to know when the motor is spinning faster then 850RPM you would need the time between pulses to be equal to 0.141 seconds or lower. 

Now, keep in mind that you can't shut the motor off as soon as you hit your setpoint, you'll want several confirmation pulses before shutting the starter off.

If you go this route you can use a bjt transistor (such as a 2n3906) and run the output of the transistor directly to the uC.  With the transistor you won't need a zener diode. 

If you were to use a voltage follower the output would be 12vdc (equal to the input) so a zener diode could be used to clamp that voltage down to 5.1vdc (standard value). 


Just to step in here for a moment.. perhaps not for the vehicle in question, but depending on the injection system being used, the 1:2 ratio injector pulse to RPM isn't an absolute.. I'm thinking of the older GM TBI injection systems, or 'batch fired' injection vs. true sequential. Also, the duty cycle on injection varies greatly compared to ignition pulse train.

Mentioned only for others who might be considering something like this, or just using an RPM signal for something else.. not to discourage, but to suggest verifying actual signals for your specific vehicle.

Jim





Posted By: KPierson
Date Posted: January 01, 2009 at 10:05 AM

In "most" batch injection systems you will still have one pulse per fuel injector per 2 complete motor revolutions - the only difference between a batch injector signal and a true sequential injector signal is the timing (and length of signal as batch injectors open longer to make up for the ineffiencies of firing at the "wrong" time) compared to ignition.  You will have multiple injectors firing at the same time, but they will still only fire once per every two motor revolutions.

The duty cycle of the fuel injector only comes in to play under one circumstance - 100%.  Since we are measuring total pulse width (from one positive to negative transistion to the next positive to negative transition) the length of time that the pulse is positive or negative is completely irrelevent to engine RPM.  However, at 100% duty cycle there will be no positive to negative transistion (the injector will just stay negative for multiple motor cycles and make the controller "think" the engine isn't running anymore.  No fuel injection system should ever run the injectors at 100% but I've seen it done on OEM cars (like the Saturn Ion Redline) and I see it happen on modified cars all the time when people don't want to spend the money to upgrade their fuel system correctly.  But, you are correcft, ignition systems maintain a very low duty cycle, even at higher RPM while the duty cycle of fuel injectors can increase exponentially with RPM.

The duty cycle, for this applicaiton, is completely irrelevent due to the fact he is only monitoring the tach signal while cranking.  Now, if he wanted to continuously monitor tach so that the start/stop button will also stop the car but only if the motor is running it may be necesarry to consider the 100% duty cycle issue - but I doubt anyone would ever try to push the start/stop button at WOT and high RPM!



-------------
Kevin Pierson




Posted By: Mad Scientists
Date Posted: January 01, 2009 at 12:33 PM
KPierson wrote:

In "most" batch injection systems you will still have one pulse per fuel injector per 2 complete motor revolutions - the only difference between a batch injector signal and a true sequential injector signal is the timing (and length of signal as batch injectors open longer to make up for the ineffiencies of firing at the "wrong" time) compared to ignition.  You will have multiple injectors firing at the same time, but they will still only fire once per every two motor revolutions.


 I would respectfully disagree.. my experience has been (generally stock production stuff) that batch fire triggers every revolution.

"Injectors are typically fired in either a batch or individually in a sequential order. Batch fire is when all the injectors fire simultaneously at one time for each revolution of the crankshaft. This means each injector offers a wider response of fuel-flowing capacity since it is fired twice for every four-stroke engine cycle. A sequential EFI system fires each injector only once based on the firing order of the engine.s are typically fired in either a batch or individually in a sequential order. Batch fire is when all the injectors fire simultaneously at one time for each revolution of the crankshaft. This means each injector offers a wider response of fuel-flowing capacity since it is fired twice for every four-stroke engine cycle. A sequential EFI system fires each injector only once based on the firing order of the engine."

https://www.chevyhiperformance.com/techarticles/90778_efi_swap_part_2/index.html

"< color=#ff0000>"Most early EFI systems were batch-fire systems where the ECM fired all eight injectors simultaneously. Usually batch-fire systems fire the injectors once per engine revolution. This way, the injectors could be sized small enough to be more easily controlled at idle. Later, sequential EFI systems were refined to fire an injector a few degrees before the intake valve opened. Generally, sequential injection offers more precise fuel control at the price of increased complexity. But on production engines, the benefits are more in the area of emissions and driveability than in performance"

(quote from GM performance)

 Additionally, I'm reading that some stuff (production and aftermarket) can be set up to fire off multiple times during each rev. And to further muddy the waters, some sequential systems go to batch fire in the higher RPM ranges.

KPierson wrote:

The duty cycle of the fuel injector only comes in to play under one circumstance - 100%.  Since we are measuring total pulse width (from one positive to negative transistion to the next positive to negative transition) the length of time that the pulse is positive or negative is completely irrelevent to engine RPM.  However, at 100% duty cycle there will be no positive to negative transistion (the injector will just stay negative for multiple motor cycles and make the controller "think" the engine isn't running anymore.  No fuel injection system should ever run the injectors at 100% but I've seen it done on OEM cars (like the Saturn Ion Redline) and I see it happen on modified cars all the time when people don't want to spend the money to upgrade their fuel system correctly.  But, you are correcft, ignition systems maintain a very low duty cycle, even at higher RPM while the duty cycle of fuel injectors can increase exponentially with RPM.


 Also 0%.. which would be seen in 'Clear Flood' mode and closed throttle deceleration. CTD 0% probably happens every time the car is driven on the road. This is easily seen with a scan tool..

 It's not so much that the ignition system is a low duty cycle, more that it's a stable one. Using an injection trigger, at any given RPM you could have multiple duty cycles.. depending on engine temp, throttle position, etc. If the actual transition event is being read it's one thing, but if it's a voltage reading being measured (because at any given RPM, apparent voltage would increase with an increase of duty cycle) then changes due to cold enrichment etc would result in an incorrect reading.

KPierson wrote:

The duty cycle, for this applicaiton, is completely irrelevent due to the fact he is only monitoring the tach signal while cranking.  Now, if he wanted to continuously monitor tach so that the start/stop button will also stop the car but only if the motor is running it may be necesarry to consider the 100% duty cycle issue - but I doubt anyone would ever try to push the start/stop button at WOT and high RPM!


 It looks like he(she) is using some sort of PLC or ucontroller.. if you're gonna have an input, might as well use it for all you can, right? It's just a matter of writing some code. Using an injector signal would allow you to drive a light that brightens with throttle (somewhat like the old Nissan 300ZX digital dash did). Ignition signal would let you program shift lights, multiple stage nitrous activation, overrev protection, etc. Road speed could allow you to program movable body panels like the Boxster does with the spoiler.

 consider this.. seeing some of the widebody conversions I see running around.. set up a controller with brake light switch input (digital), road speed input (analog) and override switch (digital).

If OVERRIDE is 'OFF' , BRAKELIGHT is 'ON', ROADSPEED is > 30mph - 'deploy airbrake panels'

if OVERRIDE is 'OFF' BRAKELIGHT is 'ON' , ROADSPEED is <15 - 'retract airbrake panels'

 Or do what this guy did with his Christmas lights..

https://www.snopes.com/photos/arts/xmaslights.asp

 Regards..

 Jim





Posted By: redstealthrt
Date Posted: January 01, 2009 at 2:52 PM
Jim: Thanks for your contribute to this topic. However, Kevin is correct as i am only needing to know when the car has started and thats all. Nothing more fancy-pants than that I'm afraid. To make it worth my while to do what u have suggested, i would need at least the tach and the speedo wires to make a nice user interface, etc etc... but that's on down the line.. far down the line :o)

Ok well i cant seem to find a Hall-effect sensor that looks like the one in the picture....?

Is the square chip on the breadboard the Hall-Effect chip? It doesn't seem to be connected to anything??? I have circled it in the picture below..

posted_image

David




Posted By: KPierson
Date Posted: January 01, 2009 at 9:28 PM

Like I said, in "most" systems batch injection is still only once per motor revolution.  That's not to say that there weren't a few systems between 1982-1985 that did fire once per crank revolution, I just feel that they are not the "norm" and that the majority of batch firing were at least twice per full motor revolution (a form of batch firing called bank firing).  By the mid 80s the technology was more then capable of at least bank firing.

That all being said, when I laid out my calculations I showed how the end number was achieved and anyone should be able to follow that guide and calculate the correct value for their specific car.

There are distinct reasons though that I recommended a fuel injector over an ignition source.  I have never seen (or even heard of until you posted) a sequential combustion engine that fires the fuel injector more then one time per crank revolution but I have seen cars that fire the spark plugs multiple times per crank revolution - this is used to decrease emissions by making sure all fuel is burnt before being exhausted.  Ignition systems, generally, are much noisier as well, making it hard to distinguish between a spark event and noise in the system.  Fuel injectors give you a wide window to work with where you can debounce the turn on by 10-20mS where a spark event generally doesn't last long enough to do much verification on.  Lastly, ignition systems can vary greatly from one car to the next, but generally all vehicles use the same fuel injector principal (tie one end of a solenoid to 12vdc and pulse the other side with a (-) output from an ECU).  This gives predictability from one vehicle to the next.  The last thing I have to consider is the fact that sequential (and batch) systems always fire at about the same time (x amount of degrees after TDC generally).  Spark events differ with timing and if you have a knock event on a late model car you going to see extreme retarding of timing which will cause at least two cycles to report erronious RPM values (the first cylce of the retardation and the last where timing goes back to normal). 

On my TT G35 coupe I'm using a fuel injector signal to trigger a shift light and to trigger a two step module that can hold RPM to the exact value programmed.  I had once tried to hook my shift light up to the ignition output but found it too noisy to be compatible with the hardware/software I was using.  If you choose to monitor the ignition pulses much more hardware/software filtering will be necesarry.  On a similar note I just recently read on this forum that it is not recomended to use ignition triggers on the tach input of DEI remote starts - I guess they have had similar issues monitoring tach signals that way. 

If you want to get really technical neither the fuel injector nor the ignition is the "best" place to get RPM data - the cam or crank angle sensors would provide the absolute most accurate data as they are mechanically bound to the actual RPM of the motor.  The issue there though is that most crank and cam angle sensors don't report linear data so you have to decode the information - this makes it almost impossible to make "universal" interfaces for any RPM based product as all cars use slightly different pulses per revolution and timing flags.

I've honestly never worked on a batch injected car - the closest I came is when a friend and I were talking about converting his Caddy to sequintial from batch.  However, when I told him we would have to retune the entire fuel table he opted not to go through with it!



-------------
Kevin Pierson




Posted By: KPierson
Date Posted: January 01, 2009 at 10:22 PM

redstealthrt wrote:

Jim: Thanks for your contribute to this topic. However, Kevin is correct as i am only needing to know when the car has started and thats all. Nothing more fancy-pants than that I'm afraid. To make it worth my while to do what u have suggested, i would need at least the tach and the speedo wires to make a nice user interface, etc etc... but that's on down the line.. far down the line :o)

Ok well i cant seem to find a Hall-effect sensor that looks like the one in the picture....?

Is the square chip on the breadboard the Hall-Effect chip? It doesn't seem to be connected to anything??? I have circled it in the picture below.. 



David

The hall effect sensor can't be seen in the picture - it is the sensor that measures actual RPM so it should be built in to the fan motor.  The hall effect sensor sends a signal back to the processing board through one of the wires.  I'm not that familiar with computer fans so I'm not exactly sure how they do it but I do know the hall effect sensor needs to be mounted by the rotational object that you are trying to measure RPM of.



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: January 01, 2009 at 10:26 PM
Hum... i don't think i saw an answer to my question in your last post, Kevin? Or did i miss it?

David




Posted By: redstealthrt
Date Posted: January 01, 2009 at 10:28 PM
Ok, sorry i didnt see that you posted another one...

So, are you saying i should stick with the 2n3906 to do that then?

David




Posted By: KPierson
Date Posted: January 01, 2009 at 11:04 PM

As Jim has alluded to there is more then one way to do this, but that is what I would do.

I would run a fuel injector signal through a 30K ohm resistor to the base of a 2n3906.  I would ground the collector and I would hold the emitter to 5vdc through a 10K ohm resistor.  Your signal out would then be between the 10K ohm resistor and the emitter of the 2n3906.  This is NOT a standard way to operate the PNP 3906 and will result in a little bit of stray voltage on the output pin when the transistor isn't on, but that stray voltage will be plenty below the digital switching threshold of that Atmel Mega uC (~1.7vdc from memory).  If you want to get fancy you can hook the 3906 up how they are typically hooked up (to +voltage instead of gound) and then drive a 2n3904 from the 3906.  I have found in my experiance that the added transistor adds no real benefit.

if you get a second give us some background info on this - I know you are using it to control the starter on the car, but what tells it to start cranking?



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 12, 2009 at 6:10 PM
OK, revisiting this again.

I'm still thinking about using the tech wire in the ECU to get if the engine is running or not.

I have the following:
NPN 30v 100mA BC548
2n4401
2n3904
2n2222

How can i hook it up from the tach wire to the 2n then to a analog pin on the arduino?

Thanks,
David




Posted By: KPierson
Date Posted: March 12, 2009 at 8:22 PM

A transistor alone won't work with an analog input - as mentioned before you would need to connect it to an external interupt and write code to measure the time in between pulses.

You may be able to hook a transistor up to the tach signal and then put an RC network on the output of the transistor to convert the pulse to a voltage, but I'm not 100% sure that would work because your frequency is extremely low and your duty cycle, at least at idle, would be so low it probably wouldn't be measurable.



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 12, 2009 at 9:21 PM
Well how about with the frequency to voltage chip?

David




Posted By: KPierson
Date Posted: March 13, 2009 at 6:27 AM

That's an option - you'll have to download the datasheet and calculate the values of all the support components.



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 13, 2009 at 3:24 PM
Well that's the problem. I do not know how to hook the NTE995M chip to the tach and to the ATMEGA168 chip.

Here is the pin out of it:
posted_image

I also found this:
https://www.xdesignlabs.com/main/images/stories/xtal_images/opto.png

But sadly, i do not know what parts were used for that..

David




Posted By: KPierson
Date Posted: March 13, 2009 at 4:37 PM
the data sheet has diagrams that show how to hook it up

-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 14, 2009 at 1:27 PM
I do not see anything on the data sheet on how to hook one up other than telling me the VCC = 12v...

David




Posted By: KPierson
Date Posted: March 14, 2009 at 2:34 PM

Check out page 8 here:

https://www.national.com/ds/LM/LM2907.pdf



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 14, 2009 at 9:00 PM
OK i took some time and drew up how i think it would be connected. Give me your feedback please posted_image

posted_image

David




Posted By: KPierson
Date Posted: March 14, 2009 at 9:47 PM

I see two problems with it the way you drew it -

First, the Atmel microcontroller is a 5 volt device, if you run a 0-12 vdc voltage to it it won't like that - you will either need to power the frequency - voltage chip with 5vdc or you'll need to scale the output of the chip to 0-5\vdc.  Powering the chip with 5vdc is obviously the easier choice.

The second issue is the scaling of the chip in the config you posted.  The diagram states 67hz per volt (at 15vdc).  You're range will barely hit 67hz so a 1,000hz frequency range is WAY too wide for your application.  You would want to something closer to a 0-100hz range which is actually convenient because most likely you can just adjust one component by a value of +/- 10.

Now, keep in mind I've never actually got one of those chips to work right, so I may be completely wrong about both concerns (although I do know the Atmel chip won't like anything above 5vdc). 



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 14, 2009 at 11:32 PM
Alright, instead of 12v ill use 5v.

I'm not really understanding the hz thing. U said 67hz would be way too wide but u want it to go from 0-100hz? So if my math is correct (using 5v instead of 15v), i would get 13.4hz for every volt?

David




Posted By: KPierson
Date Posted: March 15, 2009 at 12:19 AM
67hz/v is too much, you need ~0-100hz full scale (or 20hz/v).

-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 15, 2009 at 2:24 AM
So are you suggesting that i change the 10k resistor to a higher value in order to get that 20hz for each volt?

David




Posted By: KPierson
Date Posted: March 15, 2009 at 9:56 AM

You will have to adjust something, I'm honestly not sure what.  I know the calculations are given in the datasheet, you'll have to go by that.  I would think 20hz/v would be an acceptable range, but I'm not sure exactly what you are trying to do.  To get the most accurate output from the chip you really need to know what the frequency will be at redline and then you can scale the output accordingly to represent your range from not running (0hz) to redline (xhz).



-------------
Kevin Pierson




Posted By: redstealthrt
Date Posted: March 15, 2009 at 1:40 PM
How does this look?

posted_image

David





Print Page | Close Window