longjane 发表于 2015-5-21 17:34:03

问一下飞控程序整体流程大家是正么安排的,分时?还是循环?

飞控本来是买的兔子一代,二手的,赶紧飘来飘去,打算自己做。。。现在用学习板已经调通了 PWM输出,PWM捕获,MS5611,6050,HMC5883L,接下来就是算法了。


那么问题来了,如何流程安排呢?看到匿名四轴的一个程序讲解用的定时器作为时间分片来管理,,是个注意。。。。那么还有个疑问,PWM捕获遥控接收是中断来的,会不会打架?当然PWM周期是50HZ 20ms,中间肯定有时间干别的。我本来打算是需要采集时候在采集,那要是需要时候它是低电平时间,那肯定采集不到的。。。。。不知道这个正么处理呢?

HookTeam 发表于 2015-5-21 22:04:28

上个RTOS

zouyf12 发表于 2015-5-22 00:45:30

我程序分3个部分吧,
最高优先级中断是用来采集遥控器输入的, 因为处理需要的时间比较短,不会影响其他的程序,而且需要检测的是高电平宽度,所以上升沿后必须马上把输入捕捉模块改成下降沿触发,实时要求高。
低优先级中断,采集陀螺仪参数并进行PID控制, 也就是MPU6050每次采集OK中断后, 就开始读里面的数据,做完姿态估算以后直接进行PID控制。 这一系列都是在中断函数里完成的。也就是在只要陀螺仪数据准备好,里面放下手头的工作,开始姿态融合和PID计算,除了读遥控器外其他都不会影响到这个功能,保证了姿态融合和PID控制的实效性

最后就是一些通信方面和辅助的程序,没有实时性要求,就放在主循环里面了。

longjane 发表于 2015-5-22 08:49:04

zouyf12 发表于 2015-5-22 00:45
我程序分3个部分吧,
最高优先级中断是用来采集遥控器输入的, 因为处理需要的时间比较短,不会影响其他的 ...

我看匿名的安排是这样,当然他们是无线模块做的遥控基本没有耗时。0.5ms做时间基数,1ms做姿态融合 2ms做控制算法类似的,没有主函数,全部是以定时器中断里面进行的。

你说的这个方案,,遥控的高电平时间1ms-2ms,一次PWM周期是20ms,那么有19ms左右是低电平状态。。。那么6050的中断频率是多少?会不会太快了,一般是主动查询把?我昨天试了一下,没有做任何处理,朱循环读取各种传感器,PWM捕获是中断模式,没有定时器。。。然后就出现捕获采集不到位,传感器读不出数据等问题。。。。。。

zouyf12 发表于 2015-5-22 21:55:41

longjane 发表于 2015-5-22 08:49
我看匿名的安排是这样,当然他们是无线模块做的遥控基本没有耗时。0.5ms做时间基数,1ms做姿态融合 2ms做 ...

         我设定MPU6050刷新的周期是4ms, 由MPU6050通过中断PIN去中断STM32,STM32再去读数据,同时在中断函数内完成姿态融合和控制,也就是姿态解算一次就控制一次,整个系统的采样控制周期都是由MPU6050来驱动的, 所以蛮简单粗暴的。
采集遥控器的话我现在是能采集6个通道, 中断函数里,只做模块触发方向的切换和置标志位, 具体计算每个通道的数值和换算成控制量都是在主循环里面的。

我通过示波器测量过,STM32从IIC读MPU6050到最后完成所有计算输出每个电机的PWM一共需要1ms时间,期间也有6个通道的中断打入, 所以说4ms的周期STM32是完全没有问题的。
按你说的匿名搞到1ms, 可能归功于他们自己弄的硬件IIC吧, 不过再怎么说1ms的姿态融合也是很极限了, 好处就是误差会小。

我建议你可以先试试4ms的控制采集周期, 反正我用这个周期已经可以飞了。你要知道,MWC完全没有周期的概念,什么时候循环轮到采集函数了才去采集的, 然后通过记录两次时间的方式得出间隔时间。

longjane 发表于 2015-5-23 16:02:53

zouyf12 发表于 2015-5-22 21:55
我设定MPU6050刷新的周期是4ms, 由MPU6050通过中断PIN去中断STM32,STM32再去读数据,同时在中 ...

恩好,我先这样试试,嗯嗯{:handshake:}
页: [1]
查看完整版本: 问一下飞控程序整体流程大家是正么安排的,分时?还是循环?