TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2640R2F: cc2640r2f能输出准确的2.048MHz pwm?

Part Number:CC2640R2F

cc2640r2f能输出准确的2.048MHz pwm?我测试发现不是2.048M。是不是频率太高了还是2.048MHz不好实现?

PWM_Handle PWMHandleCLK;
PWM_Params PWMparams;
void HwPWMInit(void)
{PWM_init();PWM_Params_init(&PWMparams);//REDPWMparams.idleLevel = PWM_IDLE_LOW;PWMparams.periodUnits = PWM_PERIOD_HZ;PWMparams.periodValue = 2048000;PWMparams.dutyUnits = PWM_DUTY_FRACTION;PWMparams.idleLevel = PWM_IDLE_LOW;PWMparams.dutyValue = (uint32_t) (((uint64_t) PWM_DUTY_FRACTION_MAX * 50) / 100);PWMHandleCLK = PWM_open(EEG_BOARD_PWM0, &PWMparams);

//PWM_start(PWMHandleCLK);
}

Kevin Qiu1:

驱动程序中有一个输出1MHz的例子,有测试数据吗,1MHz和2MHz的频率准确吗

,

caiyu:

测试了几个参数,

100K,50.75%;400k,50.8%;4M,59%;2M,55%;频率是准的,占空比不准。

,

Kevin Qiu1:

你是用什么测得的数据,将测试截图传上来,这些数据有些奇怪,至少在100KHz不应有这么大误差

,

caiyu:

PWMparams.periodValue = 2048000;我修改这个值,然后用示波器看PWM引脚波形。

,

Kevin Qiu1:

高频率可能会有其他延时影响占空比,比如RTOS

100K应该不会有这样的情况,将上面的4个频率的测试图传上来

,

caiyu:

2.05M4M150Hz1.05M2M2.1M

400K100k

,

caiyu:

带小数的频率分别是2.05M;2.1M;1.05M。

比较关心2.048MHz如何实现。非常感谢

,

Kevin Qiu1:

上面100KHz的波形很好,看起来应该差不多就是50%,你是如何测的占空比,我没有看到刻度线,应在一个周期内测量

高频率占空比有些小误差是正常的,因为这还涉及程序执行以及IO切换电平,

在2MHz占空比完全准确,我认为这在CC2640r2f上是不能实现的

,

caiyu:

占空比黄色框里有,设备自己测得。可以接受不完全准确,只是有什么办法实现2.048MH的pwm波。

,

Kevin Qiu1:

设备自己测可能测的是所有收到信号的占空比,你看下一个周期内占空比是多少

上面设置输出的2.048M不行吗

,

caiyu:

不能输出2.048M,输出2.08696M.

,

Kevin Qiu1:

2.048M不应有此限制,这里有一个输出8MHz PWM的例子,对于精度,除了本身的限制,还可通过使用外部高频晶振来提高精度:

https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_5_30_00_56/docs/drivers/doxygen/html/_p_w_m_timer_c_c26_x_x_8h.html

,

caiyu:

 上面有张图,我设置输出1.05M.输出1.0667MHz.只能输出整数的。

这是我的代码,

您那边能测试下吗?

PWM_Handle PWMHandleCLK;PWM_Params PWMparams;void HwPWMInit(void){ PWM_init(); PWM_Params_init(&PWMparams); //RED PWMparams.idleLevel = PWM_IDLE_LOW; PWMparams.periodUnits = PWM_PERIOD_HZ; PWMparams.periodValue = 2048000; PWMparams.dutyUnits = PWM_DUTY_FRACTION; PWMparams.idleLevel = PWM_IDLE_LOW; PWMparams.dutyValue = (uint32_t) (((uint64_t) PWM_DUTY_FRACTION_MAX * 50) / 100); PWMHandleCLK = PWM_open(EEG_BOARD_PWM0, &PWMparams);

// PWM_start(PWMHandleCLK);}

,

Kevin Qiu1:

考虑到 PWM 定时器的分辨率,CC2640R2F 给出的输出是有意义的。定时器源自 48 MHz 主时钟(最大允许值),因此尽管需要 2,048,000 MHz,但这允许 48/2.048 = int(23.4375) = 23 个周期来实现所需的 PWM 周期。在这些情况下,此设备和 TI 驱动程序可以实现的最佳频率是 (1/23)*48 = 2,0869,565 MHz,这正是示波器上的输出,这表明在这些条件下将无法获得更准确的 PWM

,

caiyu:

好的,感谢指导

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F: cc2640r2f能输出准确的2.048MHz pwm?
分享到: 更多 (0)