亿加合和智能车制作

标题: 摄像头+直立小车,请教一些中断问题 [打印本页]

作者: 老干妈    时间: 2013-4-11 11:33
标题: 摄像头+直立小车,请教一些中断问题
          最近自己在试着制作一辆用摄像头循迹的直立小车,摄像头是用OV7620,系统板芯片是用XS128.小车的硬件部分都已经完工了,软件部分,车子已经能立起来了(只是会在一个地方来回摆动,摆动范围大概5厘米左右),摄像头也已经能够采集到图像(前提是摄像头图像采集程序未加入直立1MS中断程序)。一旦将直立程序和摄像头图像采集程序结合在一起,车子还是像原来那样立着,只是摄像头采集到的图像受到干扰,采集到的图像中间某些地方是乱七八糟的图像。个人认为是因为摄像头在中断里进行图像采集时受到直立1MS中断的干扰。现在还没有什么头绪将两个中端融合,使他们不会出现什么冲突,所以想请教论坛里的大神们能给予一点指示,要怎么调整程序使小车既可以像原来那样的立着,摄像头采集到的图像也不会受到干扰。PS:在论坛上面看到一些帖子,制作线性CCD自平衡小车的同学,都说线性CCD的曝光时间是20ms,但我的摄像头图像采集程序才16.67ms,不知各位制作CCD直立小车是怎么安排时序问题,想借鉴一下,看能不能解决我的摄像头直立小车问题,谢谢!


作者: 灰原姐姐    时间: 2013-4-11 14:41
你的分析是对的,摄像头的数据传输一定不能打断!
所以你可以利用行消隐区进行平衡控制。
一行是64us,大概每20行控制一次。
作者: 老干妈    时间: 2013-4-11 16:31
灰原姐姐 发表于 2013-4-11 14:41
你的分析是对的,摄像头的数据传输一定不能打断!
所以你可以利用行消隐区进行平衡控制。
一行是64us,大 ...

      我请教了一下我们学校的老师,他的建议是将直立控制程序放置在主函数里面,同时也是设置一个1ms中断程序,在1ms中断程序里只要一个标志名称(假设是runflag)就行,当1ms中断时,标志runflag 置1,同时主函数里面,当runflag为1时,执行直立函数,同时将runflag置0.我这样试过了,没问题,摄像头可以正常采集图像。但是这样做有一个要求,就是主函数里面的程序不能太多,一旦太多,程序执行直立函数就会乱掉,小车就无法正常直立。

作者: 灰原姐姐    时间: 2013-4-11 18:03
老干妈 发表于 2013-4-11 16:31
我请教了一下我们学校的老师,他的建议是将直立控制程序放置在主函数里面,同时也是设置一个1ms中断 ...

你听我的没错,XS128主频低,不能多任务交叉。
只能用行消隐区控制平衡。
你在行中断里面数行数,然后在相邻两行的消隐区里面调用平衡控制函数。
并且要保证此函数执行时间不超过16us。
这就一定不会有问题了。

作者: 老干妈    时间: 2013-4-11 19:45
灰原姐姐 发表于 2013-4-11 18:03
你听我的没错,XS128主频低,不能多任务交叉。
只能用行消隐区控制平衡。
你在行中断里面数行数,然后在 ...

调直立用到卡尔曼滤波的话时间不可能小于16us,而且我发现速度分时控制的函数时间非常长,因为单片机里面的程序一旦用到除法,时间就会花很多,上百us

作者: 灰原姐姐    时间: 2013-4-12 12:28
老干妈 发表于 2013-4-11 19:45
调直立用到卡尔曼滤波的话时间不可能小于16us,而且我发现速度分时控制的函数时间非常长,因为单片机里面 ...

但是你没必要用浮点型啊!!!

作者: 新人类    时间: 2013-4-12 13:15
本帖最后由 新人类 于 2013-4-12 13:24 编辑

大约33毫秒的控制周期能满足你的 控制要求么?摄像头一帧的周期是33ms 也就是说你有两场16ms的图像其实都是一个景物的信息。。。所以我觉得。。。你可以考虑老师那种方法的延伸。。。就是直接在main里面做直立不中断。。。不过就是不知道控制周期能不能满足你的直立控制 以及转向控制要求。
作者: 老干妈    时间: 2013-4-13 13:16
新人类 发表于 2013-4-12 13:15
大约33毫秒的控制周期能满足你的 控制要求么?摄像头一帧的周期是33ms 也就是说你有两场16ms的图像其实都是 ...

可以,我试过了,车子能正常循迹,不过我的直立还调的不够好,小车走走停停的,不过基本没啥问题了,现在只要把直立调好就行了

