This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PROCESSOR-SDK-AM65X:通过 sysfs 进行 eHRPWM 控制

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/854047/processor-sdk-am65x-ehrpwm-control-via-sysfs

器件型号:PROCESSOR-SDK-AM65X

您好、论坛、

我正在尝试弄清楚 Linux 如何将 eHRPWM 通道映射到 sysfs 接口、可通过/sys/class/pwm.进行访问  我为每个 PWM 启用了 A 和 B 引脚、并将&ehrpwm0到&ehrpwm5的状态设置为"正常"。  当 Linux 启动时、我可以在 CD /sys/class/pwm 之后看到以下内容:

# pwd
/sys/class/pwm
# ls
pwmchip0 pwmchip1 pwmchip11 pwmchip3 pwmchip5 pwmchip7 pwmchip9
# cd pwmchip0
# ls
器件 导出 npwm 电源 子系统 uevent 取消导出
# ls 设备
驱动程序 MODALIAS 电源
子系统驱动程序_override of _node PWM uevent
# cat device/modalias
of:npwmT cTI、am654-ecapCTi、am3352-ecap
# cd.
# cat pwmchip1/device/modalias
of:npwmT cTI、am654-ehrpwmCti、am3352-ehrpwm
# cat pwmchip3/器件/调制别名
:NpwmT cTI、am654-ehrpwmCti、am3352-ehrpwm
# cat pwmchip5/器件/调制别名
:NpwmT cTI、am654-ehrpwmCti、am3352-ehrpwm
# cat pwmchip7/device/modalias
of:npwmT cTI、am654-ehrpwmCti、am3352-ehrpwm
# cat pwmchip9/device/modalias
of:npwmT cTI、am654-ehrpwmCti、am3352-ehrpwm

通过这个、我可以计算出 pwmchip0由 eCAP 控制、而 pwmchip1、3、5、7、 9是 eHRPWM。

如何确定哪个 pwmchipX 连接到 eHRPWM0、1、2、3、4、 和5?

此外、有人能否举例说明如何为 eHRPWM 创建两个 PWM 通道、设置占空比和周期、然后启用 PWM?

我认为它类似于:

#这是哪个 eHRPWM?
cd /sys/class/pwm/pwmchipX
#创建 pwm0和 pwm1
echo 0 >导出
echo 1 >导出
#设置 pwm0
cd pwm0
# Duty_cycle 和 period 的单位是什么???
echo NNN > Duty_cycle
echo MMM > period
# set active high polarity
echo 1 > polarity
# Turn on the PWM
echo 1 > enable

这是正确的方法吗?  如果是、则 Duty_cycle 和 period 的允许值是多少?

