
The PWM frequency is about 10 kHz and does not make a noise in the motor. The 5 K Ohm potentiometer is connected to ADC input channel 0 and is converted to 1024 (10 bit) value, this value is applied to the PWM control and produces very smooth speed control. The HEXFET type IRL1004 has extremely low on resistance (0.009 Ohm) and requires only logic level drive, in this application it does not get warm even when controlling 1 Amp motor current. according the IRL1004 data sheet it can handle much higher motor current.
DC motor speed control using PWM: [Link]

The circuit uses a constant current drive and a four wire connection to the probes. This allows almost any length of probe connecting cable without re-calibration. Surface mount chips are wonderful, but for prototype work these can be difficult to use. If you only have SMD parts available to make it easier you can construct a SO to DIP adapter.
Two Channel Thermometer: [Link]

Interfacing an Analog-to-Digital Converter (ADC) with Linux via the parallel port is fairly simple. There two major areas that need to be addressed - hardware and software. The hardware consists of the parallel port, an ADC, and an analog signal source. The software we programmed in ‘C’ language.
Interfacing Your Computer to an ADC via the Parallel Port: [Link]