5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 6060|回复: 28
打印 上一主题 下一主题

讨论下KK_C的程序

[复制链接]
跳转到指定楼层
楼主
发表于 2011-7-30 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
讨论下KK_C
1 主循环读取4个通道的遥控信号,按一般遥控器,一个通道占用2毫秒  20个毫秒一个周期,读遥控信号要占
用8个毫秒的时间。PPM的问题就在这里有点不爽,占时间。

2 读取3个陀螺仪的电压,ENC-03这个陀螺是模拟输出电压,温飘是肯定有的,所以开机读下静止下的基准电
压,ENC-03的输出电压减去基准电压就是角速度,角数度累加就会的得到角度的量纲,这个是稳定的反馈量。
3 陀螺仪信号的处理,KK_C用的是将4个采用值求平均的方法。陀螺仪数据没有做补偿,手册里说线性度5%,
我想应该够用了。
4 多调节量有个感性的认识:
假如50%的油门选悬停,来了一个扰动导致四轴以1秒中转半圈,角速度=180度/S *(ENC-03灵敏度 0.68毫伏/
度/秒)=122.4毫伏, KK板用的基准源很奇怪,用的是LM317一颗电源芯片,更奇怪的压差=0,这样的设计这个
基准就很难准了,我们假设基准=5V ,AVR的ADC为10位 一位电压=5000mV/1024=4.88毫伏/LSB
输出数值=25.08,可以看出分辨率不怎么的,当然ENC-03也不是个精密器件

5 对速度进行积分,将陀螺的输出值GyroYaw/4再加上积分值GyroYawI(初始是0)一次积分后增加6

6 关键地方到了,如何把陀螺仪的输出变成电机控制信号 首先加上感度信息,算法是积分值GyroYawI×感度
(0-128)×0.0078 , 副翼ail输出量=当前角数度+角速度积分积分。
同理可以得到下面几个调整量
副翼 ail=3
升降 ele=3
方向 rud=3

7 遥控器调整量+PI调整量=最终控制量,不过我有一个疑问,假如陀螺是理想的,松开控制杆后飞行器会回到
水平状态,但由于陀螺的线性度和干扰,肯定会飘的,最终会使基准点飘移,原来松杆回复到平面的就会倾斜
,不过这就要看实际情况到多长时间能够稳定

8另外积分加了限幅,如果没有限幅,你翻个180度筋斗,松杆,它就应该自己再翻回来,这个情况应该不会有
人喜欢。是不是把遥控信号加到积分信号中会好一点

9 KK_C的算法是比较简单实用的,但是调节的地方太少,电机,桨,电调,电池都是非线性的,调整周期也比
较长20MS吧。没有通信口,加个串口调整参数,调个适合自己的手感会很不错。

10 AVR的开发环境真的是不那么友好,不知道最新的AVR STUDIO是否都整合了,JTAG线也不好自己做,
11 由于动力系统的非线性,打方可能会上串下跳,如果电机特性一致,电调和桨线性好的话,幅度会不大,
没办法,也许加个Z轴加速度器会好点。

另外淘宝上的飞控价格差别太大了,人家都开源了,做一块5×5的PCB也不值几个钱器件批量也就50左右,
加上商家的成本买和服务160也过的去,如果自己的创新,300块有有那么点心黑 了

本人小学语文不及格,看不懂也在情理之中,况且买的散件一直没到货,就先胡乱看了下程序,希望早点发货
能先玩上。
如果GALE老大看到了,不对的地方请多多指教,最好做个带串口输出的程序,收集数据,说不定能搞出个数学
模型,这样会有更好的控制算法出现

欢迎继续阅读楼主其他信息

沙发
发表于 2011-7-30 15:20 | 只看该作者
谢谢分析。
1、遥控信号加到积分信号从道理上分析是好的,不过如果真做了,你会发现人的反应速度跟不上。。。反应那可是相当之迅猛。你可以在方向通道试试,这样不容易引发炸鸡。要这样做,需要有好的陀螺芯片,KK用的ENC03很难。。。
2、KK_C开源也提供了更多玩法的可能性,比如你提到的动力系统非线性,如果你对自己使用的电机进行一些标定工作,然后将对油门的控制线性化,将会得到非常理想的效果。那么你会问为什么KK_C不做油门线性化? 因为我无法提供大家简单易行的标定手段,只能开源,让有兴趣又有耐心的玩家去做了。
3、对于ENC03的那些参数,比如电压,传感角度等等,大可放到脑后,整个KK还是基于差动来控制的,它关心的是变化量,而不是绝对值。