非常感谢您的帮助-对此必须有一个简单的答案!

Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一个问题: 在 Linux 中启用 eHRPWM 驱动程序/模块需要做什么?

    非常感谢!

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另外、展示了我对 EHRPWM 的缺乏经验: 在 PWM 实际运行之前、是否需要设置时钟源?  有人能否提供一个示例、说明如何 在需要时设置时钟源?

    再次感谢、

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Scott、

    您使用的是哪个版本的 Processor SDK?

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nick、

    很抱歉、应该已经指定了。 它是06.00.00.07。

    谢谢!

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Scott、

    我们的 Processor SDK PWM 驱动程序文档将解答您的一些问题。 请查看、并告诉我您还有哪些问题。

    我仍在研究是否有方法可以确定哪个 PWM 与哪个 sysfs 条目相关联。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Nick、

    具体而言、我正在尝试找出以下值的允许范围:

    # What are the units for duty_cycle and period???
    echo NNN > duty_cycle
    echo MMM > period

    The documentation you referred me to seems to indicate that these values are in nanoseconds, so if I perform the following, I should be able to run a 1 second PWM with a 50% duty cycle by specifying 1000000000 (1e9) for the period and 500000000 (5e8) for the duty_cycle.  However, I get invalid value parameters:

    # cd /sys/class/pwm
    # ls
    pwmchip0 pwmchip1 pwmchip11 pwmchip3 pwmchip5 pwmchip7 pwmchip9
    # cd pwmchip1
    # echo 0 > export
    #
    echo 1 > export # cd pwm0
    #
    
    
    echo 1000000000 > period [ 811.530sh] ehrpwm 3000000 >不受支持的 PWM 占空比值
    :写入错误: 写入错误:参数无效
    

    ->很明显、eHRPWM 周期和占空比的允许范围存在一定的限制、但我不知道它是什么。  我也不知道单位(纳秒、微秒等)是多少。

    ->请您澄清一下吗?  如果可能、您可以尝试在 AM65X-EVM 板上尝试一个示例、以查看某对 eHRPWM 输出是否正常工作、并让我知道生成的周期和占空比是多少?  如果您可以在回复中发布您的示例、这将是一个巨大的帮助。

    还期待尝试了解每个 pwmchipX 如何映射到相应的 eHRPWM 实例。

    在 CD /sys/class/pwm 之后、我执行了 ls -al、并找到以下符号链接信息:

    # pwd
    /sys/class/pwm
    # ls -al
    total 0
    drwxr-xr-x 2 root 根 12月0日2118:53
    drwxr-xr-x 55 root 根 12月0日2118:53
    lrwxrwxrwx 1根 根 0 Dec12 21 18:53 pwmchip0 ->./../devic
    es/平台/互连@100000/3100000.PWM/PWM/pwmchip0
    lrwxrwxrwxrwx 1 root 根 0 Dec12 21 18:53 pwmchip1 ->../../devic
    es/平台/互连@1000/3000000.PWM/PWM/pwmchip1
    lrwxrwxrwxrwx 1 root 根 0 Dec12 21 18:53 pwmchip11 ->./../devi
    cs/platform/interconnect@1000/3050000.PWM/PWM/pwmchip11
    lrwxrwxrwxrwx 1 root 根 0 Dec12 21 18:53 pwmchip3 ->../../devic
    es/平台/互连@1000/3010000.PWM/PWM/pwmchip3
    lrwxrwxrwxrwx 1 root 根 0 Dec12 21 18:53 pwmchip5 ->../../devic
    es/平台/互连@100000/302000.PWM/PWM/pwmchip5
    lrwxrwxrwxrwx 1 root 根 0 Dec12 21 18:53 pwmchip7 ->../../devic
    es/平台/互连@1000/3030000.PWM/PWM/pwmchip7
    lrwxrwxrwxrwx 1 root 根 0 12月21日18:53 pwmchip9 ->/../devic
    es/平台/互连@100000/3040000.PWM/PWM/pwmchip9 
    

    从我在《技术参考手册》中"加粗"的寄存器值来看、似乎:

    pwmchip0 -> eECAP0_CTL_STS
    pwmchip1 -> EHRPWM0_ePWM
    pwmchip3 -> EHRPWM1_ePWM
    pwmchip5 -> EHRPWM2_ePWM
    pwmchip7 -> EHRPWM3_ePWM
    pwmchip9 -> EHRPWM4_ePWM pwmchip11
    -> EHRPWM4_ePWM pwmWPM5_ePWM pwmchip7
    

    我将从3100000.PWM/PWM/pwmchip0等条目推断这一点、然后在 TRM 的表2.1 (主域存储器映射)中查找地址0x0003100000。  这有道理吗?

    非常感谢您的帮助!

    此致、

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Scott、

    sysfs 映射

    看起来 sysfs 条目的填充顺序与设备树节点的创建顺序相同。 请注意、器件树文件的读取顺序与它们的包含顺序一致。 因此、如果 myBoard.dts 包括 myInclude1.dtsi (其中包括 myInclude2.dtsi)、那么当内核加载 myBoard.dtb 时、它将读取 myInclude2.dtsi 内容、然后读取 myInclude1.dtsi 内容、再读取 myBoard.dtsi 内容。

    ehrpwm 节点在 arch/arm64/boot/dts/ti/k3-am65-main.dtsi 中定义。 因此、定义的第一个 ehrpwm 节点应具有最低的 sysfs 编号、第二个节点应具有次低的 sysfs 编号、等等。 与从 ls -al 中找到的映射相匹配

    我将需要一点时间来查看您问题的其他部分。 请随时继续使用它。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Nick、

    我认为我很容易找到哪个 pwmchipX 数字与哪个 eHRPWM 节点有关。  我可以使用创建两个 PWM 通道

    echo 0 > export;echo 1> export

    我还没有弄清楚如何正确设置 pwm0和 pwm1的参数、当然可以使用您的帮助!

    在 pwm0下、有以下条目:

    捕捉    使     能极性   uevent
    占空比 周期     功率

    我认为我需要设置周期和 Duty_cycle、然后将 enable 设置为1、但我仍然不知道周期和 Duty_cycle 的单位和限制是多少。

    我将继续使用它、但没有 EVM 板、因此、如果某些东西无法正常工作、则不清楚这是由我们的定制硬件上的问题还是我设置的方式中的错误造成的。  同样、如果您可以在 AM65X-EVM 板上运行实验、这将会大有帮助!

    衷心感谢您为获取此信息所做的努力。  希望通过一个解决方案向该线程报告、该解决方案将使任何想要从命令行界面创建简单 PWM 信号的人受益。

    此致、

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Scott、

    当修改这个值时、在周期= 1000000000ns 的情况下、我在 eCAP PWM 上看不到任何错误。 如您报告的那样、我确实会在 eHRPWM 上看到任何高于939000000 ns 的周期的错误。 驱动程序代码不是非常简单、因此我将与开发人员一起办理登机手续。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nick、

    感谢您在这方面的努力。 我期待着听到有关结果的消息、希望此主题能帮助每个人更有效地利用 eHRPWM。

    此致、衷心感谢、

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Scott、

    简短答案:AM65x eHRPWM 最大周期约为0.94s。 ECAP 周期为1。

    答案很长:(来自开发人员的报价)

    这些计算稍微复杂、具体取决于模块的输入功能 clk (fclk)频率(在 SoC 上有所不同)。 下面是 AM65x 的计算

    对于 EHRPWM:

    时基计数器(TBCLK) clk 用于对周期进行计数。

    TBCLK 频率= fclk /预分频器

    预分频器的最大值= 1792、最小值= 1

    在 AM65上、fclk = 125MHz、因此使用预分频器 TBCLK (最小频率)= ~70KHz

    周期计数器范围为0至65535。 因此、最大周期将为653/70KHz =~μ s .94s (最大周期)

    对于 ECAP:

    周期计数器是32位寄存器(2^32 -1)、因此对于125MHz 的 fclk、可以支持最大34s。 Linux 将其限制为1

    后续行动:  

    感谢您向我介绍此内容。 我们的 PWM 文档目前以 eCAP 为重点、但它也需要支持 eHRPWM。 我仍在与开发人员讨论应该对文档、驱动程序输出等进行哪些更改、以使其更方便客户使用。 欢迎提供任何反馈。

    此致、

    Nick