打印
[AVR单片机]

求教用ATmega88设计2个闭环PID控制

[复制链接]
2378|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ldj003|  楼主 | 2012-5-2 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用ATmega88设计2个闭环PID控制,但是跑一个闭环时电机能正常运动 跑2个时,2个电机就不动了。我以为是PID计算值的返回值对电机有所影响(毕竟2个电机公用一个PID数据结构和计算),所以我设计了2个结构体和2个PID增量计算,但是2个电机还是跑不动。只能跑一个电机。 求高手指引下,怎么把程序设计的巧妙些才能把2个电机跑起来,

相关帖子

沙发
jdwang001| | 2012-5-7 16:21 | 只看该作者
不知道,你的要求是什么。查原因的话,用示波器查查你的输出。看看波形怎么回事儿。

使用特权

评论回复
板凳
HEX65535| | 2012-5-10 12:44 | 只看该作者
有很多情况您没有说明细,所以大家也不好帮助您。首先不知道您是采用大循环还是UCOS系统来进行程序构架,还有就是用一个就可以跑起来,我的理解是A,B代表2个PID程序块。分别带动两个电机运行。任意使用A或者B都可以带动相应的电机运转,但是同时工作就不行。如果是这样的话,考虑程序的重入问题。也就是说当一个PID正在进行运算时,第二个PID运算调用程序也来调用它。这个时候你的结构体和增量以及相关中间变量是否都有妥善压栈,会不会存在半截数的情况。所谓半截数就是2字节的数据当其中一个字节发生改变,另外一个字节还乜嘢来得及改变时遇到了中断或者高优先级任务抢断。这个时候如果在中断或者高优先级的程序中真好用到了这个数,就会出错(它只改了一半嘛)。一般在程序中需要对这样的数据进行禁止抢占和禁止中断处理,当然也要尽量避免在中断中采用中断以外会发生改变的数据。这一点比较重要。说了这么多也不知道是否能帮上忙。就当是个借鉴吧。

使用特权

评论回复
地板
xsl1997| | 2012-5-15 23:29 | 只看该作者
学学,不错

使用特权

评论回复
5
ldj003|  楼主 | 2012-5-29 17:17 | 只看该作者
3# HEX65535
好久没上了·····首先谢谢你的建议。虽然我是用大循环来写程序的,但是由于要控制4个舵机+2个码盘电机。所以一块ATMEGA88的压力不小的。估计实时性就实施不了了。我在后来的改善中优化了下程序,但是还是电机会来不及反应的现象。照这样可能,也只能上UCOS2了······你的建议很宝贵,我学习了。听你建议,我会在电机任务调度方面增加互斥信号量,防止数据的不完整计算。

使用特权

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

本版积分规则

3

主题

55

帖子

1

粉丝