docs:update CN translation for documenting-code and LEDC

This commit is contained in:
Dai Zi Yan 2021-03-23 10:52:50 +08:00 committed by Krzysztof Budzynski
parent 67ba80f2ec
commit 8ae944e26c
4 changed files with 68 additions and 50 deletions

View File

@ -6,6 +6,7 @@ LED Control
Introduction
------------
The LED control (LEDC) peripheral is primarily designed to control the intensity of LEDs, although it can also be used to generate PWM signals for other purposes.
It has {IDF_TARGET_LEDC_CHAN_NUM} channels which can generate independent waveforms that can be used, for example, to drive RGB LED devices.

View File

@ -5,7 +5,6 @@ Documenting Code
The purpose of this description is to provide quick summary on documentation style used in `espressif/esp-idf`_ repository and how to add new documentation.
Introduction
------------
@ -251,7 +250,8 @@ Writing generic documentation for multiple chips
The documentation for all of Espressif's chips is built from the same files. To faciliate the writing of documents that can be re-used for multiple different chips (called below "targets"), we provide you with the following functionality:
Exclusion of content based on chip-target
"""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""
Occasionally there will be content that is only relevant for one of targets. When this is the case, you can exclude that content by using the ''.. only:: TAG'' directive, where you replace 'TAG' with one of the following names:
Chip name:
@ -407,7 +407,6 @@ You can setup environment to build documentation locally on your PC by installin
6. Blockdiag - http://blockdiag.com/en/index.html
7. Recommonmark - https://github.com/rtfd/recommonmark
The package "sphinx_idf_theme" is added to have the same "look and feel" of `ESP-IDF Programming Guide <https://docs.espressif.com/projects/esp-idf/en/latest/index.html>`_.
Do not worry about being confronted with several packages to install. Besides Doxygen, all remaining packages are written in pure Python. Therefore installation of all of them is combined into one simple step.

View File

@ -1,59 +1,76 @@
LED PWM 控制器
==============
{IDF_TARGET_LEDC_CHAN_NUM:default="8", esp32="16", esp32s2="8", esp32c3="6"}
:link_to_translation:`en:[English]`
概述
------------
LED PWM 控制器主要用于控制 LED也可产生 PWM 信号用于其他设备的控制。该控制器有 8 路高速通道和 8 路低速通道,可以产生独立的波形来驱动 RGB LED 设备等。
LED 控制器 (LEDC) 主要用于控制 LED也可产生 PWM 信号用于其他设备的控制。
该控制器有 {IDF_TARGET_LEDC_CHAN_NUM} 路通道,可以产生独立的波形来驱动 RGB LED 等设备。
LED PWM 控制器的高速通道和低速通道均支持硬件渐变功能,可在无需 CPU 干预的情况下自动改变 PWM 信号的占空比,也可由软件改变 PWM 信号的占空比,实现亮度和颜色渐变。此外,低速通道在 Sleep 模式下仍可运行。
.. only:: esp32
LEDC 通道共有两组,分别为 8 路高速通道和 8 路低速通道。高速通道模式在硬件中实现,可以自动且无干扰地改变 PWM 占空比。低速通道模式下PWM 占空比需要由软件中的驱动器改变。每组通道都可以使用不同的时钟源。
LED PWM 控制器可在无需 CPU 干预的情况下自动改变占空比,实现亮度和颜色渐变。
功能概览
----------------------
要让指定 LED PWM 控制器 :ref:`高速模式或低速模式 <ledc-api-high_low_speed_mode>` 通道运行,需进行如下配置:
.. only:: esp32
设置 LEDC 通道在 :ref:`高速模式或低速模式 <ledc-api-high_low_speed_mode>` 下运行,需要进行如下配置:
.. only:: not esp32
设置 LEDC 通道分三步完成。注意,与 ESP32 不同,{IDF_TARGET_NAME} 仅支持设置通道为低速模式。
1. :ref:`ledc-api-configure-timer` 指定 PWM 信号的频率和占空比分辨率。
2. :ref:`ledc-api-configure-channel` 绑定定时器和输出 PWM 信号的 GPIO。
3. :ref:`ledc-api-change-pwm-signal` 输出 PWM 信号来驱动 LED。可通过软件控制或使用硬件渐变功能来改变 LED 的亮度。
另一个可选步骤是可以在渐变终端设置一个中断。
.. figure:: ../../../_static/ledc-api-settings.jpg
:align: center
:alt: Key Settings of LED PWM Controller's API
:figclass: align-center
配置 LED PWM 控制器的关键 API
LED PWM 控制器 API 的关键配置
.. _ledc-api-configure-timer:
配置定时器
定时器配置
^^^^^^^^^^^^^^^
要设置定时器,可调用函数 :cpp:func:`ledc_timer_config`,并将包括如下配置参数的数据结构 :cpp:type:`ledc_timer_config_t` 传递给该函数:
.. list::
:esp32: - 速度模式 :cpp:type:`ledc_mode_t`
:not esp32: - 速度模式(值必须为 ``LEDC_LOW_SPEED_MODE``
- 定时器索引 :cpp:type:`ledc_timer_t`
- 速度模式 :cpp:type:`ledc_mode_t`
- PWM 信号频率
- PWM 占空比分辨率
频率和占空比分辨率相互关联。PWM 频率越高,占空比分辨率越低,反之则越高。使用该 API 用于除改变 LED 亮度以外的其他目的时,这一点很重要。更多信息详见 :ref:`ledc-api-supported-range-frequency-duty-resolution` 一节。
频率和占空比分辨率相互关联。PWM 频率越高,占空比分辨率越低,反之亦然。如果 API 不是用来改变 LED 亮度,而是用于其它目的,这种相互关系可能会很重要。更多信息详见 :ref:`ledc-api-supported-range-frequency-duty-resolution` 一节。
.. _ledc-api-configure-channel:
配置通道
通道配置
^^^^^^^^^^^^^^^^^
定时器设置好后,请配置选定的通道(:cpp:type:`ledc_channel_t` 之一)。配置通道需调用函数 :cpp:func:`ledc_channel_config`
定时器设置好后,请配置所需的通道(:cpp:type:`ledc_channel_t` 之一)。配置通道需调用函数 :cpp:func:`ledc_channel_config`
通道的配置与定时器设置类似,需向通道配置函数传递包括通道配置参数的结构 :cpp:type:`ledc_channel_config_t`
通道的配置与定时器设置类似,需向通道配置函数传递包括通道配置参数的结构 :cpp:type:`ledc_channel_config_t`
此时,通道会按照 :cpp:type:`ledc_channel_config_t` 的配置,在绑定的 GPIO 上输出具有指定频率和占空比的 PWM 信号。在通道工作过程中,可以随时通过调用函数 :cpp:func:`ledc_stop` 将其暂停。
此时,通道会按照 :cpp:type:`ledc_channel_config_t` 的配置开始运作,并在选定的 GPIO 上生成由定时器设置指定的频率和占空比的 PWM 信号。在通道运作过程中,可以随时通过调用函数 :cpp:func:`ledc_stop` 将其暂停。
.. _ledc-api-change-pwm-signal:
@ -65,18 +82,24 @@ LED PWM 控制器的高速通道和低速通道均支持硬件渐变功能,可
以下两节介绍了如何使用软件和硬件改变占空比。如有需要PWM 信号的频率也可更改,详见 :ref:`ledc-api-change-pwm-frequency` 一节。
.. only:: esp32s2 or esp32c3
.. note::
在 {IDF_TARGET_NAME} 的 LED PWM 控制器中,所有的定时器和通道都只支持低速模式。对 PWM 设置的任何改变,都需要由软件显式地触发(见下文)。
使用软件改变 PWM 占空比
""""""""""""""""""""""""""""""""""""
调用函数 :cpp:func:`ledc_set_duty` 可以设置新的占空比。之后,调用函数 :cpp:func:`ledc_update_duty` 使新配置生效。要查看当前的占空比,可使用 ``_get_`` 函数 :cpp:func:`ledc_get_duty`
调用函数 :cpp:func:`ledc_set_duty` 可以设置新的占空比。之后,调用函数 :cpp:func:`ledc_update_duty` 使新配置生效。要查看当前设置的占空比,可使用 ``_get_`` 函数 :cpp:func:`ledc_get_duty`
另外一种设置占空比和其他通道参数的方式是调用 :ref:`ledc-api-configure-channel` 一节提到的函数 :cpp:func:`ledc_channel_config`
传递给函数的占空比数值范围取决于选定的 ``duty_resolution``,应为 ``0````(2 ** duty_resolution) - 1``。例如,如选定的占空比分辨率为 10则占空比的数值范围为 0 至 1023。此时分辨率为 ~0.1%。
使用硬件渐变改变 PWM 占空比
使用硬件改变 PWM 占空比
""""""""""""""""""""""""""""""""""""
LED PWM 控制器硬件可逐渐改变占空比的数值。要使用此功能,需用函数 :cpp:func:`ledc_fade_func_install` 使能渐变,之后用下列可用渐变函数之一配置:
@ -98,14 +121,14 @@ LED PWM 控制器硬件可逐渐改变占空比的数值。要使用此功能,
LED PWM 控制器 API 有多种方式即时改变 PWM 频率:
* 通过调用函数 :cpp:func:`ledc_set_freq` 设置频率。可用函数 :cpp:func:`ledc_get_freq` 查看当前频率。
* 通过调用函数 :cpp:func:`ledc_bind_channel_timer` 改变频率和占空比分辨率,将其他定时器与通道相连
* 通过调用函数 :cpp:func:`ledc_bind_channel_timer` 将其他定时器绑定到该通道来改变频率和占空比分辨率。
* 通过调用函数 :cpp:func:`ledc_channel_config` 改变通道的定时器。
控制 PWM 的更多方式
"""""""""""""""""""""
要改变 PWM 设置,可使用低电平定时器的特定功能
有一些较底层的定时器特定函数可用于更改 PWM 设置
* :cpp:func:`ledc_timer_set`
* :cpp:func:`ledc_timer_rst`
@ -123,28 +146,31 @@ LED PWM 控制器 API 有多种方式即时改变 PWM 频率:
要注册处理程序来处理中断,可调用函数 :cpp:func:`ledc_isr_register`
.. _ledc-api-high_low_speed_mode:
.. only:: esp32
LED PWM 控制器高速和低速模式
----------------------------
.. _ledc-api-high_low_speed_mode:
LED PWM 控制器高速和低速模式
----------------------------------
LED PWM 控制器有 8 个可用定时器和 16 路通道,其中有一半专以高速模式运行,另一半则以低速模式运行。要选取高速或低速定时器或通道,可借助所调用函数中的参数 :cpp:type:`ledc_mode_t`
高速模式的优点是可平稳地改变定时器设置。也就是说高速模式下如定时器设置改变此变更会自动应用于定时器的下一次溢出中断。而更新低速定时器时设置变更应由软件显式触发。LED PWM 驱动的设置将在硬件层面被修改,比如在调用函数 :cpp:func:`ledc_timer_config`:cpp:func:`ledc_timer_set`
高速模式的优点是可平稳地改变定时器设置。也就是说高速模式下如定时器设置改变此变更会自动应用于定时器的下一次溢出中断。而更新低速定时器时设置变更应由软件显式触发。LED PWM 驱动器在后台更改设置,比如在调用函数 :cpp:func:`ledc_timer_config`:cpp:func:`ledc_timer_set`
更多关于速度模式的详细信息请参阅 *{IDF_TARGET_NAME} 技术参考手册* > *LED PWM 控制器 (LEDC)* [`PDF <{IDF_TARGET_TRM_EN_URL}#ledpwm>`__]。注意,该手册中提到的支持 ``SLOW_CLOCK`` 暂不适用于 LED PWM 驱动
更多关于速度模式的详细信息请参阅 `ESP32 技术参考手册 <https://espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_cn.pdf>`_ (PDF)。注意,该手册中提到的支持 ``SLOW_CLOCK`` 暂不适用于 LED PWM 驱动器。
.. _ledc-api-supported-range-frequency-duty-resolution:
.. only:: not esp32
.. _ledc-api-supported-range-frequency-duty-resolution:
.. _ledc-api-supported-range-frequency-duty-resolution:
频率和占空比分辨率支持范围
-------------------------------------------------
LED PWM 控制器主要用于驱动 LED。该控制器 PWM 占空比设置的分辨率范围较广。比如PWM 频率为 5 kHz 时,占空比分辨率最大可为 13 位。这意味着占空比可为 0 至 100% 之间的任意值,分辨率为 ~0.012%2 ** 13 = 8192 LED 亮度的离散电平)。
LED PWM 控制器主要用于驱动 LED。该控制器 PWM 占空比设置的分辨率范围较广。比如PWM 频率为 5 kHz 时,占空比分辨率最大可为 13 位。这意味着占空比可为 0 至 100% 之间的任意值,分辨率为 ~0.012%2 ** 13 = 8192 LED 亮度的离散电平)。然而,这些参数取决于为 LED PWM 控制器定时器计时的时钟信号LED PWM 控制器为通道提供时钟(具体可参考 :ref:`定时器配置 <ledc-api-configure-timer>` 和 *{IDF_TARGET_NAME} 技术参考手册* > *LED PWM 计时器 (LEDC)* [`PDF <{IDF_TARGET_TRM_EN_URL}#ledpwm>`__])。
LED PWM 控制器可用于生成频率较高的信号,足以为数码相机模组等其他设备计时。此时,最大频率可为 40 MHz占空比分辨率为 1 位。也就是说,占空比固定为 50%,无法调整。
LED PWM 控制器可用于生成频率较高的信号,足以为数码相机模组等其他设备提供时钟。此时,最大频率可为 40 MHz占空比分辨率为 1 位。也就是说,占空比固定为 50%,无法调整。
LED PWM 控制器 API 在设定的频率和占空比分辨率超过 LED PWM 控制器硬件范围时报错。例如,试图将频率设置为 20 MHz、占空比分辨率设置为 3 位时,串行端口监视器上会报告如下错误:
LED PWM 控制器 API 在设定的频率和占空比分辨率超过 LED PWM 控制器硬件范围时报错。例如,试图将频率设置为 20 MHz、占空比分辨率设置为 3 位时,串行端口监视器上会报告如下错误:
.. highlight:: none
@ -160,7 +186,7 @@ LED PWM 控制器 API 可在设定的频率和占空比分辨率超过 LED PWM
E (196) ledc: requested frequency and duty resolution cannot be achieved, try increasing freq_hz or duty_resolution. div_param=128000000
占空比分辨率通常用 :cpp:type:`ledc_timer_bit_t` 设置,范围是 10 至 15位。如需较低的占空比分辨率上至 10下至 1可直接输入相应数值。
占空比分辨率通常用 :cpp:type:`ledc_timer_bit_t` 设置,范围是 10 至 15 位。如需较低的占空比分辨率(上至 10下至 1可直接输入相应数值。
应用实例

View File

@ -8,7 +8,7 @@
概述
----
在项目库内编写代码文档时,请遵循 `Doxygen 代码注释风格 <http://doxygen.nl/manual/docblocks.html#specialblock>`_。要采用这一风格,您可以将 ``@param`` 等特殊命令插入到标准注释块中,比如 ::
在项目库内编写代码文档时,请遵循 `Doxygen 代码注释风格 <http://doxygen.nl/manual/docblocks.html#specialblock>`_。要采用这一风格,您可以将 ``@param`` 等特殊命令插入到标准注释块中,比如::
/**
* @param ratio this is oxygen to air ratio
@ -42,7 +42,7 @@ Doxygen 支持多种排版风格,对于文档中可以包含的细节非常灵
在本项目库编写代码文档时,请遵守下列准则。
1. 写明代码的基本内容:函数、结构、类型定义、枚举、宏等。请详细说明代码的用途、功能和限制,因为在阅读他人的文档时你也想看到这些信息。
1. 写明代码的基本内容:函数、结构、类型定义、枚举、宏等。请详细说明代码的用途、功能和限制,因为在阅读他人的文档时你也想看到这些信息。
2. 函数文档需简述该函数的功能,并解释输入参数和返回值的含义。
@ -213,7 +213,7 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
.. note::
`interactive shell`_ 使用的字体和 esp-idf 文档使用的字体略有不同。
`interactive shell`_ 使用的字体和 esp-idf 文档使用的字体渲染后显示的效果略有不同。
添加注释
@ -221,7 +221,7 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
写文档时,您可能需要:
- 留下建议,说明之后需添加会修改哪些内容
- 留下建议,说明之后哪些内容需要添加或修改
- 提醒自己或其他人跟进。
这时,您可以使用 ``.. todo::`` 命令在 reST 文件中添加待做事项。如:
@ -244,13 +244,11 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
更多关于扩展的信息,请参阅 `sphinx.ext.todo <https://www.sphinx-doc.org/en/master/usage/extensions/todo.html#directive-todolist>`_ 的相关文档。
为不同芯片书写通用文档
----------------------
乐鑫各芯片的文档是基于现有文档完成的。为提高文档写作效率,使所写文档可重复用于其它芯片(以下称“目标”)文档中,我们为您提供以下功能:
依据目标类型排除内容
"""""""""""""""""""""
@ -260,6 +258,7 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
* esp32
* esp32s2
* esp32c3
从 'sdkconfig.h' 中定义标识符,标识符由目标的默认 menuconfig 设置生成,例如:
@ -278,9 +277,7 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
ESP32 specific content.
该指令也支持布尔逻辑操作符 'and'、'or' 和 'not'。
示例:
该指令也支持布尔逻辑操作符 'and'、'or' 和 'not'。示例:
.. code-block:: none
@ -305,9 +302,9 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
.. _section_2_label:
.. only:: esp32s2
.. only:: not esp32
_section_2_label:
.. _section_2_label:
Section 2
^^^^^^^^^
@ -331,7 +328,6 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
对此推荐的解决方案是:将这个文档添加到 :idf_file:`docs/conf_common.py` ``conditional_include_dict`` 中的一个列表里,例如,一个仅供支持蓝牙的目标可见的文档应被添加至 ``BT_DOCS``。此后,如果该文档未设置对应的标签,则 :idf_file:`docs/idf_extensions/exclude_docs.py` 会将其添加至 ``exclude_patterns``
如果你需要从一个列表或项目符号条目中排除某一内容,应通过在 ''.. list:: '' 指令中使用 '':TAG:'' 角色来完成。
.. code-block:: none
@ -346,7 +342,6 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
替代宏
"""""""""""
如果你需要指向根据目标类型定义的芯片名称、工具链名称、路径名称或其它通用名称,可以选择使用 :idf_file:`docs/idf_extensions/format_idf_target.py` 提供的替代宏。
例如,以下 reStructuredText 内容:
@ -357,13 +352,13 @@ CI build 脚本中添加了检查功能,查找 RST 文件中的硬编码链接
This is a {IDF_TARGET_NAME}, with /{IDF_TARGET_PATH_NAME}/soc.c, compiled with `{IDF_TARGET_TOOLCHAIN_PREFIX}-gcc` with `CONFIG_{IDF_TARGET_CFG_PREFIX}_MULTI_DOC`.
这一扩展也支持定义本地(在单个源文件中)替代名称的标记。请在 RST 文件的一行中插入下定义语言:
这一扩展也支持定义本地(在单个源文件中)替代名称的标记。请在 RST 文件的一行中插入下定义语言:
{\IDF_TARGET_SUFFIX:default="DEFAULT_VALUE", esp32="ESP32_VALUE", esp32s2="ESP32S2_VALUE"}
{\IDF_TARGET_SUFFIX:default="DEFAULT_VALUE", esp32="ESP32_VALUE", esp32s2="ESP32S2_VALUE", esp32c3="ESP32C3_VALUE"}
这样将在当前的 RST 文件中根据目标类型为 {\IDF_TARGET_SUFFIX} 标签定义一个替代名称。例如:
{\IDF_TARGET_TX_PIN:default="IO3", esp32="IO4", esp32s2="IO5"}
{\IDF_TARGET_TX_PIN:default="IO3", esp32="IO4", esp32s2="IO5", esp32c3="IO6"}
上例将为 {\IDF_TARGET_TX_PIN} 标签定义一个替代名称,当使用 esp32s2 标签调用 sphinx 时,{\IDF_TARGET_TX_PIN} 将被替代为 "IO5"。
@ -407,8 +402,8 @@ Sphinx 新手怎么办
1. Doxygen - http://doxygen.nl/
2. Sphinx - https://github.com/sphinx-doc/sphinx/#readme-for-sphinx
3. Breathe - https://github.com/michaeljones/breathe#breathe
4. Document theme "sphinx_idf_theme" - https://github.com/rtfd/sphinx_idf_theme
5. Custom 404 page "sphinx-notfound-page" - https://github.com/rtfd/sphinx-notfound-page
4. "sphinx_idf_theme" 文档主题 - https://github.com/espressif/sphinx_idf_theme
5. "sphinx-notfound-page" 自定义 404 页面 - https://github.com/readthedocs/sphinx-notfound-page
6. Blockdiag - http://blockdiag.com/en/index.html
7. Recommonmark - https://github.com/rtfd/recommonmark
@ -500,10 +495,8 @@ Doxygen 的安装取决于操作系统:
生成后的文档将位于 ``_build/<language>/<target>/html`` 文件夹中。如需查阅,请在网页浏览器中打开该目录里的 ``index.html``
生成文档子集
""""""""""""""
编译某一语言的所有文档可能速度较慢,因此,也可以选择只生成所需的某个文档或部分所选文档。
在指令中列出你需要生成的文档名称即可::
@ -520,7 +513,6 @@ Doxygen 的安装取决于操作系统:
请注意,这一功能仅用于文档写作过程中的检查和测试。其生成的 HTML 页面并非渲染完成后的格式,比如,运行这一指令并不会生成一个列有所有文档的索引,而且如果其中涉及到任何还未生成的文档参考都将导致错误警报出现。
生成 PDF
""""""""""""