This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to Calibrate Timer?

I use NRF52832 and sdk13.0.0 to develop my own application. I want to generate 1000 Hz Timer to trigger the ADC. I use the timer 1 to generate 1000 Hz. But when I use GPIOTE to test the frequency, I find that the frequency is 500.014 Hz(500.014 x 2 = 1000.028 Hz).I have open the crystal oscillator as HFCLK.

Because I need two devices to generate the same frequency to sample the sensor data, so I need the accurate frequency. So at least I need the two device to generate the same frequency. But when I download the same program to two device ,the frequency is different: one is 500.014 Hz ,the other is 500.012Hz. What I should do?

My timer code is:
//========================
//timer initial
//========================
nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
timer_cfg.bit_width = NRF_TIMER_BIT_WIDTH_32;
err_code = nrf_drv_timer_init(&m_timer1, &timer_cfg, timer_dummy_handler);
APP_ERROR_CHECK(err_code);
/* setup m_timer1 for compare event every 1ms */
uint32_t ticks = nrf_drv_timer_us_to_ticks(&m_timer1, 1000);//ticks = 0x3E80
nrf_drv_timer_extended_compare(&m_timer1,
                               NRF_TIMER_CC_CHANNEL0,
                               ticks,
                               NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK,
                               false);

The question one is: how can I calibrate the timer to generate accurate 1000 Hz? The question two is: how to make sure the two device to generate the same frequency?

Parents
  • There is no need nor capability for calibrating the nRF timer driver. The only reason for the frequency to be off is either your 32MHz clock is incorrectly loaded or you failed to request HFEXT or essentially turn on HFEXT and instead it is running on HFINT which is not an accurate clock source. You always need to request HFEXT in your code if you require its accuracy.

  • Yes, I using 10 ppm 32mHz crystals. I will try the way of routing PClk to GPIO and check the 32MHz crystals. But how can I route PClk to GPIO, I don't find the way? I read the GPIO register,but not find the way. Do you think the offset of 1000 +/- 0.026 Hz is normal ? Because the two user board almostly have the same offset. Maybe the 32mHz is not accuracy or the 12pF capacitance is not accuracy.

Reply
  • Yes, I using 10 ppm 32mHz crystals. I will try the way of routing PClk to GPIO and check the 32MHz crystals. But how can I route PClk to GPIO, I don't find the way? I read the GPIO register,but not find the way. Do you think the offset of 1000 +/- 0.026 Hz is normal ? Because the two user board almostly have the same offset. Maybe the 32mHz is not accuracy or the 12pF capacitance is not accuracy.

Children
No Data
Related