作者: 原来不是我    时间: 2013-11-10 12:11
灰原姐姐 发表于 2013-4-11 14:41
你的分析是对的,摄像头的数据传输一定不能打断!
所以你可以利用行消隐区进行平衡控制。
一行是64us,大 ...

灰原姐姐,我用的是k60,dma传输,怎么解决摄像头采集和直立的时序问题

作者: 灰原姐姐    时间: 2013-11-10 13:58
原来不是我 发表于 2013-11-10 12:11
灰原姐姐,我用的是k60,dma传输,怎么解决摄像头采集和直立的时序问题

手动卡时吧。

作者: 原来不是我    时间: 2013-11-10 14:18
灰原姐姐 发表于 2013-11-10 13:58
手动卡时吧。

???
作者: 2601819196    时间: 2013-11-10 14:46
灰原姐姐 发表于 2013-11-10 13:58
手动卡时吧。

手动卡时???不太懂,请赐教。

作者: 灰原姐姐    时间: 2013-11-10 23:02
原来不是我 发表于 2013-11-10 14:18
???

大意就是等间隔地取某些行的消隐区。
作者: 灰原姐姐    时间: 2013-11-10 23:02
2601819196 发表于 2013-11-10 14:46
手动卡时???不太懂,请赐教。

见楼上

作者: 原来不是我    时间: 2013-11-11 16:16
灰原姐姐 发表于 2013-11-10 23:02
大意就是等间隔地取某些行的消隐区。

行消隐区的时间那么短,用来控制直立够了吗,我们是在行中断里设置标志位,当行计数到了1ms左右,在主函数进行直立控制,结果直立和采集都不好使

作者: 灰原姐姐    时间: 2013-11-11 19:17
原来不是我 发表于 2013-11-11 16:16
行消隐区的时间那么短,用来控制直立够了吗,我们是在行中断里设置标志位,当行计数到了1ms左右,在主函数 ...

通常的PID控制只有三个乘法和两个加法,算上读入和输出,C语言总共就三行,大概几十条指令。

作者: 2601819196    时间: 2013-11-12 15:46
灰原姐姐 发表于 2013-11-11 19:17
通常的PID控制只有三个乘法和两个加法,算上读入和输出,C语言总共就三行,大概几十条指令。

我用行计数来处理直立控制的函数,16行大约1ms执行一次直立函数,却发现很多之前调好的直立参数要发生很大的变化,而且每当主函数中多添加几句话,参数又要重新整定,那些参数对这些变化很敏感。(直立处理的函数放在主函数当中)

作者: 905185041    时间: 2013-11-12 22:45
灰原姐姐 发表于 2013-4-11 14:41
你的分析是对的,摄像头的数据传输一定不能打断!
所以你可以利用行消隐区进行平衡控制。
一行是64us,大 ...

如果是CCD摄像头呢,还能在行中断之间调直立吗
作者: nxdliuquan    时间: 2013-11-13 13:37
老干妈 发表于 2013-4-13 13:16
可以,我试过了,车子能正常循迹,不过我的直立还调的不够好,小车走走停停的,不过基本没啥问题了,现在 ...

你的pit中断优先级是不是最高的?我按照你的方法在中断里设了flag,但是直立有时会崩溃,就是一开始好好的,突然就猛地震荡一下,请问这是什么问题?

作者: 灰原姐姐    时间: 2013-11-13 15:38
2601819196 发表于 2013-11-12 15:46
我用行计数来处理直立控制的函数,16行大约1ms执行一次直立函数,却发现很多之前调好的直立参数要发生很大 ...

你用示波器检查一下代码执行是否交叉。
照理说不会这样的。
肯定是哪里写错了,哪里时序乱了。

作者: 戥家三少    时间: 2014-1-3 18:04
灰原姐姐 发表于 2013-4-11 18:03
你听我的没错,XS128主频低,不能多任务交叉。
只能用行消隐区控制平衡。
你在行中断里面数行数,然后在 ...

灰原姐姐,那如果我一场里只采集几行数据,那么我能不能在不采集数据的行里面来控制直立呢??

作者: 493290676    时间: 2014-1-20 21:40
哪个直立控制和采集控制如何分配啊,,,,
作者: 493290676    时间: 2014-1-20 21:40
哪个直立控制和采集控制如何分配啊,,,,
作者: 1152612039    时间: 2014-2-6 14:35
很有意义的讨论,也求指导
作者: 指环22    时间: 2014-2-12 19:38
感觉不错  试了下 但...滞后了   lz你直立的程序执行一次多少MS ?  指教下 谢谢

