lm3s811 学习笔记(五)【PWM】

这篇博客介绍了PWM的概念及其在开关电源和电机控制中的应用。重点讲解了Stellaris® PWM模块的结构,包括3个PWM发生器模块和相关组件。文中还提供了一个使用LM3S811的PWM模块配置和产生PWM信号的代码示例,涵盖了时钟配置、GPIO设置、PWM发生器配置及中断使能等步骤。
摘要由CSDN通过智能技术生成

下午开始要去看pos终端规范了~~学习笔记就先写到这。 改天补上~

PWM是一种对模拟信号电平进行数字化编码的方法,可以通过调整方波的占空比来对模拟信号电平进行编码,通常使用在开关电源(switching power)和电机控制中。

Stellaris® PWM模块由 3个 PWM发生器模块 1个控制模块组成。每个 PWM发生器模块包含1个定时器(16位递减或先递增后递减计数器),2个PWM比较器,PWM信号发生器,死区发生器和中断/ADC-触发 选择器。而控制模块决定了PWM信号的极性,以及将哪个信号传递到管脚。

下图为PWM模块结构图

当讨论到一个 PWM 模块的各种部件时,这个 API 使用了下列标号约定: 
3 个发生器模块称为 Gen0、Gen1 和 Gen2。 
与每个发生器模块相关的 2 个 PWM 输出信号称为 OutA 和 OutB。 
6 个输出信号称为 PWM0、PWM1、PWM2、PWM3、PWM4和 PWM5。 

PWM0 和 PWM1 对应 Gen0、PWM2和 PWM3 对应 Gen1、PWM4 和 PWM5 对应 Gen2。 
而且,作为对这个 API 的一个简化的假设,每个发生器模块的比较器 A 专门用来调整偶数编号的 PWM 输出(PWM0、PWM2 和 PWM4)的脉宽。另外,比较器 B 专门用于奇数编号的 PWM 输出(PWM1、PWM3和 PWM5) 。 

附上代码:

int  main (void)
{
    jtagWait();
SysCtlClockSet(SYSCTL_SYSDIV_1 |                                    /*  配置6MHz外部晶振作为主时钟  */
                   SYSCTL_USE_OSC  |
                   SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_6MHZ);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);                        /*  使能PWM2和PWM3输出所在GPIO  */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);                          /*  使能PWM模块                 */
    SysCtlPWMClockSet(SYSCTL_PWMDIV_1);                                 /*  PWM时钟配置:不分频         */
    GPIOPinTypePWM(GPIO_PORTB_BASE,                                     /*  PB0和PB1配置为PWM功能       */
                   GPIO_PIN_0 | GPIO_PIN_1);
    PWMGenConfigure(PWM_BASE, PWM_GEN_1,                                /*  配置PWM发生器1:加减计数    */
                    PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 60000);                        /*  设置PWM发生器1的周期        */
    PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 3000);                        /*  设置PWM2输出的脉冲宽度      */
    PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, 3000);                        /*  设置PWM3输出的脉冲宽度      */
    PWMOutputState(PWM_BASE,                                            /*  使能PWM2和PWM3的输出        */
                   PWM_OUT_2_BIT | PWM_OUT_3_BIT,
                   true);
    PWMGenEnable(PWM_BASE, PWM_GEN_1);                                  /*  使能PWM发生器1,开始产生    */
                                                                        /*  PWM方波                     */
    PWMGenIntTrigEnable(PWM_BASE,                                       /*  使能PWM发生器1归零触发中断  */
                        PWM_GEN_1,
                        PWM_INT_CNT_ZERO);
    PWMIntEnable(PWM_BASE, PWM_GEN_1);                                  /*  使能PWM发生器1中断          */
    IntEnable(INT_PWM1);                                                /*  使能PWM1中断                */
    IntMasterEnable();                                                  /*  使能总中断                  */
    for (;;) {
    }
}

这个例程是拿L5、L6对应的PWM2、PWM3来说明的

1、显然我们应该使能外设。GPIO B 和PWM(在这之前主时钟设置)

2、PWM时钟设置(由系统时钟分频得到)

3、PB0和PB1设置成PWM类型

4、PWMGenConfigure()PWN发生器模式配置(PWM2和 PWM3 对应 Gen1),设置发生器周期。

5、设置输出信号脉宽,使能输出

6、使能发生器,开始产生方波

7、使能PWM1发生器中断

8、PWM1使能中断

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值