57

帖子

0

TA的资源

一粒金砂(初级)

21
 

请问楼上

楼上,你是同时2路PWM输入吗? 

此帖出自stm32/stm8论坛
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

22
 

请问楼上,你是同时输入两路PWM信号吗?

                                  
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

23
 

注意:如果用同一个定时器同时使用2个PWM输入通道可能会有

PWM输入模式的原理是使用2个捕获通道,分别捕获同一个信号的上升沿和下降沿,在得到一个完整的信号周期后,它会把计数器复位,即计数器被清零,请看RM0008的13.3.6节,还有一个波形图作为说明例子。

如果用同一个定时器同时使用2个PWM输入通道,很可能达不到你想要得效果,因为任一个PWM输入通道识别出完整的信号周期后,就会复位计数器,这样你的第2个PWM输入通道将得不到正确的结果。

在这种情况下,你要么需要使用两个定时器,但需要改变硬件的连接,要么使用普通的输入捕获模式,并通过软件计算得到信号的频率和占空比。普通的输入捕获模式不执行复位计数器的操作。
此帖出自stm32/stm8论坛
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

24
 

那看来对我的硬件来说,输入捕获模式还是比较保险的方法

                                 不过没有输入捕获模式的例程,版主能给一个吗?或者给个连接地址
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

25
 

输入捕获是最简单的操作,固件库中没有例子

                                 你参考PWM输入的例子改一下,很简单的。
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

26
 

输入捕获的话,sms应该选择110触发模式吧

我在main里面改了一下:
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0;

  TIM_ICInit(TIM2, &TIM_ICInitStructure);

改成输入捕获方式初始化,用TI1FP1,Channel1 ,:
1. 因为用的是pwm_input的例程修改的,所以一开始sms没有修改,还是复位模式并使能,这时候从CCR1读出的值正确。
2. 因为复位模式的话,会重新初始化计数器,不适用于 〉1个输入的情况,所以我把sms改成了110触发模式并使能,但是这时候,从CCR1读出的值却不对了。  
这是为什么? 哪里修改有问题?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

27
 

“从CCR1读出的值却不对”是什么意思?你读到什么数值?

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

28
 

频率值---〉

频率值: 
IC1Value = TIM_GetCapture1(TIM2);
Frequency1 = 72000000 / IC1Value;

第一次:TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);  Frequency1 正确

第二次:TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Trigger);  Frequency1 不正确

我现在用输入捕获,不应该用复位模式的。(直接从PWM_INPUT例程修改,gpio只使能PA0,channel1)
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

29
 

因为没有对计数器复位,第二次读出值当然与第一次读出值

                                 计数器是连续计数的,每次读出的数值必须减掉上次的数值才对。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

30
 

最近不能上传图片。不知何解!

一个TIM 两路PWM捕获怎么不用?

在中断里切换一下就可以了。让它们错开、交替地工作。不可以吗?

你可以用万利的开发板试试。 TIM4刚好可以映射到 JOY_STICK按键上。

分下频率,并把滤波设到最大。手工按键测试下。这很好的。
在中断内停掉 计时器。看看 CNT与你的CCRX。

上下按键时通道 CH3/CH4  ,左右按键是 CH1/CH2.

按一下键刚好   是一个 下降沿和上升沿。

我的问题 香版主能否解答一下:

我前面提到哪个【有效触发】 好像 作用不大!就是TS位的设置。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

31
 

对不起,请楼上另开帖提出你的问题

                                 我没有看到你的问题在哪里。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

32
 

香主,我看了OnePulse 的例程,里面的main

main里面没有使能中断,所以中断服务程序是空的。

那我要问了,具体的计数操作去哪里了? 连enable count 的那步也没有。 但是例子我跑过,输入一个pwm 300hz的,能输出一个pwm波出来。 但是具体寄存器操作等,去哪里了?

因为我的输入捕获的初始化是借鉴这个例子的。所以比较关注这个例子的实现过程。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

33
 

还是有问题,应该是还有寄存器没有设置

                                 我在仔细看看,不过OnePulse的例程里面只有输入捕获的初始化,其他操作都没有哇!
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

34
 

休息了几天,今天刚复出。

问版主个问题:
你说用当前计数器值减去上一次的值,值差用来计算频率。那么原先是从CCR1读出的上一次计数器值,当前的值在CNT中。
那我是否应该这样?(我这样实验证明我的写法是错误的,请版主赐教)
tempValue1,temValue2 ,temValue的初始化都是0
==========================================
while(1)
{
    tempValue1 = TIM_GetCapture1(TIM2);
    tempValue2 = TIM_GetCounter(TIM2);
    tempValue = tempValue2 - tempValue1;
    
    Frequency1 = 72000000 / tempValue;
}

我试过每次把CCR1的值减去上一次CCR1的值,也不对。
    tempValue1 = TIM_GetCapture1(TIM2);
    if(tempValue2 == 0)
    {
       tempValue2 = tempValue1;      
    }
    else
    {
       tempValue2 = tempValue1 - tempValue2;
    }
    
    Frequency1 = 72000000 / tempValue2;

请告知,谢谢。
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

35
 
                                 有用一个引脚实现捕获pwm信号的程序吗  希望多学习一下
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

36
 
                                 挖坟贴……
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

37
 
                                 就是说单路捕获,应该很简单,网上下得到例程
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

38
 

回复 6楼 hosdap 的帖子

图在哪里啊
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表