补充内容 (2014-2-12 21:48):
突然发现去掉了一部分滤波,只留下最主要的语句,看情况加了点延时,竟然好了  
作者: 玉觀音    时间: 2014-3-1 13:10
老干妈 发表于 2013-4-11 16:31
我请教了一下我们学校的老师,他的建议是将直立控制程序放置在主函数里面,同时也是设置一个1ms中断 ...

你在中断里有做其他事吗?采集图像什么时候做?

作者: 玉觀音    时间: 2014-3-1 13:52
老干妈 发表于 2013-4-11 16:31
我请教了一下我们学校的老师,他的建议是将直立控制程序放置在主函数里面,同时也是设置一个1ms中断 ...

摄像头的中断怎么跟定时中断结合起来?

作者: 邹泽伟    时间: 2014-3-16 15:42
你好,我的也是XS128 做摄像头直立。但我用的是官方电磁控制,也就是定时器控制,把直立 速度都调好了, 但摄像头采集一加,直立很受干扰。你的程序框架是中断  直立吗?
作者: 邹泽伟    时间: 2014-3-16 20:53
你好,你的1S直立中断是定时器中断吗?
作者: 邹泽伟    时间: 2014-3-17 20:41
老干妈 发表于 2013-4-11 16:31
我请教了一下我们学校的老师,他的建议是将直立控制程序放置在主函数里面,同时也是设置一个1ms中断 ...

那你的速度,方向控制,放在哪里控制呢?是不是1MS 定时器中断里

作者: 雪逝    时间: 2014-3-17 21:29
邹泽伟 发表于 2014-3-17 20:41
那你的速度,方向控制,放在哪里控制呢?是不是1MS 定时器中断里

哥们。。我也是X128。。现在在弄方向控制。。留个QQ吧。。我们一起交流交流。。(962261497)

作者: 老干妈    时间: 2014-3-20 12:47
邹泽伟 发表于 2014-3-16 20:53
你好,你的1S直立中断是定时器中断吗?

嗯,是的

作者: 老干妈    时间: 2014-3-20 12:49
邹泽伟 发表于 2014-3-17 20:41
那你的速度,方向控制,放在哪里控制呢?是不是1MS 定时器中断里

方向控制都是在1MS中断里

作者: 老干妈    时间: 2014-3-20 12:50
雪逝 发表于 2014-3-17 21:29
哥们。。我也是X128。。现在在弄方向控制。。留个QQ吧。。我们一起交流交流。。(962261497)

最好还是再好好研究官网的方案

作者: 雪逝    时间: 2014-3-20 13:37
老干妈 发表于 2014-3-20 12:50
最好还是再好好研究官网的方案

方向控制只在一边上左边上有效果。。怎么破?

作者: 老干妈    时间: 2014-3-20 15:12
雪逝 发表于 2014-3-20 13:37
方向控制只在一边上左边上有效果。。怎么破?

估计是你的采集有问题

作者: 雪逝    时间: 2014-3-24 18:04
Lz。。你们1ms的定时中断能完成AD采集,脉冲采集,滤波,速度控制和方向控制?能不能把你们的思路讲讲额。。谢谢啦。。

作者: 开明    时间: 2014-3-26 19:16
路过
作者: 1023968138    时间: 2014-3-30 11:11
我是新手,直立还有问题,都现在了,急的不行,牛人,能不能把你的程序分享一下。特别是直立的。
作者: qin277803164    时间: 2014-4-5 10:43
用128能处理的了那么多程序吗,  我们用的K60  现在又要加一组  请大神指教一下128在摄像头直立中的应用?
作者: 唯美的约定    时间: 2014-4-6 11:07
老干妈 发表于 2013-4-13 13:16
可以,我试过了,车子能正常循迹,不过我的直立还调的不够好,小车走走停停的,不过基本没啥问题了,现在 ...

亲 ,用这种方法经常死机吗?我怎么老是死机啊


作者: 唯美的约定    时间: 2014-4-6 11:12
LZ的优先级怎么设置的啊  谁最高

作者: 唯美的约定    时间: 2014-4-6 11:12
  求救

作者: dingyongbin    时间: 2014-4-6 15:26
ee
作者: yuelang    时间: 2014-4-14 00:01
灰原姐姐 发表于 2013-4-11 14:41
你的分析是对的,摄像头的数据传输一定不能打断!
所以你可以利用行消隐区进行平衡控制。
一行是64us,大 ...

如何在消隐区控制啊,具体能说说吗

作者: 欲望~控♂    时间: 2014-4-16 00:53
原来不是我 发表于 2013-11-10 14:18
???

什么是手动卡时





欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2