Return to Index

THE LINEAR SKIN RHEOMETER -- AN OUTLINE DESCRIPTION

Prepared By Eric Goodyer of GSI Ltd

August 1998

1 Overview

In-vivo measurement of the elastic and viscous properties of skin is an essential requirement when assessing the effectiveness of moisturisers and other cosmetic skin treatments. By their very nature such measurements are difficult to perform, not just because they are in-vivo, but also because the forces and displacements that are required to be measured are extremely small - typically a peak lateral force of around 3 gf will produce displacements of less than 1 mm.

It is now possible to manufacture such an instrument which employs micromechanical moving components, and computer feedback control with full graphical display and analysis of the data in real time. Such an Instrument is the GSI Linear Skin Rheometer, which is detailed in this paper.

2 The Measurement Principle

When measuring the elastic and viscous properties of a material we are seeking to determine how far the material moves when a lateral force is applied to it. If we apply a sinusoidal force, then we expect to see a resultant displacement that also changes sinusoidally. The phase shift between the force and displacement curves is also of great interest.

To carry out this measurement a probe is attached to the surface of the skin, and a sinusoidal force is then applied along its' axis and thereby onto the skin. Typically the peak force applied will be in the region of 3g. If we simultaneously measure the displacement of the skin caused by the force then we will obtain a pair of readings as shown in figure 1. These are ideal readings, shown for the purpose of this discussion only, some real readings are shown in figure 3, and it can be seen that they do correspond reasonably well with the predicted behaviour.

Three parameters can be obtained from the curves -

F Max which is the peak force that is applied to the skin surface

P Max which is the peak displacement that occurs as a result of that force

T which is the phase shift between the two signals

The elastic component of the skin is given simply by the formulae F max / P max, and is usually expressed in units of grams force per millimetre.

The more usual way of presenting this data is to plot force directly against displacement. In which case an ellipse will be formed, as the component parts are two sine waves with an identical period, but shifted in time. Such a picture, as taken from the Goodyer Skin Rheometer, is shown in figure 2 below.

The phase shift is due to the viscous properties of the skin, and is represented in figure 2 by the area of the enclosed ellipse in units of gram force metres. In effect the area of the ellipse represents the energy that is lost in moving the probe over one complete cycle. Had the force and displacement sine waves been in phase then the resultant plot (a straight line) would have represented a perfectly elastic material.

Figure 3 below shows the real force and displacement traces that generated the ellipse in figure 2.

The area of the ellipse can be obtained in one of two ways. The easiest method is to perform an analysis of the ellipse directly, and to attempt to fit an ellipse to the real data by analytical techniques (e.g. such as finding the true centre, and determining the major and minor axes).

 

A more rigorous approach is to perform a regression on the original sinusoidal data in order to solve for the equations -

F = FmaxSin(t)

P = PmaxSin(t+T)

Where

F = instantaneous force

Fmax = the maximum force

t = time over one cycle in radians

P = instantaneous displacement

Pmax = the maximum displacement

T = the phase shift in radians

Having solved for these equations it is then a straightforward problem to solve the integral over one cycle the represents the area of the ellipse

These calculations are automatically performed by the PC that operates the Goodyer Skin Rheometer, with tabulated results stored to disk for later analysis by statistical and other programmes of the user's own choice.

To summarise, what we are trying to do is to measure the elastic and viscous properties of skin. This is achieved by applying a sinusoidally varying force to the skin, and measuring the displacement that results. The resultant signals are a sine wave of force with respect to time, and a resultant displacement with respect to time. The ratio of peak force to peak displacement is a measure of the elastic properties of skin, and the phase lag between the two sine waves is a measure of the viscous properties of skin. It is usual to plot the two signals against eachother, as shown in figure 2, where it can be seen that the slope of the ellipse along its' major axis is the elastic parameter, and the area of the ellipse is the viscous parameter.

3 How It Is Done

The key to the design of the Linear Skin Rheometer was the means to apply a continuously varying, but controlled, force to the surface of the skin. Figure 4 shows a schematic of probe head design.

From the measuring head a light stiff probe protrudes. The far end of which is bent through a right angle and has at its' tip a small round disc, which is attached to the skin under study by means of double-sided adhesive tape. Inside the measuring head, the probe is attached to a load cell, which is moved along the probe axis by a motor-driven lead screw. An LVDT is used to monitor the position of the load cell and probe.

An IBM (or compatible) PC is used to control the movement of the sensing head. Both force and position are continuously monitored at a rate of 1 kHz using a 12-bit ADC plug in card. The motor is controlled with an analogue output signal also generated by the PC. The desired force/time cycle, which is normally a single sinusoid, is initially calculated from an equation, and then stored in memory as a table of values. The actual force applied to the probe is compared with the desired value in the table 1000 times per second. A feedback loop is used to control the motor, which moves the load cell in such a way as to minimise the discrepancy. The force applied thus follows closely the desired force/time cycle. The control loop uses an algorithm with proportional and integral terms, whose relative weighting can be varied.

