A new DIY electronic coil tester.

Discuss all things Model T related.
Forum rules
If you need help logging in, or have question about how something works, use the Support forum located here Support Forum
Complete set of Forum Rules Forum Rules

Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

A new DIY electronic coil tester.

Post by Luke » Fri Dec 13, 2019 1:53 am

Hi,

I understand from reading a few posts that the subject of testing and setting Model T coils can be somewhat complicated...

Hopefully this post won't muddy the water, however I see that there are several methodologies of setting the coils/contacts ranging from the original hand-cranked machines, through a basic average reading current meter, to an electronic version of the hand-cranked tester.

Given several of my past and present lives I was interested in the theory/history behind the coil operation, and was intrigued to read a learned article by Mike Kossor, who I believe produces the 'ECCT'. While I've not gone into it in particular depth the detail presented in the article seemed thoroughly researched and well presented, and it prompted me to think about how I might go about testing the one spare coil I have.

Given our exchange rate the cost of the ECCT is somewhat prohibitive here in New Zealand, and as I have a little knowledge about such things I thought I'd try something dangerous and construct an electronic tester of my own.

I'm pleased to report that I've done that, and at this early stage it appears to be working reasonably well. I use an Arduino (a small microprocessor) and a switching device (for example a solid-state relay) to switch the coil and take some measurements. Then I output the resultant test data to a PC. Ultimately I'll remove the PC requirement and just output the data to an LCD display.

Similar to Mike's product I am measuring the current ramp time from turn on through until the initial, then final, decay (time to fire). I also measure the peak current.

The cost of the hardware components I've used are around $15USD, not including the PC or power supply (which could be just a 12v battery). Such a tester should he reasonably straightforward for anyone with a little electronic/computer experience to assemble and use.

The Arduino requires software in order to make it into a tester. I've written a suitable program that can be uploaded to a blank Arduino and am happy to provide that to anyone who wants it (for free). In fact it would be good to post it here so that, in the true spirit of open-source, those who are far better at programming than me can pull it apart and make it better! Already a very talented friend of mine has taken my initial effort and vastly improved it, but there is room to improve and add functionality should anyone desire.

Anyway I post here to enquire if anyone's interested in this? If so is it ok by the forum for me to post the code and put up a diagram of how it fits together?


brendan.hoban
Posts: 13
Joined: Fri Apr 05, 2019 5:52 am
First Name: Brendan
Last Name: Hoban
Location: Mornington

Re: A new DIY electronic coil tester.

Post by brendan.hoban » Fri Dec 13, 2019 2:33 am

Yes please!


Tiger Tim
Posts: 105
Joined: Sun Jan 06, 2019 7:09 pm
First Name: Tim
Last Name: Eckensviller
Location: Thunder Bay, ON

Re: A new DIY electronic coil tester.

Post by Tiger Tim » Fri Dec 13, 2019 8:55 am

Topics like this make me wish the moratorium on vendor posts was adjusted a little. While I’m all for DIY innovation and saving a few bucks (you should see my T), I would hope Mike Kossor has a reason for his price and it would be nice if he (and other vendors of course) had a place to defend the benefits of their own products. Maybe a ‘Product Announcements’ section of the forum would be a good idea, as long as it could be kept civil and any disagreements kept from bleeding through to other sections.

Having said that, I look forward to this home-brew coil tester. Getting my own coils right is probably the priority on my truck before I drive it again. Please understand I mean no disrespect to your thread, I think what you’re doing is awesome.

User avatar

Charlie B in N.J.
Posts: 301
Joined: Mon Jan 07, 2019 7:40 am
First Name: CHARLIE
Last Name: BRANCA
Location: Brick N.J.
MTFCA Number: 28967
Board Member Since: 2010

Re: A new DIY electronic coil tester.

Post by Charlie B in N.J. » Fri Dec 13, 2019 9:06 am

Awaiting the out come & results but it was bound to happen that this type of unit (and variations of it) would start to show up. Stuff just keeps getting cheaper & smaller.
Forget everything you thought you knew.


Moxie26
Posts: 167
Joined: Sun Jan 06, 2019 8:20 pm
First Name: Robert
Last Name: Jablonski
Location: New Jersey
MTFCA Number: 407
MTFCA Life Member: YES
Board Member Since: 1999

Re: A new DIY electronic coil tester.

Post by Moxie26 » Fri Dec 13, 2019 9:13 am

Thank you for your post Luke. As far as coming through with a cheaper breakthrough on testing coils I look at this as a bunch of words. When you have come through with documenting your research history testing and reliability please let us know. Bob J.


Adam
Posts: 602
Joined: Sun Jan 06, 2019 11:57 am
First Name: Adam
Last Name: Doleshal
Location: Wisconsin
MTFCA Number: 23809
MTFCI Number: 1
Board Member Since: 2000

Re: A new DIY electronic coil tester.

Post by Adam » Fri Dec 13, 2019 10:45 am

What Luke is doing is the electronic version of building a hand cranked coil tester from scratch. A properly functioning hand-cranked coil tester can be made in an afternoon out of items from the average Model T hobbyists scrap pile (so long as you have aptitude for such endeavors). TOTAL COST probably wouldn’t exceed $15. Yet there are reproduction and original hand cranked testers selling all the time, usually for $800-$1,200... The fact you can make one in a couple hours for free certainly doesn’t hurt the market for the available “products”!

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Fri Dec 13, 2019 11:26 am

Hello Luke, this sounds interesting, I have developed my own coil tester using an oscilloscope to display time to fire etc. I have been considering using Arduino or Raspberry Pi based system and indeed I have Arduino board here so I would be very interesting to see your code and hardware wiring details. Happy to share feedback on coding or any enhancements I make. My email address is johnhousego19@gmail.com if you care to forward any details? Thanks for your consideration, John (United Kingdom)


dmdeaton
Posts: 239
Joined: Mon Oct 21, 2019 9:43 pm
First Name: Danny
Last Name: Deaton
Location: Ohio

Re: A new DIY electronic coil tester.

Post by dmdeaton » Fri Dec 13, 2019 11:56 am

I am interested in seeing what you have also. My background is electrical machine control and Very interested


jab35
Posts: 233
Joined: Sun Jan 06, 2019 12:28 pm
First Name: James
Last Name: Bartsch
Location: Dryden, NY 13053
MTFCA Number: 30615

Re: A new DIY electronic coil tester.

Post by jab35 » Fri Dec 13, 2019 12:42 pm

I encourage all of you with interest and theability to develop and share this technology to run with it. Once you have a tested design you could offer it for sale in classifieds as a complete unit, a kit, or list of parts with assembly instructions. I think that would be service to the model T community. And if you could come up with an electronic model T speedometer or engine tachometer ( kit or device) I'd encourage that effort too. Good luck and please keep us posted on your work. Respectfully, jb


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Fri Dec 13, 2019 2:35 pm

Hi,

