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.
工具/软件:TI-RTOS
大家好、我使用 TI-RTOS 示例代码来生成 PWM 输出。
我正在尝试找出可以在 TI-RTOS 中更改 PWM 频率的位置、我最终得到了该函数
在 PWMTiva.C 文件中?
这是更改 PWM 频率的正确方法,以及参数 cmd 和*arg 是什么
我认为必须在某个地方进行更简单的 API 调用、以将频率设置为更高的值。
或者、我能否使用 TivaWare API 设置 PWM 计时器、而这不会破坏 TI-RTOS?
int PWMTiva_control (PWM_Handle handle、unsigned int cmd、void *arg) { unsigned int 密钥; uint32_t 期间; uint32_t PresRegVal; uint8_t 预分频器; PWMTiva_Object *object = handle->object; PWMTiva_HWAttrs const *hwAttrs = handle->hwAttrs; switch (cmd){ 案例 PWMTiva_CMD_CHANGE_GEN_PERIOD: assert_isTrue ((uint32_t *) arg!= NULL、NULL); /*计算 PWM 定时器计数中的周期*/ 期间=(*(uint32_t *) arg)*(object->pwmStatus)->cyclesPerMicroSec; /*确保可以使用当前预分频器生成新周期*/ PWMTiva_calculatePrescalar (period、&presRegVal、&prescalar); if (prescalar!=(object->pwmStatus)->prescalar){ 返回(-1); } 周期/=预分频器; KEY = Hwi_disable(); PWMGenPeriodSet (hwAttrs->baseAddr、hwAttrs->pwmOutput & PWM_GEN_MASK、 期间); /*使用新周期更新 PWM 状态*/ *(object->pwmStatus)->genPeriods + ((hwAttrs->pwmOutput /PWM_out_0)-1)=*(((uint32_t *) arg); Hwi_restore (key); 返回(PWMTiva_CMD_CHANGE_GEN_PERIOD); } /*尚未实施*/ 返回(PWM_STATUS_UNDEFINEDCMD); }
感谢您的帮助、我们不胜感激
Chris、
您可以在 tirtos_tivac_2_16_00_08/products/tidrivers_tivac_2_16_00_08/docs/doxygen/html/index.html 中引用 doxygen (#因您的版本而异)。 它显示了使用 PWM_CONTROL 的示例。
您可以使用 TivaWare 调用。 唯一需要做的是、如果你正在使用一个中断、请确保使用 Hwi 模块、而不是直接管理矢量表。 此外、您还了解过 PWM_setDuty 吗?
Todd
我将 PWM_setDuty 用于占空比、我只是在所需频率下没有我想要的分辨率。
但是、我认为我仅限于整数值、我希望分辨率为1000+、且 PWM_FREQUENCY > 20kHz。
因此、现在使用 params.period 时、它需要一个与1微秒相关的整数值、我需要一个5微秒的 PWM_period、并且能够以1000+的分辨率更改 PWM 占空比。
我认为我必须解决这个问题的方法是更改 PWM 外设时钟分频器、我只是不知道在 TI-RTOS 中我会怎么做、因为所有 PWMTimerTiva.C 和 PWMTiva.C 似乎都设置为 cyclesPerMicroSec。
我需要更改 PWM 外设所获得的时钟、以便在理想情况下实现15kHz 至40kHz 的范围、然后以500-10000理想的占空比实现分辨率。
编辑四颗星****
我想我找到了解决方案、我将参数中的 DutyMode 更改为标量值。 现在、我相信我在20kHz++的频率下具有所需的分辨率