[新手园地] 傻瓜菜鸟第6帖——PWM

[复制链接]
 楼主| weshiluwei6 发表于 2011-4-30 11:08 | 显示全部楼层 |阅读模式
放假一早写了个PWM程序,基本每句都有注释,个人觉得还是挺清晰地,虽然是个简单的程序,不过打好基础。
NUC M0 修改PWM频率和占空比是如此简单,不错不错

1. 500HZ 波形(示波器周期1ms)


2. 200KHZ波形(1US)



最后请问下:PWM分辨率到底怎么计算呢?谢谢了

  1. /**************************************************
  2. ** 文件名称:NUC120_HOT_PWM.c
  3. ** 文件说明:NUC120助学板练习程序
  4. ** 创建日期:2011-04-30
  5. ** 修改日期:
  6. ** 备    注:PWM0输出波形测试,频率为400HZ,初始占空比为50%
  7. **************************************************/
  8. #include <stdio.h>
  9. #include "NUC1xx.h"
  10. #include "Driver\DrvGPIO.h"
  11. #include "Driver\DrvSYS.h"
  12. #include "Driver\DrvUART.h"
  13. #include "Driver\DrvTIMER.h"
  14. #include "Driver\DrvPWM.h"

  15. volatile  uint8_t PWM0_Duty_Cycle = 50;          //设置占空比
  16. /************************************************************************
  17. ** Function Name    :  UART_INT_HANDLE
  18. ** Descriptions     :  UART Callback function
  19. ** Input  parameters:  u32IntStatus
  20. ** OutPut parameters:    None
  21. ** Returned  value  :   
  22. ************************************************************************/
  23. void Init_System(void)
  24. {
  25.    UNLOCKREG();                                  //寄存器锁定地址寄存器
  26.    DrvSYS_SetOscCtrl(E_SYS_XTL12M,1);         //使能12M crystal
  27.    
  28.    /* Waiting for 12M Xtal stalble */
  29.    DrvSYS_Delay(5000);
  30.    LOCKREG();                                   //向“0x5000_0100”写入任何值,可以重锁保护寄存器
  31. }
  32. /************************************************************************
  33. ** Function Name    :  UART_INT_HANDLE
  34. ** Descriptions     :  UART Callback function
  35. ** Input  parameters:  u32IntStatus
  36. ** OutPut parameters:    None
  37. ** Returned  value  :   
  38. ************************************************************************/
  39. void Init_PWM0(void)
  40. {
  41.   S_DRVPWM_TIME_DATA_T sPt;
  42.   /*
  43. 声明 PWM Timer设置的结构体 位于DRVPWM.H
  44. 结构体如下:
  45. typedef struct
  46. {
  47.    uint8_t   u8Mode;
  48.    uint8_t   u8HighPulseRatio;
  49.    uint8_t   u8ClockSelector;
  50.    uint8_t   u8PreScale;
  51.    uint32_t     u32Frequency;
  52.    uint32_t     u32Duty;
  53.     int32_t   i32Inverter;
  54. }S_DRVPWM_TIME_DATA_T;
  55.   */
  56.   /* 自动重载模式,DRVPWM_ONE_SHOT_MODE单触发模式 */
  57.   sPt.u8Mode              =       DRVPWM_AUTO_RELOAD_MODE;
  58.   sPt.u8HighPulseRatio   =       PWM0_Duty_Cycle;        //高脉冲宽度
  59.   sPt.u32Frequency         =       200000;
  60.   sPt.i32Inverter         =       0;                      //反向关闭

  61.   /* 打开PWM时钟并且复位pwm */
  62.   DrvPWM_Open();
  63.   
  64.   /* 给多功能脚指定功能 */
  65.   DrvGPIO_InitFunction(E_FUNC_PWM01);                             
  66.   
  67.   /* 这个函数可以用来选择PWM0/1和PWM2/3的时钟源 */
  68.   DrvPWM_SelectClockSource(DRVPWM_TIMER0,DRVPWM_EXT_12M);
  69.   
  70.   /* 这个函数可以用来配置频率、脉冲、模式、逆转功能 */
  71.   DrvPWM_SetTimerClk(DRVPWM_TIMER0, &sPt);         //S_DRVPWM_TIME_DATA_T *sPt
  72.   
  73.   /* 这个函数  Enable Output for PWM Timer0  */
  74.   DrvPWM_SetTimerIO(DRVPWM_TIMER0,1);
  75.   /* 这个函数可以用来PWM定时器/捕获器功能  */
  76.   DrvPWM_Enable(DRVPWM_TIMER0,1);
  77. }
  78. /************************************************************************
  79. ** Function Name    :  UART_INT_HANDLE
  80. ** Descriptions     :  UART Callback function
  81. ** Input  parameters:  u32IntStatus
  82. ** OutPut parameters:    None
  83. ** Returned  value  :   
  84. ************************************************************************/
  85. int main(void)
  86. {
  87. Init_System();
  88. Init_PWM0();
  89. while(1);
  90. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
maxking 发表于 2011-5-1 19:48 | 显示全部楼层
PWM是否可以实现呼吸灯的效果??
hotpower 发表于 2011-5-1 20:00 | 显示全部楼层
园地有一个例程
lixupengarm 发表于 2011-5-23 17:45 | 显示全部楼层
示波器。。:lol
wangjia2000 发表于 2011-9-29 11:13 | 显示全部楼层
想问一下,频率最低可设到多少???
wangjia2000 发表于 2011-9-29 11:13 | 显示全部楼层
谢谢
零度888 发表于 2014-5-6 16:38 | 显示全部楼层
需要捕获功能,能教教吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:250水王,种菜浇水,要输就输给理想,要败就败给高手。不可浮躁

7

主题

1126

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:250水王,种菜浇水,要输就输给理想,要败就败给高手。不可浮躁

7

主题

1126

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部