本地有模友用KK_C做过脱控悬停,大概可以到1~2分钟不碰遥控器,当然,作为一个低档的飞控,并不是纹丝不动,过程非常有趣,可以看到KK_C的积分在努力纠正飞行器的姿态,飞行器的摇摆逐步增大,到了2分钟后,摇摆已经很让人担心了,必须介入控制(但是还不会炸鸡),呵呵。 以我的经验看,你做好动力线性化,可以解决好多问题。

事实上,虽然动力是非线性的,通过调节配重,可以让悬停点尽可能落在线性区。也就是说,四轴并不是越轻越稳的,这也是用同样的KK配置,有些人很稳,有些人不稳的一个重要原因——有些人的重量/动力配置比恰巧落在非线性区,那效果就差了。
3
发表于 2011-7-31 16:29 | 只看该作者
学习了,坛子里高人辈出啊
4
发表于 2011-8-1 00:13 | 只看该作者
:em26:
5
发表于 2011-8-1 12:17 | 只看该作者
都是高人呀,我看不懂程序。
试着烧过KK_C,不知道是不是我的板子问题。飞起来飘的很,稳不住,用手抓住试机,摇动机身时,反抗力很小,感度已开到最大了。解锁必须要把油门微调向下300多才行(天九的控)。并且这样有时收油门到最低时,电机还不停转,(好盈30A电调,校过油门行程)。
最后还是烧的韩版2.0程序,油门 、解锁都很好。但也是感度开到最大才行。飞行正常。翻斤斗半径也还算小。
6
发表于 2011-8-1 21:47 | 只看该作者
路过学习~:em26:
7
 楼主| 发表于 2011-8-1 22:01 | 只看该作者
请注意下ADC的REF电压,这个也会影响性能的
8
发表于 2011-8-1 22:32 | 只看该作者
我纯粹的菜鸟, 但是感觉到kk的飞控板还是有发展空间的
那位程序高手,能不能研究研究.
在kk板四轴的x或者+的模式下输出控制还留有两个端口,
能不能写一段代码把他们两个用上.功能是把陀螺的平衡的信号输出.用作fpv的一次平衡控制云天,用于保证有大动作时的修正(就像x450标配的那个效果)
再用另一组舵机控制云台,也就是说摄像头平衡是用了两组舵机.(也就是四个)
   还有一种方案,也是用剩余的那两个通道输出陀螺的信号,但是再另外做出一个电路,用这个电路把接收机两个通道的信号和kk板输出的陀螺信号中和.来控制云台,这样真的生了不少钱.

    说的不知对不对,大家随意拍砖.
9
发表于 2011-8-1 23:56 | 只看该作者
关于PPM读取,KK用的是中断的方式,4个遥控器通道接在了MEGA168的PCINT端口上,当电平改变时触发中断。一个上升沿一个下降沿后输出值,期间不占用MCU

void IsrRxCh1(void)
{
         BITSET(RxValid,0);
         if(PIND&2) //Rising 上升沿
        {
                 RxChStart1=TCNT1;
        }
        else//Falling 下降沿
        {
                 RxChBusy=1;
                 RxCh1=TCNT1-RxChStart1;
                RxChBusy=0;
        }
}
10
发表于 2011-8-2 12:34 | 只看该作者
原帖由 gale 于 2011-7-30 15:20 发表
谢谢分析。
1、遥控信号加到积分信号从道理上分析是好的,不过如果真做了,你会发现人的反应速度跟不上。。。反应那可是相当之迅猛。你可以在方向通道试试,这样不容易引发炸鸡。要这样做,需要有好的陀螺芯片,KK用 ...

Gale 老大,能否给我们讲一下,动力与重量是否在线性区的概念,如同上面所讲,如果在线性区,控制会很好,如果在非线性区会很差,我感觉我可能处在非线性区,麻烦了。

[ 本帖最后由 kerrwang 于 2011-8-2 12:36 编辑 ]
11
发表于 2011-8-4 16:14 | 只看该作者
正要开始研究KK_C代码!看得有点晕,继续努力
12
发表于 2011-8-14 21:41 | 只看该作者
原帖由 kerrwang 于 2011-8-2 12:34 发表

Gale 老大,能否给我们讲一下,动力与重量是否在线性区的概念,如同上面所讲,如果在线性区,控制会很好,如果在非线性区会很差,我感觉我可能处在非线性区,麻烦了。


