Предпосылки
Это руководство не предназначено для изучения языка C или платформы Nordic SDK. Его основная цель - предоставить разработчикам краткое руководство по интеграции периферийных модулей и функций в активные приложения.
Если вы новичок, я бы порекомендовал вам изучить руководство по установке проекта nRF52, подобное этому.
Еще один простой способ начать кодирование, не беспокоясь обо всех основных вещах, таких как включение файлов и драйверов, - ознакомьтесь с этим инструментом создания кода.
Генератор кода nrf52: https://vicara.co/nrf52-code-generator
Сигнал ШИМ
Широтно-импульсная модуляция - это метод, который реализуется путем изменения продолжительности, в течение которой сигнал включен или выключен.
Длительность ширины импульса может соответствовать амплитуде, частоте или фазе аналогового сигнала. Этот метод снижает среднюю мощность, потребляемую при передаче, по сравнению с аналоговым сигналом с теми же данными.
ШИМ также используется для управления двигателями и светодиодами, что позволяет гораздо лучше контролировать эти устройства.
Реализация ШИМ в nRF52832
В следующем разделе я приведу руководство, поскольку оно было протестировано в наборе разработчика nRF52832. Однако одна и та же структура останется общей для всех устройств nRF52.
Включая правильные заголовки
Включите файл драйвера, который управляет ШИМ в устройствах nRF52. Это должен быть файл с названием nrf_drv_pwm.c. Он должен быть доступен в папке SDK / integration / nrfx / legacy.
Обновите файл sdk_config.h
- PWM_ENABLED должен быть включен.
- PWMn_ENABLED должен быть включен, где n - номер экземпляра PWM.
В файле main.c
Заголовочный файл
#include "nrf_drv_pwm.h"
Определить экземпляр PWM
static nrf_drv_pwm_t m_pwm = NRF_DRV_PWM_INSTANCE(1);
NRF52832 имеет 3 экземпляра. Это будет варьироваться в зависимости от выбранного модуля nRF52, поэтому важно проверить это с помощью его спецификации продукта и таблицы данных.
Обратный вызов экземпляра PWM
Каждый используемый экземпляр PWM должен обрабатываться индивидуальным обратным вызовом. Эта функция будет обрабатывать сигналы, генерируемые этим экземпляром.
static void pwm_handler(nrf_drv_pwm_evt_type_t event_type)
{
switch(event_type-){
case // EVENT ID:
break;
default;
break;
}
}
Определить функцию инициализации
Эта функция установит параметры, с которыми будет работать экземпляр ШИМ. В одном определении функции можно инициализировать несколько экземпляров.
static void pwm_init()
{
nrf_drv_pwm_config_t const config =
{
.output_pins =
{
17, // channel 0
NRF_DRV_PWM_PIN_NOT_USED, // channel 1
NRF_DRV_PWM_PIN_NOT_USED, // channel 2
NRF_DRV_PWM_PIN_NOT_USED // channel 3
},
.irq_priority = APP_IRQ_PRIORITY_LOWEST,
.base_clock = NRF_PWM_CLK_125kHz,
.count_mode = NRF_PWM_MODE_UP,
.top_value = 12500,
.load_mode = NRF_PWM_LOAD_INDIVIDUAL,
.step_mode = NRF_PWM_STEP_AUTO
};
APP_ERROR_CHECK(nrf_drv_pwm_init(&m_pwm, &config, pwm_handler));
}
Для ШИМ единственная конфигурация канала - это вывод, используемый для этого канала. Но каждый экземпляр нужно настраивать отдельно. Все 4 контакта могут быть установлены на
NRF_DRV_PWM_PIN_NOT_USED
, т.е. экземпляр ШИМ настроен, но контакты не назначены.
Добавить функцию инициализации в вызов основной функции
pwm_init(); // After default definition, before Advertise Start
Вывод
С помощью описанных выше шагов любой может легко начать работу с включением управления ШИМ в свой код приложения.
ПРИМЕЧАНИЕ
Есть еще один более простой метод инициализации и автоматического создания кода для nRF52. Этот инструмент будет обрабатывать все добавления библиотеки и генерации кода для различных периферийных устройств, таких как SPI, I2C, UART и т. Д.