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.
工具/软件:Code Composer Studio
尊敬的团队
我的客户使用 计时器 PWM 和 PWM 模块生成250kHz 方波。
他用示波器进行了测试、发现 PWM 模块的方波频率非常精确、但计时器 PWM 生成的方波在249.8~250.2kHz 之间跳转。
问题是什么? 请提供帮助、因为我没有 TM4C129电路板。
uint32_t g_cpuFrequency = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); //计时 器 ROM_SysCtlPeripheralEnable (TimsctL_Perip_PLL | SYSCT3_GPIOTP_1)、120000000;// Timer_GPIOPTMCTRO 1 (Timer_PIN_1引脚 1);GPIOPTM1_GPIO1 (Timer_PI_1) GPIO_PIN_3); ROM_TimerConfigure (Timer1_base、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PWM); ROM_TimerLoadSet (Timer1_base、TIMER_B、 480); ROM_TimerMatchSet (Timer1_base、timer_B、 ROM_TimerLoadGet (Timer1_base、timer_B)/ 2); ROM_TimerEnable (Timer1_base、timer_B); //PWM ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM0); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK); ROM_GPIOPinConfigure (GPIO_PF0_M0PWM0); ROM_GPIOPinConfigure (GPIO_PF2_M0PWM2); ROM_GPIOPinConfigure (GPIO_PK4_M0PWM6); ROM_GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0|GPIO_PIN_2); ROM_GPIOPinTypePWM (GPIO_PORTK_base、GPIO_PIN_4); ROM_PWMClockSet (PWM0_BASE、PWM_SYSCLK_DIV_2); ROM_PWMGenConfigure (PWM0_BASE、PWM_GEN_0、 PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); ROM_PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); ROM_PWMGenConfigure (PWM0_BASE、 PWM_GEN_3、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); ROM_PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、240); // 120M/2/240 = 250K ROM_PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、240); ROM_PWMGenPeriodSet (PWM0_BASE、PWM_GEN_3、 480); ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、 ROM_PWMGenPeriodGet (PWM0_BASE、PWM_GEN_0)/ 2); ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、 ROM_PWMGenPeriodGet (PWM0_BASE、PWM_GEN_1)/ 2); ROM_PWMPulseWidthSet (PWM0_BASE、 PWM_OUT_6、 ROM_PWMGenPeriodGet (PWM0_BASE、PWM_GEN_3)/ 2); ROM_PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、 TRUE); ROM_PWMOutputState (PWM0_BASE、PWM_OUT_2_BIT、TRUE); ROM_PWMOutputState (PWM0_BASE、 PWM_OUT_6_BIT、TRUE);
您好 Susan、
在添加启用 GPIO 端口 D 和 PWM 发生器输出所需的线路后运行代码、我看到计时器 PWM 和 PWM 模块之间的性能没有差异。 他们如何测量这种差异? 它们是否为每次测量使用相同的通道? 一次测量所有参数? 如果是、对所有通道使用相同的探头?
在本例中、我将查看一个16MHz 逻辑状态分析器。 我确实看到 LSA 偶尔报告246.2kHz PWM 的略短的帧、但这种情况发生在所有信号上、 我确信这是 LSA 的测量误差(我家里没有完整的示波器)、因为我在 PWM 和计时器输出上都看到了这种误差。
根据列出的极小误差量、我的精益会导致测量问题。
我看不到他的代码设置有任何问题、尽管一个可能涉及的领域是 GPIO 端口设置、但当前调用使用:
GPIOPadConfigSet (GPIO_PORTD_BASE、GPIO_PIN_3、GPIO_FORMENT_2mA、GPIO_PIN_TYPE_STD);
他们可以尝试 使用 GPIO_Strength _8mA 来查看是否有任何改进的性能。
即使我们确认这不是测量问题、我预计器件的计时器 PWM 输出也会出现该变化量、这在方案中是可以忽略不计的、因为它是大致差异的单个 TM4C 时钟周期 (我的计算结果显示为6.4ns、而 TM4C 时钟周期为8.3ns)。 我怀疑他们所连接的系统对 PWM 频率的微小变化很敏感。