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.

[参考译文] rtos/tm4c123gh下午6:PWM 多频率问题

Guru**** 2609895 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/582248/rtos-tm4c123gh6pm-pwm-multiple-frequencies-problem

器件型号:TM4C123GH6PM

工具/软件:TI-RTOS

大家好、我将使用 TI-RTOS PWM.C 和 PWMTiva.C 来设置一些 PWM 输出。

我需要20kHz、然后200Hz 频率。

当我启动一个时、另一个频率似乎会向上移位、并且我拥有的频率范围大约为2kHz 至20kHz 或200至2kHz

我需要一些伺服器件200Hz、电机20kHz、我想知道如何使用 TI-RTOS API 实现这一点。


PWM_Params 参数1;
uint16_t pwmPeriod = 5000; //以微秒为单位的周期和占空比
PWM_Params_init (&params1);
params1.period = pwmPeriod;
params1.dutyMode = PWM_Duty_scalar;
PWM_Distance_level = PWM_open (2、&params1);
if (PWM_Distance_level = NULL){
System_abort ("Board_PWM0 did not open");
}
PWM_Top_Pitch = PWM_open (3、&params1);
if (PWM_Top_Pitch = NULL){
System_abort ("Board_PWM0 did not open");
}
params_top_y_tal_off_te_tor_tion_wm_tion_t&nal= PWM_tor_tion_t&tion_t&tion_t&tion_t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&tal= PWM_tal= PWM_t&t&t&t&tors1;


}


PWM_setDuty (PWM_TOP_YANY、CAMER_THOLE_HOME); 

PWM_Handle pwm1;
PWM_Handle pwm2;
PWM_PARAMS 参数;
uint16_t pwmPeriod = 50; //以微秒为单位的周期和占空比
uint16_t Duty = 0;
PWM_PARAMS_INIT (params);
params.period = pwmPeriod;
params.dutyMode = PWM_Duty_scalar;
pwm1 = PWM_OPEN (Board_PWM0、params);
if (pwm1 = NULL){
System_abort ("Board_PWM0未打开");
}
if (Board_PWM1!= Board_PWM0){
pwm2 = PWM_OPEN (Board_PWM1、params);
if (pwm2 =NULL){
System_abort ("Board_PWM1未打开");
}
} 



感谢您的任何帮助。

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

    尊敬的 Chris:

    尝试在200Hz 和20kHz 频率下使用不同 PWM 发生器的 PWM 信号。  请参阅此图:

    此致、

    Janet

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

    然后将 PE4、PE5和 PB6作为200Hz 信号。

    PF2和 PF3在数据表中说它们是模块1- PWM 发生器3

    Pb6是模块0 - PWM 发生器0

    PE4和 PE5表示它们是模块0和 PWM 发生器2

    这就是我最初想知道为什么我有冲突的原因

    很抱歉、我应该已经在第一个帖子中发布了我使用的引脚。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然无法弄清楚如何使 PWM 输入以200Hz 和20kHz 的频率输出

    PE4、PE5和 PB6 I 需要200Hz 、PF2和 PF3需要20kHz

    我使用 TI-RTOS PWM.C 和 PWMTiva.C、但当我调用 PWM_open 时、它似乎重写了所有 PWM 时钟
    我有点困惑、如何编辑它、使它仅适用于 PWM 信号的特定发生器/模块
    我想打开。

    如果我只使用非 TI-RTOS API 实例化 PWM 信号、将会获得任何帮助

    #include 
    #include 
    
    PWMTiva_Object pwmTivaObjects[EK_TM4C123GXL_PWMCOUNT];
    
    const PWMTiva_HWAttrs pwmTivaHWAttrs[EK_TM4C123GXL_PWMCOUNT]={
    {
    baseAddr = PWM1_base、
    pwmOutput = PWM_OUT_6、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN
    }、
    {
    baseAddr = PWM1_base、
    pwmOutput = PWM_OUT_7、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN
    }、
    {
    baseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_3、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN
    }、
    {
    baseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_4、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN
    }、
    {
    baseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_5、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN
    }
    };
    
    const PWM_Config PWM_config[]={
    {
    fxnTablePtr =&PWMTiva_fxnTable、
    .object =&pwmTivaObjects[0]、
    hwAttrs =&pwmTivaHWAttrs[0]
    }、
    {
    fxnTablePtr =&PWMTiva_fxnTable、
    .object =&pwmTivaObjects[1]、
    hwAttrs =&pwmTivaHWAttrs[1]
    }、
    {
    fxnTablePtr =&PWMTiva_fxnTable、
    .object =&pwmTivaObjects[2]、
    hwAttrs =&pwmTivaHWAttrs[2]
    }、
    {
    .fxnTablePtr =&PWMTiva_fxnTable、
    .object =&pwmTivaObjects[3]、
    .HWAttrs =&pwmTivaHWAttrs[3]
    }、
    {
    .fxnAttrs =&pwmTiva
    、.ttaxnAttraps =&tiva4[tiva&tiva&tivaAttrines[3]
    
    }、tiva&tiva&tiva&tiva&tivaAttrines]]}、tiva&tiva&tiva&tiva
    {NULL、NULL、NULL}
    };
    
    //
    *===== EK_TM4C123GXL_initPWM ===
    /void
    EK_TM4C123GXL_initPWM (void)
    {
    /*启用 PWM 外设*/
    SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);
    SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
    /*
    *在 GPIO 引脚上启用 PWM 输出。 Board_LED1和 Board_LED2现已推出
    *由 PWM 外设控制-请勿使用 GPIO API。
    *
    GPIOPinConfigure (GPIO_PF2_M1PWM6);
    GPIOPinConfigure (GPIO_PF3_M1PWM7);
    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_2 |GPIO_PIN_3);
    
    GPIOPinConfigure (GPIO_PB5_M0PWM3);
    GPIOPinConfigure (GPIO_PE4_M0PWM4);
    GPIOPinConfigure (GPIO_PE5_M0PWM5);
    GPIOPinTypePWM (GPIO_Porte _BASE、GPIO_PIN_4 |GPIO_PIN_5);
    GPIOPinTypePWM (GPIO_PORTB_BASE、GPIO_PIN_5);
    PWM_init();
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    您能否*附加*(不复制粘贴)您的测试用例? 我想在打开 PWM 对象的位置看到 board.c 文件和代码。
    谢谢、
    Janet
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Janet、您好!

    我已经连接了 Board.C、即 EK_TM4C123GXL 和我调用 PWM_OPEN 函数的两个位置。

    在 Project Main 中、我在 PWM 任务中将 PWM 调用为 open、这用于20kHz 信号

    在摄像头控制中、我调用200Hz 信号的函数。

    无论哪个信号被最后调用、它都优先、而另一个信号被上移或下移。
    e2e.ti.com/.../2146.EK_5F00_TM4C123GXL.ce2e.ti.com/.../1588.project_5F00_main.ce2e.ti.com/.../2845.camera_5F00_control.c

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

    尊敬的 Chris:

    我们查看了 TM4C123GH6PM 数据表并找到了以下数据:

    因此、您上次打开的 PWM 将覆盖先前设置的 PWM 时钟分频器。  您可能能够将 PWMTimerTiva 用于您的伺服。  该驱动器在 LM4计时器的基础上实现 PWM。

    此致、

    Janet

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

    我将研究如何使用 PWMTimerTIva 设置其他 PWM 信号。