It would seem from the replies that there is some interest (I wasn't sure if there would be!), so I'll go ahead and write up what I've done to date. As I've a busy week this will take a few days, but perhaps I could do it more quickly if I separate it into two or three sections.

One thing I should make clear though. This is not a commercial product and I'm not trying to compete with anyone, nor am I selling any components - you can get what's needed from a number of sources. As it happens I've benefited from some of the things I've read here and elsewhere, and simply see this as a way to contribute back to the Model T community at large.

It's also interesting to me and something to learn from, and in releasing the code as an open-source project it'd be something that others may also learn from and be able to assist with, thus ultimately improving it for everyone that might want to use it.

Finally, some quick replies - Bob J, this is a working project, if you were local I'd say come around and see but as you're not I'll just try and start on the writeup this weekend and will post that here when written. Adam, I'd love to have a scrap pile like that! John Housego, although I prefer Python to C I don't think a Pi would work so well in this instance. Jab35, sounds like a couple of good ideas.

I'll start on writeup this weekend,

Cheers, Luke.

User avatar

MKossor
Posts: 124
Joined: Sun Jan 06, 2019 7:30 pm
First Name: Mike
Last Name: Kossor
Location: Kenilworth, NJ 07033
MTFCI Number: 22706

Re: A new DIY electronic coil tester.

Post by MKossor » Fri Dec 13, 2019 3:48 pm

Adam, what Luke is doing is showing folks how to do for Free what others have taken years to research, develop and build into established products that benefit the Model T hobby. That’s his prerogative to freely share his investment in time, effort and education.

I feel a few comments are in order given it was my research and product development (ECCT) he cited as the basis of his work. I think it’s a fair and reasonable assumption everyone here expects their time and effort on education and training to be of value to themselves and others. That it’s reasonable everyone expects to be fairly compensated for the goods they produce or services they perform using the knowledge they learned and skills they developed. Especially if they have undertaken the added risk of producing their products in mass for others benefit without any guarantee of success. The reward is Profit and the risk is Loss. I am fortunate the work I did to design and produce the ECCT for 1/3 the cost of the old HCCT standard has proven exceptionally effective and does generate profit. I would like folks here to know a good deal of that profit was used to research and develop other innovative products for the Model T hobby many enjoy today (E-Timer, I-Timer and 3in1 coil adjusting tool) and was used to support the hobby in many other ways: Paid ads in The Vintage Ford magazine and The Model T Times magazine help keep publishing, operating costs down and MTFCA/MTFCI dues costs down, sponsoring the Montana 500 , door prize donations to various Model T Tours to help keep costs down and Youth auctions that help ensure the Model T Hobby lives on. Lastly, that profit helps offset the many hours spend on evenings and weekends discussing engine and coil performance issues with ECCT users. Offering troubleshooting suggestions and coaching them on the art of coil point adjustment using the ECCT.

Its nice Luke received a warm enthusiastic welcome on posting his open source DIY coil tester to the Forum and hope it inspires others to learn and experiment with technology. One piece of sound advice I will offer is don’t dare disclose $5 DIY voltage regulator.
I-Timer + ECCT Adjusted Coils = Best Model T Engine Performance Possible!
www.modeltitimer.com www.modeltecct.com


tdump
Posts: 567
Joined: Sun Jan 06, 2019 7:00 pm
First Name: Mack
Last Name: Cole
Location: North Carolina

Re: A new DIY electronic coil tester.

Post by tdump » Fri Dec 13, 2019 5:02 pm

Well,I must admit it is interesting to read about but nothing I have a real need for.If I need a set of coils and all the 1's i have are screwed up,they will get shipped to Ron and fixed and won't be a issue.If I was buying alot of coils for potential rebuild I would want some kind of a quick go no go tester but not much more.
The Model T has inspired DIY LONG before it became a popular term.
Most of it was becaue the T owner operator was HIGHLY motivated to get his T running or he would have to buy another pair of shoes!
The cost of shipping and receiving a US product south of the equator is what is really sad.
If you can't help em, don't hinder em'

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Sat Dec 14, 2019 12:08 pm

Luke,
Earlier this year, I developed a Motor Controlled Coil Tester (MCCT). https://www.mtfca.com/phpBB3/viewtopic.php?t=3153 It works fine, but I didn't continue the development as I focused my spare time on other T projects. Here are some of the learning points for me:
  • Buy a set of rebuilt coils with your first Model T! I should have paid the $200 to get a set of coils rebuilt correctly as sooner. I can't imagine how many people spent time and money on engine problems that were really just coil problems. Coils are cheap compared to lots the problems or apparent problems bad coils can cause.
  • Buy a ECCT. In the process of working on the tester I realized how important a good tester is. I decided at this point I have a lot of coils and cars (mine and others) that it would be helpful to be able to test and rebuild coils. So I got that peanut butter jar (figuratively) and starting saving money in it.
I will be following your updates. I decided to make a mechanical tester, but ironically my background is in electronics. Perhaps I will be of help to you. But I would imagine no mater where you go with your development these two learning points will be helpful for others who want to spend their time elsewhere.

Matt


Adam
Posts: 602
Joined: Sun Jan 06, 2019 11:57 am
First Name: Adam
Last Name: Doleshal
Location: Wisconsin
MTFCA Number: 23809
MTFCI Number: 1
Board Member Since: 2000

Re: A new DIY electronic coil tester.

Post by Adam » Sat Dec 14, 2019 12:29 pm

Maybe I need to clarify my post... I was saying that I doubt a $15 open source do-it-yourself electronic coil tester will hurt any existing products.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Sun Dec 15, 2019 12:24 am

So I've written up some words on the tester, including a bit more detail around how the thought process went, how the tester works and why timing the T coils is important.

Unfortunately it's turned into somewhat of a lengthy document, which I may need to split into several posts. We'll see how that goes but please let me know if you have any issue with it.

Thanks, Luke.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Ford/Arduino Coil Tester documentation

Post by Luke » Sun Dec 15, 2019 12:31 am

The FACT (Ford/Arduino Coil Tester)

Background

I became interested in the Model T ‘buzz boxes’ or ‘coils’ when, recently, my T began running roughly for no apparent reason. Despite considerate cleaning of plugs etc nothing persuaded it to work as it should and as it seemed to be an electrical issue I felt the coils could be the culprit and should be inspected.

Given the noise they made it struck me that the T coils were likely similar in operation to the old-school vibrators that I’d used some years before in my early wireless days. Running on a low voltage supply the ZC1 (a WWII transceiver), AR88 and similar used them to provide the high voltage necessary for the valves to operate.

Some basic theory and thoughts


My recollection of the vibrators and thoughts of T coils coincided with a hazy memory of transformer theory in dreary classrooms back in the ‘70’s, remembering that a changing (collapsing) magnetic field will induce a current flow in an adjacent coil. In essence this is what happens when the points of a T coil, or the points in a points-coil-distributor vehicle open and power is disconnected.

With transformers a voltage applied to the primary coil will typically result in a different output voltage in the secondary coil (which may be more or less than the input voltage according to the number of turns on the respective coils). With typical automotive coils, and the T is no exception, the 6-12V input will result in several kV output, sufficient to fire a spark plug as necessary for the engine to run.

Various things can affect the level of the secondary voltage, and how ‘strong’ a spark is produced. In the case of the T, in which each ‘box’ is a complete Low-to-High-Voltage system in itself, the coil elements, the associated condensor and the condition and setting of the points can all have a marked impact on the output.

In my case, having checked, it appeared to me that there was little issue with the strength of spark that resulted from my coils. This suggested I needed to look further at the system overall and consider why the vehicle wasn’t running as it should.

From what I could see T coils, rather cunningly, utilise the magnetic field induced when current is applied to the primary coil to also draw the points open after a time, which then collapses the field releasing the points and allowing them to close and start the process again. This operates much like a mechanical oscillator, which in the case of the vibrators could carry on for many hours without interuption, whereas the T coils are utilised intermittently as current is applied via the timing commutator, theoretically at the right time to fire the fuel mixture in the requisite cylinder.

With regard to timing, in a points-coil-distributor system there’s the ignition timing is controlled by the points, typically driven by a cam that itself is driven by gear or chain from the crankshaft. The points, upon open, will cause the single coil to produce sufficient voltage to drive a spark plug via the distributor. Other than the automatic advance-retard mechanism, once set there’s very little that will change the ignition timing of such a vehicle (disgregarding cam block wear for a moment).

Germane to the Model T it’s important to note that the spark in this system doesn’t actually occur instantly upon change to the low-tension voltage due to the ramp or ‘dwell’ time it takes for the coil/condensor/points to interoperate. An example of this time-to-fire (or ‘dwell’ time) with a standard ignition coil may be seen here http://www.underhoodservice.com/using-o ... ion-coils/ Importantly, in a modern system such as this with a single coil and distributor, the time to fire for and between each plug is fixed.
IgnCoilFig1-279x300.jpg
IgnCoilFig1-279x300.jpg (14.95 KiB) Viewed 9240 times
In the case of the Model T the crankshaft drives the timer/commutator, which itself may be altered manually by the driver to set the overall timing. The commutator then powers each individual coil which themselves have a set of points than can individually affect the eventual spark time according to the way they are set.

This speed or time of operation of the T coils is just as important as the voltage they produce because although the overall engine timing can be somewhat arbitrary, given it’s left up to the driver to set the advance/retard as they see fit, the cross-cylinder timing can be affected by the way each individual coil is set up. In other words while the timing set may be correct for one coil at the particular engine conditions of the time it may not be the case for the others if they don’t produce the necessary spark at the same time as the others when initially powered up.

Thus from basic calculation it seemed to me that a fairly small change in ‘time to fire’ could result in several degrees of crank rotation either way, and that perhaps it would be prudent to look at how my coils performed in this aspect of operation.

How to test?

After thinking about how I might set up a suitable test (utilising a function generator and oscilloscope) I cast around the ‘net to see what others had done and came across an interesting article by ‘cool386’ here http://members.iinet.net.au/~cool386/tester/tester.html This article had a couple of links, including one to a commercial product called the ‘ECCT’. I read more about this on the product website and in an article by the designer here http://www.modeltecct.com/uploads/The_D ... dox_V5.pdf At the same time I read about the electro-mechanical coil testers of the time, known as the ‘HCCT’, and other more recent but similar devices such as a Strobo-spark etc.

Although I could have just utilised my ‘scope as is, similar to ‘cool386’s’ article I like to have and/or make specific tools for certain tasks, and this problem sounded like it could be a good candidate for just the right special tool. As such I was initially attracted to the electro-mechanical devices and considered making something similar to Gary Tilstroms design here: http://www.mtfca.com/discus/messages/80 ... -93057.pdf Unfortunately as I don’t have an abundance of old T parts here, and given my initial thoughts on testing were confirmed and enlarged by ‘cool386’ and Mike Kossor’s article, I thought going down the electronic route was probably a viable option.

Initial thoughts and design requirements for the tester

Although I started my electronic life with valves I’ve moved on and have over the years utilised transistors, IC’s, and then computers of various sizes and types. More lately I’ve used a number of different embedded micros in association with inexpensive utility modules as building blocks to accomplish all sorts of different tasks, and it seemed to me that I could do the same here. Having had some experience with them to my mind a small micro called an ‘Arduino’ could provide the necessary real-time capability to get a Model T coil-tester project operational.

In essence it seemed to me that what I needed to do was fairly straightforward – first power up the primary coil, measuring the supply current at the same time, then look for the decay time as the points begin to open (just as you would see on a ‘scope) at which point the secondary coil should produce the high voltage for requisite sparks.

For several reasons the peak current, the time from turn on ‘till initial decay, then complete decay were the main data points I felt were needed to complete the main picture. All of this could have been provided by my ‘scope but it’s comparatively bulky and rather more complex than needed for this simple task, and as I recalled seeing something about a basic ‘scope project someone had done with an Arduino I thought this would be a good place to start my more focused research.

A brief explanation of an Arduino

At this point it’s probably worth explaining what an Arduino is for those that are unfamiliar with such things. The Arduino is much like a very small computer, but it has the advantage of having a number of quite configurable connections or ‘pins’ that a software program uploaded to it can utilise. These pins are able to be commanded by software to turn things on or off, or read the output of signals applied to them.

The software that runs on an Arduino works in much the same way as any software you’d use on your computer and which you control by your mouse or keyboard (ie. you command it to do something, in other words an ‘input’, and it will usually produce a result or ‘output’). One big difference is that you can’t plug a standard monitor directly into an Arduino, it just doesn’t have that facility. However you can produce results that an ordinary PC will display via a standard USB port, or you can connect a LCD display.

A new Arduino is essentially a blank slate, requiring someone to write some software code and then upload it to the unit, typically via the same USB connection you can read results from. The software tells the Arduino to do certain things, toggle pins up and down, meaure times or voltage inputs, and do various calculations for example. These things can be combined in a way to make the little unit quite a useful stand-alone processor.

If you’re interested in learning more about Arduino’s here’s a couple of links https://www.arduino.cc/en/guide/introduction and https://learn.sparkfun.com/tutorials/wh ... rduino/all

Back to the specifics of the tester design

In the case of the Model T coil timer thought I could utilise a digital ouput pin of the Arduino to turn on the power supply to the coil for a short time, and an analog input pin to read the resultant current via a small current transformer (a device that provides a signal the Arduino can read). This process is started by a single push switch that’s connected to a digital input pin.

As the Arduino is a small device and not capable of handling large currents I needed use another module (in this case a spare ‘h’ bridge motor controller) to supply power to the coil. This could also be a solid-state relay or simply a suitable power transistor capable of handling peak currents of up to 10A.

Given the blank state of a new Arduino software needed to be written to command the pins as described above. This would ensure that the current measurements from the analog input pin were captured and inputted into an array (think of it like a ledger). This array could then processed later by the Arduino and the data analysed once the spark cycle has completed. It’s important to wait because during the capture phase (right after we apply power and until just after the points open) we need to concentrate on collecting the data first, otherwise the Arduino timing could suffer.

The caputred data is taken from the array with the peak current, the time ‘till initial decay, and time to total decay being calculated and presented in a suitable format. This is then output via a USB cable to a PC and displayed in human-readable form. The only software required on the PC is a standard ‘terminal’ program, so it will work with both Linux and M$ based machines.

It would also be a fairly trivial job to also output the data to a small LCD screen, making the entire operation free from anything else. At this early experimental stage I’ve remained using the PC as I also use that to modify the code and upload to the Arduino.

Overcoming issues

The Arduino is not without its limitations, one of these being the speed at which the ADC (analog to digital converter) operates – how quickly it can read the current measurements. In standard guise the Arduino will make its first read in something over 200usec, and thereafter a little over 100usec.

A 200usec variation would be marginal in terms of measuring and setting coil timing to a reasonably accurate level so the software we’ve written modifies the internal presecaler in a way that gets the typical sample time down to 24usec, which in my view is quite adequate for this task.

It’s possible we could improve this further, particularly if one dropped the 10-bit resolution down to 8-bit, but for the moment it works reasonably well. If this doesn’t make any sense to you there’s no need to worry – I just include it for those that might be interested in such things.

Another issue is personal. Quite simply I’m not a natural programmer; personal computers didn’t really exist when I began my career and I don’t have the best mindset or understanding to produce the best code. Although I did a little programming in the late ‘70’s, and then again in the 90’s, I’ve been fortunate that in more recent times I’ve been able to persuade a friend of mine, who is a very good programmer, to have a look at some of my efforts and ‘fix’ some of the more glaring messups I’ve made. In general I’m good with ideas and directions, and can get something to work initially, but refining things and getting something to work well is Robert’s forte.

Producing the code

Making things work better, or adapting something to make it do something else useful is also where the concept of ‘open source’ plays an important part. Simplistically open-source is when you write some software code and make the source available to everyone to replicate and use, usually free of charge. While this means that the person initially spending their time and skill producing something may not always benefit financially it often helps a lot of other people out and can result in some stunning outcomes as others take the initial design and markedly improve or adapt it to do other unthought of things. A good writeup about open-source is available here https://en.wikipedia.org/wiki/Open-source_software or here https://en.wikipedia.org/wiki/Open-source_software

In my writing of the initial code for this coil tester I’ve utilised information from things that others have done (how to speed up the analog read for example) and, with Robert’s input, this freely given code and information has assisted me to produce something that will hopefully benefit others. As a result, and in further hope that those who are able will be able to refine it further, I will publish the code here, in a separate post, under a license that makes it available to all – but will also require anyone modifying the code to publish their modifications too.

As such I hope this will ultimately produce a good, useful and inexpensive tool that will assist some to keep their Model T’s running well. As a means of differentiating it from other testers I initially called it something cool like “Arduino Coil Tester’ but Robert, who has a certain dry wit, suggested ‘Ford/Arduino Coil Tester’ or ‘FACT’ for short, so that’s been it for the moment, but perhaps you could think of something else.

Having a go

I have written the above in order to, hopefully, provide some explanation of how this works to those that won’t have had much to do with such things before. Those of you that have can just skip to the relevant bits, but if you’ve a mind to ‘tinker’ and would like to give it a try then the code I’ve produced to date should work and should provide you with some useful information and allow you to set your coil timing.

The parts needed are inexpensive and may be obtained from local electronic supply stores, or from mail-order suppliers such as Element14, Aliexpress and the like. Apart from a PC, some hookup wire and a 12V power source, the bits you’ll need are:

Arduino Nano, Uno or similar (with a 328P processor)
Current transformer (small)
FET, solid-state relay, or other solid-state current switching unit capable of ~10A peak
2 x resistors
1 x switching diode
1 x push-switch

You’ll also need to make a test fixture to fit the coil box into, and which allows you to connect the requisite wires from the tester to the coil. This will also need to provide a spark gap for the coil to operate with. You could just connect a plug but I think something with a gap of around 3/8” is likely to be better and will give better/more useful information around the ‘strength’ and quality of the resultant spark.

How to connect it up

The Arduino may be powered from the PC, the solid-state switch will need a 12V (+ve) supply from one side to the coil upper side contact, this wire also passes through the current transformer. The 12v (-ve) supply is connected to the bottom contact. The spark gap goes between the bottom contact, and the bottom side contact of the coil.

The Arduino pins to be connected are:

Pin A0 and ground to the current transformer via a 1N914 or similar switching diode. The current transformer will need a burden resistor of a suitable value that keeps the pulse voltage below 5V. In my case 100 ohms was about right – you will need to scale the output to current in the current.

Pin D7 and ground to the high-current switching device.

Pin D8 goes to the push switch, and to ground via a 10k or thereabouts resistor. The other side of the push switch connects to the 5V output pin of the Arduino. I’ll probably change this to make it simpler, but for the moment this is how it’s working.
FACT_diagram.jpg
Upload the code

Once it’s ready to go you can upload the code (or ‘sketch’ as it’s called in the Arduino world). I’m not going to go into how to do this, there are many tutorials on the web, such as https://www.arduino.cc/en/main/howto or https://www.dummies.com/computers/ardui ... n-arduino/

Using the tester

After this it’s a matter of ensuring there is communication between the Arduino and the PC, and that you have a terminal program open in the PC. Conveniently the Arduino software you use to upload the code has an in-built terminal you can utilise.

With that screen open you press the push switch, if it’s all working correctly there should be a single spark generated by the coil, and some text will appear in the terminal. This text, presently, give the peak current, the time to initial decay, and the time to total decay – the latter I consider the ‘time to fire’ and the magic number we’re looking for. Finally the time between initial and total decay is also presented. At the moment the times are presented in microseconds.

It’s mainly the total decay time that needs to be consistent between the four coils, although the peak current should also be similar. The difference between initial decay and final decay time should be small and consistent as well. If it’s not then it suggests some issues with the points, or possibly the connections you’ve made, and these should be followed up via any of the tutorials on how to repair and set the coils.

The absolute value of the time to fire, I’m led to believe, should be around 2ms (2000usec) at 12V, and the peak current around 6A. I’ve not verified this myself at this point but discussion and information is available here https://www.mtfca.com/phpBB3/viewtopic.php?t=3153 (thanks particularly to MKossor and JohnH). Most important is that the four coils have the same ramp time as each other.

Actually adjusting the coils for consistency is fairly straightforward. I don’t see the need to repeat the already good information on this - there’s plenty of detail on this site and elsewhere.

Improvements

The tester can also be made to pulse the coil on and off as if it were running in the vehicle. Presently this requires a small change in the program, but it’s easy to implement this via another pin/switch combo. The reason I’ve not done this is because I’m still messing around with the code and don’t have a spare switch, and I’d like to see if I can improve the cycle time of the complete process in the Arduino as I suspect it may ‘max out’ beyond a fairly low RPM.

Also it would be good to capture the results over several cycles to see what, if any, ‘jitter’ there is between firing cycles. This would indicate the consistency of the coils and complete another obvious test. Once again this isn’t hard to implement but as I only have a 1k Nano (a 168P) to hand I’m limited by the available memory, so I’ve not done this presently. A 2k Arduino (328P) would be fine, I just need to get one and trial it.

Otherwise a design test is an important thing that others will hopefully be able to assist with. I only have one coil available to test, and although I’m hoping to be able to trial some others that Chris, another local Model T owner has, I’ve not been able to conduct much in the way of experiments presently. I suspect those of you that live in the U.S. will have much more ready access to old Ford bits than us down here at the bottom of the world, so your input would be valuable.

Finally there are of course other things that could be added to this simple tester if one so desired. I expect checking the condenser could be useful (there are various sketches available for the Arduino that show how to do this), and maybe a shorted turns test? I’ve no idea if the T coils fail in this way but my memory of TV flyback transformers suggest it could be a worthwhile test if you have a poorly performing coil. At the present I have separate equipment that checks all of these things so haven’t seen a need to incorporate it into the design; perhaps that’s something another contributor could do?

Help

I’m happy to help where possible but I do have a day job, and kids, and a T that I’m still working on (amongst many other projects) so please have a look around at the information that’s available on the ‘net first. Particularly with things such as intially hooking up an Arduino there are many tutorials that will do a much better job at explaining that I’d be able to! Otherwise please ask or contribute as you can, I’d be interested to hear how others get on.

Luke P, 15 December 2019.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Arduino code - updated 17th Dec

Post by Luke » Sun Dec 15, 2019 12:54 am

Here's the coil tester code.

I've added some comments, and left in references to variables that don't exist in this version, since they may be a useful guide to others.

Please note I very much consider this 'work in progress'! It appears to work ok for me but I've not exhaustively tested it and I'm still actively changing it, so YMMV.

To be clear - It's experimental, if you let the smoke out of something please don't complain to me :shock:

Update - I see the forum software has messed up the indenting etc. Sorry about that, however it should still work ok - please let me know if you have any issues though?

Code: Select all


/* The Ford Arduino Coil Tester, a prog to: 
 *
 *  (1) turn on Model T 'buzz coil' for 5 milliseconds 
 *  (2) measure the current max value 
 *  (3) measure time from 0 to max val (rise time)
 *  (4) measure time from max val to min val (decay time) 
 *  (5) calc and present results via USB serial
 *  
 *  Makes use of fast ADC read (set presecale to 16, giving read times of ~ 24 us
 *  
 *  
 * Released under the GNU General Public Licence (https://www.gnu.org/licenses/gpl-3.0.html)
 *
 * Version 0.7 written by Luke P and Robert R, Christchurch, New Zealand
 * 
 * 17th December 2019.
 */ 
 
// Set global variables  
  
unsigned long time_now = 0;  // use long in case micros count gets big
unsigned int interval = 4000;           // interval at which to turn on (microseconds)
const int outPin = 7;  //output pin to ss relay for coil
const int swPin = 8; //input pin for switch, normally low 
int testnum = 0;

//setup array stuff

const unsigned int numReadings = 150; //max number of values in array, 150 = approx 3ms
unsigned int analogVals[numReadings][2]; // array name
unsigned int x = 0; // initialise array input

//setup for fast ADC read

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  //stuff for fast ADC read
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

//setup for switch reading

#define DFE(signal, state) (state=(state<<1)|signal)==B11110000

// Falling state variables for each button
byte button1FallingState;

//begin setup for prog proper
  
void setup() 
{
  
  pinMode(swPin, INPUT_PULLUP);// define pin as input for push button
  pinMode(outPin, OUTPUT);// define output pin
  sbi(ADCSRA, ADPS2); //more stuff for fast ADC read
  cbi(ADCSRA, ADPS1);
  cbi(ADCSRA, ADPS0);

  Serial.begin(115200);
}

void loop() 
{
  if (DFE(digitalRead(swPin), button1FallingState)) //detect switch state change to start timing
  {

//  for (int i = 0; i < 2; i++) Serial.println();          //clear some space on the terminal screen
    
    testnum = (testnum + 1);
    delay (50);
      
    digitalWrite(7, HIGH); //set pin 7 high to power coil for time interval
    time_now = micros();


    x=0;  // reset array
    while(micros() < time_now + interval)
    {
      if (x < numReadings) 
      {
        analogVals[x][0] = analogRead(A0); //read pin 0 volts (which is actually current from CT) and input value to array col 1
        analogVals[x][1] = (micros() - time_now); // time since start of loop (thus sample time), input to array col 2
        x++; //increment array
      }  
            
    }
      digitalWrite(7, LOW); // reset 7 to low and turn off power to coil
     
//begin data analysis
// set variables

    int maxval = 0; // use float to get decimal places, int uses less mem
    long sum = 0;
    int val = 0;
    int prev_val = 0;
    int index = 0;
    int initialdecaytime = 0;
    int completedecaytime = 0;

    int maxI = 0;
    
    delay(200);

    for(int i = 0; i < numReadings; i++)
    { 
      prev_val = val;
      val = analogVals[i][0];
      sum += val;
        
      if ((val > maxval) && (initialdecaytime == 0)) //detect current increasing and write to 'maxval'
      {
        maxval = val; 
      }
   
      if ((val > 40) && (val < maxval) && (initialdecaytime == 0)) //detect initial time of current decay and write to 'initialdecaytime'
      {
        initialdecaytime = analogVals[i][1];
      }   
   
      if ((initialdecaytime != 0) && (completedecaytime == 0) && (val == 0))  //get total time from initialise to complete decay to zero
      {
        completedecaytime = analogVals[i][1];
        maxI = i;
      }
       
      Serial.print(analogVals[i][0]);
      Serial.print(" -- ");
      Serial.print(analogVals[i][1]);
      Serial.print(" .. ");
      if (i != 0) Serial.print(analogVals[i][1]-analogVals[i-1][1]);
      Serial.println();
    }


//    Serial.println(maxval);
//    Serial.println(maxI);
    
// write results to serial port
     

//   Serial.println(analogVals[i][0]);
//     Serial.println (maxval);
    Serial.print ("*** Test number ");
    Serial.print (testnum);
    Serial.println (" ***");

   
   //Serial.println();
    Serial.print ("Maximum current = ");
    Serial.print (long(maxval) * 120.5);
    Serial.println ("mA"); 
    
//    Serial.print ("Average current = ");
//    Serial.print ((long(sum) * 100) / maxI);
//    Serial.println ("mA"); 

//   initialdecaycount = (initialdecaycount * 0.022); // convert to ms
    Serial.print ("Start of decay = ");
    Serial.print (initialdecaytime);
    Serial.println ("usec");
    
    Serial.print ("Total cycle time (to fire) = ");
//   completedecaycount = (completedecaycount * 0.022); 
    Serial.print (float(completedecaytime/1000.00)); // convert to ms
    Serial.println ("msec");


    Serial.print ("Decay time = ");
    Serial.print (completedecaytime - initialdecaytime);
    Serial.println ("usec");   
    Serial.println();

  
  }
}

Last edited by Luke on Thu Dec 19, 2019 1:09 pm, edited 3 times in total.

User avatar

fbergski
Posts: 65
Joined: Sun Jan 06, 2019 11:16 am
First Name: Philip
Last Name: Berg
Location: Simi Valley CA

Re: A new DIY electronic coil tester.

Post by fbergski » Sun Dec 15, 2019 11:48 am

Good job with the Arduino, I like you play around with single board computers mainly Raspberry Pi's. I own the ECCT (full version) use an itimer on one my t's both excellent products. Tinkering on old cars and computers is a hobby for me.

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Sun Dec 15, 2019 12:27 pm

Luke,
Thanks for posting your detailed update. I have done some research and there was articles that I missed.

The surprise for me is that you don't mention any need for special electronic shielding of the electronics. I know every time I use a digital volt meter around my T it goes crazy so I find my analog one. Later cars went to resistant spark plug cables, so people could use radios. Perhaps this is not an issue with the Ardrino or maybe on the actual T engine running there is just a lot more noise than a test bench.

You have done a lot of work here in a short time, but here are some initial thoughts:
  • Voltage- From what I see here you use 12 volts, but one could just as easily test with 6 volts. I believe that for hand crank starting you want to confirm the coils work on the lower voltage. Of course your dwell times will be different than 12 volt.
  • Bill of materials- Part number and suppliers would help people trying to make there own. Perhaps they will source different parts, but they can compare the specifications. Specifically the current transformer would be helpful. Also you mention other parts that you use, but it gets lost in the discussion.
  • Measurement- The one thing that is not clear to me is what/how exactly you are measuring for a good/bad/ugly coil. I understand you are storing an array of data points of the current. From that you can determine peak current and dwell time. At this point are you just looking at the raw data? Then in the future you or someone would develop the code to determine peak current and dwell time?
  • Wow! Just getting started! I am scratching my head thinking this man has only one model T coil! He could be dangerous with four! What about a dozen!
Thanks again for posting your work!

Matt


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Sun Dec 15, 2019 1:22 pm

Matt, just a brief reply as I've some work to do today:
  • It works fine at 6V (I use a variable bench PSU), as you noted the ramp time increases.
  • Yes, a BOM could be useful, although there's a bit of detail in the diagram. I'll probably post a photo or two later in the day that may help others to understand what it all looks like.
  • The code will output human-readable information to the PC. These are the peak current in amps, and the two decay times in microseconds. I also had it calculating the average current in amps but it wasn't really that useful for anything. I'll post a screenshot tonight, if I have chance.
  • I'd love more coils to test, a dozen would be fantastic :geek:! Hopefully I'll run across some at some stage in the future, although I doubt they're as plentiful here as they would be the U.S.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

A couple of images.

Post by Luke » Mon Dec 16, 2019 1:54 am

This may be of interest, it's a photo showing the various components of the prototype tester - obviously very experimental at this stage!

The small board in the foreground is the Arduino, the board sitting atop the power supply is the switching module, and the orange thing with a wire passing through it on the way to the coil is the current transformer.

Also, although the angle isn't the best in this photo, you should get an idea of how I've managed the spark gap for the coil:
IMG_0179.JPG
And this shows what the output to a PC looks like at present, as you'll see that coil appears to be a little variable:
Screenshot_2019-12-16_19-42-33.png

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Mon Dec 16, 2019 3:56 am

Thank you Luke for sharing your code. I will load this to an Aurdino over the holiday period and have a play with it. Regards John

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Mon Dec 16, 2019 6:15 am

Hello Luke, Im sure you dont want to get in to software questions but would you kindly confirm the code will compile OK as I am getting errors. If it does then I will investigate the code to see whats wrong my end. As I have limited knowledge of C this would be a good starting point before I investigate. I am more used to Python. Thanks in anticipation. John (UK).
compile error.png


Farmer J
Posts: 29
Joined: Sun Jan 06, 2019 3:20 pm
First Name: Jerry
Last Name: Kramer
Location: Richmond, IN

Re: A new DIY electronic coil tester.

Post by Farmer J » Mon Dec 16, 2019 10:32 am

WOW. Much easier to send them to Brent or Ron.

User avatar

walber
Posts: 76
Joined: Sun Jan 06, 2019 12:55 pm
First Name: Walt
Last Name: Berdan
Location: Bellevue, WA
MTFCA Number: 16421

Re: A new DIY electronic coil tester.

Post by walber » Mon Dec 16, 2019 12:59 pm

Jerry,

RIght you are, sending the coils to a pro for rebuild would be much easier, doing it yourself with a HCCT or ECCT would be easier as well but some of the T folks also have an interest in building tech tools. While I doubt that I would build one (I'm a heretic with a distributor on my speedster) I find the discussion very interesting. I was an IT guy with ancient languages crunching data on mainframe computers and get easily impressed by the power of tiny technology and modern code.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Mon Dec 16, 2019 3:07 pm

John Housego - I don't mind these sort of questions, was just trying to avoid 'how do I connect an Arduino to my computer'! Anyway I'm guessing that when I pasted the code into the forum it's messed up somewhere along the line, certainly it trashed the formatting. As I'm presently updating things I'll post the code again and when I've finished and will copy it back to see if it compiles ok for me. I'll let you know if that works ok.

Farmer J - Down here at the bottom of the world Brent and Ron are a little way away (I presume!), and besides what would we all learn from just sending things away?

Walber, - Fortran/Cobol I suppose? Anyway, in for a penny, in for a pound, how about a full electronic system on that speedster of yours :mrgreen:


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Simple code to plot data on screen.

Post by Luke » Tue Dec 17, 2019 1:36 am

Partly for John Housego I've written a simple Python script that will take the output from the FACT and plot it to your screen.

Here's what it looks like:
dataplot.png
This shows time to fire in microseconds on the x-axis, and coil current on the y-axis. Please ignore the current value in this instance, I've not worried about calibrating it - it's more the time-to-fire and the shape of the decay curve that interests me.

The Python script needs to be used in conjunction with the new simplified Arduino code that I'll also include here. All this does is export the collected data via the serial (USB) port specified.

Note that I use Linux and haven't tried the Python code in a Windows machine. You may need to specify the port differently if that's what you're using.

Also I see that phpbb has messed up the formatting again. The C code should work ok as is but the Python code needs indenting after "while 1:"

Arduino

Code: Select all


/* Arduino prog to 
 *  (1) turn on Model T 'buzz coil' for 5 milliseconds 
 *  (2) measure the current value for a set number of readings
 *  (3) send current value and time of reading via USB serial
 *  
 *  Use with accompanying python script to plot coil rise/decay time
 *  
 *  Makes use of fast ADC read (set presecale to 16, giving read times of ~ 24 us
 *  
 *  Released under the GNU General Public Licence (https://www.gnu.org/licenses/gpl-3.0.html)
 *
 * This alpha version written by Luke P Christchurch, New Zealand
 * 
 * 17th December 2019.
 * 
 */ 
 
// Set global variables  
  
unsigned long time_now = 0;  // use long in case micros count gets big
unsigned int interval = 4000;           // interval at which to turn on (microseconds)
const int outPin = 7;  //output pin to ss relay for coil
const int swPin = 8; //input pin for switch, normally low 

//setup array stuff

const unsigned int numReadings = 150; //max number of values in array, 150 = approx 3ms
unsigned int analogVals[numReadings][2]; // array name
unsigned int x = 0; // initialise array input

//setup for fast ADC read

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  //stuff for fast ADC read
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

//setup for switch reading

#define DFE(signal, state) (state=(state<<1)|signal)==B11110000
byte button1FallingState;

//begin setup for prog proper
  
void setup() 
{
  
  pinMode(swPin, INPUT_PULLUP);// define pin as input for push button
  pinMode(outPin, OUTPUT);// define output pin
  sbi(ADCSRA, ADPS2); //more stuff for fast ADC read
  cbi(ADCSRA, ADPS1);
  cbi(ADCSRA, ADPS0);

  Serial.begin(115200);
}

void loop() 
{
  if (DFE(digitalRead(swPin), button1FallingState)) //detect switch state change to start timing
  {

//  for (int i = 0; i < 2; i++) Serial.println();          //clear some space on the terminal screen
    
    delay (200);
      
    digitalWrite(7, HIGH); //set pin 7 high to power coil for time interval
    time_now = micros();


    x=0;  // reset array
    while(micros() < time_now + interval)
    {
      if (x < numReadings) 
      {
        analogVals[x][0] = analogRead(A0); //read pin 0 volts (which is actually current from CT) and input value to array col 1
        analogVals[x][1] = (micros() - time_now); // time since start of loop (thus sample time), input to array col 2
        x++; //increment array
      }  
            
    }
      digitalWrite(7, LOW); // reset 7 to low and turn off power to coil
     
//begin data send to serial port
  
    delay(50);

    for(int i = 0; i < numReadings; i++)
    {
      Serial.print(analogVals[i][1]);
      Serial.print(" ");
      Serial.println(analogVals[i][0]);
    }
 
  }
}


Python script

Code: Select all


# -*- coding: utf-8 -*-
# Model T Ford/Arduino Coil Tester
#
# Basic python code to read serial data from Arduino and plot
#
# Luke P, Christchurch, New Zealand
# 
#17 Dec 2019
#
# Import modules
import serial
import Gnuplot
# Set serial port parameters
ser = serial.Serial()
ser.port = '/dev/ttyUSB1' #Arduino serial (USB) port
ser.baudrate = 115200
#ser.timeout = 10 #specify timeout when using readline()
ser.open()
# Declare array
avals = []
# gnuplot settings
g = Gnuplot.Gnuplot()
g.title("Model T coil time to fire")
g.xlabel("Time in usec")
g.ylabel("Current in mA")
g('set style data lines')
# capture incoming data and plot
while 1:
    aval = ser.readline().split()
#   print aval
    avals.append(aval)
    g.plot(avals)
    
Last edited by Luke on Thu Dec 19, 2019 1:09 pm, edited 2 times in total.

User avatar

MKossor
Posts: 124
Joined: Sun Jan 06, 2019 7:30 pm
First Name: Mike
Last Name: Kossor
Location: Kenilworth, NJ 07033
MTFCI Number: 22706

Re: A new DIY electronic coil tester.

Post by MKossor » Tue Dec 17, 2019 3:12 pm

Luke, nice work. I would love to join in the technical discussion but am prohibited from doing so by forum rules imposed by the present "Leadership". Thats's because I am a current vendor that sells a commercial Model T product and therefore barred from posting related lengthy descriptions or photos; a Few people consider that "Advertising". So the Forum rules were changed, increadably, to appease them.

Will be submitting a petition with over 50 member signatures in January when the New Leadership takes charge asking the "Vendor discussion Rule" be rescinded. The rule is not in the best interest of the Forum or the Model T hobby. Hopefully, I will be able to join in the discussion soon!
I-Timer + ECCT Adjusted Coils = Best Model T Engine Performance Possible!
www.modeltitimer.com www.modeltecct.com


SurfCityGene
Posts: 263
Joined: Wed Jan 23, 2019 3:00 pm
First Name: Gene
Last Name: Carrothers
Location: Huntington Beach, Ca
MTFCA Number: 22905
MTFCI Number: 23068
Board Member Since: 1999

Re: A new DIY electronic coil tester.

Post by SurfCityGene » Tue Dec 17, 2019 3:59 pm

I can't believe our Forum rules prevent anyone from joining into the discussion about a related project such as this to share experience and knowledge to others working on such a project!

I find that this type of ruling would be against the very reason we have such a forum and place to share experiences and knowledge about our Model T's.

You can read here daily where one person or another posts an advertisement or recommendation to someone to go buy or get a service from somebody in response to a posted topic.

Sorry, for the unrelated post on this interesting subject
1912 Torpedo Roadster

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Wed Dec 18, 2019 4:26 am

Luke, I have now managed to compile and load your original code. I was using Ubuntu Linux and I think there is an issue with the IDE install that I need to sort. Now using a Windozzzzz PC and the original code loads OK but your new code will not compile, it has errors unfortunately. I have most components for the hardware just waiting for 1 to arrive. Thanks again for sharing this. John


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Wed Dec 18, 2019 2:20 pm

Hi John,

By original code I assume you mean the first post (the, er, 'FACT' code :). If so you'll see that I updated it, which may have been between the two different times you tried - so it may be worth trying Ubuntu again. Normally I'd find that somewhat more reliable than M$.

When you say the new code won't compile - are you meaning the C or Python code, and what are the errors exactly?

Update - I just tried copying the C code from the later (serial data out) post directly into the IDE and tried compiling it. Despite it looking exactly like the code that I copied it from it failed around the Serial.print lines. If I deleted and copied just that from the original it compiled fine.

My conclusion is that (without looking deeply into it) phpBB is perhaps adding some chars somewhere along the link :-(

I think that if you were to delete the Serial.print lines and type them in by hand it should work. Please let me know if it does - I might need to find another way to post the code...


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Testing the tester

Post by Luke » Wed Dec 18, 2019 2:40 pm

Yesterday I was able to trial the tester out on some other coils, thanks Chris.

What it confirmed was (1) the tester appears to be working ok (2) my only test coil is pretty sad!

With Chris' coils, set up on his hand-crank machine, the tester gave typical ramp+decay times (t.t.fire) of ~2.9ms, whereas my coil was showing a much shorter time. Additionally (and something I knew already) my coil wouldn't arc across much more than 3/16" whereas the others would do a good 1/2" and probably more. Testing my coil on the hand-crank tester showed it was rubbish too.

Anyway it was all very useful. Other than the fact that it's highlighted a small change I should make in the code (around the initial decay detection - something that was a bit of a hack anyway) I was reasonably pleased with the results. Unfortunately I didn't have the 'scope with me (something I'll rectify next time!), however it seemed that the tester was issuing reliable and consistently reproducible output. While I'd like to confirm the absolute times given with the 'scope there's nothing to suggest I should expect anything other than what the tester was saying.

Thus while there's still some more work to do I'm happy with progress at this stage. With a bit more coding, and perhaps the addition of an LCD screen to make it independent of a PC I think it's well on the way to becoming a useable tool for those without anything better.

That said, I'd welcome input from anyone else who might have further insights, or has a go at building one. Hopefully John will have some success shortly and be able to post some results/info.


Scott_Conger
Posts: 2683
Joined: Sun Jan 06, 2019 11:18 am
First Name: Scott
Last Name: Conger
Location: Clark, WY
Board Member Since: 2005

Re: A new DIY electronic coil tester.

Post by Scott_Conger » Wed Dec 18, 2019 6:36 pm

Mike

I think you produced a pretty good ad on Dec 13

and in nice Bold Font, as well

I've always appreciated, and been a proponent of someone who supplies good product(s) and all of yours seem to enjoy widespread enthusiasm and support, and that's great (Kudos, and another Ad for you). Myself, I'd certainly support a Vendor Discussion Forum to do exactly what Gene mentions above, but will also take this moment to state that I myself am not interested in every supplier jumping into a "lengthy discussion" regarding their product on the General Forum, and the reason is, that Langs, Snyders, Chaffins, and others could monopolize the entire Forum if they so chose to monitor the Forum that closely, and then push the products they carry or produce. For this reason, I am, and remain, one of the folks who appreciate this General Forum remaning "Ad Free" (though no one ever asked me, nor did I lobby for any changes...I'm certainly not devoid of opinion, but this is one that has only just now been voiced). Given that the greatest bandwidth on the entire forum is an Off Topec, 14 page thread of which I cannot fathom, I'd think that it is in your and our best interest to lobby for a "Vendor Discussion" or "Product" page. Ultimately, however, I suspect that the costs of producing the really nice quality magazine that is enjoyed by so many are somewhat offset by advertising $$ of Suppliers, which could reasonably expect to be pared back significantly if free On-Line Media was ruthlessly exploited. If that's the case, then a Vendor Discussion page would probably work against the best interests of the club. Who knows? I certainly don't.

Luke's work is impressive and mostly appreciated by those who's interests lie in programming, I'd guess. For me, it's only interesting to see how much typing goes into the posts. I see that it has an Acronym-Name from the very get-go, something not generally seen on a non-commercial item, so it will be interesting to see where this actually goes.
Scott Conger

Full Flow Float Valves - deliver fuel like Henry intended!

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Wed Dec 18, 2019 9:08 pm

Luke,
I found among my electronics an Ardrino Kit that was given to me with other electronics.
A9625791-D6A4-4283-9922-380DB5642C8D.jpeg
Though I have worked with microcontrollers, I have never worked with Ardrinos. But with your code and the fact I really have no excuse with the hardware in front of me I decided to move forward. I copied and pasted the code and found that I got errors on the following lines:
//begin data send to serial port

delay(50);

for(int i = 0; i < numReadings; i++)
{
Serial.print(analogVals[1]);
Serial.print(" ");
Serial.println(analogVals[0]);
}

I found an issue with copying and pasting. You use [ i ] in your code (without spaces before and after the "i", but this means start italics on the forum). I was able to fix the issue and experiment with the code. For now I am just lighting LEDs as I need the necessary hardware to connect with a Ford coil.
EA7371EA-B579-41D4-BE7D-97999EF7A4F2.jpeg
Also, could you please describe how you are displaying the results from the array. (Perhaps I just need to learn how to use the Ardrino IDE.) How are you using the Python Script?

Thanks,

Matt


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Thu Dec 19, 2019 12:26 am

Matt,

Well done on sorting that out, I think I'll need to figure out a better way to put up the code.

Great you've found a use for that kit! If you're using the first C code (entitled "The Ford Arduino Coil Tester") then if you open a 'serial monitor' window in the Arduino IDE it should receive and display data from the Arduino whenever you press the button. You'll need to make sure the serial monitor is looking at the correct USB port, and has the data rate set to 115200.

BTW I meant to mention that with the later code I posted you just need to take the press switch from pin 8 on one side and ground to the other (no longer need the resistor and 5V).

If you're using the second lot of code then you could run the serial monitor in the IDE again and when you press the button you'll get two columns of data scrolling down the screen. If that works you could then run the Python script and (if you've got the port set correctly) it would plot that data when you press the switch. With a coil and CT etc you should get a plot roughly like the one I posted (but hopefully a longer ramp time), without a coil etc it'll just be horizontal line.

The way it's done at present if you did have the coil connected etc then each press of the switch would effectively superimpose a new plot over the old one - thus showing you the consistency (or otherwise!) of your coil.

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Thu Dec 19, 2019 11:37 am

Luke,
Thanks for your response! Now that I got the monitor open I can see the data.

I know that you mention using the Python Script. I havn't figured that out yet. (I have zero experience with Python- except for the pet snake that my brother got and put in a bucket... it got out and we found it keeping warm in the oven because of the pilot lite. My mom didn't like the idea of pet snakes after that...) I was wondering if you have attempted to using Ardrino's Serial plotter.

We can attach pdf files here on the forum. So you can save/attach your project as a pdf. Then someone can download the pdf and copy and paste into the Ardrino editor. The issue I found is that your comments get cut off and put on the next line because the line length is too long. That is an easier fix than fixing array notation (i.e. [ i ]) that was missing. The pdf issue could be remedied by putting comments on another line to keep each line shorter. Another fix would be use a descriptive index rather than letters like "i". But I think file attachments are preferred as our code could get more lengthy. So in short I think we need to rearrange the comments then we can save/attach a pdf.

Okay now I need to get the MOSFET and Current Transformer and I will be set to be testing.

Matt


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Thu Dec 19, 2019 1:19 pm

That's good, pleased you can see the data now.

A MOSFET would be good, though I expect even an old bipolar such as a 2N3055 or similar would also work fine - over here you can get most of what you need from junk washing machines nowadays!

I think I've dealt with the phpbb formatting issue, as you should see. Just needed to take a moment to have a look at the phpbb forum and see how to do it :geek:

Luckily we don't have snakes here. I have had some experience of them, when I lived in Australia some years ago - not one of the better parts of that particular escapade! Anyway I've not used the serial plotter, the Python script was more for John Housego who's mentioned Python & Raspberry Pi a couple of times, so I thought I'd knock that up for him. It may have an advantage over the serial plotter if it refreshes (which I expect it does - I'm at another office presently so can't check) because my code just writes over the previous plot, thus effectively allowing the direct comparison between each firing I mentioned earlier.

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Thu Dec 19, 2019 2:11 pm

Wow! Luke that is a great improvement on the code displayed!

Do you have the specifications the part number on the current transformer. Maybe you listed it, but I can't seem to find it.

Thanks!

Matt

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Thu Dec 19, 2019 3:39 pm

Hi Matt, the current transformer I used is on Ebay item number 191931608115 description HMCT103C 5A/5MA Precision Micro Current Transformer Sensor Module, if you search that description I'm sure you will find a seller locally (this one is a UK seller). Regards John

User avatar

MKossor
Posts: 124
Joined: Sun Jan 06, 2019 7:30 pm
First Name: Mike
Last Name: Kossor
Location: Kenilworth, NJ 07033
MTFCI Number: 22706

Re: A new DIY electronic coil tester.

Post by MKossor » Sat Dec 21, 2019 4:30 pm


Good progress, superimposing coil firings with each press of the switch. Displaying coil firing current history is an excellent metric to gauge coil firing consistency as you stated. Coil firing consistency ultimately equates to engine ignition performance. Here are two examples of coil firing history. The first coil was professionally adjusted using the HCCT by an very experienced coil rebuilder using the average coil current as an approximation of firing Time. The second coil was adjusted for equal and consistent firing Time by actually measuring coil firing Time using another tool I cannot mention. Its very easy to see which coil fires with superior consistency and explains why 4 coils adjusted using for equal and consistent firing Time result in superior engine performance on the road.

ECCT vs HCCT Firing History1.JPG
I-Timer + ECCT Adjusted Coils = Best Model T Engine Performance Possible!
www.modeltitimer.com www.modeltecct.com

User avatar

VowellArt
Posts: 249
Joined: Sun Jan 06, 2019 8:44 am
First Name: Martynn
Last Name: Vowell
Location: Sylmar, Commiefornia
MTFCA Number: 9908
Board Member Since: 2012
Contact:

Re: A new DIY electronic coil tester.

Post by VowellArt » Sat Dec 21, 2019 6:37 pm

Being a person who hasn't a dog in this pony show, since I don't sell anything I do (yet), I don't see why folks can't publish their products here either. I think it would be a real selling point for the forum to have someone say "I saw it on the MTFCA forum!" Do you know how many real Model T guys aren't on his forum or even know about it? I belong to the San Fernando Valley Chapter of the MTFCA...for those of you who don't know who they are, they are the founding chapter of the MTFCA and not one of them is on this forum, hell they didn't even know you existed until quite recently when I showed them my gallery here because they were interested in seeing some of my drawings. I think knowing you exist is a really good thing for everybody, because as I told them, if they posted a question here (about anything Model T...as long as it wasn't about which oil to use, lol), they could get answers not only for all over the country by fellow Model T folks, but also from all over the world as well...Model T people helping other Model T people with problems and showcasing innovations? I think is the spirit of the Model T Hobby.

