基于 ADC 采样的无感方波电机控制
===============================

:link_to_translation:`en:[English]`

本指南包含以下内容：

.. contents:: 目录
    :local:
    :depth: 2

初始位置检测
-------------

由无刷电机的一相电压平衡方程 :math:`u_{a}=Ri_{a}+L_{a}\frac{di_{a}}{dt}+e_{a}` 可知，当电机静止时，反电势为零，则电枢电流为：

.. math::
    i=\frac{U}{R}\left(1-\frac{1}{e^{\tau}}\right)

通过分析上述公式可知，通过施加高频电压以产生对应的脉冲电流，并对比脉冲电流大小，可准确确定转子的位置范围。

为获取初始状态下的转子位置，`esp_sensorless_bldc_control` 组件在启动时按照顺序施加电压脉冲，获取采样电阻上的电流脉冲，比较 6 个矢量的大小以确定最大矢量所在区间。

.. table:: 脉冲注入顺序
   :align: center

   +----------+-----+-----+-----+
   | 注入顺序 | U相 | V相 | W相 |
   +==========+=====+=====+=====+
   | 1        | Udc | Udc | GND |
   +----------+-----+-----+-----+
   | 2        | GND | GND | Udc |
   +----------+-----+-----+-----+
   | 3        | Udc | GND | Udc |
   +----------+-----+-----+-----+
   | 4        | GND | Udc | GND |
   +----------+-----+-----+-----+
   | 5        | GND | Udc | Udc |
   +----------+-----+-----+-----+
   | 6        | Udc | GND | GND |
   +----------+-----+-----+-----+

.. note::
    1. 在静止状态下，对 BLDC 电机分别注入特定电压矢量，每个电压矢量作用固定时间 :math:`T_{s}`，保障注入电流大小。
    2. 电压矢量注入结束时刻，对母线电流采样。
    3. 依次注入剩余电压矢量，比较各电压矢量作用下的电流值大小，确定最大电流标识，得到转子初始位置。

基于 ADC 方案的 BLDC 无感控制
-----------------------------

反电势定义
^^^^^^^^^^^^

当无刷电机转动时，每个绕组都会产生反电动势电压，根据楞次定律，反电势极性与主电压相反。反电势计算公式：

.. math::
    BEMF = NlrB\omega

其中，N 为绕组匝数，l 为转子长度，r 为转子内半径，B 为转子磁场，:math:`\omega` 为角速度。

当电机做定后，电机绕组与转子参数固定。电机反电势只与角速度成正比。

下图为电机旋转一个电周期中电流与反电势波形。

.. figure:: ../../../_static/motor/bldc/bldc_electrical_degrees.png
    :align: center
    :width: 70%

    电流与反电势波形

ADC 方案的过零点采样原理
^^^^^^^^^^^^^^^^^^^^^^^^^^^

当 BLDC 电机转动时，反电势过零点发生在浮空相。通过检测各相各相对地电压，并与直流母线电压对比。当端电压等于直流母线电压一半时，即发生过零事件。在基于ADC的过零点检测方案中，同时测量端电压与直流母线电压并进行对比，获得过零信号。

.. figure:: ../../../_static/motor/bldc/bldc_adc_zero_cossing_points.png
    :align: center
    :width: 80%

    ADC 过零点检测实现方式

ADC 方案的过零点采样硬件
^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. figure:: ../../../_static/motor/bldc/bldc_adc_hardware.png
    :align: center
    :width: 90%

    ADC 过零点检测硬件

为简化计算流程，端电压与直流母线电压采用相同的分压系数。在 12V 电机控制方案中，采用 :math:`1/21` 的分压方案，控制直流母线电压与端电压范围在 ESP32 系列芯片的 :math:`V_{ref}` 范围内。

.. note::
    注意，电压需要转化到 ESP32 ADC 能够采集的范围。请参考：`ESP32 ADC <https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/adc_oneshot.html#adc-oneshot-unit-configuration>`__
