@floatsd
2016-01-02T08:56:49.000000Z
字数 2096
阅读 1834
CM4实验报告
- 熟悉和掌握PWM模块的工作原理、模块结构和软件编程方法。
- 学会调整输出周期和占空比
板子上提供4个PWM发生器模块和一个控制模块,一共有8路PWM信号输出。每个PWM发生器输出2路PWM信号,分别是PWMA和PWMB,他们的可以选择是否共享时钟和频率,整个四个PWM模块之间的关系如下图所示:
实验程序流程:
/*******************************************************************
* 函数: PWM_Init()
* 描述: PWM初始化
* 输入值:无
* 返回值:无
*****************************************************************/
void PWM_Init()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
PWMGenConfigure(PWM0_BASE, PWM_GEN_0|PWM_GEN_1,PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
//配置系统时钟和配置重载值(如蜂鸣器,要注意范围2khz-4khz)
PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0|PWM_GEN_1, 10000);
PWMPulseWidthSet(PWM0_BASE,PWM_OUT_1|PWM_OUT_2|PWM_OUT_3|PWM_OUT_4|PWM_OUT_5|PWM_OUT_6|PWM_OUT_7|PWM_OUT_0,50);
//PWM输出使能
PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT |PWM_OUT_1_BIT |PWM_OUT_2_BIT | PWM_OUT_3_BIT, true);
//PWM把发生器使能
PWMGenEnable(PWM0_BASE, PWM_GEN_0);
PWMGenEnable(PWM0_BASE, PWM_GEN_1);
}
/*******************************************************************
* 函数: breathLED_run()
* 描述: 使呼吸灯闪烁,这里用循环让占空比从变大到变小,再利用PWMPulseWidthSet() 每次循环改变占空比形成亮灭。
* 输入值:无
* 返回值:无
*****************************************************************/
void breathLED_run(){
while(1)
{
for(ui32Loop=0;ui32Loop<1000;ui32Loop++)
{
;
}
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1,PWMPulseWidth);
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2,PWMPulseWidth);
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3,PWMPulseWidth);
PWMPulseWidth += flip;
if(PWMPulseWidth >= 9990)
{
flip = -5;
}
else if(PWMPulseWidth <= 50)
{
flip = 5;
}
}
}