打印
[STM8]

关于STMS105的互补PWM输出

[复制链接]
1413|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qinlu123|  楼主 | 2017-12-18 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qinlu123 于 2017-12-18 17:20 编辑

STM8S的TIM1的前三个通道可以输出互补的PWM,在测试中发现了一个奇怪的问题。
当PWM频率设置的比较小时(1K或者2K,我就测了几个频率)互补输出正常。当我改变分频系数(TIM1_PSCRH和TIM1_PSCRL两个寄存器)或者修改ARR寄存器来提高到一定频率时(比如提高到4K),CHxN直接恒输出高,CHx输出占空比50%的PWM(即使CCRx/ARR*100%不等于50%)。
配置代码:
  CLK_PCKENR1 |= 0x80;//开启定时器1外设时钟

  TIM1_EGR |= 0x01;   //重新初始化TIM1

  TIM1_CR1 = 0x00;    //B7(0)可以直接写入 B65(00)边缘对齐模式B4(0)向上计数B3(0)计数器不停止发生更新事件

  TIM1_RCR = 0x00;  

  TIM1_PSCRH =0;      //设定预分频为,16分频 1M
  TIM1_PSCRL =0x0f;   //PWM的时钟 影响周期

  TIM1_CCER1 = 0x55;  //PWM1/PWM1N互补输出,PWM2/PWM2N互补输出,高电平有效
  TIM1_CCER2 = 0x11;  //PWM3/PWM4输出,高电平有效

  TIM1_CCMR1 = 0x60;  //PWM模式1,CC1配置输出
  TIM1_CCMR2 = 0x60;  //PWM模式1,CC2配置输出
  TIM1_CCMR3 = 0x60;  //PWM模式1,CC3配置输出
  TIM1_CCMR4 = 0x60;  //PWM模式1,CC4配置输出

  TIM1_ARRH = 1000/256;   
  TIM1_ARRL = 1000%256;   //PWM的周期

  TIM1_CCR1H = 800/256;
  TIM1_CCR1L = 800%256;  // 占空比值
  TIM1_CCR2H = 800/256;
  TIM1_CCR2L = 800%256;  // 占空比值
  TIM1_CCR3H = 800/256;
  TIM1_CCR3L = 800%256;  // 占空比值
  TIM1_CCR4H = 800/256;
  TIM1_CCR4L = 800%256;  // 占空比值

  TIM1_CR1 |= 0x01;   //使能TIM1计数器

  TIM1_BKR |= 0x80;   //主输出使能

  TIM1_DTR = 0xff;    //插入死区

不知道大家有没有遇到过类似的问题。
沙发
香水城| | 2017-12-18 20:18 | 只看该作者

因为你只是不停的调整定时器的时钟、PWM输出频率,你没有适时地调整那个死区参数,

当出现死区宽度比有效脉冲宽度还宽时就会出现你说的问题。

你不妨看看死区设置那块的章节。

使用特权

评论回复
板凳
mmuuss586| | 2017-12-18 21:51 | 只看该作者
死区时间值设置太大了吧

使用特权

评论回复
地板
qinlu123|  楼主 | 2017-12-19 08:41 | 只看该作者
香水城 发表于 2017-12-18 20:18
因为你只是不停的调整定时器的时钟、PWM输出频率,你没有适时地调整那个死区参数,

当出现死区宽度比有效 ...

原来如此,谢谢

使用特权

评论回复
5
qinlu123|  楼主 | 2017-12-19 08:42 | 只看该作者
mmuuss586 发表于 2017-12-18 21:51
死区时间值设置太大了吧

谢谢游总

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

1325

帖子

11

粉丝