The PC logs all the force and displacement readings over the complete measurement cycle, which is usually set to be 3 seconds thus generating 3000 pairs of points. This data is then used to generate the graphs that are shown above, and are analysed to determine the elastic and viscous parameters.

The load cell used in the rheometer is supplied by Maywood and has a full scale reading of 10g, with an overall accuracy of better then 0.02g. The LVDT is supplied by Solartron, type DF2.5, which has an accuracy of better than 4 microns. The motor is supplied by Maxon.

4 Software

The rheometer software runs on a standard PC, and is sourced in C. Of particular interest is the means by which the closed loop control is achieved. As the control loop is a sampled data system it is essential that we generate a fast real time clock, which is used to trigger the measurement of data samples, and the update of the control signal output. All IBM PC's have as standard a user interrupt (on interrupt vector 0x1c) called the TIMER TICK, which is available for programmers to use as a regular timing source. This timing signal is generated from the 1.192 MHz system clock, via an INTEL 8253 programmable interval timer. The BIOS presets this timer to it's full scale value of 65536, therefore the TIMER TICK interrupt rate is normally 18.188 Hz. This is far too slow for a sampled data system.

The solution is to reprogramme the 8253 divider to give us our desired frequency, which in this case is 1 kHz. An 8253 has 3 separate timers, of which timer 3 is used to generate the timer tick. To achieve an interrupt rate of 1 kHz we must divide down the input clock by 1192 or 4A8 in HEX notation. Timer 3's control port is located at I/O address 0x43, and new data is loaded into I/O address 0x40. First we need to command the 8253 to accept a new divisor, which is achieved by writing the command pattern 0x34 to address 0x43. We must then follow this command immediately with the 16 bit divisor, low byte first.

The code below details a function start() that reprogrammes the 8253 to give an interrupt rate of 1 kHz.

void start(void)

{

rate = 65536 / 0x4a8 ; // calculate new rate for the real time interrupt

rti_rate = 0; // used in interrupt routine to restore original timing

outp(0x43,0x34); // command to reload 8253 timer

outp(0x40,0xa8); // output low byte of new divisor

outp(0x40,0x04); // output high byte of new divisor

}

However this is not the end of the story. The 8253 output actually triggers interrupt number 0x8, which is used by the PC for a number of important internal functions, such as monitoring disk drive heads and maintaining it's own time of day clock. Only when the PC has finished what it wants to do does it issue an interrupt 0x1c for us to make use of. Therefore if we change the 8253 timer as indicated above then we will upset the workings of the PC. If you do not care about the internal time of day AND DO NOT USE DISK DRIVES whilst the 8253 is reprogrammed, then you do not necessarily need to worry. You are however strongly advised to restore the timing of interrupt 0x8 to what it should be.

The solution is as follows. Do not use interrupt 0x1c, instead replace the BIOS interrupt function at 0x8 with one of your own. In this case it will be our control programme. Inside the new interrupt 0x8 derive back the original timing requirement (by a simple counter), and call the BIOS interrupt at the correct interval. In this way you can generate your own fast timer without harming the PC's own internal operations.

The code that achieves this is given below

 

void start(float freq)

{

int divisor ; // divisor is the new value loaded into the 8253

divisor = (int)(1192500.0 / freq) ; // derive divisor from desired interrupt rate

rate = 65536 / divisor ; // calculate new rate for the real time interrupt

if (!rate) rate = 1 ; // ensure always at least 1

rti_rate = 0; // zero the interrupt occurrence counter

outp(0x43,0x34); // command to reload 8253 timer

outp(0x40,(unsigned char)divisor & 0xff); // now output the new divisor LSB first

outp(0x40,(unsigned char)(divisor >> 8)); // followed by the MSB

old_rtientry = _dos_getvect(0x8); // save the old interrupt 0x8 entry

_dos_setvect(0x8,rtientry); // and set it to our new desired function

}

static void interrupt far rtientry()

{

// INSERT HERE YOUR DESIRED NEW CODE

// then increment the real time interrupt occurrence counter

// and test to see if we have reached the correct time to execute the original

// interrupt function supplied by the IBM BIOS

if (++rti_rate == rate)

{

rti_rate = 0 ; // if here it is time to do the original interrupt as well

_chain_intr(old_rtientry); // so go to it

}

outp( INTCTRL, INTEOI ); // else send EOI to 8529 interrupt controller chip

}

 

// this code restores the original BIOS interrupt, and must be called at the end

void stopf(void)

{

dos_setvect(0x8,old_rtientry);

outp(0x43,0x34);

outp(0x40,0x0);

outp(0x40,0x0);

}