[技术问答] M0516单片机定时器和AD转换冲突问题

[复制链接]
1904|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部分贴出来看看吧
稳稳の幸福 发表于 2015-4-6 14:14 | 显示全部楼层
应该不会冲突吧,设计的问题。
598330983 发表于 2015-4-12 21:15 来自手机 | 显示全部楼层
肯定不对了,两个条件不会同时成立的,你,只需要while嵌套就行了
598330983 发表于 2015-4-12 21:16 来自手机 | 显示全部楼层
你仔细想一下,他们两个条件怎么可能同时成立,对不对
quray1985 发表于 2015-4-13 08:36 | 显示全部楼层
我觉得是在时间上冲突了
就像ucos ii一样,三个任务,有一个加入定时器定时就容易死机
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部