Go Down

Topic: SICK sensor and AD wobble (Read 5007 times) previous topic - next topic

2Tricky

#15
Oct 15, 2012, 09:14 pm Last Edit: Oct 15, 2012, 09:32 pm by 2Tricky Reason: 1
In principle this is the sensor but mine is a rare variant, NT6-03014 (from memory) with a 4m cable, which Sick has assigned a new part number to.

The beuaty about these great yester year devices (unlike many modern eyes) is that they were made with an anaolgue output too.  If you dig into the specs you'll find references to it: They have a green light and a red one and this topic ties nicely into the figures I've just recieved from the analysis as promissed.

Following my rationalisation of what matters and what doesn't, I have the following (all relative to 1024 values [10 bits]):
Set to the green light...
A glossy white mark: 75..77
A glossy black mark: 15..17

Set to the red light...
A glossy white mark: 201..204
A glossy black mark: 37..39

The key to this project holding water is a matter of the ratio of distance moved (image movement beneath the sensor) to ADC change.  The green gives around 0.1mm per count and the red around 0.01mm.

My conclusion is that 0.01mm is fine whereas 0.1mm isn't and unfortunately this is the best scenario as other colours produce a much smaller range.  Therefore I feel I need to continue refining.  I would be gratefull for peterH (author of 20 bit suggestion) or of course for anyone who knows some ins and outs of taking the 20 ADC bit route because I'm new to this and hoped my little Arduino would cope.

Thanks a lot all.

2Tricky



If your requirements are so close to the resolution of the ADC that a variation of one or two is important to you, you probably need to use a more precise ADC.


Under battery power the ADC is pretty well behaved (certainly noise below 1 lsb) - I suspect this is power supply noise - is the PSU a switching one?  Extra decoupling can help.


