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.

[参考译文] CC1352P:用于 LED 激活的 PWM 控制

Guru**** 2391535 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1335251/cc1352p-pwm-control-for-led-activation

器件型号:CC1352P
主题中讨论的其他器件:SysConfig

您好!

我不熟悉 PWM、因此我的问题以 TI 的现有示例项目为基础: pwmled2

首先、我的环境是:
用于 ARM 9.32.1的 IAR 嵌入式 Workench
SDK: simplelink_cc13xx_cc26xx_sdk_7_10_02_23
芯片 MCU:CC1352P1


我的目标是使用 PWM 使特定 DIO (在 SysConfig、PWM 选项卡中设置)上的 LED 闪烁。
我的传感器需要创建一个固定波:1秒周期和10%占空比。  (即100mSec 开机时间和900mSec 关机时间)

我可以看到 LED 在闪烁、并使用专用 DIO 上的 Logic Pro 测量时间帧。
但是、我无法达到1秒的周期。

使用的参数包括:  
  params.periodUnits = PWM_PERIOD_US;
  params.periodValue = 1000000;  //1sec

  params.periodUnits = PWM_PERIOD_Hz;
  params.periodValue = 1;   //1Hz
然后是  PWM_OPEN()失败。

是否可以使用指定的 SDK 生成此类波形?  
如果某些设置不正确、欢迎提出意见和建议、以及如何通过其他方式产生这一波。
谢谢你。


下面是正在使用的函数:

空初始化 StrobePWMInterface()
{
  uint32_t pwmPeriod = 3000;
  uint32_t DUTY = 0;
  uint32_t dutyInc = 100;

  /*以微秒为单位的睡眠时间*/
  uint32_t time = 50000;
  PWM_Handle pwm2 = NULL;
  PWM_Params 参数;

  /*调用驱动程序初始化函数。 */
  PWM_INIT();

  PWM_PARAMS_INIT (&params);

  //params.periodUnits = PWM_PERIOD_US;
  //params.periodValue = 1000000;     // 1秒
  //params.dutyUnits = PWM_DUTY_US;
  //params.dutyValue = 0;

  params.periodUnits = PWM_PERIOD_Hz;
  params.periodValue = 5;//5Hz
  params.dutyUnits = PWM_Duty_Fraction;
  params.dutyValue = 0;

  pwm2 = pwm_open (CONFIG_PWM_2、&params);
  如果(pwm2 == NULL)
  {
    /* CONFIG_PWM_0未打开*/
   while (1){}
  }

  PWM_START (pwm2);

  DUTY =(uint32_t)((((uint64_t) PWM_DUTY_FRATION_MAX * 10)/ 100);

  /*循环永远递增 PWM 占空比*/
  while (1)
  {

   //PWM_setDutyAndPeriod (pwm2、Duty、pwmPeriod);
   PWM_setDuty (pwm2、占空比);
   Duty =(Duty + dutyInc);

   如果(DUTY == pwmPeriod ||(!DUTY))
   {
     dutyInc =-dutyInc;
   }

   usleep (时间);
  }

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

    您好、Elan:

    您在探头上看到了什么? 您看到的周期和占空比是多少?

    Unknown 说:
    但是我不能达到1秒。

    此致、

    SID

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

    尊敬的 Sid:

    如果我使用以下工具:
    params.periodUnits = PWM_PERIOD_Hz;
    params.periodValue = 5;
    params.dutyUnits  = PWM_Duty_Fraction;
    并将 DUTY 设置为: DUTY =(uint32_t)(((uint64_t) PWM_DUTY_FRATION_MAX * 10)/ 100);

    我得到周期为200mSec、T-on 为10%= 20mSec

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

    您好、Elan:

    如果你想设置一个1秒的方波,我看到周期超过了 PWM_OPEN()函数中的 PWM_COUNT_MAX。

    因此、如果您想使用具有该周期的方波、则可以只使用睡眠函数和 GPIO 切换。  

    您为什么要在该时间段内使用 PWM?

    此致、
    SID

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

    尊敬的 Sid:

    没错、我们也考虑了这个简单的解决方案、换了激活 LED 所需的 PWM。 我们需要 LED 使用 PWM 的原因主要是由于兼容性的原因、因为我们的传感器基于使用 PWM 的旧传感器。 但是、这种旧传感器是十多年前设计的、不使用 TI MCU。  
    感谢您的快速响应和帮助。 现在我们知道了在当前环境下能够实现和不能实现的目标、接下来我们将讨论不同的方法并了解如何继续。