There are a few of us who no matter how free something is or cheap to build are more than likely going to send their coils out to be calibrated and adjusted by somebody like Ron Patterson, Brent Mize or Erik Larson because it is more convenient than doing the job/chore themselves (bending those bloody little parts to get the damnedable thing buzzing correctly) is just too much trouble for most of us who in all probability don't know what the hell we're doing anyway...besides coils are a mystery to most of us, so much so, that I just had to draw one just so I could see what was inside the damn thing. Then I got Ron Patterson to write the wiring instructions for the drawing (which he is also did for my generator drawing). I think you need professional instructions with comprehensive and detailed diagrams so as to be as absolutely correct as possible to help folks wire and or repair their cars parts easier, if they so wish to tackle it. I'm not trying to replace any literature out there like the Electrical Book that the MTFCA put out, because I'm only showing how the parts go together, not HOW to put them together...that's something you need a comprehensive manual for (like all the ones the MTFCA puts out or even Mike Bender's videos on the engine are good documentation tool to use too).

So, Luke, let me ask you...if you are truly meaning to distribute your little project to everybody at little to no cost, so they can build their own coil tester, good! Let me offer you my services as a Technical Illustrator for your project! Sounds intriguingly fun to me. Just send me a PM and let me know. ;)
Fun never quits!


Chris Barker
Posts: 63
Joined: Sun Jan 06, 2019 5:08 pm
First Name: Chris
Last Name: Barker
Location: Somerset, Eng;and

Re: A new DIY electronic coil tester.

Post by Chris Barker » Sun Dec 22, 2019 4:47 am

Mike,

a somewhat less contentious question -

Does it really say a 1" spark on your result pictures?
I have always understood that asking a coil to jump more than about 10mm risks an internal arc.

Thanks for your contributions - and of course Luke's. I am following them avidly here in the UK and if -sorry, when - John Housego gets his system working I may have a go.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Thanks for input, and enquiry.

Post by Luke » Sun Dec 22, 2019 5:23 am

Mike, thanks for the collegial input - your line about equal and consistent firing is quite on the button.

Martynn I suspect your offer would be greatly appreciated by some, thank you too. I think that whenever this little project reaches some maturity it would be a good thing to provide some decent instruction (and much better illustrate how to put it together than my rather untidy scribble ever could).

Otherwise I have a wee plea/enquiry - I'm a new guy to this forum, so don't know much about etiquette here, but it does seem a shame to disturb the general thrust of this particular thread with things that appear to be about something quite different and possibly contentious. Certainly I can't help, so I was wondering if these other issues might be better addressed in a separate dedicated thread perhaps?

User avatar

MKossor
Posts: 124
Joined: Sun Jan 06, 2019 7:30 pm
First Name: Mike
Last Name: Kossor
Location: Kenilworth, NJ 07033
MTFCI Number: 22706

Re: A new DIY electronic coil tester.

Post by MKossor » Sun Dec 22, 2019 11:43 am

