Re: IIO: Interface for capacitance inputs (and outputs)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/02/11 15:58, Michael Hennerich wrote:
> On 08/02/2011 11:06 AM, Jonathan Cameron wrote:
>> On 08/02/11 09:11, Michael Hennerich wrote:
>>> On 08/01/2011 07:21 PM, Jonathan Cameron wrote:
>>>> Hi Michael / All,
>>>>
>>>> We have a quite a few capacitance drivers. They are all simple and so
>>>> would be easy to clean up, except for the fact that we don't have an abi
>>>> for them.
>>>>
>>>> So lets make one up. How about the following?  Main choice is the units...
>>>> Doing it with Farads leaves us with a lot of needed decimal places, but then
>>>> we need a lot anyway for these so what the heck.  We are going to need those
>>>> types with holes in them..
>>> Hi Jonathan,
>>>
>>> These devices typically feature an single digit pF input range(2..8 pF).
>>> Going with a scale in Farads is probably not going to work.
>>> What do you mean by types with holes in them?
>> IIO_VAL_INT_PLUS_FEMTO where FEMTO bit has maximum of 999999999  Thus there are quite a
>> few leading zeros.
> The part has a full range of +/- 4.096pf and it is a 24-bit converter.
> We like to store the conversion result as 3-byte direct readings from the device result register.
> 
> Thus the Farad scale would need to be
> 8.192E-12 / 2^24 = 4.8828125E-19 = 0.00000000000000000048828125.
> 
> I don't think this makes any sense?
It's certainly uggly.
> 
>>> We need something scanf() and friends can eat...
>> Yup.
>>> In addition we have enough scale bits before the decimal point as well.
>> Please give an example why. Do we have a calibscale type attribute here?
> I don't understand, why calibscale would matter here?
Because it's the only item I can think of where a value of 
0.99999999999999999999999999999999999992 would make sense and that's the one
nasty case that requires a 'lot' of digits to represent currently).
> 
> But sure we have a in_capacitanceY_scale.
> If we say the in_capacitanceY_scale targets pF.
> 
> Then we still need enough fractional digits, due to the 24-bit nature of the device.
Sure, it's a large number of digits. I'm increasingly wondering if we move everything to
64 bit just to give us the space. This stuff is all ready relatively slowly anyway.
> 
> Now not talking about this part, maybe something that can measure ranges up to 1mF
> - which is quite a huge capacitance.
> If the scale targets pF, then we actually use the pre-decimal point positions we have.
Fair point and using that we can go up to very large capacitances if there is ever the need.
> 
> 
>>> I would make the scale targeting pF of uF.
>> I thought about that but then we are back to having a fairly illogical set of
>> units for the different types of devices.
> That's in the nature of these units.
> 1V, 1A is pretty common 1F is not.
I know, but despite that it would be nice to be consistent.
> Either move to an floating point exponential notation, or balance the scale somewhere in the middle.
We could do the exponential notation I suppose.

Maybe picofarads is the right option.
>>>
>>>> What:           /sys/bus/iio/devices/iio:deviceX/in_capacitanceY_raw
>>>> What:           /sys/bus/iio/devices/iio:deviceX/out_capacitanceY_raw
>>>> What:           /sys/bus/iio/devices/iio:deviceX/in_capacitanceY-capacitanceZ_raw
>>>> KernelVersion:  3.1
>>>> Contact:        linux-iio@xxxxxxxxxxxxxxx
>>>> Description:
>>>>                   Raw (unscaled no bias removal etc) capacitance value from/to
>>>>                   channel Y. After application of _offset and _scale, units will
>>>>                   be Farads.
>>>>
>>>> Additional entries for:
>>>>
>>>> What:           /sys/bus/iio/devices/iio:deviceX/in_capacitanceY_offset
>>>> What:           /sys/bus/iio/devices/iio:deviceX/in_capacitanceY_scale
>>>>
>>>>
>>>> With the ad7745 the capdac does seem to be available off chip.
>>> Why do you think the CAPDAC is off-chip on the AD7745?
>>> The CAPDAC can be seen as a negative capacitance connected internally
>>> to the Cin pin.
>> Oops. That was meant to be doesn't not does... Sorry for the confusion.
>>>>    If I understand
>>>> their use correctly it could just be treated as a _calibbias parameters?
>>> Yes - it can be seen as a bias - however why do you have out_capacitanceY_raw then?
>> :) Because I hadn't looked at the datasheet properly when I wrote that bit and forgot
>> to go back and edit it.  This really wasn't my most coherent email ever.  Google isn't
>> feeding me any digital to capacitance devices so looks like the output side of things
>> is irrelevant.
>>>> (the complexity being that there are two..)
>>> Yes - one for each Cin(+|-) pin.
>>> More tricky on the AD7746, since there are only two CAPDACs for two Cin(+|-) pin pairs.
>> As you state below that you tend to save and restore the zero offset, can we not do the
>> same with the capdac values?  If so they can be treated from a userspace point of view
>> as completely independent.
> Sure
>>>>     Naturally there is also a
>>>> calibration register so this gets somewhat tricky...
>>> The calibration register typically holds the zero-scale calibration coefficient.
>>> It's automatically updated following the capacitance offset calibration.
>>> Tricky here is that there is only one on the AD7746, so the values must be saved
>>> and restored when switching between the input pairs.
>>>
>>>> Is there an optimum
>>>> combination for a given desire measurement range?
>>>>
>>>>
>>> Yes there is - large offsets>  1 pF should be eliminated by the CAPDACs.
>> Fair enough.  So what is the conclusion for what interface elements we
>> actually need to control this?
> Let me think about this a bit more.
Will do.
> 
>>> from the datasheet:
>>>
>>> CAPACITIVE SYSTEM OFFSET CALIBRATION The capacitive offset is
>>> dominated by the parasitic offset in the application, such as the
>>> initial capacitance of the sensor, any parasitic capacitance of
>>> tracks on the board, and the capacitance of any other connections
>>> between the sensor and the CDC. Therefore, the AD7745/AD7746 are not
>>> factory calibrated for capacitive offset. It is the user’s
>>> responsibility to calibrate the system capacitance offset in the
>>> application. Any offset in the capacitance input larger than ±1 pF
>>> should first be removed using the on-chip CAPDACs. The small offset
>>> within ±1 pF can then be removed by using the capacitance offset
>>> calibration register. One method of adjusting the offset is to
>>> connect a zero-scale capacitance to the input and execute the
>>> capacitance offset calibration mode. The calibration sets the
>>> midpoint of the ±4.096 pF range (that is, Output Code 0x800000) to
>>> that zero-scale input. Another method would be to calculate and write
>>> the offset cali-bration register value, the LSB is value 31.25 aF
>>> (4.096 pF/217). The offset calibration register is reloaded by the
>>> default value at power-on or after reset. Therefore, if the offset
>>> calibration is not repeated after each system power-up, the
>>> calibration coefficient value should be stored by the host controller
>>> and reloaded as part of the AD7745/AD7746 setup. On the AD7746, the
>>> register is shared by the two capacitive channels. If the capacitive
>>> channels need to be offset calibrated individually, the host
>>> controller software should read the AD7746 capacitive offset
>>> calibration register values after performing the offset calibration
>>> on individual channels and then reload the values back to the AD7746
>>> before executing a conversion on a different channel.
>>>> All comments welcom.
>>>> Jonathan
>>>> -- 
>>>> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>>>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>>
>>>
>> -- 
>> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux