你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

外部中断得出PWM波形的占空比和频率

[复制链接]
flyinggirlxhx 提问时间:2016-7-2 16:39 /
各位好!
       刚接触STM32F103ZE开发板很短的时间,打算利用GPIO的外部边沿触发,计算出PWM波形的占空比。
       有两个方法:
       (1)利用定时器的PWM捕获功能,这种方法已实现,但考虑资源的有限性,打算用第二种方法来实现;
       (2)PWM波形触发gpio引脚的双边沿外部中断(EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 引脚初始化输入0),由计时器TIM2记录上升边沿和下降边沿时的TIM2->CNT;
             这样,第1次进入上升沿中断时,设置TIM2->CNT=0;之后正常计数,第2次下降沿中断时,记下cn2=TIM2->CNT的值;第3次进入上升沿中断时,同样记下cn3=TIM2->CNT,进入中断的次数清0;如此循环。
            PWM的占空比duty=(float)cn2/cn3;
           但。。。。。输入的PWM信号用示波器监测着,是标准的矩形波,没有问题,占空比为1/3;但是通过串口得到的占空比却是1/3,2/3随机出现。。。找了好久,还是没找到原因。
          有几个疑问:
             1.外部中断的双边沿中断,是指上升沿和下降沿都可以产生中断吗?不管边沿的顺序?两个中断是怎么交替工作的?
             2.PWM的输入引脚,设置为上拉或是下拉输入模式有影响吗?
            项目时间很急,今天周六来公司加了一天的班,就为这个问题。。。。
            拜谢各位大神指教,急急急急。。。。。谢谢了!
收藏 2 评论8 发布时间:2016-7-2 16:39

举报

8个回答
haohao663 回答时间:2016-7-2 23:27:05
外部中断的双边沿中断:就是不够是上升沿还是下降沿都触发,总之就是有电平跳变就触发中断
我觉得你可以在一进入外部中断服务函数就马上读取该引脚的电平,这样就可以确定目前处于什么状态
另外一种思路就是开始只开上升沿触发,在外部中断服务函数内开下降沿触发,这样循环处理

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 很给力!

查看全部评分

haohao663 回答时间:2016-7-2 18:35:30
【HAL库每天一例】第018例:TIM-通用定时器输入捕获(脉冲测...
https://www.stmcu.org.cn/module/ ... &fromuid=331315
(出处: 意法半导体STM32/STM8技术社区)
这个例程值得你拥有,原理都是一样的

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 赞一个!

查看全部评分

flyinggirlxhx 回答时间:2016-7-2 22:37:22
haohao663 发表于 2016-7-2 18:35
【HAL库每天一例】第018例:TIM-通用定时器输入捕获(脉冲测...
https://www.stmcu.org.cn/module/forum/forum.p ...

嗯,这个demo我了好几遍,我这边用这种方法也没问题。但换成外设中断,就有点问题,不知道是不是触发边沿的问题,周一回去,再测试看看。。。谢谢啦
swiky99 回答时间:2016-7-3 00:38:09
目前正在做的一个   脉冲捕捉    捕捉频率18K----30K   捕捉精度好像也行    就差1-2US   
但出现一个问题还没解决   就是TIM1互补输出的18K---30K    频率好像有点飘    有点不准   
过几天换个精度高点的晶振看看   
相互学习下    需要代码可以送
swiky99 回答时间:2016-7-3 00:39:44
STM32有没有   FAE呢    请人家帮忙出出主意   本人QQ34778119
flyinggirlxhx 回答时间:2016-7-4 12:55:14
haohao663 发表于 2016-7-2 23:27
外部中断的双边沿中断:就是不够是上升沿还是下降沿都触发,总之就是有电平跳变就触发中断
我觉得你可以在 ...

如果采用双边沿触发,加上电平判断之后,无法捕捉到下降沿(PCout(1)=1),上升沿是可以捕捉到的,所以计算出的周期是对的;
如果采用上升沿下降沿循环触发的话,对触发边沿的改变没有用,无法触发下降沿(初始化是上升沿触发),所以周期是正确的周期的2倍。。。
这是触发边沿改变的代码:EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);
没找到问题的点在哪?
flyinggirlxhx 回答时间:2016-7-4 13:12:17
swiky99 发表于 2016-7-3 00:38
目前正在做的一个   脉冲捕捉    捕捉频率18K----30K   捕捉精度好像也行    就差1-2US   
但出现一个问题 ...

我这边是输出80KHZ的方波,你有做占空比吗?我加你QQ吧,谢谢!
flyinggirlxhx 回答时间:2016-7-6 09:12:36
IO口外部中断计算PWM波形的占空比和频率

这是我的新问题。。。哎。。。各位指点指点啊

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版