Bläddra i källkod

【添加】machine.pwm 模块使用说明

Signed-off-by: chenyong <1521761801@qq.com>
chenyong 6 år sedan
förälder
incheckning
80c1515eae
2 ändrade filer med 58 tillägg och 1 borttagningar
  1. 57 0
      docs/04-Hardware_Control_Module/08-machine-PWM.md
  2. 1 1
      port/machine_pwm.c

+ 57 - 0
docs/04-Hardware_Control_Module/08-machine-PWM.md

@@ -0,0 +1,57 @@
+## machine.PWM
+
+**machine.PWM** 类是 machine 模块下的一个硬件类,用于指定 PWM 设备的配置和控制,提供对 PWM 设备的操作方法。
+
+- PWM (Pulse Width Modulation , 脉冲宽度调制)  是一种对模拟信号电平进行数字编码的方式。
+- PWM 设备通过调节有效电平在一个周期信号的比例时间来操作设备。
+- PWM 设备两个重要的参数:频率(freq)和占空比(duty);
+  - 频率:从一个上升沿(下降沿)到下一个上升沿(下降沿)的时间周期,单位为 Hz。
+  - 占空比:有效电平(通常为电平)在一个周期内的时间比例;
+
+### 构造函数
+
+在 RT-Thread MicroPython 中 `PWM` 对象的构造函数如下:
+
+#### **class machine.PWM**(id, channel, freq, duty)
+
+在给定的总线上构建一个 `PWM` 对象,参数介绍如下:
+
+- **id**:使用的 PWM 设备编号,如  `id = 1` 表示使用设备名为 `pwm1` 的设备;
+- **channel**:使用的 PWM 设备通道号,每个 PWM 设备对应多个通道,范围为 [0, 4];
+- **freq**:初始化频率,范围 [1, 156250];
+- **duty**:初始化占空比,范围 [0 255];
+
+例如:`PWM(1,4,100,100)` 表示当前使用 `pwm1` 设备通道 4,初始化频率为 1000 Hz,占空比为 100。
+
+### 方法
+
+#### **PWM.init**(channel, freq, duty)
+
+根据输入的传输初始化 PWM 设备,参数的说明通上述构造函数参数介绍;
+
+#### **PWM.deinit**()
+
+用于关闭 PWM 设备,设备 deinit 之后需要重新 init 才能使用。
+
+#### **PWM.freq**(freq)
+
+用于获取或者设置 PWM 设备频率,频率的范围 [1, 156250]。如果无入参,返回当前设备频率值;如果有入参,用于设置当前设备频率;
+
+#### **PWM.duty**(duty)
+
+用于获取或者设置 PWM 设备占空比,占空比的范围 [0, 255]。如果无入参,返回当前设备占空比;如果有入参,用于设置当前设备占空比;
+
+### 示例
+
+``` python
+>>> from machine import PWM     # 从 machine 导入 PWM 类
+>>> pwm = PWM(2,4,1000,100)     # 创建 PWM 设备对象
+>>> pwm.init(4,1000,100)        # 初始化 PWM 设备参数
+>>> pwm.freq(2000)              # 设置当前设备频率
+>>> pwm.freq()                  # 获取当前设备频率
+2000
+>>> pwm.duty(200)               # 设置当前设备占空比
+>>> pwm.duty()                  # 获取当前设备占空比
+200
+>>> pwm.deinit()                # 关闭 PWM 设备
+```

+ 1 - 1
port/machine_pwm.c

@@ -56,7 +56,7 @@ typedef struct _machine_pwm_obj_t {
 
 STATIC void error_check(bool status, const char *msg) {
     if (!status) {
-        nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, msg));
+        nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, msg));
     }
 }