当前文档版本为 v0.6.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Driver: QDEC & PWM

1 功能概述

本文主要介绍PAN1080 EVB板QDEC外设模块的使用,检测外部PWM信号,触发QDEC计数。

2 环境要求

  • PAN1080 EVB 一块

  • USB-TypeC 线一条(用于供电和查看串口打印 Log)

  • 硬件接线:

    • 使用 USB 线,将 PC USB 与 EVB USB-TypeC(USB->UART)相连

    • 根据 EVB 核心板芯片的封装不同,使用杜邦线将 EVB 底板上的:

      • TX0 与 P00 相连, RX0 与 P01 相连(若 EVB 板芯片为 QFN32 或 LQFP64 封装)

      • TX0 与 P30 相连, RX0 与 P31 相连(若 EVB 板芯片为 QFN48 封装)

  • PC 软件: 串口调试助手(UartAssist)或终端工具(SecureCRT),波特率921600

3 编译和烧录

例程位置:zephyr\samples_panchip\drivers\qdec\qdec_pwm

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

  1. PAN1080 EVB 板 PIN 脚接线说明:

    通道

    PIN脚

    PWM

    通道X0

    P04

    P02 PWM CH2

    通道X1

    P05

    P03 PWM CH3

    通道Y0

    P06

    P02 PWM CH2

    通道Y1

    P07

    P03 PWM CH3

    通道Z0

    P20

    P02 PWM CH2

    通道Z1

    P21

    P03 PWM CH3

  2. 例程中默认使用通道 Z0 (P20) / Z1 (P21),向上计数和向下计数的结果如下图所示:

    向上计数:

    image

    QDEC例程向上计数Log

    向下计数:

    image

    QDEC例程向下计数Log

5 开发说明

5.1 启用QDEC模块

在prj.conf文件中添加“CONFIG_QDEC=y”启用qdec模块。

CONFIG_QDEC=y

5.2 初始QDEC

const struct device *qdec_dev = DEVICE_DT_GET(DT_NODELABEL(qdec));

5.3 配置QDEC

在“pan108xxb5_evb.overlay”文件中添加QDEC参数配置:

&qdec {
	event-threshold = <100>;
	polarity = "polarity-low";
	resolution = "cnt-resolution-1x";
	filter-threshold = "filter-threshold-3";
	pinctrl-0 = <&p2_0_qdec_z0 &p2_1_qdec_z1>;
	status = "okay";
};

Config Type

Description

event-threshold

设置qdec事件触发阈值(此处是100)

polarity

设置qdec电平极性,可设置为高或者低电平有效(此处是低电平有效)

resolution

设置qdec分辨率,可设置为1x、2x、4x(此处是1x)

filter-threshold

设置qdec短脉冲过滤,设置范围为0~7(此处是3)

QDEC PIN 脚配置为使用 Z0/Z1 两个通道:

pinctrl-0 = <&p2_0_qdec_z0 &p2_1_qdec_z1>;

同理配置 X0/X1 和 Y0/Y1 等所有通道:

pinctrl-0 = <&p0_4_qdec_x0 &p0_5_qdec_x1 &p0_6_qdec_y0 &p0_7_qdec_y1 &p2_0_qdec_z0 &p2_1_qdec_z1>;

5.4 QDEC中断配置使能

通道配置:

uint8_t channel = QDEC_CNT_IDX_Z; /* 使用 QDec 模块的 Z 通道 */

qdec_clear_event_cnt(qdec_dev, channel);

代码默认配置通道 Z,也可配置成 QDEC_CNT_IDX_X、QDEC_CNT_IDX_Y。

qdec_irq_add_cb(qdec_dev, qdec_irq_cb);

qdec_clear_int_msk(qdec_dev, ENABLE, QDEC_INT_CNT_OVERFLOW_Msk | QDEC_INT_CNT_UNDERFLOW_Msk);
qdec_clear_event_cnt(qdec_dev, channel);
qdec_clear_int_flag(qdec_dev, QDEC_FUNC_ALL);
qdec_clear_raw_int_flag(qdec_dev, QDEC_FUNC_ALL);

qdec_set_enable(qdec_dev, ENABLE, QDEC_EN_Msk | QDEC_FILTER_EN_Msk |  (QDEC_CHANNEL_X_EN_Msk << channel) | QDEC_EVENT_EN_Msk);

注册中断回调函数“qdec_irq_cb”,配置通道X、向上计数和向下计数中断,清中断标志位。

6 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:       19568 B       256 KB      7.46%
SRAM:        3920 B        64 KB      5.98%