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

3200产生pwm

你好,我使用下面的代码产生38kHz的pwm 发现每3个下降沿就会有一个低于38kHz的脉冲存在,

#define TIMER_INTERVAL_RELOAD2105 
#define DUTYCYCLE_GRANULARITY1052while(1){MAP_UtilsDelay(8000);MAP_TimerDisable(TIMERA2_BASE,TIMER_B);	MAP_UtilsDelay(80000);MAP_TimerLoadSet(TIMERA2_BASE,TIMER_B,TIMER_INTERVAL_RELOAD);/*TIMER_INTERVAL_RELOAD = 80Mhz/38khz = 2105*/MAP_TimerMatchSet(TIMERA2_BASE,TIMER_B,DUTYCYCLE_GRANULARITY);/*DUTYCYCLE_GRANULARITY = 1052占空比50%*/MAP_TimerEnable(TIMERA2_BASE,TIMER_B);}

下面是我用逻辑分析仪得到的结果:每3组下降沿就会有一个不是38Khz的脉冲存在,请问是我的程序有什么问题吗?

Terry Han:

1、参考TI的\examples\CC32xx_PWM的例子进行验证PWM的配置,关于PWM例程中需要注意的几点我列在下面,在你的程序中会不会有CC3200进入低功耗模式的情况?

2、在PWM的例子中需要注意以下几点:

SetupTimerPWMMode()函数中

MAP_TimerControlLevel(ulBase,ulTimer,ucInvert);

//输出高低电平 1=ture-低电平 0=False-高电平 //当LoadSet=MatchSet值时,PWM输出的电平是高电平还是低电平 // 1=ture-低电平 当LoadSet≥MatchSet 时PWM输出低电平 —Green/Yellow LED // 当LoadSet<MatchSet 是PWM输出高电平 // 0=False-高电平 // 当LoadSet≥MatchSet 时PWM输出高电平 —RED LED // 当LoadSet<MatchSet 是PWM输出低电平

// 修改自己的PWM引脚可以通过以下步骤-(1)先用PinMux-PWM –>PIN_02 for TimerPWM7 GT_PWM07// (2)通过PWM_OUT7–在TRM中Table 9-1. Available CCP Pins and PWM Outputs/Signals Pins 找到对应的定时器 — Timer3->Timer B// (3)配置TIMERA3_BASE TIMER_B TIMER_CFG_SPLIT_PAIR/TIMER_CFG_B_PWM 及默认PWM输出电平 —测试OK// 注意:如果PWM_OUT6和PWM_OUT7同时使用的话必须在在最后一个TIMER_B配置中打开TIMER_CFG_A_PWM配置,否则会将TIMER_A的配置清除!// TIMER_CFG_A_PWM 0x0000000A// TIMER_CFG_B_PWM 0x00000A00 —最终的配置如下:// HWREG(ulBase + TIMER_O_TAMR) = ulConfig & 255; //取低八位// HWREG(ulBase + TIMER_O_TBMR) = (ulConfig >> 8) & 255; //取低八位的前八位 —可以加个判断来避免这个问题 SetupTimerPWMMode(TIMERA3_BASE, TIMER_B, (TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PWM | TIMER_CFG_B_PWM), 1); //保留低八位数据 并配置–TIMER_B –测试OK

在PWM程序中并未使用分频功能,如果使用分频功能注意// 设置分频,记得一定要修改这个寄存器,这个寄存器包含了比较值的高 8bit,请记住 CC3200 的 PWM 的计数器其实 24bit的。不是 16bit 的。// 下面给出修改这个寄存器的库函数// TimerPrescaleMatchSet(ulBase,ulTimer,n);

赞(0)
未经允许不得转载:TI中文支持网 » 3200产生pwm
分享到: 更多 (0)