打印

我的pwm程序错在哪

[复制链接]
2928|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xifengsong|  楼主 | 2011-9-21 20:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xifengsong 于 2011-9-21 20:19 编辑

我用9b92芯片,想用pwm模块1来产生方波以此来控制连在PF2和PF3的led灯。但是为什么灯根本就不亮?数据手册讲的PF2和PF3正好可以当做pwm2和pwm3的输出的。大家给看看我的程序哪里有问题,还有想问一下向下计数和先向上再向下计数对波形的周期影响如何?程序如下:
#include"inc/hw_types.h"
#include"inc/hw_memmap.h"
#include"driverlib/sysctl.h"
#include"driverlib/gpio.h"
#include"driverlib/pwm.h"
#include "driverlib/rom.h"
#define SysCtlPeriphEn    SysCtlPeripheralEnable
#define GPIOPinTypeOut    GPIOPinTypeGPIOOutput
#define GPIOPinTypeIn     GPIOPinTypeGPIOInput
int
main(void)
{
   
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);

    SysCtlPWMClockSet(SYSCTL_PWMDIV_1);
    SysCtlPeriphEn(SYSCTL_PERIPH_GPIOF);
    SysCtlPeriphEn(SYSCTL_PERIPH_PWM);
    GPIOPinTypePWM(GPIO_PORTF_BASE,GPIO_PIN_2|GPIO_PIN_3);
PWMGenConfigure(PWM_BASE,PWM_GEN_1,PWM_GEN_MODE_DOWN|PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM_BASE,PWM_GEN_1,60000);
    PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,20000);
    PWMPulseWidthSet(PWM_BASE,PWM_OUT_3,400000);
    PWMOutputState(PWM_BASE,PWM_OUT_2_BIT|PWM_OUT_3_BIT,true);
    PWMGenEnable(PWM_BASE,PWM_GEN_1);
  
    while(1)
    {
      
    }
}


求助,我实在是找不出错误在哪!!

相关帖子

沙发
黑发尤物| | 2011-9-22 00:48 | 只看该作者
看不懂帮顶

使用特权

评论回复
板凳
xifengsong|  楼主 | 2011-9-22 10:25 | 只看该作者
我知道错在哪了。原来是没加    GPIOPinConfigure(GPIO_PF2_PWM2);
     GPIOPinConfigure(GPIO_PF3_PWM3);
这两句。可是我想问一下,这样pwm的周期最大只能达到65536(16位计数器)/64(分频系数)=1024个时钟周期,如果时钟周期是16m那就是16MS,这也太小啊,用来控制电机的话不够用啊,有办法加大pwm的周期吗?

使用特权

评论回复
地板
tuzihog| | 2011-9-22 23:22 | 只看该作者
留名正在学习这个PWM

使用特权

评论回复
5
永远的不知| | 2011-9-23 10:21 | 只看该作者
3# xifengsong

问题解决了就好,我在多个帖子了谈过GPIOPinConfigure()函数的问题;

如果要讲IO口配置成备用功能,由于其复用功能不只一个,就需要用到GPIOPinConfigure()函数,由于有些功能是io口的默认功能,比如PA0、PA1默认是uart0功能,如果将PA0和PA1设置为uart0,就可以不用该函数,如果将PA0和PA1配置为其他外设功能,就需要使用该函数;但为了程序好移值且一致性好,建议都讲该函数加上。

GPIOPinConfigure()是设定io口的复用功能,tempest由于有多个复用功能,所以比较加这个函数;
GPIOPinTypeUART,这个函数只是起到了将IO口切换到复用功能的作用,具体是哪个复用功能,由GPIOPinConfigure决定;
这里的复用功能指的是数字部分,如果是模拟的,比如ADC,则不需要加GPIOPinConfigure,因为模拟部分功能没有复用

https://bbs.21ic.com/viewthread.php?tid=260436&highlight=

使用特权

评论回复
6
永远的不知| | 2011-9-23 10:27 | 只看该作者
3# xifengsong

PWM的时钟可以分频。

    //
    // Set the PWM clock to the system clock.
    //
    SysCtlPWMClockSet(SYSCTL_PWMDIV_1);

//*****************************************************************************
//
// The following are values that can be passed to the SysCtlPWMClockSet() API
// as the ulConfig parameter, and can be returned by the SysCtlPWMClockGet()
// API.
//
//*****************************************************************************
#define SYSCTL_PWMDIV_1         0x00000000  // PWM clock is processor clock /1
#define SYSCTL_PWMDIV_2         0x00100000  // PWM clock is processor clock /2
#define SYSCTL_PWMDIV_4         0x00120000  // PWM clock is processor clock /4
#define SYSCTL_PWMDIV_8         0x00140000  // PWM clock is processor clock /8
#define SYSCTL_PWMDIV_16        0x00160000  // PWM clock is processor clock /16
#define SYSCTL_PWMDIV_32        0x00180000  // PWM clock is processor clock /32
#define SYSCTL_PWMDIV_64        0x001A0000  // PWM clock is processor clock /64

使用特权

评论回复
7
lilihua0721| | 2011-9-24 13:00 | 只看该作者
本帖最后由 lilihua0721 于 2011-9-28 21:49 编辑

楼上说的很有道理!最大分频后是多少就是多少

使用特权

评论回复
8
xifengsong|  楼主 | 2011-9-26 16:18 | 只看该作者
是可以分频我知道,可是最多分64,这样向我说的那种情况下PWM周期最大还是16ms啊。

使用特权

评论回复
9
永远的不知| | 2011-9-26 17:16 | 只看该作者
8# xifengsong

pwm的周期最大只能达到65536(16位计数器)/64(分频系数)=1024个时钟周期,如果时钟周期是16m那就是16MS。

您这个是怎么算的?

16M时,1/16M*65536*64=0.262S,不明白16ms是怎么算出来的。

使用特权

评论回复
10
xifengsong|  楼主 | 2011-9-29 08:44 | 只看该作者
好像我算错了,应该是65536*64=4194304个周期?不知道这样算对不?  那16m时钟时就是0.25秒吗?

使用特权

评论回复
11
永远的不知| | 2011-9-30 20:01 | 只看该作者
10# xifengsong

这么算就对了。

使用特权

评论回复
12
33886| | 2014-1-25 15:07 | 只看该作者
學習!

使用特权

评论回复
13
firstblood| | 2014-1-26 12:21 | 只看该作者
永远的不知 发表于 2011-9-23 10:21
3# xifengsong  

问题解决了就好,我在多个帖子了谈过GPIOPinConfigure()函数的问题;

我想说的也是这个问题的,楼上分析的非常好的

使用特权

评论回复
14
firstblood| | 2014-1-26 12:22 | 只看该作者
GPIO口涉及到一口复用的情况,请多注意相关寄存器的配置的,配置不好的话,就用不了该IO口的第二功能、第三功能的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

77

帖子

1

粉丝