这个说来话长,我和本地模友解释也要花3~5分钟。。。我简单说一下,你看看能不能理解吧。。。(以下解释中的数据均为举例,并非实际数据)

由于动力系统的各方面因素,比如电池内阻、磁钢、电调、螺旋桨、空气阻力等等。。。电机+螺旋桨输出的拉力,和控制信号之间的关系不是线性的。

在线性状态下,假设控制信号为80的时候,拉力为800g,那么控制信号为90的时候,拉力为900g;控制信号为70的时候,拉力为700g;
在非线性状态下,就不好说了,可能信号90,拉力880g;信号70,拉力730g。。。

那么线性和非线性有什么差别呢?对于四轴,这个差别可重要了!

四轴是通过四个旋翼之间的相互作用力来保持平衡的,举例而言,当推油门的时候,控制信号增加10格,那么就要求四个轴的动力同时增加100g(再次强调数据仅供理解,非真实);如果四轴一致性差,那么就不会平稳上升,而是会出现姿态变化。。。
其实这还好,因为只要四个轴一致性好,就算非线性也能做到一样变化。

我们再看看打方向舵的时候。。。
你知道,打方向的时候,2个桨拉力上升,两个桨拉力下降,上升的值等于下降的值,这样总升力不变而反扭力改变,形成方向偏航。。。如果处于动力的非线性区,结果就是增加升力的两个轴和减少升力的两个轴,无法互补,结局是什么?
结局就是,一打方向舵,高度还***变化了。。。
其实这还好,但是高度一变,你要补油门。。油门再一变,其他姿态有***变了。。。。

所以动力系统线性好和线性不好,差别可大了。。。高级的飞控会适应电机电调的问题,可KK这样低档的飞控可不会,这需要你自己来改造它。。。
PS:这个道理可以解释同样的飞控低KV电机组四轴会更稳定————因为低KV电机线性好(为什么线性好?呵呵,这其实根在电机上,原因却在电调上,以后再说)
-----------------------------------------
再看看我说的配重的概念:
动力系统虽然整体上肯定是非线性的,但是在动力输出的某一段一般都是线性的,这一段,一般都在中点附近(注意,不一定是油门中点,是电机的动力输出中点,我们推油门到一定程度以后,电机其实已经是最大输出了,往后都是虚的行程了)。

假设我们的四轴非常重,重到四个电机都要输出95%的功率才能勉强拉起,这时候会怎么样? 很显然,各个方向的控制很吃力了,最多只有5%的调节余量。(这个不能理解我就懒得说了。。。)

那么假设我们的四轴非常轻,轻到四个电机才输出10%就已经腾空而起了,这样好吗?
对高级飞控来说,好!对KK来说——不好!
为虾米?
因为这时候电机处于非线性工作状态。。。用KK的简单算法来调节,真是叫做顾此失彼,此起彼伏啊。。。
怎么办?

很显然,如果整个机子的重量让四个电机在悬停的时候,功率输出都是在线性区域的中点,那效果就直追高档飞控了(也仅仅是直追,要说赶上接近,咳咳。。。)。我这里提一个方案,该方案未经验证————设计四轴的时候,让起飞重量等于四轴最大输出拉力的40%,这样应该是最稳定的飞行状态。

对于这个问题,我有过一次实际经验,我在坛子里也发过一次微型的用1806电机的KK四轴,当时这个四轴极度不稳,但是加挂了一个3S电池之后,就变得稳了,除却重心低的因素之外,电机线性的因素更为关键(1806 KV2200是一款线性很差的电机。。。)。
13
发表于 2011-8-14 23:36 | 只看该作者
旁听一下,有些还是看不懂。
14
发表于 2011-8-14 23:45 | 只看该作者
:em03:
15
发表于 2011-9-12 20:31 | 只看该作者
记号一下.
16
发表于 2011-9-13 09:41 | 只看该作者
讲的非常有用,受教了!谢谢
17
发表于 2012-1-12 08:45 | 只看该作者
呵呵,kk就是个简单玩具,你想要飞控自整定pid,首先要保证你愿意多出n倍钱。
18
发表于 2012-1-14 18:10 | 只看该作者
我顶
19
发表于 2012-1-14 18:41 | 只看该作者
顶  希望大家都来玩KK
20
发表于 2012-1-14 19:22 | 只看该作者
单片机只玩过一次,根据前后文意思推测,lz用的AVR开发环境写好的代码的实际运行平台是单线程的么?不然就不需要考虑读传感器、控制信号花费时间的问题了。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /2 下一条

快速回复 返回顶部 返回列表