Chris, good catch. the caption should have read "1" (meaning single) spark Not 1" (1 inch) spark.

Right you are Luke P, will do.
I-Timer + ECCT Adjusted Coils = Best Model T Engine Performance Possible!
www.modeltitimer.com www.modeltecct.com


Chris Barker
Posts: 63
Joined: Sun Jan 06, 2019 5:08 pm
First Name: Chris
Last Name: Barker
Location: Somerset, Eng;and

Re: A new DIY electronic coil tester.

Post by Chris Barker » Sun Dec 22, 2019 12:40 pm

Mike,
I'm trying to understand your 'scope images.

Why do the steeper 20v ramps appear to start later than the slower 5v ramps? Have you adjusted (offset) the x axis for each voltage?
If not, does the time-to-fire variation correlate with current - so higher rpm giving more mag output will advance the timing?

If so, as long as all 4 coils do the same, it will be fine.

I would like to see the TTF variations between several coils carefully set up using an HCCT or equivalent - so the criteria would have been just the absence of double sparks, and the average amps.

To those who suggest we have strayed off topic, I would point out that these are issues which come to the fore if/when we use Luke's tool (or an ECCT).


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Sun Dec 22, 2019 3:12 pm

Chris,

FWIW I was interested to try the Arduino tester out on some other coils (I only have one to trial) and was fortunate in that another local T owner had several that he'd set up on his hand-cranked tester. When we used the Arduino tester it showed all his coils were generally within some tens of microseconds of each other. I don't recall any of them being much over 100usec apart. My coil had a much shorter ramp time than his - not much more than half in fact.

Probably I should have written the times down but I hope to be able to do another test in the future, when I've made some further changes/refinements to the tester and will record the differences then (indeed it will be part of the code).

Incidentally I don't see such technical discussion as straying from the subject at all!

Mike, thank you, much obliged. Also I'm pleased to read you didn't mean a 1" spark, my coil struggles to maintain a 1/4" spark at this point - that was beginning to make me feel really inadequate :mrgreen:

User avatar

George Mills
Posts: 165
Joined: Sun Jan 06, 2019 12:32 pm
First Name: George
Last Name: Mills
Location: Cherry Hill NJ/Anona Largo FL
MTFCA Number: 29497
MTFCI Number: 10032
Board Member Since: 1999

Re: A new DIY electronic coil tester.

Post by George Mills » Sun Dec 22, 2019 5:59 pm

Luke,

Hang in there, don’t worry about being a newbie. We all were at one time. I don’t understand the topic but am glad that more than a few seem to have gained from it. 👍👏👍


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Mon Dec 23, 2019 4:30 am

Thanks George.

I've been a bit distracted by other things as I've got the pan off my T right now :( , but in the process of dealing with that Chris, whose coils we tested last week, has given me a coil to try that double-sparks on his hand crank tester.

It's interesting to look at the plot when I try it in the 'FACT'.
double_spark_coil_23_dec_19.png
Clearly very different from my other (admittedly faulty) coil. This one has a great spark output but the current rise is haphazard, it's not consistent where it fires (there are two superimposed firings on this plot) and it appears to start with a very high current draw for some reason. The latter may be an artifact of the tester however, and as I don't have the 'scope on it at present I'm not getting too excited about that.

Out of interest if I give the coil a bit more points gap this is what I get now (also two separate firings superimposed):
double_spark_coil_less_tension_23_dec_19.png
Cleaning the points improve it a little but it's still quite erratic so clearly there's more that needs to be done. What is good is that the results I get with this modest electronic tester seem not inconsistent with those from the hand-cranked device - and if we were just using an LCD it would most likely report a quite variable time to fire (and thus a faulty coil).


jab35
Posts: 233
Joined: Sun Jan 06, 2019 12:28 pm
First Name: James
Last Name: Bartsch
Location: Dryden, NY 13053
MTFCA Number: 30615

Re: A new DIY electronic coil tester.

Post by jab35 » Mon Dec 23, 2019 10:46 am

Luke: Thanks for sharing all this. I do have a couple questions.

Is the coil really firing at a current of only 15-20 mA or is there a scale error on the graph?

On the double spark coil, have you checked the cushion spring function? If sticking, it's sometimes possible to free it up to improve coil performance.

Best, jb

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Mon Dec 23, 2019 12:07 pm

Luke,
Thanks for posting your results. I think there are two reasons that a less than smooth current curve comes up: cushion spring not working, contacts dirty/pitted. But I think your goal at the moment is not to fix the problem, but rather compare one coil to another.

I have done more testing with my version of the FACT and ran in trouble. I used a N-Channel MOSFET and connected it first to a LED to verify it was working. When I connected it with the coil it fried output 7 of the Arduino. Not a big deal I have 11 more outputs to burn out:) But it caused me to look at the picture of your setup above. I see that my Arduino is on a different board (no big deal) and you seem to have a different board (red one) switching the coil. I think we may need to consider optoisolators (also known as optical coupler) if we use a MOSFET. But I defiantly need a flyback diode. Or does my MOSFET have that protection built in? The biggest pain these days is that Radio Shack and all the private electronic stores locally shut down. I hate to go online to buy a diode! For now I will try just using a relay. But as I mentioned earlier the electromagnetic noise is a concern.

Please post more info on the red board you have in your setup.

Thanks,

Matt


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Mon Dec 23, 2019 2:28 pm

James - no it's not 15-20mA, sorry I should have made it clear that I've not calibrated the current draw (I did say so for the previous plot but that was a few posts ago!).

As Matt has noted the point here wasn't necessarily to repair the coil so much as see if this tester would identify a faulty coil similarly to the hand-crank tester. That said once I've done some more testing it will be interesting to see how it looks if I follow the process to adjust it correctly, so thanks for your advice.

Matt, that's a bummer. I'd just used the motor-control H-bridge board that you see in the photo. It's something that I'd got when I was making a 'segway' a few years ago and this board was a prototype for a smaller unit. It uses an L298N switching IC which, strictly speaking, isn't capable of the current draw from the coil but as it's for an extremely short time I thought it might handle it (and it has). FWIW my recollection is that the board was $2 or so from China.

I was going to use a 2N3055 bipolar transistor I had to switch the coil but as the board had nice screw terminals I used in in preference (marginally less fiddly). However I may well have driven that with another smaller transistor and/or diode, much as you mention. A FET and possibly opto would be fine too and probably recommended. The ubiquitous washing machine parts bin I mentioned some posts ago has several of them in it - perhaps you've got something similar over there?

Otherwise if I was purchasing new parts for this I'd probably just go for a solid-state relay. Having said that I should test one first perhaps! I've got a 50A module here somewhere so might fish that out and give it a go. If I do so I'll post up the results, right now I need to craw under my T again...

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Tue Dec 24, 2019 3:16 am