MarkT sorry, I have little idea what a switching supply is but I can say that it is pretty cheap.  It is surprisingly accurate though despite this (compared with other supplies I've measured), reading 11.94 for a 12v supply.

Cheers

retrolefty

The first thing I would try as a simple experiment would be to remove the external Aref voltage you are applying to the Aref pin and use the instead default internal Avcc reference and see if your wobble improves, gets worst, or remains the same.

Lefty


holmes4

I tried a simple analogRead of a simple two resistor voltage divider and got "wobble", readings of 512 or 511. Your circuit is much more complex than mine!, so many more sources of wobble.

I think your in the area where real circuits and theory differ.

Possible sources of wobble a 1 part in a 1000 wobble.

1. The output from your PS is not as good as you think. If you looked at it with a very good 'scope you will find it varies even with no load, at mains frequency.

2. The load is never as constant as you think. A lot of chips draw more current on the rising/falling edge of the clock than in between.

3. Ambient light changes, some bulbs flicker at the mains frequency, this may be, just, enough.

4. Induction in that 4 meter cable (from near by mains cables) is the cable shielded?

5. Small changes in temperature.

6. Vibration.

Mark


2Tricky


The first thing I would try as a simple experiment would be to remove the external Aref voltage you are applying to the Aref pin and use the instead default internal Avcc reference and see if your wobble improves, gets worst, or remains the same.

Lefty


Lefty, Aref was only tried after suffering with wobble and made very little perceivable difference compared with the Unos' default 5V.  I should just check: When you say 'internal', do you mean something other than using the 'DEFAULT' Const when setting the reference in 'analogReference()'...this is how it was being used prior to using the Aref pin (although it was used by default, i.e. no specific call to 'analogReference()')...

Thanks Lefty

2Tricky



4. Induction in that 4 meter cable (from near by mains cables) is the cable shielded?

Mark


Mark after I mentioned 4m, I thought that it might lead (no pun intended) to trouble.  In fact we have two NT6's in this embryonic system and the newer (recently bought - albeit an old model) was on my mind.  The irony being that this is the eye that is providing the digital signal, whereas the other analogue one has a miserly 10" ± (254mm ± in new money) of cable - both Sick cables are shielded.

N.B. In terms of which model the analogue NT6 is, I think it might be the ...22 as discussed in an earlier post.

Thanks Mark

retrolefty



The first thing I would try as a simple experiment would be to remove the external Aref voltage you are applying to the Aref pin and use the instead default internal Avcc reference and see if your wobble improves, gets worst, or remains the same.

Lefty


Lefty, Aref was only tried after suffering with wobble and made very little perceivable difference compared with the Unos' default 5V.  I should just check: When you say 'internal', do you mean something other than using the 'DEFAULT' Const when setting the reference in 'analogReference()'...this is how it was being used prior to using the Aref pin (although it was used by default, i.e. no specific call to 'analogReference()')...

Thanks Lefty


No, I meant the DEFAULT mode with no analogReference command issued.
I worked with lots of ADC and DAC stuff in a oil refinery before retirement, so have some experience with trying to make quality analog voltage conversions in the real world. My opinion of the AVR 10 bit ADC is that it is very handy for hobby type projects and applications but falls pretty short of being a instrumentation quality measurement device. In todays world there are so many really nice and affordable external ADC chips and modules available and many are easy to interface to an arduino via SPI or I2C. So if accuracy, resolution, repeatability, common noise cancellation via differential inputs are important to your application I would suggest you look into external ADC converters.

Lefty

2Tricky

#22
Oct 16, 2012, 06:07 pm Last Edit: Oct 16, 2012, 06:11 pm by 2Tricky Reason: 1
Lefty just in case I've negated a negative (!?), the first implementation displayed similar wobble without the function 'analogReference()' being called.

It's interesting what you say about alternative chips and I wonder whether you have any models in mind.  I admit that I'm trying to do this on half a shoe string, but a few quid of prudent expenditure is surely horses for courses.

Thanks for your view...

retrolefty


Lefty just in case I've negated a negative (!?), the first implementation displayed similar wobble without the function 'analogReference()' being called.

It's interesting what you say about alternative chips and I wonder whether you have any models in mind.  I admit that I'm trying to do this on half a shoe string, but a few quid of prudent expenditure is surely horses for courses.

Thanks for your view...


The only one I've had first hand experience with on a arduino is the TI ADS1115 16 bit 4 channel (or 2 differential channels). http://www.ebay.com/itm/4-Input-16-Bit-I2C-Analog-Digital-Breakout-Micro-Controllers-Arduino-/330761041957?pt=LH_DefaultDomain_0&hash=item4d02e4f825

I have a check out sketch code available if you actual try one of these out.

Lefty

2Tricky

#24
Oct 18, 2012, 12:26 pm Last Edit: Oct 18, 2012, 01:03 pm by 2Tricky Reason: 1
Lefty I'm amazed at how small the chip is, no wonder it's offered with a breakout board.  Do you happen to know of one that might be attachable to a breadboard so that I can experiment cheaply.  I appreciate that this is the only one familiar to you in an Arduino context, but guessing that I2C is I2C is I2C (unless perhaps it's revision 4 - I don't know) and provided I can get insight into the 'quality' of the chip, perhaps I could use another without much code change...

N.B. I have now tested the current AREF setup with a 12V battery.  Both Sicks were powered from it, as was the AREF (using a zener 4V7 to cut it down).  The signal from the digitally configured Sick used a simple divider to reduce 12V to around 5V and the analogue output was just as nature intended because it is low anyway (even though the specs say max 6V, I've never seen it above 3V and only then when it was 'blinded' by perpendicular light I think).  One thing though, the Uno was powered by USB which was still being used to give feedback to the PC.

Cheers

dhenry

Quote
TI ADS1115 16 bit


Let me be the first to say that unless you are a very good engineer, using a 16-bit adc can be quite a challenge. And unless you are some analog god, using a 24-bit adc can be downright impossible.

Rather than increasing the bits, you should think if you need that much resolution and if that high of a resolution makes sense for your application (for example, is it even that accurate?).

2Tricky

#26
Oct 18, 2012, 03:11 pm Last Edit: Oct 18, 2012, 03:38 pm by 2Tricky Reason: 1

Quote
TI ADS1115 16 bit


Let me be the first to say that unless you are a very good engineer, using a 16-bit adc can be quite a challenge. And unless you are some analog god, using a 24-bit adc can be downright impossible.

Rather than increasing the bits, you should think if you need that much resolution and if that high of a resolution makes sense for your application (for example, is it even that accurate?).



dhenry I think it will help if I clarify with a bit more context: The best scenario from the ratio of the 'image movement to ADC output' point of view is using the red light and comparing white with black marks. The technique used (so far) places the light half on one colour and half on the other colour, which provides the average greyscale as output.  To move from fully on one colour to fully on the other the image needs to travel around 1.5mm which provides less and less resolution the lower the relative greyscale values get.

As mentioned, 0.01mm per integer from the ADC is adequate, but 0.1mm isn't.  For example: If a small sheet (all sides are in centre vision) of paper has a black border of say 1mm, and a 0.1mm error occurs along one axis, one side will become 0.9mm and the other 1.1mm, meaning the smaller will be nearly 20% smaller which humans can see quite easily and may or may not hurt sensibilities (depending upon the nature of the onlooker!) and this assumes the conversion is accurate and doesn't suffer from noise etc.

It is also worth noting that my current quest is to measure any error rather than applying any correction (I'm treating subsequent correction as incidental).

You've got me worried though and I would appreciate some detail if you are in the position to do so...Thanks a lot

dhenry

I don't know your setup that well but if you are using dividers or voltage references, think about what kind of resistors /Vref you will need in order to maintain the comparability of 16-bit adc from source to source.

With a good layout engineer and a good analog engineer, you may be able to get a 16-bit adc to work in the real world environment. But that requires a lot of work and luck. Most people end up doing is discarding the last few digits.

PeterH


The technique used (so far) places the light half on one colour and half on the other colour, which provides the average greyscale as output.  To move from fully on one colour to fully on the other the image needs to travel around 1.5mm which provides less and less resolution the lower the relative greyscale values get.


This is the first time I've had any idea what you're using the A/D input for. Is it correct that you're using the dark/light contrast to find the position of a boundary between dark and light parts of an image?

How accurately can you position the sensor? Is it feasible to scan the sensor across the boundary? If so, I suspect you could get a much more precise position for the boundary by interpolating the position of the '50%' brightness point from a sequence of brightness readings in different positions rather than needing a single brightness reading to give you a hugely precise measurement of the proportion of dark/light areas within the image.
I only provide help via the forum - please do not contact me for private consultancy.

retrolefty

Quote
Lefty I'm amazed at how small the chip is, no wonder it's offered with a breakout board.  Do you happen to know of one that might be attachable to a breadboard so that I can experiment cheaply.


Yes, that is why they supply those header pins pictured with the module, you solder the small pin ends to the module and then you can plug the module into any standard solderless or solder breadboard that uses .1" hole spacing.

Go Up