OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4441|回复: 16

中断函数里为什么不能运行舵机控制,什么样的变量既能在中断函数又能在主函数里

[复制链接]

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
发表于 2018-8-9 08:04:34 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 牧马人人 于 2018-8-9 18:20 编辑

源程序在附件里,求大佬指点。主函数里的if判断里的操作无法实现,不知道什么原因会这样。把舵机控制放在中断函数里,舵机没有反应。(开机时候,舵机可以转到归零)

PWM输出.zip

4.05 MB, 下载次数: 75

最佳答案

查看完整内容[请看2#楼]

谢谢诸位大佬的指点,犯了一个低级错误,整数除整数还是一个整数,,,,用全局变量解决了其他文件调用变量的问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 08:04:35 | 显示全部楼层
谢谢诸位大佬的指点,犯了一个低级错误,整数除整数还是一个整数,,,,用全局变量解决了其他文件调用变量的问题。
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-9 08:40:52 | 显示全部楼层
问题1、我也不知道为什么,问问题不是这么问的,这给人的感觉就是为什么我使用上好的不锈钢锅和电磁炉却为什么炒不出好吃的西红柿鸡蛋一样。出现这种问题的原因很多,中断控制产生的PWM波周期不对,占空比不对,程序本身写错导致逻辑错误不能够产生PWM波也有可能,请具体描述,最起码要有相关部分的程序代码,学会如何正确提问;
问题2、全局变量可以在任意文件中被访问,但是在定义它之外的文件中要使用extern关键字加以外部引用声明。具体实现方法可参考帖子:http://www.openedv.com/forum.php?mod=viewthread&tid=276707中我的回答。


十六进制带我飞。
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-8-9 08:58:51 | 显示全部楼层
1.首先舵机是有PWM控制的,看看你的PWM是如何产生的,如果是由定时器中断产生的..............那就肯定不对呗
2.全局变量啊,就你包含完头文件之后,开始写函数之前的那段空间,都是你定义全局变量的地方
猪猪熊呢?
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 11:14:10 | 显示全部楼层
第一次发帖,多多包涵。舵机部分已经调试过,没有问题。  就是想要实现光电管传感器遇到障碍物时,引发中断,通过中断函数使舵机转动一个角度。现在的问题是,中断函数里不能直接调用舵机转动的函数,计划是在中断函数里,产生一个变量,然后在主函数中,通过判断这个变量的值控制舵机转动。关键是这个变量不知道该怎么办?
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 16:58:32 | 显示全部楼层
DreamWaterPro 发表于 2018-8-9 08:40
问题1、我也不知道为什么,问问题不是这么问的,这给人的感觉就是为什么我使用上好的不锈钢锅和电磁炉却为 ...

程序刚刚上传附件里,求大佬指点。
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 16:59:59 | 显示全部楼层
323232 发表于 2018-8-9 08:58
1.首先舵机是有PWM控制的,看看你的PWM是如何产生的,如果是由定时器中断产生的..............那就肯定不对 ...

程序已上传,请大佬指点
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2018-8-9 18:06:00 | 显示全部楼层
附件呢
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 18:08:28 | 显示全部楼层

已经上传了
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 18:09:21 | 显示全部楼层

在帖子里
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 18:18:07 | 显示全部楼层

程序

PWM输出.zip

4.05 MB, 下载次数: 44

回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 18:19:41 | 显示全部楼层
程序源码

PWM输出.zip

4.05 MB, 下载次数: 48

回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-9 18:23:12 | 显示全部楼层
323232 发表于 2018-8-9 08:58
1.首先舵机是有PWM控制的,看看你的PWM是如何产生的,如果是由定时器中断产生的..............那就肯定不对 ...

PWM是定时器3产生,
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2018-8-9 19:08:29 | 显示全部楼层
授人以鱼不如授人以渔,教你一个调试的方法,多利用printf打印一些调试信息,放在一些关键的地方,比如按键里打印出一个信息,或者在你那个标志位的下面打印一句信息,你就知道到底是不是执行了这个语句,还可以打印一些变量的值,到底是不是如你期望的那样变化了,慢慢的就找出问题出在哪里了
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-8-10 08:06:08 | 显示全部楼层
rindy 发表于 2018-8-9 19:08
授人以鱼不如授人以渔,教你一个调试的方法,多利用printf打印一些调试信息,放在一些关键的地方,比如按键 ...

调试一直都是解决问题的好方法,在网上找一个调试的教程学习学习。相信你能靠自己的力量找出错误。
猪猪熊呢?
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-10 09:58:34 | 显示全部楼层
我手头没有测试工具,只能根据你的代码提出一些可能出错的地方:

1、对于duoji()函数,注意到这里:

[mw_shl_code=c,true]oid duoji(u16 du)
{
       u16 led0pwmval=5+(1/9)*du;
      TIM_SetCompare1(TIM3,led0pwmval);
                delay_ms(1000);         
                delay_ms(500);
...[/mw_shl_code]

有个(1/9)的操作,但是这个结果恒为0,C语言中的整数除法,所以这个数值计算出来之后led0pwmval其实是恒为5.改为(1.0/9.0)就可以了

2、还有一点需要注意,就是PWM的比较极性,不过看样子楼主在程序中标记了,如果有问题的话也检查检查吧,



十六进制带我飞。
回复

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-7-15
在线时间
27 小时
 楼主| 发表于 2018-8-10 21:18:21 | 显示全部楼层
DreamWaterPro 发表于 2018-8-10 09:58
我手头没有测试工具,只能根据你的代码提出一些可能出错的地方:

1、对于duoji()函数,注意到这里:

问题已经解决了,非常感谢!  就是那个1/9的问题,其他的没啥问题。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 17:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表