Предпосылки

Это руководство не предназначено для изучения языка C или платформы Nordic SDK. Его основная цель - предоставить разработчикам краткое руководство по интеграции периферийных модулей и функций в активные приложения.

Если вы новичок, я бы порекомендовал вам изучить руководство по установке проекта nRF52, подобное этому.

https://medium.com/vicara-hardware-university/nrf52-project-setup-with-segger-embedded-system-f64958052a2d

Еще один простой способ начать кодирование, не беспокоясь обо всех основных вещах, таких как включение файлов и драйверов, - ознакомьтесь с этим инструментом создания кода.

Генератор кода 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 и т. Д.

Ссылка: https://vicara.co/nrf52-code-generator