[关闭]
@floatsd 2016-01-02T08:56:49.000000Z 字数 2096 阅读 1834

实验三 PWM呼吸灯

CM4实验报告


实验目的

  • 熟悉和掌握PWM模块的工作原理、模块结构和软件编程方法。
  • 学会调整输出周期和占空比

实验原理

Created with Raphaël 2.1.2Start初始化PWM相关GPIO配置配置PWM工作时钟配置PWM发生器工作方式设置PWM频率与占空比使能PWM输出End

实现功能

实验代码

PWM模块初始化

  1. /*******************************************************************
  2. * 函数: PWM_Init()
  3. * 描述: PWM初始化
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void PWM_Init()
  8. {
  9. SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
  10. PWMGenConfigure(PWM0_BASE, PWM_GEN_0|PWM_GEN_1,PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
  11. //配置系统时钟和配置重载值(如蜂鸣器,要注意范围2khz-4khz)
  12. PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0|PWM_GEN_1, 10000);
  13. 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);
  14. //PWM输出使能
  15. PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT |PWM_OUT_1_BIT |PWM_OUT_2_BIT | PWM_OUT_3_BIT, true);
  16. //PWM把发生器使能
  17. PWMGenEnable(PWM0_BASE, PWM_GEN_0);
  18. PWMGenEnable(PWM0_BASE, PWM_GEN_1);
  19. }

呼吸灯实现

  1. /*******************************************************************
  2. * 函数: breathLED_run()
  3. * 描述: 使呼吸灯闪烁,这里用循环让占空比从变大到变小,再利用PWMPulseWidthSet() 每次循环改变占空比形成亮灭。
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void breathLED_run(){
  8. while(1)
  9. {
  10. for(ui32Loop=0;ui32Loop<1000;ui32Loop++)
  11. {
  12. ;
  13. }
  14. PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1,PWMPulseWidth);
  15. PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2,PWMPulseWidth);
  16. PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3,PWMPulseWidth);
  17. PWMPulseWidth += flip;
  18. if(PWMPulseWidth >= 9990)
  19. {
  20. flip = -5;
  21. }
  22. else if(PWMPulseWidth <= 50)
  23. {
  24. flip = 5;
  25. }
  26. }
  27. }

遇到的问题和解决办法

实验结论

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注