打印
[技术问答]

M0516单片机定时器和AD转换冲突问题

[复制链接]
1422|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huminqin233|  楼主 | 2015-3-24 19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 huminqin233 于 2015-3-24 19:46 编辑

我写了一个电机限位的程序,电机在一根轴上来回走,其中有一段通过限制时间和堵转电流来检测电机的位置如下:while(Timeout(150)&&Current_test());
Timeout()是通过定时器0中断实现定时;堵转电流检测是通过电机与地之间串一个电阻,当电机受力增大时电流增大然后通过P16脚对电压进行AD转换,当检测到的值大于一个阈值时返回0。原理就是这样。

现在的问题是,这两个程序分开测试都是好的,比如while(Timeout(150));或while(Current_test());但把他们和在一起测试就不行,应该是一直死在while上,debug时程序也一直死在AD程序里(keil4软件本身貌似也不行,调试时老是无故跑飞。。。所以死在AD里也不能百分百确定是AD转换的问题)

SO,哪位大侠能分析下这是什么问题?

我想到过会不会是定时中断时间太短导致AD转换到一半就跳出,然后就回不去了,我把定时器调到50ms也不行,估计是定时器和AD转换某些地方冲突了。。。
沙发
稳稳の幸福| | 2015-4-3 15:49 | 只看该作者
这就是楼主的问题了,楼主可以定义一个全局变量放到定时器中断函数里,然后while在主函数扫描该变量。另外可以同时使用current

使用特权

评论回复
板凳
稳稳の幸福| | 2015-4-3 15:50 | 只看该作者
你要规划好方案,然后在写程序。

使用特权

评论回复
地板
lovecat2015| | 2015-4-4 12:53 | 只看该作者
是你自己设计的程序的问题,keil有啥毛病呢
你把while部分贴出来看看吧

使用特权

评论回复
5
稳稳の幸福| | 2015-4-6 14:14 | 只看该作者
应该不会冲突吧,设计的问题。

使用特权

评论回复
6
598330983| | 2015-4-12 21:15 | 只看该作者
肯定不对了,两个条件不会同时成立的,你,只需要while嵌套就行了

使用特权

评论回复
7
598330983| | 2015-4-12 21:16 | 只看该作者
你仔细想一下,他们两个条件怎么可能同时成立,对不对

使用特权

评论回复
8
quray1985| | 2015-4-13 08:36 | 只看该作者
我觉得是在时间上冲突了
就像ucos ii一样,三个任务,有一个加入定时器定时就容易死机

使用特权

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

本版积分规则

2

主题

10

帖子

0

粉丝