KW36 - 32kHz RTC 外部振荡器的微调 简介
FRDM-KW36 包含一个带有 32 kHz 晶振的 RTC 模块。该模块可在超低功耗模式下为 MCU 生成 32 kHz 时钟源。该振荡器包含一组用作 C LOAD 的可编程电容器。改变这些电容器的值可以改变振荡器提供的频率。
该可配置电容值范围为 0 pF(电容器组禁用)至 30 pF,步长为 2 pF 。这些值是通过组合已启用的电容器获得的。可用值为 2 pF 、4 pF 、8 pF和 16 pF 。 这四个电容可以任意组合。建议如果外部电容可用,则禁用这些内部电容(清除 RTC 控制寄存器 SFR 中的 SC2P、SC4P、SCS8 和 SC16 位)。
要调整振荡器提供的频率,首先必须能够测量频率。使用频率计数器是理想选择,因为它比示波器提供更精确的测量。您还需要输出振荡器频率。要输出振荡器频率,以任意蓝牙演示应用程序为例,您应该执行以下操作:
调整频率示例
此示例将利用连接软件堆栈中的心率传感器演示(freertos 版本),并假设开发人员具备从 SDK 到 IDE 导入或打开项目的知识。
从您的 SDK 打开或克隆心率传感器项目。
在工作区的 board 文件夹中找到 board.c 和 board.h 文件。
在 board.h 上声明一个 void 函数文件如下所示。此功能将用于将 RTC 时钟复用到 PTB3 并能够测量频率。
/* Function to mux PTB3 to RTC_CLKOUT */
void BOARD_EnableRtcClkOut (void);
开发board.c里面的BOARD_EnableRtcClkOut函数文件如下。
void BOARD_EnableRtcClkOut(void)
{
/* Enable PORTB clock gating */
CLOCK_EnableClock(kCLOCK_PortB);
/* Mux the RTC_CLKOUT to PTB3 */
PORT_SetPinMux(PORTB, 3u, kPORT_MuxAlt7);
/* Select the 32kHz reference for RTC_CLKOUT signal */
SIM->SOPT1 |= SIM_SOPT1_OSC32KOUT(1);
}
在 BOARD_BootClockRUN(board.c 文件)之后,在 hardware_init 函数中调用 BOARD_EnableRtcClkOut 函数。
找到clock_config.c工作区板文件夹中的文件。
在文件顶部添加以下定义。 #define RTC_OSC_CAP_LOAD_0 0x0U /*!< RTC oscillator, capacitance 0pF */
#define RTC_OSC_CAP_LOAD_2 0x2000U /*!< RTC oscillator, capacitance 2pF */
#define RTC_OSC_CAP_LOAD_4 0x1000U /*!< RTC oscillator, capacitance 4pF */
#define RTC_OSC_CAP_LOAD_6 0x3000U /*!< RTC oscillator, capacitance 6pF */
#define RTC_OSC_CAP_LOAD_8 0x800U /*!< RTC oscillator, capacitance 8pF */
#define RTC_OSC_CAP_LOAD_10 0x2800U /*!< RTC oscillator, capacitance 10pF */
#define RTC_OSC_CAP_LOAD_12 0x1800U /*!< RTC oscillator, capacitance 12pF */
#define RTC_OSC_CAP_LOAD_14 0x3800U /*!< RTC oscillator, capacitance 14pF */
#define RTC_OSC_CAP_LOAD_16 0x400U /*!< RTC oscillator, capacitance 16pF */
#define RTC_OSC_CAP_LOAD_18 0x2400U /*!< RTC oscillator, capacitance 18pF */
#define RTC_OSC_CAP_LOAD_20 0x1400U /*!< RTC oscillator, capacitance 20pF */
#define RTC_OSC_CAP_LOAD_22 0x3400U /*!< RTC oscillator, capacitance 22pF */
#define RTC_OSC_CAP_LOAD_24 0xC00U /*!< RTC oscillator, capacitance 24pF */
#define RTC_OSC_CAP_LOAD_26 0x2C00U /*!< RTC oscillator, capacitance 26pF */
#define RTC_OSC_CAP_LOAD_28 0x1C00U /*!< RTC oscillator, capacitance 28pF */
#define RTC_OSC_CAP_LOAD_30 0x3C00U /*!< RTC oscillator, capacitance 30pF */
在 BOARD_BootClockRUN 函数中搜索 CLOCK_CONFIG_EnableRtcOsc 调用函数(也在 clock_config.c 中)文件),并通过上述任何定义来编辑参数。
最后,在“preinclude.h”中禁用低功耗选项和 LED 支持位于项目源文件夹中的文件: #define cPWR_UsePowerDownMode 0
#define gLEDSupported_d 0
此时,您可以在 PTB3 中测量并使用频率计数器进行频率调整。每次对电路板进行编程时,都需要执行 POR 以获得正确的测量结果。下表是从 FRDM-KW36 板 rev B 获得的,可以用作调整频率的参考。请注意,电容不仅由启用的内部电容组成,还包括封装、键合线、键合焊盘和 PCB 走线中的寄生电容。因此,虽然下面给出的参考测量值应该接近实际值,但您也应该使用电路板进行测量,以确保频率根据您的电路板和布局进行调整。
启用电容器
负载
电容定义
频率
-
0pF
RTC_OSC_CAP_LOAD_0(银行禁用)
32772.980Hz
SC2P
2pF
RTC_OSC_CAP_LOAD_2
32771.330Hz
SC4P
4pF
RTC_OSC_CAP_LOAD_4
32770.050Hz
SC2P, SC4P
6pF
RTC_OSC_CAP_LOAD_6
32769.122Hz
SC8P
8pF
RTC_OSC_CAP_LOAD_8
32768.289Hz
SC2P, SC8P
10 pF
RTC_OSC_CAP_LOAD_10
32767.701Hz
SC4P, SC8P
12pF
RTC_OSC_CAP_LOAD_12
32767.182Hz
SC2P, SC4P, SC8P
14pF
RTC_OSC_CAP_LOAD_14
32766.766Hz
SC16P
16pF
RTC_OSC_CAP_LOAD_16
32766.338Hz
SC2P, SC16P
18pF
RTC_OSC_CAP_LOAD_18
32766.038Hz
SC4P, SC16P
20pF
RTC_OSC_CAP_LOAD_20
32765.762Hz
SC2P, SC4P, SC16P
22pF
RTC_OSC_CAP_LOAD_22
32765.532Hz
SC8P, SC16P
24pF
RTC_OSC_CAP_LOAD_24
32765.297Hz
SC2P, SC8P, SC16P
26pF
RTC_OSC_CAP_LOAD_26
32765.117Hz
SC4P, SC8P, SC16P
28pF
RTC_OSC_CAP_LOAD_28
32764.940Hz
SC2P, SC4P, SC8P, SC16P
30 pF
RTC_OSC_CAP_LOAD_30
32764.764Hz
BLE软件 千瓦 KW35 | 36
記事全体を表示