Autor Tema: Calibrar el rtc por "smooth calibration"  (Leído 10248 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Calibrar el rtc por "smooth calibration"
« en: 08 de Enero de 2020, 18:21:30 »
¿Alguien que me pueda explicar en que consiste este proceso de calibración?

Lo poco que encuentro es solo en el "reference manual" y no termino de entenderlo. Trabajo con un STM32G030 y un reloj externo de 32,768KHz y el rtc se me adelanta 8 segundos diarios.
Por lo que veo es que hay que calibrarlo.
Pero no veo como y tampoco encuentro como hacerlo, ni en los ejemplos de ST ni de nadie, solo he encontrado una cosa bastante vieja que utiliza librerias antiguas y que es bastante dificil de leer, por que no puedo abrirlo en el STM32CubeIDE (antiguo atollic).

En el caso de que esto sea muy difícil, ¿me aconsejais mejor colocar un rtc externo? los externos hay que calibrarlos o vienen calibrados de fabrica?

un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #1 en: 08 de Enero de 2020, 21:30:48 »
Lo que tenes de "calibracion" es el trimming de los osciladores internos, el oscilador externo no se puede calibrar (por software).

Generalmente estos osciladores internos varian bastante la frecuencia con el voltaje y con la temperatura. Asi que usualmente si tenes algun reloj externo podes calibrarlo, es decir modificar apenas la frecuencia con el trimming para que en 1 ciclo del reloj externo entre justos los 100 ciclos internos (un ejemplo). De esa forma calibrarlo.

Es de observarse que si o si se requiere un reloj externo estable y mientras mas preciso/exacto mejor. Pero si usas un reloj que varia en frecuencia entonces no hay forma de calibrarlo a los internos :P.

Ajustar un reloj externo no es posible mas alla del cristal, sino sera problemas del layout del cristal.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #2 en: 09 de Enero de 2020, 08:05:11 »
esto es lo que quiero hacer:

Citar
Generalmente estos osciladores internos varian bastante la frecuencia con el voltaje y con la temperatura. Asi que usualmente si tenes algun reloj externo podes calibrarlo, es decir modificar apenas la frecuencia con el trimming para que en 1 ciclo del reloj externo entre justos los 100 ciclos internos (un ejemplo). De esa forma calibrarlo.

tengo un reloj externo de 32.768 Khz con un rutado, aconsejado por el fabricante y con unos condensadores de 6,8pF.

Y aunque entiendo el procedimiento, no se llevarlo a cabo, esto es lo que me dice el reference manual, pero no se como plasmarlo a C, a ver si alguien me echa una mano en eso o sabe de algun ejemplo de aplicación de ST o algo:

Citar
RTC smooth digital calibration
The RTC frequency can be digitally calibrated with a resolution of about 0.954 ppm with a
range from -487.1 ppm to +488.5 ppm. The correction of the frequency is performed using
series of small adjustments (adding and/or subtracting individual RTCCLK pulses). These
adjustments are fairly well distributed so that the RTC is well calibrated even when observed
over short durations of time.
The smooth digital calibration is performed during a cycle of about 220 RTCCLK pulses, or
32 seconds when the input frequency is 32768 Hz. This cycle is maintained by a 20-bit
counter, cal_cnt[19:0], clocked by RTCCLK....

punto 23.3.13 de la pagina 645.

https://www.st.com/content/ccc/resource/technical/document/reference_manual/group0/fd/a3/20/58/ac/b0/48/23/DM00463896/files/DM00463896.pdf/jcr:content/translations/en.DM00463896.pdf

Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #3 en: 09 de Enero de 2020, 21:09:20 »
Tal ves este PDF te ayude a entenderle:

https://www.st.com/content/ccc/resource/technical/document/application_note/group0/71/b8/5f/6a/8e/d5/45/0a/DM00226326/files/DM00226326.pdf/jcr:content/translations/en.DM00226326.pdf

Supuestamente tenes ejemplos, aplicados a microcontroladores ST.
Estoy intentando ayudarte en el poco tiempo que poseo juaperser, disculpa que no me pueda poner a investigar y explicarte las cosas, realmente no tengo demasiado tiempo.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #4 en: 10 de Enero de 2020, 05:15:31 »
Tal ves este PDF te ayude a entenderle:

https://www.st.com/content/ccc/resource/technical/document/application_note/group0/71/b8/5f/6a/8e/d5/45/0a/DM00226326/files/DM00226326.pdf/jcr:content/translations/en.DM00226326.pdf

Supuestamente tenes ejemplos, aplicados a microcontroladores ST.
Estoy intentando ayudarte en el poco tiempo que poseo juaperser, disculpa que no me pueda poner a investigar y explicarte las cosas, realmente no tengo demasiado tiempo.

No te preocupes, ayuda lo que puedas y cuando puedas y si quieres claro, yo te lo agradezco.

Este documento no lo había visto, había visto otro mas antiguo, voy a leermelo y a ver que saco en claro, a ver si esta tarde puedo postear algún avance.

muchas gracias.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #5 en: 11 de Enero de 2020, 15:56:01 »
A ver despues de leerme el documento este veo que existen varias formas:

existen dos registros para sumar o enmascarar pulsos del reloj y así ajustar la frecuencia, el CALP y el CALM del registro RTC_CALR

estos pulsos se suman o restan por ventanas de 32 segundos (aunque pueden ser de 16 u 8 tambien si los configuras pero por defecto 32)

El problema es como medir este error, el documento dice que para verificarlo puedo usar la salida de 1Hz, Alarmas de menos de 1 seg, o el temporizar de wake up.

Vale para calibrar uno mediria la salida de 1 Hz con un osciloscopio y lo haría a mano, pero que pasa si quiero hacer 2000 sistemas iguales? no puedo hacerlos uno a uno.

Si realimento el pin de 1Hz por otro pin y lo capturo con un timer, estoy también metiendo el error del reloj del sistema, no se si esto es buena idea.

luego hay otro registro, que sirve para sumar o restar segundos el "RTC shift" este lo pones tu manualmente por lo que entiendo.

¿cual seria la mejor manera de proceder?

En el ejemplo, necesitas una señal de 1Hz externa para calibrar el sistema, no creo que sacarla de otra para del micro sea correcto por que tendrá incluso mas error, pero para un aparato del que se vayan a fabricar cientos o miles no me parece muy lógico tener que hacer esto uno a uno ademas de tener que esperar 32 segundos a que se calibre cada uno.
y añadir un sistema que de una señal de 1Hz exacta tampoco me parece que sea la solucion ya que encarece el sistema,

Citar
The application is based on the following four steps:
1. A 1 Hz reference clock is connected to TIM3 through the PD2 GPIO.
2. TIM3 is configured to generate a rising edge after 32 x 1 Hz reference rising edges.
This gives an event every 32 seconds.
3. TIM2 is configured to increment its counter on CLK_RTC, to get the counter value on
the rising edge generated by TIM3 and to store it in the TIM2_CCR1 register. It then
reset itself.
4. The Cortex®-M4 core gets the TIM2_CCR1 value, compares it with the number of
CLK_RTC cycles expected in 32 seconds and processes the comparison results to
update the CALP and CALM fields of the RTC_CALR register.
The calibration is continuous.

un saludo.
« Última modificación: 11 de Enero de 2020, 18:09:02 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #6 en: 11 de Enero de 2020, 21:36:25 »
Estuve leyendo y tratando de entender lo que plantea el documento.

La calibración es para cuando tengas un oscilador que NO es demasiado exacto. Tal como el LSE del micro.
Y siempre necesitas una referencia externa y precisa, que seria tu oscilador externo.

El problema es que creo que estas planteando "corregir" lo que te presenta el cristal de 32KHz, y para eso necesitas otro oscilador externo MEJOR que el anterior.
Encima tenes desviaciones de frecuencia por temperatura y voltajes por lo tanto como bien dice al ultimo, este proceso de calibracion debe ser continuo y no solo una ves al inicio.

¿A que lleva a esto?
Que si o si uses un oscilador externo "bueno". No queda otra.

Citar
ademas de tener que esperar 32 segundos a que se calibre cada uno.
Depende, si haces llegar la señal a todos juntos, si 32 segundos te podria llevar caibrar muchos de golpe.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #7 en: 11 de Enero de 2020, 21:52:02 »
Lo primero que necesitas es una señal calibrada de 1Hz, de referencia.
Te recomiendo comenzar con un GPS, que tiene una señal de 1PPS (Pulso Por Segundo) con bastante precisión (unos cientos de nanosegundos).

A continuación necesitas hacer un buen frecuencímetro que mida la frecuencia del clock del RTC con precisión de 1 parte por millón (6 decimales) y a partir de ahí calcular el smooth calibration necesario para compensar el error.
Ese frecuencímetro puede ser externo al micro y enviar la calibración o puede ser interno al micro (más recomendable para simplificar el circuito total)

Por ejemplo puedes comenzar a medir pulsos del RTC clock cuando llegue el primer pulso por segundo. Después mides 32764 pulsos del reloj y a continuación mides los microsegundos hasta que llega el siguiente pulso por segundo. Deberían ser 122 microsegundos. Cualquier desviación es el error a corregir. Es solo un ejemplo. Hay más maneras de realizarlo.

Un Saludo.
« Última modificación: 12 de Enero de 2020, 14:05:36 por Picuino, Razón: cambiar smooth »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #8 en: 12 de Enero de 2020, 07:40:53 »
Con el frecuencímetro me he equivocado un poco, porque el método anterior pierde hasta un pulso inicial de 32kHz y eso es mucho.

Lo mejor es medir el tiempo desde la señal de 1 PPS hasta el siguiente pulso de 32kHz y medir los pulsos de 32kHz entre 2 señales de 1 PPS. A partir de ahí se calcula el tiempo total y el número de pulsos de 32kHz totales. Con eso se puede calcular la frecuencia y a partir de la frecuencia, el ajuste necesario.

Un poco laborioso, pero en 1 segundo tienes tu calibración hecha internamente con solo recibir una señal de 1PPS en el microcontrolador y entrar en el modo "Calibración".

Un saludo.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #9 en: 12 de Enero de 2020, 07:44:07 »
El método anterior funciona incluso con un oscilador principal de baja precisión, porque la mayor parte del tiempo se va a medir con la señal de 1PPS que tiene mucha precisión, de manera que se puede realizar incluso con el oscilador interno del microcontrolador.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #10 en: 12 de Enero de 2020, 09:20:49 »
Estuve leyendo y tratando de entender lo que plantea el documento.

La calibración es para cuando tengas un oscilador que NO es demasiado exacto. Tal como el LSE del micro.
Y siempre necesitas una referencia externa y precisa, que seria tu oscilador externo.

El problema es que creo que estas planteando "corregir" lo que te presenta el cristal de 32KHz, y para eso necesitas otro oscilador externo MEJOR que el anterior.
Encima tenes desviaciones de frecuencia por temperatura y voltajes por lo tanto como bien dice al ultimo, este proceso de calibracion debe ser continuo y no solo una ves al inicio.

¿A que lleva a esto?
Que si o si uses un oscilador externo "bueno". No queda otra.

Citar
ademas de tener que esperar 32 segundos a que se calibre cada uno.
Depende, si haces llegar la señal a todos juntos, si 32 segundos te podria llevar caibrar muchos de golpe.

Es un reloj externo de 32,678 KHz, es uno de la tabla de los recomendados por ST, un NX3215SA-32.768K-STD-MUA-14
https://www.mouser.es/datasheet/2/905/c_NX3215SA-STD-MUA-14_e-1317539.pdf

y si es el LSE, que es el externo el interno de 32KHz es el LSI, que además no es bueno usarlo debido a una errata del silicion que hace que no funcione bien cuando lo activas junto al CCS.

Con el frecuencímetro me he equivocado un poco, porque el método anterior pierde hasta un pulso inicial de 32kHz y eso es mucho.

Lo mejor es medir el tiempo desde la señal de 1 PPS hasta el siguiente pulso de 32kHz y medir los pulsos de 32kHz entre 2 señales de 1 PPS. A partir de ahí se calcula el tiempo total y el número de pulsos de 32kHz totales. Con eso se puede calcular la frecuencia y a partir de la frecuencia, el ajuste necesario.

Un poco laborioso, pero en 1 segundo tienes tu calibración hecha internamente con solo recibir una señal de 1PPS en el microcontrolador y entrar en el modo "Calibración".

Un saludo.

Esto me parece un sistema complejo para algo que necesite un reloj muy muy exacto como un semáforo por ejemplo, pero es que lo que yo busco es poner un reloj al sistema para saber la hora que si se desvia un poco cada cierto tiempo pues me da igual, siempre que sea algo razonable.

Pero es que ahora mismo se desvia 8 segundos por día.

Se lo consulte al servicio técnico y me dijo que le hiciera el smooth calibration, pero dudo que todos los sistemas que llevan un reloj hagan esto.

¿Puede que el error este en el hardware? ¿debería cambiar a un reloj de 4 patas para anclar las otras dos a masa?
este es mi rutado:

 

* Sin título.jpg
(175.72 kB, 557x825 - visto 302 veces)


Como veis tengo una isla de GND aislada del resto de gnd (solo unida por un punto) ademas de un "guard ring", ¿deberia usar un reloj de 4 pines o uno through hole? podría esto eliminar mi problema?

un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #11 en: 12 de Enero de 2020, 10:30:41 »
8 segundos al día es un error de 93ppm, que es mucho mayor de +-20ppm, la tolerancia de frecuencia de ese oscilador a 20º.
Puede que tengas algún error en el diseño de hardware o una temperatura extrema.

Para corregirlo, en principio solo tienes que aplicar una smooth calibration de -93ppm y ya está.

Pero si quieres hacerlo automático para corregir muchos, no tienes más remedio que hacer lo que puse antes. Tienes que medir de alguna forma el error de frecuencia y lo normal es hacerlo con 6 cifras decimales de precisión, que es la precisión del smooth calibration.

A propósito, el error que comentas de 8 segundos, le faltan los decimales. Si tienes un error de 8.5 segundos y solo corriges el error de 8 segundos, seguirás teniendo un error de 15 segundos al mes, que se podría corregir.

Un saludo.
« Última modificación: 12 de Enero de 2020, 14:04:38 por Picuino »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #12 en: 12 de Enero de 2020, 10:38:34 »
Para hacerlo de manera manual, también puedes utilizar un frecuencímetro de más de 6 cifras de precisión y medir la señal de 1PPS del micro sin smooth calibration. Luego calculas el error en partes por millón y aplicas la corrección al smooth calibration.

Se supone que el error máximo a 20º debería ser de 2.5 segundos al mes.
« Última modificación: 12 de Enero de 2020, 14:05:11 por Picuino, Razón: cambiar smooth »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #13 en: 12 de Enero de 2020, 13:59:26 »
Se lo consulte al servicio técnico y me dijo que le hiciera el smooth calibration, pero dudo que todos los sistemas que llevan un reloj hagan esto.

Los relojes de pulsera lo hacen habitualmente para ajustar el error del oscilador de cuarzo.

Un oscilador de cuarzo normal puede tener un error de +-20ppm que se traduce a +-50 segundos al mes. Eso es mucho error y con el smooth calibration puedes reducirlo en un factor de 20, a solo 2 o 3 segundos al mes, siempre que la temperatura se mantenga entre 20 y 30 grados.
« Última modificación: 12 de Enero de 2020, 14:04:09 por Picuino »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Calibrar el rtc por "smooth calibration"
« Respuesta #14 en: 20 de Enero de 2020, 07:24:50 »
Perdon por tardan en contestar, he tenido algunos problemas de indole personal.

Entonces, recapitulando para calibrarlo necesito una señal de 1Hz exacta, y medir la imprecisión, que podría hacerlo reconduciendo el pin de salida del RTC a otro del micro y medirlo en el propio micro, supongo que ha 64MHz de funcionamiento del reloj principal no tendré problemas para medir un herzio con precisión.

El problema es para producción y solo lo calibrare una vez, no puedo incluir un sistema que de un pulso de 1Hz, por que lo encarecería considerablemente, asi que supongo que comprará algo que me de 1Hz y a la hora de programar los calibraré.

Tambien creo que existe la posibilidad de utilizar la señal de la red de 50 o 60 Hz para que este siempre calibrado (menos cuando funcione la bateria de respaldo que entonces supongo que se quedará con la ultima calibración que tome de la red. ¿podría ser esto otra solución a estudiar viable? se podría tomar esta señal de 50Hz de la salida del transformador para asi tener ya el aislamiento de la red?

un saludo.


Por cierto para medir las frecuencias, me compro un frecuencimetro verdad? algo asi?

https://www.amazon.es/SODIAL-Contador-frecuencia-precision-Inteligente/dp/B07HHQ1Z1X/ref=sr_1_5?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1DD8876PVQYZD&keywords=frecuencimetro&qid=1579517255&sprefix=freciu%2Caps%2C171&sr=8-5
« Última modificación: 20 de Enero de 2020, 07:48:48 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw


 

anything