I received the current transformers in the mail 5 (qty) for $10.
FB8A5DE8-0FF5-4CB1-8E8D-1A541406745E.jpeg
Here is my setup:
6FE4C1BE-2A06-46DC-A54D-EE79CEE43CD5.jpeg
I decided to connect it with my MCCT (Motor Control Coil Tester:
DAEDBC3F-9104-4A12-8691-D927F902CD48.jpeg
I used the MCCT because I had issues getting the Arduino switching the coil. This could be used with a running car... For more info on the MCCT see: https://www.mtfca.com/phpBB3/viewtopic.php?t=3153

I used the Arduino Serial Plotter to display the current and dwell time:
Capture.JPG
In this case the dwell is fairly consistent. I am not so concerned about the actual current and time, but rather the relative values of current and dwell from each coil.

I need to clean up the code. In simplicity the code detects a rise in the current slightly above zero. The dwell time is calculated by counting each sample until the max current is determined. The plot runs for about 50 or so more samples then stops. The display restarts when the next sample is detected.

Matt


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Tue Dec 24, 2019 5:08 am

Great stuff Matt, gosh you get parts much more quickly than we do here!

Interesting you should comment on using your system on a running car. I'd had some idea of creating an engine ignition analyser for the T (prob using an Arduino Mega, or maybe Leonardo); it would work similarly to what you're doing there, but include several other tests. Perhaps that's something to explore in the future.

It's good to see your plot. It's not too different from what I get, including the odd section of increased/different ringing after the initial current collapse. FYI I think you'll find that's the point at which it actually fires - not peak current.

To that end I think it's probably important to include that time as well as the peak time in your code as there could be several things that might affect the decay curve? I'm not sure if you've got a big range of coils to test (and/or if you have a mix of faulty/good coils) but I'd be interested to know if you find any that differ in the decay.

Since you're running it with the MCCT It'd be very useful to see what correlation you find between the two - have you any feel on that at present?

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Wed Dec 25, 2019 10:35 pm

Luke,
It took me some time to figure out what we have here. The current transformer is intended to measure a changing current (i.e. AC). The reality is that as we switch on the power to a coil the inductor resists the current flow and slowly allows full current to flow. When the current is constant a current transformer will not measure anything. So if I understand things correctly the current curve shown is just current initially flowing into the coil as it stabilizes we get the first curve (hump) in blue. This is what I called Initial_Dwell and Decay_Time.
raw plot.JPG
But as you mentioned the follow-up spike is actually when the spark occurs. I believe that this spike is caused by the large electromagnetic energy radiating back through the coil (even though the contacts on the coil are open to the primary).

In reality I think the only thing we really care about the time from charging the coil to the the spike. So I went ahead and plotted this.
avearge plot.JPG
I then compared a few coils:
Coil MCCT (degrees) FACT (dwell)
A 38 64
B 41 71
C 42 74
D 42 74
E 45 90 (This one had a double spark)

As you can see from the results the scale is different, but relative time to fire is correlated.

I believe two improvements I could make is actually switch the coil (rather than just have my MCCT turn on and off the coil) and put a current transformer on the the high voltage wire. I am a little concerned that a current transformer would spike at much too high of voltage on the high voltage wire and burn out the microchip.

Matt

User avatar

AdminJeff
Posts: 724
Joined: Wed Jan 16, 2019 6:32 pm
First Name: Jeff
Last Name: Stevenson
Location: CA
MTFCA Number: 50006
Board Member Since: 2017

Re: A new DIY electronic coil tester.

Post by AdminJeff » Thu Dec 26, 2019 8:29 am

Other than the usual rants from the usual suspects (which have NO place in this discussion and have been and will continue to be removed from all forums), I am absolutely loving this thread.

My IOT (internet of things) dev platform of choice is the ESP8266, specifically the NodeMCU using LUA which is about as close to BASIC as it gets and super easy to pick up, but way more powerful. I also have several Rasberry PIs that I use for home automation development (Home Assistant) and have an Arduino setup as well, but I'm not a fan of programming in C, so I don't spend much time there. You can only imagine what happens when I walk into my shop and say "Alexa, turn shop on." Lots of buzzing, clicking and whirring and some good old Rock and Roll. Turned up Loud of course! All auto-magically initiated. "Turning Shop off" takes 3 seconds now instead of 10 minutes walking around flipping switches and multiple trips back to turn off the stuff I forgot about from the last trip out there.

Luke, I might take your code and "port" it to LUA on that chip for fun, especially while it's raining and not T friendly weather. I've got a little 6 line display working on that as well for viewing output from the various testers and projects I build.

A while back I built an automated blinkers module for the T (senses when to cancel them after making a turn) that worked great on the bench, not so good in the car with all the RFI from the T. Just for fun, my oscilloscope went wild when I hooked my magnometer to it and walked around the T while it was running just to see what the radio interference looked like. Holy cow. It's worse than standing next to a PGE Power station.

I'm wondering if a relay trigger might be a better approximation of the final firing mechanism in your circuit. Transistors used as switches are smooooth, T timers are noooisy, and a relay, by design, is noisy as well, hence that thought. Ultimately it may not matter since this is just a tester after all. On second thoughts, this is an inductive load... a relay wouldn't last long!

AdminJeff
Assistant to the Grand Poobah MTFCA Site Admin
1921 Touring


Chris Barker
Posts: 63
Joined: Sun Jan 06, 2019 5:08 pm
First Name: Chris
Last Name: Barker
Location: Somerset, Eng;and

Re: A new DIY electronic coil tester.

Post by Chris Barker » Thu Dec 26, 2019 11:29 am

Great Post Mr Jeff - or may I call you Admin?

We could have a poll here to find out how many other people have carefully created solid state blinker modules that worked perfectly......until they started the engine!

Merry Christmas from The Olde Country

User avatar

AdminJeff
Posts: 724
Joined: Wed Jan 16, 2019 6:32 pm
First Name: Jeff
Last Name: Stevenson
Location: CA
MTFCA Number: 50006
Board Member Since: 2017

Re: A new DIY electronic coil tester.

Post by AdminJeff » Thu Dec 26, 2019 3:28 pm

Chris Barker wrote:
Thu Dec 26, 2019 11:29 am
Great Post Mr Jeff - or may I call you Admin?
We could have a poll here to find out how many other people have carefully created solid state blinker modules that worked perfectly......until they started the engine!
Merry Christmas from The Olde Country
Too funny, and so true! My USB voltage step-up charger does work though!

I'm using a motorcycle 6V blinker module and it works great AND I can hear it when I leave it on. :shock:

Jeff
Assistant to the Grand Poobah MTFCA Site Admin
1921 Touring


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Thu Dec 26, 2019 4:12 pm

Matt,

Great to see you're experimenting with things there. I was very interested to see the correlation between the mechanical tester and your electronic version - it's pleasing to see that that they roughly track each other, and that the double-spark coil showed up as the odd one out in both testers.

The thing with the CT is that although you get a related output voltage it's primarily a current device. As the Model T spark system is effectively an inductor and mechanical oscillator a CT placed in a feed wire should reliably track the current change draw as the system operates. While there may appear to be a plateau of sorts there's still likely to be a variation - remember we're using a ADC which is limited in resolution so we wouldn't necessarily see it (and it doesn't really matter as we're not interesting in such minute changes anyway).

Harking back to my days in the classroom there's a whole lot more one could talk about with inductances, magnetic flux, leading voltage lagging current etc but in this case all we really need to know, IMV, is that the collapsing magnetic field in the primary (when the points open) induces a corresponding output from the secondary that leads to the spark. Thus it's the time from applying the power to the system and either the no-current draw or the full output that matters to us for the T timing.

Between the two, to my mind it's easier and safer (for the Arduino amongst other things!) to measure the input current. The transformer specs are fixed, but the points settings/condition are variable and as they're in the primary cct we should get fairly clear results, just as if we measured the output of the transformer (coil). The only thing we wouldn't see perhaps is if there was a shorted turn in the secondary of the transformer - although that should be evident in the spark gap.

Bear in mind also that if you wanted to measure the output there's very, very, little current so a current transformer may not be the best thing to use.

Anyway that's my take on it; it's important for me to say that much of this comes from my theory classes many many years ago (and some useful discussion with Robert) and that as it's not really my day job these days I would be happy for someone with more experience to chip in and let us know if I'm wildly wrong. Perhaps Mike may have a view?

I'm not sure if any of that was useful, nevertheless I think you've got something there that's giving some good results and probably doesn't need a lot more work in the physical circuit side of things (other than being able to fire the system directly from the Arduino).

Just one more aside. To my mind when the time from when the points open to the no-draw point is also useful to know. This is what I term 'initial decay' to 'complete decay'. The reason for this, as I see it, is that if the points were faulty in some way (a whisker in them, pitted contacts etc) then that could affect the resultant arc/plasma and thus the time or 'shape' of the latter decay. Now this is just my surmise, I could be completely off-base here, but until one's tested hundreds of coils and proved it unnecessary I think it may be useful to record this - what do you think?

Jeff,

I sympathise with the C thing, it's not really my choice but if we use the Arduino I guess we're stuck with it, however the ESP8266 sounds interesting and it would be cool to know how you get on if you port the code over. As I'm sure you'll see it's pretty simple and although I've no experience with your platform as long as it's fast enough I expect it should work fine. It will be good to hear how you go.

I'm a little amused because you touched on the weather - of course it's been generally fine here these past few weeks so I've been wanting to be out in my T, rather than messing around with electronics inside, but as this appears to have generated some interest it's been hard to resist ... however I need to go out shortly and do some real stuff like measure the cam end float and decide what to do about that!

A couple more things before I do; you could use an old-school relay but I don't think you'd gain anything and you'd get into a whole lot of messy stuff around bouncy contacts etc. At the end of the day in this instance we just want to isolate and tune each coil timing independent of what switches them in the vehicle so a consistent solid-state switch is best I think. Setting the coils removes one variable from the ignition system, the vehicle timer is another whole can of worms but just another variable to consider down the track (and something Robert and I have discussed - more on that later when the time is right ;-)

Chris (and Jeff). I'm very much reminded that back in the day when these things were designed radio communication still used the spark-gap transmitter. What we have here is really just a small version of that; indeed just a few weeks ago, using an AM transistor radio and a short aerial attached to the live end of the T coil, I demo'd how they could be used as a transmitter to a young audience - they were amazed.

Although the wide-band nature of the signal was lost on them it won't necessarily be lost on whatever you hook up to the T, but with a little shielding and/or decoupling I'd like to think it shouldn't be completely impossible to get yer indicators working! Mind you as I've yet to complete my rev counter/speedo/temp gauge perhaps I should be a little more circumspect but if I can successfully manage that I'll consider some indicators too :geek: :mrgreen:

User avatar

AdminJeff
Posts: 724
Joined: Wed Jan 16, 2019 6:32 pm
First Name: Jeff
Last Name: Stevenson
Location: CA
MTFCA Number: 50006
Board Member Since: 2017

Re: A new DIY electronic coil tester.

Post by AdminJeff » Thu Dec 26, 2019 4:57 pm

Yeah battling RFI interface is the bane of my existence - I used to be the go to guy in high school for all the car stereos that invariably had whining engine noises, especially after I installed massive amps that took up most of their trunks or back seats. I knew all the tricks with chokes and caps. Good thing cause I majored in EE! I did spend more time partying at Chico State than studying and it showed in my GPA. Whatever!

Jeff
Assistant to the Grand Poobah MTFCA Site Admin
1921 Touring

User avatar

MKossor
Posts: 124
Joined: Sun Jan 06, 2019 7:30 pm
First Name: Mike
Last Name: Kossor
Location: Kenilworth, NJ 07033
MTFCI Number: 22706

Re: A new DIY electronic coil tester.

Post by MKossor » Thu Dec 26, 2019 11:55 pm

Very interesting, some might even say eye opening.

Matt, Luke is spot on; Stick to monitoring the primary coil current. It provides all the information you need without risk or exposure to dangerous High Voltage.
I-Timer + ECCT Adjusted Coils = Best Model T Engine Performance Possible!
www.modeltitimer.com www.modeltecct.com

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Fri Dec 27, 2019 9:54 am

Hi Luke,

Have had some success, in the serial screen max current displayed but start of decay, total to fire and decay time all read zero. I am sure its something silly and have spent some time trying to work out what! Any ideas?
Attachments
IMG_20191227_140656.jpg
fact1.png


Chris Barker
Posts: 63
Joined: Sun Jan 06, 2019 5:08 pm
First Name: Chris
Last Name: Barker
Location: Somerset, Eng;and

Re: A new DIY electronic coil tester.

Post by Chris Barker » Fri Dec 27, 2019 10:35 am

Following all this - and seeing that nothing is ever quite as simple as we hope - should make us appreciate the effort and achievement of Mike Kossor with his thing that we can't mention.

(I have no connection with MK!)



Mike,
I'll p.m. my bank details :)

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Fri Dec 27, 2019 4:40 pm

Thanks everyone for all the input!

Following the theme. The last time I was in a basic electronics course was Fall 2019! The final was the same week Luke made his first post on this thread!

I never worked with current transformers, so I decided to look at things a bit. I figured that I should look at the burden resistor on the current transformer. I was using 330 ohm. I only had handy the 330 ohm supplied with the kit, so I did multiples of this value of the burden resistor:
165 ohms
Burden_1-2.JPG
330 ohms
Burden_1.JPG
660 ohms
Burden_2.JPG
990 ohms
Burden_3.JPG
1320 ohms
Burden_4.JPG
I also tried 1650 ohms, but that saturated.

Clearly the burden resistor is filtering out the high frequency components of the measurement. I believe doubling the value that I had to 660 ohms will give better results. The main reason I am making a change is because the spike (i.e. the spark firing). If we go too high with the resistance it allows too much noise, so I am hoping that 660 ohms will be a sweet spot.

Stay tuned for an update.

Matt

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Fri Dec 27, 2019 7:02 pm

John Housego wrote:
Fri Dec 27, 2019 9:54 am
Hi Luke,

Have had some success, in the serial screen max current displayed but start of decay, total to fire and decay time all read zero. I am sure its something silly and have spent some time trying to work out what! Any ideas?
John,
Have you looked at the raw data and verified the test for each calculation? Perhaps your system will need the test parameters tweaked.

Matt


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Sat Dec 28, 2019 4:57 am

John,

Matt's quite right - it'd be good to see the raw data in order to assist in fault-finding.

Firstly we need to see that it has measured something reasonable at each data point, and secondly we need to see what the actual max value is. The reason for the latter particularly is that I've used a fairly clunky methodology for determining initial decay time (note to self - need to fix this) and I guess that, depending on what you're getting in terms of read values elsewhere, it may need some adjustment.

Matt,

That's interesting re the burden resistor.

I think I saw something not dissimilar at one stage but as I've been concentrating on (1) Getting my T running again and (2) the code, I didn't get back to it unfortunately. It will be interesting to see what you come up with.

FWIW I did have a half-hearted attempt at a different means of measuring current a few days ago but hadn't pursued it due to (1) & (2). It could be worthwhile looking at that further, if for no reason than checking on the CT results.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Arduino code - updated 28th Dec

Post by Luke » Sat Dec 28, 2019 5:20 am

Below is an updated version of the main code for the standalone tester (ie. not the simplified code that just outputs the analog values via the serial port in order to plot).

You'll see some reasonable changes in this version. From a practical perspective it's designed to give you the ability to easily select a single-fire test, or a multi-fire test that simulates the coil running in a vehicle at a certain RPM.

Using the default values a short press of the switch will give you a single-fire test each time, much as before. A long press of the switch however will fire the coil 10 times at an effective engine speed of 800rpm and output the results from each firing once the test is complete. The number of firings and speed are easily adjustable in the code.

The raison d'etre for the multi-fire test is that one should be able to see if the coil is very consistent (or not) across the series of firings. At the moment it just outputs the results [of each firing] for you to compare and determine this manually.

Once this new code has had some testing and any bugs sorted out we can update it further and have the Arduino do some stats on the results to determine if the coil is acceptable or not (or at least make it easier to quickly determine how good the coil is without having to manually compare hundreds of readings).

I've liberally sprinkled comments around, and left some debugging stuff in there so the code's probably more than usually messy, but it may make it easier to see what's happening, and to ultimately fix my mistakes :?

Please let me know how you get on...

Code: Select all


/* The Ford Arduino Coil Tester ('FACT'), a prog to test Model T 'buzz coils'
 *  
 * Released under the GNU General Public Licence (https://www.gnu.org/licenses/gpl-3.0.html)
 *
 * -----------------------------------------------------------------------------
 *
 * Version 0.7 written by Luke P and Robert R, Christchurch, New Zealand, 17th December 2019.
 * 
 *  (1) turn on Model T coil for [interval] milliseconds (typically 4-5 msec)
 *  (2) measure the current max value 
 *  (3) measure time from 0 to max val (rise/ramp time)
 *  (4) measure time from max val to min val (decay time) 
 *  (5) calc and present results via USB serial
 *  
 * Makes use of fast ADC read (set presecale to 16, giving read times of ~ 24 us)
 * Leading on from initial proof of concept to usable code
 * 
 * -----------------------------------------------------------------------------
 * 
 * Version 0.8 (Luke P), 28th Dec 2019
 * 
 * Collect data much as for 0.7, tidy code, sep into functions for: 
 *   (a) Multi-firing of coil as if running in vehicle at specific RPM
 *       This in order to check consistency between firings and present results
 *   (b) Single fire as before (and present results)
 *   
 * Utilise switch press longevity for multi-fire or single-fire tests
 * 
 */ 
 
// Set global variables etc
  
 unsigned long time_now = 0;  // use long in case micros count gets big
 unsigned int interval = 4000;           // interval at which to turn on (microseconds)
 const int outPin = 7;  //output pin to ss relay for coil
 const byte swPin = 8; //input pin for switch, normally high 
 int testnum = 0;

//set variables for collect_data function array 

 const unsigned int numReadings = 150; //max number of values in array, 150 = approx 3ms
 const unsigned int numTests = 10; //number of test cycles in multi test
 unsigned int analogVals[numReadings][2]; // array name & columns
 unsigned int x = 0; // initialise array input

//set variables for multi_test function array 

 unsigned int resultVals[numTests][2]; // array name
 unsigned int y = 0; // initialise array input

//setup for fast ADC read

 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

//setup for switch reading
 
// const unsigned long short_in = 60;
// const unsigned long  long_in = 600;
 unsigned long swTimer=0;
 boolean swPrevState = HIGH;
 boolean swPresentState;

//begin setup for prog proper
  
void setup() 
   {
    pinMode(swPin, INPUT_PULLUP); // set the switch pin as input and apply resistor to +5
    pinMode(outPin, OUTPUT);// define output pin
    sbi(ADCSRA, ADPS2); //more stuff for fast ADC read
    cbi(ADCSRA, ADPS1);
    cbi(ADCSRA, ADPS0);
    Serial.begin(115200); // open the serial port 
   }

// --- Function to switch coil on for [interval], collect current values over time, analyse and output test number, max current, time to decay ---//

void collect_data(int *maxv, int *ttf, int *test) //function to toggle coil on, read and put resultant data into array, calculate various values and return as pointers to call
   // see https://stackoverflow.com/questions/2620146/how-do-i-return-multiple-values-from-a-function-in-c for returning multiple values from function (I'm using pointers)
   {
    testnum = (testnum + 1);
    analogRead(A0); // perform a read to clear register
    digitalWrite(7, HIGH); //set pin 7 high to power coil for time interval
    time_now = micros();
    x=0;  // reset array
    while(micros() < time_now + interval)
       {
        if (x < numReadings) 
          {
           analogVals[x][0] = analogRead(A0); //read pin 0 volts (which is actually current from CT) and input value to array col 1
           analogVals[x][1] = (micros() - time_now); // time since start of loop (thus sample time), input to array col 2
           x++; //increment array
          }  
            
        }
    digitalWrite(7, LOW); // reset 7 to low and turn off power to coil
//begin data analysis
    int maxval = 0; // use float to get decimal places but int uses less mem
    long sum = 0;
    int val = 0;
    int prev_val = 0;
    int index = 0;
    int initialdecaytime = 0;
    int completedecaytime = 0;
    int maxI = 0;
   
//    delay(10);

    for(int i = 0; i < numReadings; i++)
      { 
       prev_val = val;
       val = analogVals[i][0];
       sum += val;
        
//     if ((val > maxval) && (initialdecaytime == 0)) //detect current increasing and write to 'maxval'
       if (val > maxval) //detect current increasing and write to 'maxval'
         {
          maxval = val; 
         }
   
       if ((val > 5) && (val < maxval) && (initialdecaytime == 0)) //detect initial time of current decay and write to 'initialdecaytime'
//      if ((prev_val = maxval) && (val < prev_val) && (completedecaytime == 0)) //detect initial time of current decay and write to 'initialdecaytime'
         {
          initialdecaytime = analogVals[i][1];
         }   
   
       if ((initialdecaytime != 0) && (completedecaytime == 0) && (val == 0))  //get total time from initialise to complete decay to zero
         {
          completedecaytime = analogVals[i][1];
          maxI = i;
         }
/* Debug stuff       
      Serial.print(analogVals[i][0]);
      Serial.print(" -- ");
      Serial.print(analogVals[i][1]);
      Serial.print(" .. ");
      if (i != 0) Serial.print(analogVals[i][1]-analogVals[i-1][1]);
      Serial.println();
*/
      }
/* More debug
    Serial.print ("Maximum current = ");
    Serial.print (long(maxval) * 120.5);
    Serial.println ("mA");   
    Serial.print ("Decay time = ");
    Serial.print (completedecaytime);
    Serial.println ("usec");   
    Serial.println();
*/
    *ttf = completedecaytime;
    *maxv = maxval;
    *test = testnum;
   }
   
//--- Function to do a single fire test on a coil ---//

void single_test()
   {
    int maxv, ttf, test; // declare variables to use
    collect_data(&maxv, &ttf, &test);  // get data from collect_data function
    // write results to serial port
    Serial.print ("*** Test number ");
    Serial.print (test);
    Serial.println (" ***");
    Serial.print ("Total cycle time (to fire) = ");
    Serial.print (float(ttf)/1000.00); // convert to ms
    Serial.println ("msec");
    Serial.print ("Maximum current = ");
    Serial.print (long(maxv) * 120.5);
    Serial.println ("mA"); 
    Serial.println();
   }


//--- Function to do a multi-fire test on a coil as if running in vehicle ---//

void multi_test()  
   {
    // first set desired 'rpm' for multitest - facsimile of single coil running at this speed
    int rpm = 800; 
    
    // do some calcs on rpm as needed for delay (four-stroke, so single cyl ign fires every second cycle therefore div 2)
    int rpmdelay = (60000 / rpm)/2; 
    
    // begin proper
    
    for(int i = 0; i < numTests; i++)  // number of test firings
      {
       int maxv, ttf, test; // declare variables to use
       collect_data(&maxv, &ttf, &test);  // get data from collect_data function
       resultVals[y][0] = (ttf); //1st col of result array gets ttf
       resultVals[y][1] = (maxv); // 2nd col of result array gets max current
       y++; //increment array           
       
/* use for debugging output from collect_data function
 *

    Serial.print ("*** Test number ");
    Serial.print (test);
    Serial.println (" ***");
    Serial.print ("2Maximum current = ");
    Serial.print (long(maxv) * 120.5);
    Serial.println ("mA");   
    Serial.print ("2Decay time = ");
    Serial.print (ttf);
    Serial.println ("usec");   
    Serial.println();
 *
 */    
       delay(rpmdelay - (interval/1000)); // sets 'rpm' delay between each test firing, attempts to roughly account for time in data_collect process ('interval')
      }
      
   testnum = 0;
   for(int i = 0; i < numTests; i++) // get results from each test and print to serial
      { 
       testnum = (testnum + 1);
       Serial.print ("*** Test number ");
       Serial.print (testnum);
       Serial.println (" ***");
       Serial.print ("Total cycle time (to fire) = ");
       Serial.print (float((resultVals[i][0])/1000.00)); // convert to ms
       Serial.println ("msec");
       Serial.print ("Maximum current = ");
       Serial.print (long(resultVals[i][1]) * 120.5);
       Serial.println ("mA"); 
      }
   }


//--- Main loop, detect short press of switch to call single fire, long press to call multi-fire ---//

void loop() 
   {
    swPresentState = digitalRead(swPin); // what's the switch doing
    if (swPresentState != swPrevState) // if not same as prev then...
      {
       delay(20); //debounce delay
       swPresentState = digitalRead(swPin); // check again after debounce delay to be sure
       if (swPresentState == LOW) // if switch is still on then it's real
          {
           swTimer = millis(); // set timer from on
          }
       if (swPresentState == HIGH) // sw not on now
         {
          unsigned long currentMillis = millis();
          if ((currentMillis - swTimer >= 60) && !(currentMillis - swTimer >= 600)) // sw short press
            {        
             Serial.println ("Single");
             single_test();
            }
          if ((currentMillis - swTimer >= 600)) // sw long press
            {
          // the long press was detected
             Serial.println ("Multi");
             multi_test();
            }
         }
        swPrevState = swPresentState; // has state changed?
      } 

   }   


User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Sat Dec 28, 2019 1:29 pm

Luke,
Here is my code. The set-up is basically the same as yours. Here are the differences:
  • Coil is not triggered from micro controller, I am using the MCCT, but a HCCT or car could be used.
  • The code triggers from current when coil is switched on.
  • Option of two display modes by grounding either pin 12 or pin 13.
  • The main difference is that this is made to display using the Arduino serial plotter.
Here is the code, it is not clean. Just a work in progress.

Code: Select all

/* The Ford Arduino Coil Tester, a prog to: 
 *
 *  
 *  (1) measure time from 0 to max val (Initial_Dwell)
 *  (2) measure time from 0 to max val then to back to min (Decay_Time)
 *  (3) measure time from 0 to spike (Dwell_to_Spike) 
 *  (4) calc and present results via USB serial
 *  (5a) If Pin 13 is selected (not GND)- send serial data showing all of above i
 *  (5b) If Pin 12 is selected (not GND)- send serial data showing only Dwell_to_Spike and average, reset average every 100 point
 *  
 *  Makes use of fast ADC read (set presecale to 16, giving read times of ~ 24 us
 *  
 *  
 * Released under the GNU General Public Licence (https://www.gnu.org/licenses/gpl-3.0.html)
 *
 * Version 0.7 written by Luke P and Robert R, Christchurch, New Zealand 17th December 2019.
 * Version 0.7-3 by MG 28th December 2019
 * 
 */ 
 
// Set global variables  
  
unsigned long time_now = 0;  // use long in case micros count gets big
unsigned int interval = 4000;           // interval at which to turn on (microseconds)
//Use for selection of output
const int Pin_12 = 12; //input pin 
const int Pin_13 = 13; //input pin 
//const int outPin = 6;  //output pin to ss relay for coil
const int swPin = 8; //input pin for switch, normally low 
int testnum = 0;

//setup array stuff
const unsigned int numReadings = 150; //max number of values in array, 150 = approx 3ms

unsigned int analogVals[numReadings][2]; // array name
unsigned int x = 0; // initialise array input

int sum = 0;
int count = 0;
int ave = 0;

//setup for fast ADC read

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  //stuff for fast ADC read
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

//setup for switch reading

#define DFE(signal, state) (state=(state<<1)|signal)==B11110000

// Falling state variables for each button
byte button1FallingState;

//begin setup for prog proper
  
void setup() 
{
  pinMode(Pin_12, INPUT_PULLUP);// define pin as input for push button
  pinMode(Pin_13, INPUT_PULLUP);// define pin as input for push button  
  pinMode(swPin, INPUT_PULLUP);// define pin as input for push button
  //pinMode(outPin, OUTPUT);// define output pin
  sbi(ADCSRA, ADPS2); //more stuff for fast ADC read
  cbi(ADCSRA, ADPS1);
  cbi(ADCSRA, ADPS0);
  
  Serial.begin(115200);
}

void loop() 
{
  //if (DFE(digitalRead(swPin), button1FallingState)) //detect switch state change to start timing
  if (1) //run without switch
 
  {
    //for (int i = 0; i < 2; i++) Serial.println();          //clear some space on the terminal screen
    testnum = (testnum + 1);
    //delay (50);
      
    //digitalWrite(outPin, HIGH); //set pin 7 high to power coil for time interval
    x=0;  // reset array
    
    //Trigger when current raises
    while(analogRead(A0)<5); //wait for analog input
    time_now = micros();
    
    while(micros() < time_now + interval)
    {
      if (x < numReadings) 
      {
        analogVals[x][0] = analogRead(A0); //read pin 0 volts (which is actually current from CT) and input value to array col 1
        analogVals[x][1] = 50;
        //Not using second column
        //analogVals[x][1] = analogRead(A1); //highvoltage spike
        //analogVals[x][1] = (micros() - time_now); // time since start of loop (thus sample time), input to array col 2
        x++; //increment array
      }        
    }
    //digitalWrite(outPin, LOW); // reset 7 to low and turn off power to coil
     
//begin data analysis
// set variables
    int Initial_Dwell = 0;
    int Decay_Time = 0;
    int Dwell_to_Spike = 0;
    int maxval = 0;
    int decayval = 0;
    int maxval_2 = 0;
    int val=0;
    int prev_val = 0;
    //delay(200);

    //add print statements for serial ploting
    if (digitalRead(Pin_13)) //connect Pin_13 to GND to ignore
    {
      Serial.print("Current "); 
      Serial.print(" Initial_Dwell ");
      Serial.print(" Decay_Time ");
      Serial.print(" Dwell_to_Spike ");
      Serial.println();
    }
    if (digitalRead(Pin_12)) //connect Pin_12 to GND to ignore
    {
      Serial.print("Dwell_to_Spike "); 
      Serial.print(" Ave_Dwell_to_Spike ");
      Serial.println();
    }

    for(int i = 0; i < numReadings; i++)
    { 
      prev_val = val;
      val = analogVals[i][0];
      //sum += val;
        
      if (val > maxval) //detect current increasing and write to 'maxval'
      {
        maxval=val;
        Initial_Dwell = i; 
        //maxI = i;
      }
      if (maxval>50 && val<maxval && i<70 && val>5) //detect current increasing and write to 'maxval'
      {
        decayval=val;
        Decay_Time = i;
      }
      if (val>0 && i>70 && Dwell_to_Spike<1) //detect current increasing and write to 'maxval'
      {
        Dwell_to_Spike = i;
        //maxval_2=val;
      }
      if (digitalRead(Pin_13))
      {
        Serial.print(analogVals[i][0]);
        Serial.print(" ");
        Serial.print(Initial_Dwell);
        Serial.print(" ");
        Serial.print(Decay_Time);
        Serial.print(" ");
        Serial.print(Dwell_to_Spike);
        Serial.println();
      }
    }
    if (digitalRead(Pin_12)) //simple average function of Dwell time
    {
      if(Dwell_to_Spike>0)
      {
        sum = sum + Dwell_to_Spike;
        count++;
        ave = sum/count;
        Serial.print(Dwell_to_Spike);
        Serial.print(" ");
        Serial.print(ave);
        Serial.println();
        if (count > 100)
        {
          sum = 0;
          count=0;
        }
      }
    }  
  }
Here are the plots showing raw data and calculations:
Dwell_Plots.JPG
Dwell_Plots.JPG (43.89 KiB) Viewed 7110 times
Here is the average dwell plot:
avearge plot.JPG


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Sat Dec 28, 2019 5:21 pm

Matt,

Responding to your earlier post re the CT. I discussed this with Robert last night and he wondered if the diode I'd put in the cct (to avoid reversing biasing the analog input pin of the Arduino) could have some effect.

Today I repeated some of my earlier experiments, but this time with the tester involved. I include an image from my 'scope below for one of the tests. I used the two coils I have (thanks Chris!) and in both cases the 'time to fire' reported by the tester exactly matched that displayed by the 'scope (1.6 and 2.15msec respectively - as roughly expected since the two coils are quite different). The scope was connected directly to the current transformer before the diode.

FWIW my burden resistor is ~300ohms, the vagueness of the value is due to having three resistors in parallel as part of previous testing and not being able to see the colours well...

Although this is just a brief test, with no changing of any variables, I feel the result is reasonable and tends to suggest the diode doesn't affect output greatly. I could replace it with a 10k resistor as I understand the Arduino inputs are reverse protected already, and the current flowing through a 10k resistor in the reverse direction would be minute - also the inputs are meant to be driven at 10k or less impedance - but I'm not sure it'd alter anything much.
coil_ramp_from_scope_2.15ms.png
coil_ramp_from_scope_2.15ms.png (6.22 KiB) Viewed 7079 times


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Analysing the results

Post by Luke » Sat Dec 28, 2019 5:48 pm

Having now got the tester code closer to where I want it for a standalone tester I've been contemplating the best way to analyse the test results.

Matt has touched on this to some extent, using averages, however I'm not sure that's what we want to use.

The ideal coil would fire at the same time each and every time power is applied. The ramp time would probably also be within a specific range for a particular voltage (gives a standard by which to measure), but I've not considered much around what that should be at this time.

Given the coils are generally rather elderly electro-mechanical devices I think we'd have to expect some number of usec variation in the ramp time of firings of a single coil, and likewise between coils. Obviously we want to have all four coils as close to the same as possible, but that's another matter - at this time it's the results from a single coil test I'm interested in.

Assuming a multi-fire test is used then to my mind what would be of use is the mode and range of results, and/or possibly variance or standard deviation. The latter utilises average I realise, and so I'm not convinced, but I think you'll get the drift - we need to perform some analysis of the raw results and come up with a reasonable measure by which to judge the coil(s) under test.

It's easy enough to calculate the degree of rotation variance per usec at a particular rpm and judge from that what might be acceptable but it doesn't account for what's reasonable given the 100-plus y.o. tech of the coils themselves. To this end it probably needs some input from others who'll have had a lot more experience with coil testing than me - does anyone have anything to say on what one might expect?


jab35
Posts: 233
Joined: Sun Jan 06, 2019 12:28 pm
First Name: James
Last Name: Bartsch
Location: Dryden, NY 13053
MTFCA Number: 30615

Re: A new DIY electronic coil tester.

Post by jab35 » Sat Dec 28, 2019 11:26 pm

Luke: Nice work, thanks for sharing. IMHO, Mean, Range and SDev would be essential information. Another question I would like to explore concerns the Current and associated dwell time for firing each coil. This has never been presented in any comprehensive way to my knowledge. For example, if I set my coil with a HCCT to 1.3A (I assume this is RMS current?) what is the corresponding dwell time? And the corollary, if you set a coil for a specific dwell time to fire, what is the average or RMS current to cause that coil to fire. To my knowledge, currently available coil testing relies on either dwell time or current, your device may be capable of giving us both values. Best, jb


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Sun Dec 29, 2019 2:36 am

Thanks James,

I've given this some thought during the day, and have made some further enhancements to the code around presenting results.

At this stage, I've concluded - somewhat tentatively - that range is potentially the most important measure, closely followed by the mode and/or mean (yes Matt, I've come back towards your way of thinking!).

My reasoning around this is that, at the end of the day what we're concerned about it the affect on the spark timing per cylinder. A good coil should fire at the same time, each time, and show little variance in ttf (ipso facto it would demonstrate a low range, and therefore minimal variance in terms of degrees of rotation). Additionally the four coils in a set should also be close to each other in terms of the mode and/or median.

After re-reading a couple of the references I cited earlier in this thread I'm reminded that the apparent ideal ttf is ~2.15 - 2.2msec for a coil being supplied at 12V (and longer, say ~3.5msec, at 6V). Assuming this to be correct one would therefore want the mode and mean of each coil under test to be close to this number.

Having put some stats in place I was interested to run some multi-fire tests on the two [faulty] coils I have. The coils are switched at 13.8V for 40 samples at a 'engine speed' of 600RPM, here's an example from the most faulty one:

Mean time to fire = 1.43mSec
Variance = 11.67mSec
Standard deviation = 0.54mSec
Results Max = 1.69mSec
Results Min = 0.00mSec *** MISFIRE ***
Range = 1.69mSec
Degrees of variation at 600 RPM = 13.21 degree


And here's another example from the less faulty coil:

Mean time to fire = 2.00mSec
Variance = 0.05mSec
Standard deviation = 0.04mSec
Results Max = 2.05mSec
Results Min = 1.92mSec
Range = 0.13mSec
Degrees of variation at 600 RPM = 1.00 degree


The first coil has a mean ttf quite a long way from ideal, it also quite often misfires, and has a weak spark - the example above is fairly typical. I've written the code to report a misfire, as you will see; this would equate to a miss on the power stroke of the cylinder that coil is responsible for and is clearly not desirable. All in all this coil is obviously ill.

The second coil has a much stronger spark and seems to vary in terms of mean ttf between 1.96 - 2.04 msec (much closer to the ideal, and may in fact be ok given the slightly higher voltage I'm using), and variation across firings in terms of degrees of rotation at 600RPM of between 1.0 - 2.2 degrees. The particular example I show happens to have a low range in ttf (and therefore low variation in degrees/rotation). I note that the code automatically adjusts to give the variation in degrees of rotation for whatever RPM it's set to. I should also note that I've not gone back to check the veracity of my results/code calcs, this is fairly rough 'n ready, so please yell out if you see anything obviously awry - maths is not my strong point!

Because it's useful to have faulty coils I've not as yet tried to fix these two, nor have I tried a good coil with the updated code to see how it performs. It will be interesting to compare results when I'm able to do this (Chris, more choccy biccy's coming your way :-).

Anyway I digress.

James, to answer some of your queries:

Yes this code does output peak current draw per firing. Because I've not bothered to calibrate this yet the results I give are really just a number that will vary in proportion to current draw, rather than absolute current draw per se. The two references I mentioned earlier tend to suggest the peak current draw should be between 4-6A. They both give some good data and are certainly worth a (re)read (http://members.iinet.net.au/~cool386/tester/tester.html and Matt's thread https://www.mtfca.com/phpBB3/viewtopic.php?t=3153 where Mike Kossor and John H have written some particularly useful posts).

I've not looked at my results to see if there's much correlation between ramp time and peak current. They both vary but until I calibrate it and get away from concentrating on ttf there's probably not a lot I can say re current.

In terms of the HCCT I think it'll be average current displayed*, and that it's likely to read higher for a longer dwell time although the two may not be absolutely correlated. However that's just my top-of-the-head surmise, I've certainly no experience with an HCCT, and I could be wildly wrong. That said I think Mike may have commented on this in one of the posts I've mentioned - I/we should go back and read it again; it may well answer your question (?).

* I'm not sure if the meter on an HCCT is moving coil or moving iron but (again from theory classes many years ago) I seem to recall a moving coil meter connected to AC reads RMS but displays average, or something like that?

Oh dear, another dreadfully verbose post, apologies! Hopefully that's answered some of what you asked, and perhaps given some pointers to addressing your other enquries...


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Errata

Post by Luke » Sun Dec 29, 2019 5:23 am

Replying to my own post re some calculations I'd been doing ..

After some testing I'd decided that the first two or three readings from the multi-fire test usually showed somewhat higher values of ttf than the following, which tended to be more closely grouped. I think this is to be expected (rather crudely put the coil is 'at rest' initially and needs to 'warm up') and could unreasonably skew any stats one ran on the results. To counter this I've introduced a 'discard' variable to discard the first so many readings from subsequent calculations.

I'd also made an error when I was calculating variance in rotational degrees because I used the 'rpmdelay' variable which was in fact 1/2 actual rpm. While in a four-stroke the coil may only fire at 1/2 the rpm the variability in ttf should use crank rpm to give degree variance. Hopefully that makes sense?

Having sorted these two things I now get a typical result from the less faulty coil like this:

Mean time to fire = 2.04mSec
Variance = 0.01mSec
Standard deviation = 0.02mSec
Results Max = 2.08mSec
Results Min = 2.00mSec
Range = 0.08mSec
Degrees of variation at 600 RPM = 0.27 degree(s)


Not all tests are exactly the same, some will show a larger range / great variation in degrees. I think this is due to the inconsistent nature of this particular coil, it will be interesting to see the results when I (or someone else who builds one of these testers!) am able to try some good coils.

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Sun Dec 29, 2019 8:49 am

Luke / Matt,

Thanks for replies, I am now up and running! Changed the burden resistor from 100 Ohms as per Lukes circuit diagram to 330 Ohms and now I getting data on the serial screen. I am using an unknown coil here which I will now restore fully and set up on the StroboSpark then see its results on FACT. Also now I have caught up I will look at the software closer and hopefully join in on your discussions. Cheers John
Attachments
FACT!.png

User avatar

JohnH
Posts: 86
Joined: Sun Jan 06, 2019 6:57 pm
First Name: John
Last Name: Hunter
Location: Blue Mountains, Australia
Board Member Since: 2002
Contact:

Re: A new DIY electronic coil tester.

Post by JohnH » Sun Dec 29, 2019 9:32 am

Luke,
As the designer of the CRO based tester you've referred to, I'm glad it has provided useful information. I've been following your design work with interest, although the programming side is totally lost on me, being of the analog world. Nevertheless, it's fascinating to see your tester develop, and you will be impressed with the performance of coils adjusted with it.
Re the HCCT meter, I understand it's moving iron, and therefore measures rms. Moving coil meters provide an average reading on AC - but the meter must be used with a rectifier.


jab35
Posts: 233
Joined: Sun Jan 06, 2019 12:28 pm
First Name: James
Last Name: Bartsch
Location: Dryden, NY 13053
MTFCA Number: 30615

Re: A new DIY electronic coil tester.

Post by jab35 » Sun Dec 29, 2019 10:38 am

Luke & John H: Thanks for your information. Regarding Variance and SDev, I feel if you give SDev that is sufficient, and preferable as
the SDev is the square root of the Variance and all that could easily confuse us. Note the units on Variance would be (mSec Squared) so I'm not sure the reported value is correct, not criticizing, just reporting and thanks for sharing.

Regarding the RMS current to fire the coil, I do not know how difficult it would be to calibrate the device to read instantaneous current, integrate the current pulse and make the rms calculation. If that is beyond the scope of the project, I understand. best, jb


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Sun Dec 29, 2019 3:18 pm

John Housego,

That's good news, and I'm sorry to have been instrumental in the initial problem! I should probably have made it clearer that the 100 ohms was a nominal value, and that one should use the data sheet for whatever CT is used in order to fit the right burden resistor.

I see in the data you posted it looks like you may have had some misfires there (?), or perhaps the arbitrary offset value used for the initial_decay parameter needs changing? I think that bit of code needs changing altogether...

Otherwise it'll be good to hear how you get on :-)

JohnH,

Thanks for dropping in, and thank you very much for putting up your work on the CRO tester - I've re-read that a couple of times now and it's been very useful.

FWIW my upbringing was very much analog too. I did most of my electronic training in the '70's with a little in the early 80's and although I built a computer (from EA IIRC) in '79 I never did any real programming until I went to Uni in the '90's. And that was a short burst of _very_ low level stuff in Pascal. My next proper foray into it didn't occur until perhaps 10 years ago when I did a couple of projects in Python. I've had quite a varied life and never went back to electronics, nor into programming, so I've plenty of time to forget anything I knew and have to learn it all over again whenever I intermittently tackle a particular problem.

Anyway, where I was heading with this is that I'm no programmer (as any real programmer :ugeek: could instantly tell by looking at this code!) but that if I have a goal in mind for a project I can usually muddle my way through with a little help from friends .. I would think that anyone with an electronic background and a reasonable mind could do just as well if not better with something like this - which I think means you ;)

Otherwise thanks for your input on the meter too, oddly enough I can still picture sitting in the classroom listening to the lecturer explaining average reading meters on AC, but not a lot about the actual detail! Must be getting old.

JB,

Thanks for your help! I agree that it's not necessary to include the variance of the initial data series; when I was writing that section of the code up it was obviously an iterative process to get to the SD so I just included it (somewhat uselessly) in the output under the premise that it was better to initially have more than less.

Having said that I continue with the view that the most useful data in terms of judging and setting the coil under test would the mean and the range - what do you think? Ultimately I'd like to display just what's needed on an LCD panel, so it'd be good to pare it down to the necessities only.

I need to think about your last paragraph as I'm not sure I quite understand what you're asking, sorry (lack of sleep I expect!). JohnH has reported that the HCCT uses a moving iron meter and will be measuring RMS current draw and while I suppose we could produce a similar result in this tester I'm not certain it would be of any value? Perhaps I've got that completely messed up so it might pay to explain? Thanks.


jab35
Posts: 233
Joined: Sun Jan 06, 2019 12:28 pm
First Name: James
Last Name: Bartsch
Location: Dryden, NY 13053
MTFCA Number: 30615

Re: A new DIY electronic coil tester.

Post by jab35 » Sun Dec 29, 2019 9:10 pm

Thanks, Luke: Not trying to make extra work, but the SDEV gives more info regarding consistency than range, but both are important. Range is obviously determined from the Hi-Lo values in the sample data. Range would be the same if you had one outlier value with others closely grouped or a scattered noisy data set with the same hi/lo values. The SDEV for the first example would be much smaller than the second even tho the range would be the same. Personally I hope you can provide both Range and SDEV.

I think I can understand the complexity of computing rms Current vs directly presenting dwell time to fire. Current values need calibrated measurements and integration of the current pulse, plus some additional arithmetic. I probably do not appreciate how much extra work that makes for you.

Having both values for each coil is of interest b/c of some discourse it has caused in the forum and puzzlement on my part. Time to fire adjustments are made the same way that rms current is adjusted on the model T coil. You bash the lower bridge or pry or lever the bridge which is attached to a 100 year old maple block to get the desired result. Proponents of each criteria for coil adjustment believe in their preferred methods. Some claim one superior to the other. My limited experience setting coils by current and then checking on an eect show the RMS current method gave results that satisfied all criteria on the ecct. Having one device capable of giving both time to fire and rms current would provide a comparison between the two criteria for each coil tested. Personally, I'm very curious to make such a comparison, as millions of model T's have run for years with coils set on the hcct, and I believe most have run and many continue to run well on coils set by rms current. I do appreciate that there may be benefits to setting coils by dwell time to fire, I get that, but I would like to have the capability to collect data comparing the two methods and if that data could be produced on the same device it would be most helpful in making the comparison. I hope this helps explain where I'm coming from, but it is NOT a plea for you to incorporate that in you software. I applaud your efforts. All the best, jb


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Mon Dec 30, 2019 2:33 am

JB, thanks for the clarification, I understand now what it is you want to see wrt the RMS current measure methodology of the HCCT vs the 'time to fire' method of an electronic tester.

I'll need to give it some thought. While I can see it'd be interesting to directly compare/correlate the two methodologies I'm not sure if it would tell you much, or capture the subtleties.

By this I mean that the HCCT, as I understand it (bearing in mind I've never laid a hand on one), essentially provides an average reading of current over a period of time in which multiple firings occur. If there's some variability in the initial time to fire (which I think we need to accept is important in terms of motor operation), or in the max current draw, then that may not necessarily show up since it would be 'averaged out'. Absolute dwell time/ramp time/ttf or whatever you want to call it would make difference because I expect a longer dwell time would equate to a higher current.

In contrast a more precise electronic system will note the variability as well as the absolute dwell time / peak current. It could probably also provide a similar RMS measure to the HCCT - but to what end I wonder?

What I've said above is essentially off the top of my head as I've no experience with the HCCT, and I'm not dismissing your enquiry - I can see the attraction - but it's something I've just not thought about a lot. As my original intent was simply to come up with a portable and accurate means of measuring/setting coils for myself and anyone else in the local area I'd not really considered the operational theory of the HCCT in any depth ... it may take a few days to do so given my busy time will start again soon but I'll come back to it for sure.

Incidentally I've no strong leaning towards either system. If I had a HCCT I may well not have gone this way, but since I don't I've come up with this and from a theoretical standpoint at least I do think it's likely to be somewhat more accurate. I find it interesting to pursue technically and if there's anything I can think of either way, or assist with others pursuit of knowledge, I'll gladly help where I can.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

A few observations and some new code

Post by Luke » Mon Dec 30, 2019 3:08 am

Given Matt's concern over the CT variation in output, and following on from something I'd been working on, I took the tester over to Robert's place today and we did some comparative measurements.

I had remembered that I had an ACS712 30A current module that was suitable to use with the Arduino and coded that to operate with the tester prior. What we did was put the 'scope on the direct output of the CT, the output of the CT after the diode, and output of the ACS712.

What we found was that the ACS712 and CT tracked each other well in all normal situations in terms of the shape, timing, and amplitude of the trace. Calculating current draw via the CT, given the burden resistor in use and voltage shown on the scope, showed that the two were roughly in agreement.

However we noticed that the trace could be significantly different when measured at the end of the diode. I put the diode there so as to not reverse bias the Arduino and although it's not entirely clear why we're getting the odd result it's probably worth removing it and replacing with a 10k resistor (or thereabouts). Alternatively one could just use the ACS712, which is probably what I'm going to do for a bit.

It's a pity I don't have a 20A module, I'd get a bit more resolution, but it'll do for the moment. I am interested to see that now I've calibrated the output (and we've checked that's reasonably accurate between the two sensors) it seems the current draw on the two coils I have is typically less than 4A. While this isn't too dissimilar to what JohnH noted in his article it appears to be somewhat less than what Mike K has found and reported on in his posts.

One reason for this may simply be that I'm testing two faulty coils, a good one may well be markedly different, but until I (or someone else making this tester ;) ) test a good 'un we won't know for sure what the current draw should be (at least without doing some theoretical calcs and I don't feel like that right now!).

Anyway one thing it did do is prompt me to check the capacitor in my coil with the weak spark, not unexpectedly it's rubbish and should be replaced. That's also given me rise to think about including a simple capacitor tester as part of the 'FACT' since others may well not have the facility to test them, and it's not difficult...

Finally I've taken some of jb's comments on board and the tester now reports the following for a (typical) multi-fire test:

Mean time to fire = 2.13mSec
Standard deviation = 0.07mSec
Results Max = 2.32mSec
Results Min = 1.97mSec
Range = 0.34mSec
Degrees of variation at 600 RPM = 1.24 degree(s)


Here's the updated code as it stands now, with usual disclaimers around tidiness, efficiency, errors, WIP etc. You'll see where you can uncomment sections for either a CT, or ACS712 according to what you're using, or have available. Please let me know how you go with it!

Code: Select all

/* The Ford Arduino Coil Tester ('FACT'), a prog to test Model T 'buzz coils'
 *  
 * Released under the GNU General Public Licence (https://www.gnu.org/licenses/gpl-3.0.html)
 *
 * -----------------------------------------------------------------------------
 *
 * Version 0.7 written by Luke P and Robert R, Christchurch, New Zealand, 17th December 2019.
 * 
 *  (1) turn on Model T coil for [interval] milliseconds (typically 4-5 msec)
 *  (2) measure the current max value 
 *  (3) measure time from 0 to max val (rise/ramp time)
 *  (4) measure time from max val to min val (decay time) 
 *  (5) calc and present results via USB serial
 *  
 * Makes use of fast ADC read (set presecale to 16, giving read times of ~ 24 us)
 * Leading on from initial proof of concept to usable code
 * 
 * -----------------------------------------------------------------------------
 * 
 * Version 0.8 (Luke P), 28th Dec 2019
 * 
 * Collect data much as for 0.7, tidy code, sep into functions for: 
 *   (a) Multi-firing of coil as if running in vehicle at specific RPM
 *       This in order to check consistency between firings and present results
 *   (b) Single fire as before (and present results)
 *   
 * Utilise switch press longevity for multi-fire or single-fire tests
 * 
 * -----------------------------------------------------------------------------
 * 
 * Version 0.81 (Luke P), 29th Dec 2019
 * 
 * Bugfix - need to reset results array at start of multi-test otherwise it only outputted every 2nd trial
 * Alter calculation of rpmdelay to incorporate interval time at start
 * 
 * -----------------------------------------------------------------------------
 * 
 * Version 0.88 (Luke P), 29th Dec 2019
 * 
 * Calculate some stats on results (incl affect on degrees of rotation) and display
 * Bugfix where using rpmdelay to calc degree variation (should be rpm)
 * Intro discard variable to discard first few results from multi-fire test that are often higher
 * than following results. Prob due to coil 'warming up from rest' these could skew stat calcs
 * 
 * -----------------------------------------------------------------------------
 *  
 *  Version 0.89 (Luke P), 30th Dec 2019
 *  
 *  Ability to use CT or ACS712 for current reading
 *  Some changes to stats calcs / display
 * 
 */ 
 
// Set global variables etc
  
 unsigned long time_now = 0;  // use long in case micros count gets big
 unsigned int interval = 4000;           // interval at which to turn on (microseconds)
 const int outPin = 7;  //output pin to ss relay for coil
 const byte swPin = 8; //input pin for switch, normally high 
 int testnum = 0;
 long mVolts = 0.0;
 float amps = 0.0;
//set variables for collect_data function array 

 const unsigned int numReadings = 150; //max number of values in array, 150 = approx 3ms
 const unsigned int numTests = 40; //number of test cycles in multi test
 unsigned int analogVals[numReadings][2]; // array name & columns
 unsigned int x = 0; // initialise array input

//set variables for multi_test function array 

 unsigned int resultVals[numTests][2]; // array name
 unsigned int y = 0; // initialise array input

//setup for fast ADC read

 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

//setup for switch reading
 
// const unsigned long short_in = 60;
// const unsigned long  long_in = 600;
 unsigned long swTimer=0;
 boolean swPrevState = HIGH;
 boolean swPresentState;

// are we using a CT, or Allegro ACS712?

// #define CT 1


//begin setup for prog proper
  
void setup() 
   {
    pinMode(swPin, INPUT_PULLUP); // set the switch pin as input and apply resistor to +5
    pinMode(outPin, OUTPUT);// define output pin
    sbi(ADCSRA, ADPS2); //more stuff for fast ADC read
    cbi(ADCSRA, ADPS1);
    cbi(ADCSRA, ADPS0);
    Serial.begin(115200); // open the serial port 
   }

// --- Function to switch coil on for [interval], collect current values over time, analyse and output test number, max current, time to decay ---//

void collect_data(int *maxv, int *ttf, int *test) //function to toggle coil on, read and put resultant data into array, calculate various values and return as pointers to call
   // see https://stackoverflow.com/questions/2620146/how-do-i-return-multiple-values-from-a-function-in-c for returning multiple values from function (I'm using pointers)
   {
    testnum = (testnum + 1);
    analogRead(A0); // perform a read to clear register
    digitalWrite(7, HIGH); //set pin 7 high to power coil for time interval
    time_now = micros();
    x=0;  // reset array
    while(micros() < time_now + interval)
       {
        if (x < numReadings) 
          {
           analogVals[x][0] = analogRead(A0); // read pin 0 volts (which is actually current from CT) and input value to array col 1
           analogVals[x][1] = (micros() - time_now); // time since start of loop (thus sample time), input to array col 2
           x++; //increment array
          }  
            
        }
    digitalWrite(7, LOW); // reset 7 to low and turn off power to coil
//begin data analysis
    int maxval = 0; // use float to get decimal places but int uses less mem
    long sum = 0;
    int val = 0;
    int prev_val = 0;
    int index = 0;
    int initialdecaytime = 0;
    int completedecaytime = 0;
    int maxI = 0;
   
//    delay(10);

    for(int i = 0; i < numReadings; i++)
      { 
       prev_val = val;
       val = analogVals[i][0];
       sum += val;
        
//     if ((val > maxval) && (initialdecaytime == 0)) //detect current increasing and write to 'maxval'
       if (val > maxval) //detect current increasing and write to 'maxval'
         {
          maxval = val; 
         }
// uncomment for ACS712   
       if ((val > 520) && (val < maxval) && (initialdecaytime == 0)) //detect initial time of current decay and write to 'initialdecaytime' ACS712
// uncomment for CT
//       if ((val > 100) && (val < maxval) && (initialdecaytime == 0)) //detect initial time of current decay and write to 'initialdecaytime' CT
//      if ((prev_val = maxval) && (val < prev_val) && (completedecaytime == 0)) //detect initial time of current decay and write to 'initialdecaytime'
         {
          initialdecaytime = analogVals[i][1];
         }   
// uncomment for ACS712         
        if ((initialdecaytime != 0) && (completedecaytime == 0) && (val <= 511))  //get total time from initialise to complete decay to zero ACS712
// uncomment for CT
//        if ((initialdecaytime != 0) && (completedecaytime == 0) && (val <= 0))  //get total time from initialise to complete decay to zero CT
         {
          completedecaytime = analogVals[i][1];
          maxI = i;
         }
 //Debug stuff       
 /*     Serial.print(analogVals[i][0]); // adc value
      Serial.print(" -- ");
      Serial.print(analogVals[i][1]); // time in micros
      Serial.print(" .. ");
      if (i != 0) Serial.print(analogVals[i][1]-analogVals[i-1][1]); // how long did each read take (in micros)
      Serial.println();
 */
      }
/* More debug
    Serial.print ("Maximum current = ");
    Serial.print (long(maxval) * 120.5);
    Serial.println ("mA");   
    Serial.print ("Decay time = ");
    Serial.print (completedecaytime);
    Serial.println ("usec");   
    Serial.println();
*/
    *ttf = completedecaytime;
    *maxv = maxval;
    *test = testnum;
   }
   
//--- Function to do a single fire test on a coil ---//

void single_test()
   {
    int maxv, ttf, test; // declare variables to use
    mVolts = 0.0;
    collect_data(&maxv, &ttf, &test);  // get data from collect_data function
    // write results to serial port
    Serial.print ("*** Test number ");
    Serial.print (test);
    Serial.println (" ***");
    Serial.print ("Total cycle time (to fire) = ");
    Serial.print (float(ttf)/1000.00); // convert to ms
    Serial.println ("msec");
//    Serial.println (maxv);
// uncomment two lines for ACS712
    mVolts = (maxv / 1024.0) * 5000.0; // raw analog read val to millvolts
    amps = ((mVolts - 2500.0)/66.0); // millivolts to amps (utilise scale factor for ACS sensor range
// uncomment for CT    
//    amps = (maxv * .0222); // millivolts to amps (utilise scale factor for CT
// DEBUG    Serial.println (mVolts);  
    Serial.print ("Maximum current = ");
    Serial.print (amps); 
    Serial.println ("A"); 
    Serial.println();
   }


//--- Function to do a multi-fire test on a coil as if running in vehicle ---//

void multi_test()  
   {
    // first set desired 'rpm' for multitest - facsimile of single coil running at this speed
    int rpm = 600; 
    
    // do some calcs on rpm as needed for delay (four-stroke, so single cyl ign fires every second cycle therefore div 2)
    int rpmdelay = ((60000 / rpm)/2) - (interval/1000);  // attempts to roughly account for time in data_collect process ('interval')

    y=0;  // reset array
    
    // begin proper
    
    for(int i = 0; i < numTests; i++)  // number of test firings
      {
       int maxv, ttf, test; // declare variables to use
       collect_data(&maxv, &ttf, &test);  // get data from collect_data function
       resultVals[y][0] = (ttf); //1st col of result array gets ttf
       resultVals[y][1] = (maxv); // 2nd col of result array gets max current
       y++; //increment array           
       
/* use for debugging output from collect_data function
 *

    Serial.print ("*** Test number ");
    Serial.print (test);
    Serial.println (" ***");
    Serial.print ("2Maximum current = ");
    Serial.print (long(maxv) * 120.5);
    Serial.println ("mA");   
    Serial.print ("2Decay time = ");
    Serial.print (ttf);
    Serial.println ("usec");   
    Serial.println();
 *
 */    
       delay(rpmdelay); // sets 'rpm' delay between each test firing, 
      }
      
   testnum = 0;
   float results_sum = 0;
   float results_std_dev = 0;
   float msec_ttf = 0;
   float results_mean = 0;
   float results_var = 0; 
   float results_max = 0;
   float results_min = 10;
   int discard = 2; // first few results from multi-test show higher ttf than normal, discard to give more accurate result
   for(int i = discard; i < numTests; i++) // get results from each test and print to serial
      { 
       testnum = (testnum + 1);
       Serial.print ("*** Test number ");
       Serial.print (testnum);
       Serial.println (" ***");
       Serial.print ("Total cycle time (to fire) = ");
//       Serial.print (float((resultVals[i][0])/1000.00)); // convert to ms
       msec_ttf = ((resultVals[i][0])/1000.00); // convert to ms
       results_sum += msec_ttf;
       if (msec_ttf > results_max)
          {
           results_max = msec_ttf;
          }
       if (msec_ttf < results_min)
          {
           results_min = msec_ttf;
          }
       Serial.print (msec_ttf);
       Serial.println ("msec");
// uncomment two lines for ACS712
       mVolts = ((resultVals[i][1]) / 1024.0) * 5000.0; // raw analog read val to millvolts
       amps = ((mVolts - 2500.0)/66.0); // millivolts to amps (utilise scale factor for ACS sensor range
// uncomment for CT
//       amps = (long(resultVals[i][1]) * 0.02222); 
//       Serial.println (mVolts);  
       Serial.print ("Maximum current = ");
       Serial.print (amps);
       Serial.println ("A"); 
      }
    results_mean = (results_sum / testnum); //get mean of array results for ttf ***using testnum cost of discard
    for(int i = 2; i < numTests; i++)
       {
        results_var += pow(results_mean - (float((resultVals[i][0])/1000.00)), 2); // get variance
        results_std_dev = sqrt(results_var/testnum); // get std deviation ***using testnum cost of discard instead numTests
       }
    Serial.println ();
    Serial.print ("Mean time to fire = ");
    Serial.print (results_mean);
    Serial.println ("mSec");
    Serial.print ("Standard deviation = ");
    Serial.print (results_std_dev);
    Serial.println ("mSec"); 
    Serial.print ("Results Max = ");
    Serial.print (results_max);
    Serial.println ("mSec"); 
    Serial.print ("Results Min = ");
    Serial.print (results_min);
    Serial.print ("mSec"); 
    if (results_min ==0)  // if we have a 0 for ttf it suggests firing issues
    {
     Serial.println (" *** MISFIRE ***"); 
    }
    else 
    {
     Serial.println();
    }
    Serial.print ("Range = ");
    Serial.print (results_max - results_min);
    Serial.println ("mSec");     
    Serial.print ("Degrees of variation at ");
    Serial.print (rpm);  
    Serial.print (" RPM = ");  
    Serial.print ((results_max - results_min)/(float(60000 / rpm)/360));
    Serial.println (" degree(s)");  
   }


//--- Main loop, detect short press of switch to call single fire, long press to call multi-fire ---//

void loop() 
   {
    swPresentState = digitalRead(swPin); // what's the switch doing
    if (swPresentState != swPrevState) // if not same as prev then...
      {
       delay(20); //debounce delay
       swPresentState = digitalRead(swPin); // check again after debounce delay to be sure
       if (swPresentState == LOW) // if switch is still on then it's real
          {
           swTimer = millis(); // set timer from on
          }
       if (swPresentState == HIGH) // sw not on now
         {
          unsigned long currentMillis = millis();
          if ((currentMillis - swTimer >= 60) && !(currentMillis - swTimer >= 600)) // sw short press
            {        
             Serial.println ("- Single shot test -");
             single_test();
            }
          if ((currentMillis - swTimer >= 600)) // sw long press
            {
          // the long press was detected
             Serial.println ();
             Serial.println ("- Multi-fire test -");
             Serial.println ();
             multi_test();
            }
         }
        swPrevState = swPresentState; // has state changed?
      } 

   }   



User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Mon Dec 30, 2019 6:04 am

Luke:
Today I repeated some of my earlier experiments, but this time with the tester involved. I include an image from my 'scope below for one of the tests. I used the two coils I have (thanks Chris!) and in both cases the 'time to fire' reported by the tester exactly matched that displayed by the 'scope (1.6 and 2.15msec respectively - as roughly expected since the two coils are quite different). The scope was connected directly to the current transformer before the diode.
Luke, You have posted a bit and a lot to consider. I believe that if we can duplicate the image you show on the "scope" it would be desired. Namely a simple ramp that produces a straightforward time-to-fire (TTF) signal. If I understand you correctly you are now getting that with the FACT.

Current Transformer (CT) vs Hall Effect Sensor (ACS712)
So it will be interesting to see if you settle with the Current Transformer (CT) or the Hall Effect Sensor (ACS712). I like the idea of the CT in that we could add it to any circuit w/o disturbing the wiring, but I see that the ACS712 modules are quite reasonably priced. So someone could by the micro controller board, the output board, sensor board and be ready to go...

James:
Having both values for each coil is of interest b/c of some discourse it has caused in the forum and puzzlement on my part. Time to fire adjustments are made the same way that rms current is adjusted on the model T coil. You bash the lower bridge or pry or lever the bridge which is attached to a 100 year old maple block to get the desired result. Proponents of each criteria for coil adjustment believe in their preferred methods. Some claim one superior to the other. My limited experience setting coils by current and then checking on an eect show the RMS current method gave results that satisfied all criteria on the ecct. Having one device capable of giving both time to fire and rms current would provide a comparison between the two criteria for each coil tested. Personally, I'm very curious to make such a comparison, as millions of model T's have run for years with coils set on the hcct, and I believe most have run and many continue to run well on coils set by rms current. I do appreciate that there may be benefits to setting coils by dwell time to fire, I get that, but I would like to have the capability to collect data comparing the two methods and if that data could be produced on the same device it would be most helpful in making the comparison. I hope this helps explain where I'm coming from, but it is NOT a plea for you to incorporate that in you software. I applaud your efforts. All the best, jb
James, Your question stirred up in me a possible justification for my engineering degree. Perhaps I could actually find value for the 3 semesters of calculus, plus a semester of differential equations linear algebra, 3 semesters of physics not to mention a bunch of engineering classes beyond that of which practical justification of is more difficult then the classes themselves! So perhaps this simple Model T coil provides an opportunity to put the theory into practice!

Typical Engineering Presentation of RMS Voltage Derivation
https://www.youtube.com/watch?v=h0RJ10QwB9M
So a typical engineering student would do good on an exam knowing the math here, but could they explain what an RMS voltage is?

RMS Voltage in Simple Terms
RMS Voltage is determined by finding the pike AC voltage that would produce the same heat energy (i.e. power on a purely resistive load) of a DC voltage. All AC voltages should be assumed to be RMS AC voltages unless described otherwise (i.e. peak AC voltage).

RMS Sine Wave verses ramp?
The most common application of RMS is on a AC sine wave. But the Model T ignition system is actually a ramp followed by a long off period. No fear to a good Electrical Engineering student. They should use calculus to determine any input function (i.e. sine, square, triangle, saw-tooth, etc). Here are some examples of the results: https://en.wikipedia.org/wiki/Root_mean_square
But for this example we need to look at a ramp like the following:
Image
The following equation could be used to determine the RMS voltage:
Image
Here is the full discussion on that: https://masteringelectronicsdesign.com/ ... -waveform/
Okay so now we know how to use the peak voltage along with the period and time to fire to determine the RMS voltage!

THAT'S GREAT, BUT we might have a problem. What does the current on a HCCT actually show? AC meters are designed for a AC RMS sine wave current. How does the RMS sine wave measurement compare with the RMS ramp waveform on being measured with a RMS guage? This would require a whole lot more investigation with the discussion of magnetism. How does a pulsing ramp verses a sine wave impact the movement of a needle on a AC gauge?

I would image the answer to this is to toss out all the calculus/theory and just do some testing to compare. (My point here is if you are still readying all I have written here and don't have a engineering degree, don't feel bad. It doesn't mean anything if you can't find a practical purpose for most of your courses;) But more importantly a set of rebuilt coils is only $200 and a ECCT is twice that. That may sound like a lot of money, but engineering degrees cost too! But wait you could just use the FACT tester connected to a HCCT. If you don't count the tireless hours of those who put it together you should be able to do the testing in the privacy of your own garage for a fraction of that!

I love how we have people from around the world working on this! This is a great forum! Thanks MTFCA!

Matt


Chris Barker
Posts: 63
Joined: Sun Jan 06, 2019 5:08 pm
First Name: Chris
Last Name: Barker
Location: Somerset, Eng;and

Re: A new DIY electronic coil tester.

Post by Chris Barker » Mon Dec 30, 2019 10:56 am

While I'm enjoying, if not altogether following this discussion on current and meter readings, let's not forget what we are trying to do (other than escape Christmas 'festivities').

When we drive our Model Ts - remember them? - we want our ignition system to reliably and consistently deliver sparks of adequate power at the same time for each cylinder. A sub-set of 'adequate power' is one good spark; not double weak sparks.

Adequate power is presumably related to energy put into the coil, and that is presumably a function of amps and time.
All coils of the same construction will accumulate energy at the same rate (for a given power input) as long as the contacts remain closed.
The energy accumulation stops when the contacts finally open. The time from the timer starting to power the coil to the points opening has two parts:
1. A build-up during which the lower contact doesn't move at all Time A
2. A period, Time B, when the lower contact moves down in the magnetic field but the effect of the cushion spring is to keep the contacts closed.
Time-to-fire (TTF) is A+B.

The clever cushion spring does two things: it prolongs the charging time, increasing the spark's energy, and it gives a clean break when the moving lower contact strip snatches the contacts apart (I liken it to the hangman's 'drop'!)

