[原创] 【R7F0C809】PWM测试

ltbytyn   2015-10-13 15:48 楼主
我的最终目的是要控制电机(玩具电梯),所以通过PWM调速还是很有必要的。 设定周期为10ms。实现10%~90%(占空比变化率为10%)总共九种占空比的波形输出。 实现思路,通过定时器计数,通过到达设定值时翻转实现IO实现PWM占空比可调。 IMG_20151013_140046.jpg 上图为脱机运行实物图。使用逻辑分析仪测试PWM。 占空比变化最小单位为10%,实现10%~90%之间可调。 K1按键: 增加占空比 K5按键: 减小占空比 未命名.JPG P01 输出PWM波形 PWM输出部分程序
  1. //中断子程序
  2. __interrupt void R_TAU0_Channel0_Interrupt(void)
  3. {
  4. /* Start user code. Do not edit comment generated here */
  5. Key_Scan();
  6. LED_Display();
  7. /* End user code. Do not edit comment generated here */
  8. }
  9. __interrupt void R_TAU0_Channel1_Interrupt(void)
  10. {
  11. num++;
  12. if(num > 9)
  13. {
  14. num = 0;
  15. P0 &= 0xFD;
  16. }
  17. else if(num == (10 - speed))
  18. P0 |= 0x02;
  19. TDR01H = 0x04; //1ms
  20. TDR01L = 0xE2;
  21. }
使用了两个定时器。一个定时器负责按键识别及数码管刷新。另一个定时器负责PWM输出。
  1. //定时器初始化。
  2. //timer00定时间隔4ms,用于按键识别及数码管刷新
  3. //timer01定时间隔1ms,用于PWM输出
  4. void TAU0_Init(void)
  5. {
  6. TAU0EN = 1; /*supply input clock*/
  7. TPS0 = 0x04; /*CK00,CK01 fMCLK=fCLK/16=1.25MH,¨fCLK=20MHz*/
  8. /* channel 0 and 1 used as interval timer */
  9. TMR00H = 0; /*only software trigger*/
  10. TMR00L = 0;
  11. TMR01H = 0; /*only software trigger*/
  12. TMR01L = 0;
  13. TDR00H = 0x14; /*4ms*/
  14. TDR00L = 0x2A;
  15. TDR01H = 0x04; /*1ms*/
  16. TDR01L = 0xE2;
  17. TMIF00 = 0; /*Clear channel0 interrupt flag */
  18. TMIF01 = 0; /*Clear channel1 interrupt flag */
  19. }
PWM演示视频 PWM演示程序
PWM.zip (150.35 KB)
(下载次数: 11, 2015-10-13 15:47 上传)
PWM.zip (150.35 KB)
(下载次数: 11, 2015-10-13 15:47 上传)
本帖最后由 ltbytyn 于 2015-10-13 15:54 编辑

回复评论 (3)

clock generator 的配置有些什么注意事项我用的芯片是R5F100LF
点赞  2017-8-8 16:43
查一下我以前帖子
点赞  2017-8-8 23:50

谢谢分享

点赞  2021-8-31 11:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复