1 2 Previous Next 15 Replies Latest reply on Dec 10, 2014 10:48 AM by user_37207811

    Sample & Hold not giving expected results

    user_37207811

      Hi,

         

      I'm using the sample & hold component in my proyect since I need to sample a signald comming from a photosensor which receives light from a very short pulse of light which comes from an LED.

         

      The  problem is that when I use the sample and hold circuit I get a noisy signal compared to the one I get when sampling without the H&S.

         

      In my case I'm turing on the LED, activating the H&S with a Control register connected to the clk input of the sample and hold , then turning of the LED and lastly I use the SAR ADC to sample 64 times the voltage in the sample and hold. I'm sampling 64 times to get a better resolution. 

         

      When I omit the S&H the signal is good but then it takes too much time for the ADC to make the 64 samples. If I add the S&H it gets very noisy. 

         

      I've checked the TRM which in page 271 shows the Track and Hold diagram and it has a hold cap of 12pF and a voltage follower. 

         

      If I use the S&H making just one sample at a time it gets a "smooth" signal.

         

      I think the might be that the S&H might not be holding the voltage enough time to do all the conversions.

         

      I've tried adding a unity gain PGA between the S&H and the ADC with the same results.

         

      I'm doing this with a pair of SAR ADCs, Muxes and S&H because I need to sample 10 sensors, 5 on each ADC , and I need to reduce the time the LEDs are on as much as possible.

         

      Does anyone have any idea why this is happening?

         

      Code:

         

             AMux_1_Select ( sensorSelected);

         

              AMux_2_Select (sensorSelected);

         

              CyDelayUs (50);  // wait for Muxes to switch

         

             

         

             LED_ON();

         

              SH_ControlReg_Write(0); //Start holding and sampling

         

              CyDelayUs (550);  

         

              SH_ControlReg_Write(1);   //Stop sampling        

         

            LED_OFF();

         

              sampleADC (firstLayerSensorOrder[groupLED],firstLayerSensorOrder[groupLED], &sampleTop, &sampleBot);

         

              sampleADC (firstLayerSensorOrder[groupLED]+1,firstLayerSensorOrder[groupLED]+1, &sampleTop, &sampleBot);

         

       

         

      Thank you.

        1 2 Previous Next