We can have a high lower contact pressure which makes 'A' longer combined with a low cushion spring travel which minimises 'B' which will give the same time-to-fire as a weak lower contact pressure (short 'A') and a high cushion spring travel (long 'B'). In theory, they ought work the same because the TTF is the same, and so is the input energy. (I'm assuming that both can be adjusted to eliminate double-sparking). A meter in the circuit (or the peak on the wave) should also show similar readings.

Now, I'm not advocating that we set up coils with wide variations as I've described. I'm sure that in practice, the cushion spring travels should be similar to each other and so should the contact pressures. Some years ago I set up 11 coils with an old HCCT and then tried to measure the force needed to just open the contacts. They were mostly 12g to 18g which seemed quite a narrow spread. I also make a point of keeping the cushion spring travel between .010" and .015".

So what am I saying? I think I am concluding that if we avoid double sparks and set the time-to-fire consistently, the current should look after itself. Logically, the reverse should also be true!

I now await the flood of responses pointing out the flaws in my logic. I already recall one of our veteran experts (Ron or John) telling me ten years ago that T coils are a trap for logical people!


jab35
Posts: 233
Joined: Sun Jan 06, 2019 12:28 pm
First Name: James
Last Name: Bartsch
Location: Dryden, NY 13053
MTFCA Number: 30615

Re: A new DIY electronic coil tester.

Post by jab35 » Mon Dec 30, 2019 3:10 pm

Luke, Matt, Chris: If you are going to incorporate rms current in your output, I'd suggest calculating it using the general equation shown in the video. If you can sample Current at known discrete time intervals during the coil firing event , your computer should be able to square that value and Reimann summation will give the value for the integral from t0 to time at firing. That way, any errors from pre assigning a waveform shape are eliminated. Granted this is more data to collect, numbers to crunch and more complex programming so it might not be practical.

Luke's results are interesting, I like that format of data presentation and the info is useful. If the variation of crank angle at time of fire @ 600 is based on the range, it overstates the' problem'. Consistency is the goal in coil adjustment, but the consistency based on mean and sdev is a better way to quantify it. I suspect the values are correct, and based on the range of firing times the range of crank angle variation is 1.24 degrees@600rpm. Relative to the mean it is 0.00 (-0.57/+0.67 degrees) maximum +/- variation. These maximum variations occur in the spectrum of firings reported by your device, and based on the sdev or 0.07 mS (0.24 degrees) most events produce smaller variations.

Recall that statistically 68% of the events fall within +/-1 SD of the mean, or over a range of +/- 0.24 degrees; and 95% within +/- 2 sdev of the mean. (95% of the sparks occur with crank angle variation of +/- 0.51 deg), so while not perfect, that coil is performing better than the 1.24 degree range of crank angle variation suggests. (NOT a criticism of work done, just an observation, and there may be rounding error in my calculations.)

FWIW to this discussion, the ecct shows a series of 'bin' values where the number of 100 individual firing time values are sorted into ranges above, below and within the desired time to fire range. Providing results graphically may be an option, but again not suggesting it is necessary.

I agree with Chris that one can overthink this stuff and logic sometimes leads one astray. Chris, I would be interested in the time to fire variation in your coils with measured cushion spring travel variations of .010 to .015", a 50% variation. I know you may not have a way to measure this, not on HCCT anyway, and since your T runs fine, I should not overthink the issue. There was quite a bit written on cushion spring travel and consistency of manufacturing some time back by Ron Patterson and John Regan and others who do not post here much anymore.

Lastly, if this is becoming too lengthy, too off topic or too academic, I would be happy to continue the dialog with interested persons off site by e-mail (jab35(at)cornell(dot)edu). I remain curious to learn the firing time and rms current relationship for model T coils. I wish you all every success in developing this 'tool' for our model T's, and a happy new year 2020.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Mon Dec 30, 2019 4:33 pm

Chris,

I like your explanation of the coil operation, and the due reminder of what this is all about!

You've touched on something that I'd be contemplating for a while - the tension on the points. It'd seemed to me, between the few coils I'd handled, that this could be somewhat variable, and that the methodology in setting it (a bash with a hammer) was fairly crude to say the least. While I'd not come to any conclusion the force measurements you've given are a useful metric to consider for any future experiments on this matter, thanks for that.

WRT to your other comments I'm inclined to agree that, with a good coil, if you set and attain consistent ttf with clean output then the current should largely just follow. The current value will matter, since it's an indicator of energy I guess, but otherwise it'll be what it will be.

However I'm less happy with setting a coil based on current alone, I think this has the potential to leave you with a coil that may well not operate at it's optimum, particularly in regard to its relationship with the three other coils in the system and the ttf for each coil.

Now this question may well be answered if we look more closely at what JB is looking for, and which Matt has also commented on - I'll come back to that in a moment.

Matt,

On the whole I think I've always had a fairly good relationship between what the scope 'shows and the 'FACT' measurements. There's been a few anomalies along the way but given the different ramps we observed on the 'scope following the diode I suspect that could have introduced some more regular issues - and may have contributed to the variations you were experiencing. Therefore I think that, if one uses a CT, removing the diode and inserting a resistor may well be the way to do.

That said I am attracted to the ACS712 module. As you've noted it's inexpensive, and given it's a module with screw terminals and known parameters that don't require a resistor and resultant calculations I think it'd be better for anyone just wanting to build one of these testers and have it work. So at this stage I think I might stick with that for a bit.

On the matter of RMS measurement/calculation I think I've come up with and idea that may help. I think I'll explain this in my response to JB below, but it's just as much for you too.

JB,

Thanks for your analysis of the results to date. You clearly have a much better grasp of what we're looking at mathematically/statistically than I do, this is particularly useful in determining the value of the test, what to present, and how to relate that to the health of the coil under test.

Once cautionary comment I have is that I've really got just the one coil to test at the moment (what I term the 'less faulty' coil) as the other is very ill. So the results I've posted to date are really a sample of one, albeit they're multiple tests on that sample. What I'd like to do is test a few more coils and put those results up to compare. If/when I can do this (or someone else building one of these, and has a stack of coils...) your insight would be invaluable I think.

Moving on to the RMS measurement you're interested in; I've come to the conclusion that the best way of producing this is to have the Arduino output the resultant raw data from the multiple-fire test and deliver that to a PC so it may be saved as a file. Once in the PC there are a range of packages that could then be used to analyse the dataset, I suspect some of these would be able to deliver the information you're looking for in both an easier and more detailed way than we could do in the Arduino itself - at least initially. One does need to be aware of the Arduino's limitations (and mine as a programmer!).

I guess if it were me I'd probably see if numPy (a Python library) could do this, but really it'd be down to one's favourite tool. As a brief aside I used numPy as part of another project a few years ago where I was taking accelerometer data from a seismometer I'd built and had to convert the time domain data into the frequency domain in order to produce a reasonable plot. Although my head still hurts (in part due to the 30 lectures on FFT I studied!) it was reasonably successful and I remain indebted to the writers of numPy, and impressed at what it can do.

Anyway, as I've commented previously, unlike some of my more illustrious relatives, maths is definately not a strong point for me, so I'm not sure I'm the right person to do this work. However I'll see if I can come up with the dataset aforementioned, which I could then email to you (and Matt) - if that was useful and you had some tools to look at it? Either way I think I'll see if I can get the data out first and will email you regardless, thanks for your address.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Mon Dec 30, 2019 7:06 pm

jb, Matt, I've just emailed you a couple of datasets from two multi-fire tests.

These include the raw data from each sensor sample over time, and a conversion to real-world current.

I've not broken the individual firings down but It should be clear where they start and stop. There are 150 samples per firing and 40 firings, making some 6000 sample points of current per test in this dataset...

I'm off to have some lunch as a reward :!:


jab35
Posts: 233
Joined: Sun Jan 06, 2019 12:28 pm
First Name: James
Last Name: Bartsch
Location: Dryden, NY 13053
MTFCA Number: 30615

Re: A new DIY electronic coil tester.

Post by jab35 » Mon Dec 30, 2019 7:21 pm

Thanks, Luke. I appreciate the offer to receive future data/results.

Since you have only one coil, one thing you might consider is slightly adjusting your coil by making small adjustments in the lower bridge. (I do this without a hammer because I don't like pounding a coil in (or out of) the testing apparatus. I use a needle nose pliers to gently 'rotate' the entire lower point frame, don't bend just the cantilever. Bending it so the cantilever with the lower point moves upward increases spring tension and increases current and increases dwell time to fire. Bend opposite to decrease. Bend too much it might stop sparking, you get my drift.)That way you could increase or decrease the firing dwell time and observe the results. Since it is a 'practice' coil not in a working car, mucking it up a bit more for the good of science seems justified. There are some good directions for how to change this adjustment so I won't attempt to give a comprehensive explanation, others have already done this much better than I could do off the cuff. And since you have documented its present dwell time to fire, you could muck it up, take data and try to un-muck it to return to the original condition. Just a thought. best, jb

ps, here's a link with some pics showing coil current/time to fire adjustments to a Ford coil. You don't need the special tool to change the setting, just go easy when you start.

https://www.pbase.com/jimthode/coil_current


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Mon Dec 30, 2019 8:14 pm

JB, thanks for the link, I would much prefer to adjust the coils 'nicely' as is described there.

However I'm not quite ready to 'fix' this faulty coil yet. For the purposes of making and testing the tester it's potentially more useful to have a faulty/erratic coil than a good one. So I think I'll stick with it 'as is' for a bit longer.

Once I'm more or less happy with the tester I'll then try some adjustments on the coil to confirm that the tester reports the results as I'd like. I think this is getting close, given that I've now plotted the data I sent to you and Matt. It seems to me to be quite as one might expect from a basic 'scope, and any variability in the data most likely from the coil itself.

For anyone else interested here are three plot images of data from the two multi-fire tests conducted via the 'FACT' and the results saved to a PC. The dataset was then put into a LibreOffice spreadsheet and plotted simply to give what you'll see below. The first two are the first and second test respectively.

model_t_coil_data_multi-fire_test1_plot.png
model_t_coil_data_multi-fire_test2_plot.png


This last image is a closeup of one of the previous plots, showing a bit more detail of the current ramp curve and resultant collapse, followed by the typically ringing one would expect:

model_t_coil_data_multi-fire_test1_closeup_plot.png

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Tue Dec 31, 2019 12:28 am

My wife took a glance at this and said, "That looks like the technical side of the Model T forum..."

In case you get lost in the discussion. The current is not a sine wave, but looks like this:
Image The details can be found here: https://masteringelectronicsdesign.com/ ... -waveform/
Using the mentioned equations I decided to try it out...

Here was my attempt to connect the RMS values as seen on a HCCT with the variables determined here.
HCCT RMS Current.PNG
Perhaps someone with a HCCT (JohnH or MKossor?) could inform this with the correct values, but this is at least an attempt to compare HCCT RMS current with the Ramp current variables. I hope that each variable is within a factor of two.

Matt


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Tue Dec 31, 2019 12:44 am

Matt,

Yes, I appreciate the incongruence in putting up such plots etc while working on 100+ y.o. tech (I'm not sure exactly how your wife put the statement but... :lol: )

Good to see your calcs, hopefully you'll get some of the detail you're looking for in return. Just one thing though - I don't think that's correct re peak current?


Tom_Carnegie
Posts: 19
Joined: Mon Jan 07, 2019 6:17 pm
First Name: Tom
Last Name: Carnegie
Location: Spokane Valley, WA
MTFCA Number: 14685

Re: A new DIY electronic coil tester.

Post by Tom_Carnegie » Tue Dec 31, 2019 2:57 am

There is a feeling that I cannot quite shake when testing coils using the time-to-fire method. I have been setting up my coils this way (using an oscilloscope) for going on twenty years. The reason I started doing this was to get better timing when running at faster speeds for the Montana 500. I have always considered it important to have four coils that were well matched. That is, had the nearly the same impedance and a high q-factor. The reason for this, and the feeling that I can't shake is that one coil set for time to fire on DC is not going to react the same as another coil set for time to fire on DC at all frequencies, especially if they have different impedances. I always optimize my coils for what I believe my average speed will be, that is with a rising voltage of that frequency with the correct harmonic content.

I have not studied the variance of timing between two coils with wildly different characteristics, so maybe I'm borrowing trouble. However, it seems to me that if you could trigger your tester with a rising voltage at a certain frequency, you'd have a more versatile and better tester.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Tue Dec 31, 2019 5:15 am

Tom,

Hopefully someone else with more experience on this will respond (John H, Mike K?), but FYI I did check the inductance of the two coils I've got and I was surprised to see that they were markedly different. As I recall one was something like 198uH whereas the other was up around 250uH or so - thus my small sample set does suggest there could be manufacturing differences that may affect how they operate.

That said, as long as they're set to fire at the same time, and they produce reasonable EHT then I'm not sure what the effect would be?

In terms of generating a rising power supply to the coils, well yes one could do that reasonably easily, but even in the car they're hard switched via the timer so in operational terms I'm struggling to see how it could make much difference? If the HCCT just uses the magneto and doesn't switch (?) then I guess that could make a difference in terms of the comparisons between testing methodologies that some are interested in - but then I've got a view that they're not really comparable this way :-)

Having said all that I think it would be very easy to run a rough'n ready facsimile of what you're getting at by [electronically] testing several coils at different feed voltages vs 'RPM' and comparing the rise and decay characteristics of them. With a change to the 'FACT' code (which I've already done for anyone that wants it) you could just output the data for each coil at say 4 differing voltages and analyse them / overlay some plots to see if there's a differential change. I imagine that would come fairly close to answering your lingering question?

'cos it's an interesting topic you raise I'd gladly do that here but I can't, sorry (lack of coils to compare), however I expect someone else may well be able to try this. I'm not sure if he has a lot of coils to test but Matt seems to have got a good grasp of the code and is producing some interesting plots... ;)

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Tue Dec 31, 2019 8:46 am

Hi Luke, thanks for your latest latest software version which I have running. I have also used ACS712 but the 20 amp version rather than the CT. Regards John
Attachments
fact latest.png
IMG_20191231_125702.jpg


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Tue Dec 31, 2019 2:12 pm

John,

I'm pleased to see you've got it running and have some results, thanks for posting!

A couple of things to note:

Since you're using a 20A module (which I agree is probably the better of the three) you'll need to make a minor alteration to a couple of lines of the code, if you haven't already. This will affect the calibration, and will be necessary to give you accurate current readings.

There are two places in the current code where line is: amps = ((mVolts - 2500.0)/66.0); If you change the 66.0 to 100.0 that should set your tester for the 20A module.

The other thing is that I see that's the second time you've posted a photo that's suggesting you have some zero current readings (a.k.a. misfire)? Do you know if that's because your coil is faulty? If not, there could be a bug in the code we need to look at, or maybe it's some other local thing (back emf into something perhaps!), but either way it'd be good to know so we can address it if possible, thanks.

User avatar

John Housego
Posts: 17
Joined: Wed Jan 16, 2019 4:44 pm
First Name: John
Last Name: Housego
Location: Aylesbury Bucks UK
Board Member Since: 2007

Re: A new DIY electronic coil tester.

Post by John Housego » Tue Dec 31, 2019 4:23 pm

Hi Luke, many thanks for the response, I did change that but could find only one instance of "amps = ((mVolts - 2500.0)/66.0);" in one single line of code, think you indicated there are two, maybe I have misunderstood you. Anyway that line is changed now to "amps = ((mVolts - 2500.0)/100.0);" Have also now eliminated the zero current readings you spotted, I had the coil a little to close to the Aurdino!! Moving it away a little the current readings are there all the time. Just for interest the coil I am using I set up on the StroboSpark for 1.3 amps reading on the meter with single spark and consider this coil good. I have a bunch of other coils in various condition that I will refurbish for use in tests. Thanks again for your input. Regards John
Attachments
factnew.png

User avatar

Matt in California
Posts: 385
Joined: Sun Jan 06, 2019 5:42 pm
First Name: Matt
Last Name: G
Location: California
MTFCA Number: 30697

Re: A new DIY electronic coil tester.

Post by Matt in California » Wed Jan 01, 2020 12:13 am

Luke,
I am trying to calculate the the period of each firing time. When I plug the numbers in, I get around 50 minus 4. I assume that the delay is in milliseconds. Have you verified your period on a oscilloscope? Please confirm that actual period.

Thanks!

Matt

User avatar

JohnH
Posts: 86
Joined: Sun Jan 06, 2019 6:57 pm
First Name: John
Last Name: Hunter
Location: Blue Mountains, Australia
Board Member Since: 2002
Contact:

Re: A new DIY electronic coil tester.

Post by JohnH » Wed Jan 01, 2020 1:50 am

Concerning a rising voltage to test coils, it had crossed my mind when I developed my CRO based tester. The reason I only provided a step voltage is because there is no magneto in my car. The object of the design was to simply ensure each coil took an equal amount of time to fire when presented with 6V DC, and at the highest maximum engine rpm likely to be ever encountered (2000rpm). I allowed for 9 and 12V testing as well, because it was very easy to implement, and I wanted to see how the coils would perform when set at one voltage but operated at another. I had also experimented with running the coils at 9V in the car. And of course, some users only ever operate their coils on 12V DC.
It's an interesting question too if coils are set equally at 6V, will they have equal firing time at 12V? While I haven't done extensive testing and tabulating of results, it does seem that firing time is not always exactly equal. Firing time does of course reduce as the voltage is raised, but it seems not necessarily by the same amount for all coils.
For this reason, I use my CRO based tester to set coils where they are only ever run on 6 or 12V. The ECCT with its 12V test (or my own tester switched to 12V) is what I use for magneto equipped cars.


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Wed Jan 01, 2020 4:19 am

John Housego,

Thanks for the update, I'm pleased the intermittent misfiring issue was easily found and rectified - at least it wasn't a bug in the code!

I'm sorry but I've a few versions of the code floating around however I think the '66' figure should appear in the code twice (once in the single_test, and once in the multi_test section)? It's only current calibration but it'd be nice to get it right.

I was interested to see that your coil showed a significantly longer dwell time than mine. This is the same as I found when I took my tester out to a fellow T owner and checked it with some of his good coils that he'd set up on his hand crank tester. Unfortunately I didn't take my 'scope (and didn't output a dataset) so I remain slightly uncertain whether that was just a function of the 'good' coils, or whether it's a fault in way the code is detecting the initial rise and decay - ie. is it detecting another later one?

To that end if you had a 'scope (or used the earlier code with the python plotter) and could could confirm that your 3.x msec is the main ramp and decay, or something else, I'd be keen to know?

Otherwise I see that coil has a much smaller range (ie. is much better) than the two I've got here. That's the first output I've seen on a good coil from the later tester code and while I was expecting a more consistent result it's good to have that confirmed :-)

Matt,

I present a couple of images below. The first one is a trace from one coil just left to self-oscillate on 13.8V (it's not the cleanest - bear in mind it is a faulty coil). This was why I decided on ~4msec as the on time for the tester (long enough to cover the first ramp/decay and a bit beyond to allow for longer ramp time, but not so long as to start the setup for another cycle). I've tried different values between 3.5msec and 5msec but 4msec is where I left it for the moment.

The second trace is the switched output from the tester as you asked for:


model_t_coil_vibrate_scope_trace.jpg
model_t_coil_vibrate_scope_trace.jpg (66.88 KiB) Viewed 6421 times
model_t_tester_switch_output_600.jpg
model_t_tester_switch_output_600.jpg (67.02 KiB) Viewed 6421 times

JohnH,

Firstly, I took my T out to a function today, ominous skys and a lot of smoke from over your way - really sorry to read what's happening there :(

Thanks for your input re the possible characteristic change with voltage, I expect that will interest Tom somewhat. When I'm able to I will be interested to run some tests and gather data at different voltages - a simple plot overlay between coils should tell us if there's any significant differential change. Or possibly Matt may be able to to do that as I see in his other thread he's got a wee stack of coils? :mrgreen:


Chris Barker
Posts: 63
Joined: Sun Jan 06, 2019 5:08 pm
First Name: Chris
Last Name: Barker
Location: Somerset, Eng;and

Re: A new DIY electronic coil tester.

Post by Chris Barker » Wed Jan 01, 2020 10:30 am

It is desirable that coils have similar characteristics of TTF vs applied voltage because our magnetos go from less than 10v at idle to 30v+ at high rpm.

When I got my car, I found it had no magneto, and running on 6v required ALL the available advance! Reading of others' experiences, it seems that 12v is almost as good as magneto.

User avatar

John Warren
Posts: 641
Joined: Sun Jan 06, 2019 12:18 pm
First Name: John
Last Name: Warren
Location: Henderson, Nevada

Re: A new DIY electronic coil tester.

Post by John Warren » Wed Jan 01, 2020 1:10 pm

I think the real reason that advertising was some what band was the problem that one vendor in particular, was inundating the form with adds. The same vendor was making surfing eBay for used parts almost impossible. The discussions would become covered up and people would get disgusted and no longer participate. I do agree that Mike and others should not be banned from discussions that benefit us all.
24-28 TA race car, 26 Canadian touring, 25 Roadster pickup, 14 Roadster, and 11AB Maxwell runabout
Keep it simple and keep a good junk pile if you want to invent something :P


Scott_Conger
Posts: 2683
Joined: Sun Jan 06, 2019 11:18 am
First Name: Scott
Last Name: Conger
Location: Clark, WY
Board Member Since: 2005

Re: A new DIY electronic coil tester.

Post by Scott_Conger » Wed Jan 01, 2020 2:13 pm

John, this is the rule: No business advertisements or lengthy descriptions of your product or services. Doesn't say you can't mention your item, doesn't say you can't give a brief description of how it may pertain to a poster's question, you're not banned from discussions which may mention your product. And that's the key right there, which make most protests null and void.

This is not new. During a search on a topic, I came across a thread in 2008, where a potential supplier was in a huff about being told that advertising should not be on the General Forum, and was simply directed to the "For Sale" Forum to wax poetic about their product there. They did. And the product now seems quite successful. I don't know if it was a "rule" then, but it was clear among the posters then, that if someone was going to advertise a product on the General Forum, it probably ought to be moved to the "For Sale" Forum.

Though there is occasional loud protestation about "the rules", about how suppliers may not mention their product,or discuss it in any way, which, again, if you will refer to the rules, is not true (and they mention it anyway, so good for them, they have created the anti-ad I suppose...genius) they may go on their merry way discussing things they know about and advance all of our knowledge. This is a good thing to share knowledge and am glad that they invariably do in the end.

Matt and Luke (and probably others) have certainly benefited from extensive advice on their projects and ideas, and that's great.
Scott Conger

Full Flow Float Valves - deliver fuel like Henry intended!


Topic author
Luke
Posts: 165
Joined: Fri Dec 13, 2019 1:04 am
First Name: Luke
Last Name: P
Location: New Zealand

Re: A new DIY electronic coil tester.

Post by Luke » Wed Jan 01, 2020 3:42 pm

Matt,

My apologies, the screenshot of the tester switched output had some different code in the Arduino, which is why it was showing 100msec period (I'd been away for the day and forgot I'd been messing with it the night before).

Using the code as is up on the site presently the period shows up as 50.4msec (and 4msec pulse width)., I don't see there's any need to replicate the trace image - it looks just the same as previous.

The reason I'd been messing with it is because of a small bug I'd introduced around the rpm calculations! I expect you've already noted that if we look at a motor running at say 600 rpm then at 60sec/min and 1000msec/sec that's equivalent to 60000 msec / 600 = 100msec per crankshaft revolution of the motor. As it's a four-stroke it would then fire at half that speed ie. every second crank cycle) or every 200msec.

My mistake? int rpmdelay = ((60000 / rpm)/2) - (interval/1000); should read int rpmdelay = ((60000 / rpm)*2) - (interval/1000);

When corrected, and the rpm set for 600, this gives a waveform with period 200.6msec. I've not bothered to correct for the < 1msec error (due to the Arduino processing data) because I don't consider it material to the outcome of the test.

Post Reply Previous topicNext topic