精华内容
下载资源
问答
  • 飞行控制系统的分系统》首先简述了飞行控制系统的分系统的定义、组成和特点。然后逐章论述了各个分系统的设计技术。最后,介绍了部件的飞行安全等试验方法。其内容基本反映了作者们多年来在飞行控制领域积累的经验...
  • 飞行控制系统

    2017-06-18 15:50:32
    《飞行控制系统》以飞行控制系统分析和设计的基本方法为主要内容,以典型的飞行控制系统的基本结构为主干。除绪论外共7章: 绪论主要介绍飞行控制系统完成的任务和基本构成以及发展简况;第1章介绍飞行器在大气中...
  • 非常经典飞控学习书籍。 本书介绍飞行器飞行控制的基本原理和实现方法,以及与飞行控制有关知识。 除绪论外共八章,内容有有飞行动力学、陀螺及其他敏感元件、舵机与舵回路等。
  • 本文采用Memetic算法进行飞行控制系统PIO评估,提出了一种结合自适应差进化和模式搜索Memetic算法。以瑞典FOI开发飞机模型ADMIRE为研究对象,利用Memetic算法对存在不确定条件下的飞行控制系统进行评估。评估...
  • 研究气动参数摄动和外界扰动下高超声速飞行器姿态系统的...改进后的黄金分割鲁棒自适应控制算法在自适应性和鲁棒性的优越性使得该方法尤其适用于高超声速飞行器姿态控制系统.仿真结果验证了控制方法的有效性和实用性.
  • 本文设计并实现了飞行试验实时监控信息协同系统,该系统将非结构化文档以及格栅带头文件等转化为结构化数据信息按照飞机分类进行存储,采用资源分类管理方法将实时监控准备过程涉及到所有软件资源统一管理,...
  • 全书共10章,包括欠驱动系统滑模控制、基于观测器和解耦算法的欠驱动系统滑模控制控制输入受限条件下的滑模控制、挠性系统和奇异摄动系统的滑模控制、机械手滑模控制、基于函数逼近的机械手滑模控制、基于干扰...
  • 我发现《四轴飞行器DIY-基于STM32微控制器》,还有crazypony,还有无名,这类没有用操作系统的都是靠定时器来弄的。 飞控的程序大体可以分类两类,有操作系统和没有操作系统的。 怪不得无名的那些主要功能都没有写...

     

    我发现《四轴飞行器DIY-基于STM32微控制器》,还有crazypony,还有无名,这类没有用操作系统的都是靠定时器来弄的。

    飞控的程序大体可以分类两类,有操作系统和没有操作系统的。

    怪不得无名的那些主要功能都没有写在main函数里面,写在time.c里面

    莫非他们都是在中断里面实现姿态控制的么

    是不是还可以把匿名的代码也拿来分析一下。

     

    之前在这篇文章总结过

    https://blog.csdn.net/sinat_16643223/article/details/107295403?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160148049619725222408940%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=160148049619725222408940&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-3-107295403.pc_v1_rank_blog_v1&utm_term=%E8%BD%AF%E4%BB%B6%E6%A1%86%E6%9E%B6&spm=1018.2118.3001.4187

     

     

     

    看了下匿名的代码,它也是分为不同频率的任务,当然虽然他这里面说“线程”,但匿名是没有用操作系统的。

    static void Loop_1000Hz(void)	//1ms执行一次
    {
    	test_dT_1000hz[0] = test_dT_1000hz[1];
    	test_rT[3] = test_dT_1000hz[1] = GetSysTime_us ();
    	test_dT_1000hz[2] = (u32)(test_dT_1000hz[1] - test_dT_1000hz[0]) ;
    //	
    	/*传感器数据读取*/
    	Fc_Sensor_Get();
    	
    	/*惯性传感器数据准备*/
    	Sensor_Data_Prepare(1);
    	
    	/*姿态解算更新*/
    	IMU_Update_Task(1);
    	
    	/*获取WC_Z加速度*/
    	WCZ_Acc_Get_Task();
    	
    	/*飞行状态任务*/
    	Flight_State_Task(1,CH_N);
    	
    	/*开关状态任务*/
    	Swtich_State_Task(1);
    	
    	/*姿态角速度环控制*/
    	Att_1level_Ctrl(1e-3f);
    	
    	/*电机输出控制*/
    	Motor_Ctrl_Task(1);
    		
    	/*数传数据交换*/
    	ANO_DT_Data_Exchange();
    	
    
    //	
    			test_rT[4]= GetSysTime_us ();
    			test_rT[5] = (u32)(test_rT[4] - test_rT[3]) ;	
    }
    
    static void Loop_500Hz(void)	//2ms执行一次
    {	
    	
    }
    
    static void Loop_200Hz(void)	//5ms执行一次
    {
    
    	
    }
    
    static void Loop_100Hz(void)	//10ms执行一次
    {
    			test_rT[0]= GetSysTime_us ();
    //				
    	/*遥控器数据处理*/
    	RC_duty_task(10);
    	
    	/*飞行模式设置任务*/
    	Flight_Mode_Set(10);
    	
    	/*获取姿态角(ROLL PITCH YAW)*/
    	calculate_RPY();
    	
    	/*姿态角度环控制*/
    	Att_2level_Ctrl(10e-3f,CH_N);
    	
    	/*位置速度环控制(暂无)*/
    	Loc_1level_Ctrl(10,CH_N);
    	
    	/*高度数据融合任务*/
    	WCZ_Fus_Task(10);
    	
    	/*高度速度环控制*/
    	Alt_1level_Ctrl(10e-3f);
    	
    	/*高度环控制*/
    	Alt_2level_Ctrl(10e-3f);
    		
    	/*光流数据解析*/
    	AnoOF_DataAnl_Task(10);
    	
    	/*灯光控制*/	
    	LED_Task(10);
    //		
    			test_rT[1]= GetSysTime_us ();
    			test_rT[2] = (u32)(test_rT[1] - test_rT[0]) ;	
    				
    }
    
    static void Loop_50Hz(void)	//20ms执行一次
    {	
    	/*罗盘数据处理任务*/
    	Mag_Update_Task(20);
    
    
    }
    
    static void Loop_20Hz(void)	//50ms执行一次
    {	
    	/*TOF激光任务*/
    	Drv_Vl53_RunTask();
    	/*电压相关任务*/
    	Power_UpdateTask(50);
    }
    
    static void Loop_2Hz(void)	//500ms执行一次
    {
    	/*延时存储任务*/
    	Ano_Parame_Write_task(500);
    
    }
    //系统任务配置,创建不同执行频率的“线程”
    static sched_task_t sched_tasks[] = 
    {
    	{Loop_1000Hz,1000,  0, 0},
    	{Loop_500Hz , 500,  0, 0},
    	{Loop_200Hz , 200,  0, 0},
    	{Loop_100Hz , 100,  0, 0},
    	{Loop_50Hz  ,  50,  0, 0},
    	{Loop_20Hz  ,  20,  0, 0},
    	{Loop_2Hz   ,   2,  0, 0},
    };

     

    展开全文
  • 全书共10章,包括欠驱动系统滑模控制、基于观测器和解耦算法的欠驱动系统滑模控制控制输入受限条件下的滑模控制、挠性系统和奇异摄动系统的滑模控制、机械手滑模控制、基于函数逼近的机械手滑模控制、基于干扰...
  • 从互联网+概念一出来,就瞬间吸引了各行各业能人志士,想要在这个领域上一杯羹。现在传统工业生产行业运用互联网+概念偏多,但是在大众创业万众创新背景下,“互联网+”涌出了层出不穷“玩法”,智慧...

    前言

    从互联网+的概念一出来,就瞬间吸引了各行各业的能人志士,想要在这个领域分上一杯羹。现在传统工业生产行业运用互联网+的概念偏多,但是在大众创业万众创新的背景下,“互联网+”涌出了层出不穷的“玩法”,智慧城市、隧道交通、智慧园区、工业生产,甚至是这次要说的智能飞机!异地协同制造的范围,目前多局限于主机制造厂之间,发动机和机载系统介入得很少。“互联网+飞机”可通过提高各类飞行器的有效监控能力、应急处置能力来大幅提高航行安全水平。“在提高这两大能力后,像飞机失联这类事件将不再发生。”当飞机飞离预定航线时,地面可以即时监控,甚至在飞机遭遇恶意操控时,地面也可以接管,而且“互联网+飞机”将对每架飞机的各项数据了如指掌,有效提高航行的安全。我认为,“互联网+飞机”将超出传统的“互联网+飞机制造”阶段,让互联网在飞机全寿命使用过程中发威,这可为传统制造业转型升级提供重大机遇。
    在这里插入图片描述
    http://hightopo.com/guide/guide/plugin/obj/examples/example_path.html

    代码部分

    加载飞机模型

    首先,最重要的是我们的飞机模型,前面有文章写到过,HT 内部封装了一个方法 ht.Default.loadObj (https://hightopo.com/guide/guide/plugin/obj/ht-obj-guide.html#ref_loadobj )来加载 OBJ 文件:

    ht.Default.loadObj('obj/plane.obj', 'obj/plane.mtl', {                    
        center: true,
        r3: [0, -Math.PI/2, 0], // make plane face right
        s3: [0.15, 0.15, 0.15], // make plane smaller
        finishFunc: function(modelMap, array, rawS3){
            if(modelMap){                            
                modelMap.propeller.r3 = { // propeller 螺旋桨
                func: function(data){
                    return [data.a('angle'), 0, 0]; 
                }
            };                             
            // 设置模型的大小为原来的 1 1.2 1.2 倍(相当于 x 轴放大了 1 倍,y 轴放大了 1.2 倍,z 轴放大了 1.2 倍)
            modelMap.propeller.s3 = [1, 1.2, 1.2]; 
            modelMap.propeller.color = 'yellow';
        } 
    });
    

    要将 obj 解析后的模型信息绑定到图元,需先调用建模手册中模型注册(https://hightopo.com/guide/guide/plugin/modeling/ht-modeling-guide.html#ref_register )章节介绍的 ht.Default.setShape3dModel(name, model) 函数进行注册,之后图元只需将 style 的 shape3d 属性设置为注册的名称。当然我们现在将这个方法封装了一下,采用更简便的方法来加载模型,但是还是需要加载的原理:

    // models/plane.json
    {
        "modelType": "obj",
        "obj": "obj/plane.obj",
        "mtl": "obj/plane.mtl" // 要是没有 mtl 文件,则设置为 ""
    }
    

    之后通过设置节点的 style 的 shape3d 属性设置为这个 json:node.s('shape3d', 'models/plane.json')

    注意!不管使用哪种方法来加载模型,mtl 文件中如果有使用贴图,贴图的路径需要是相对于 obj 文件的路径。

    前面代码中的 modelMap.propeller 是 OBJ 文件中定义好的 modelMap 对象中的 propeller 对象,可以试着打印 modelMap 看看输出结果。
    在这里插入图片描述

    加载机尾指示灯

    这个方法里的 finishFunc(modelMap, array, rawS3) 用于加载后的回调处理,具体查阅 HT for Web OBJ 手册(http://hightopo.com/guide/guide/plugin/obj/ht-obj-guide.html#ref_loadobj ),我们还添加了一个在 OBJ 模型中没有的飞机尾部的“红色闪烁指示灯”,这里用到的是组合模型 array(所有材质组成的数组,里面有至少一个模型),我们在 array中加入一个新的球模型:

    // 添加一个指示灯的圆形模型
    array.push({
        shape3d: ht.Default.createSmoothSphereModel(),
        t3: [-40, 10, 0],
        s3: [6, 6, 6],
        color: {
            func: function(data){
                return data.a('light') ? 'red': 'black';
            }
        }
    });
    

    这里的 shape3d 是 HT 封装的一个属性名,通过 setShape3dModel(name, model) 函数注册的或者是通过 getShape3dModel(name) 函数返回的注册过的 3D 模型,如何注册 3D 模型可查阅 HT for Web 建模手册(http://hightopo.com/guide/guide/plugin/modeling/ht-modeling-guide.html#ref_register )。

    color 属性名对应了一个对象,这边的定义是这样的,color 直接通过 data.getAttr(‘a’) 获取 data.setAttr(‘a’, value) 中的值,这样做有两个好处,一是可以不污染 HT 的常用属性操作,所以 HT 专门定义了这个 attr 属性类型,是 HT 预留给用户存储业务数据的;二是这样也很方便数据绑定,我们可以通过在需要更改属性的地方调用 setAttr 方法,非常方便。

    接着我们通过 ht.Default.setShape3dModel(name, model) 来将我们刚刚组合好的模型 array 注册成我们要的“plane”模型:

    ht.Default.setShape3dModel('plane', array);
    

    创建模型节点

    注册好模型后肯定是要调用这个模型,我们可以通过 shape3d 属性来调用这个模型,并且在这个模型中自定义上面代码中出现过的 light 属性和 angle 属性:

    plane = new ht.Node();
    plane.s3(200, 200, 200);
    plane.s3(rawS3);
    plane.s({
        'shape3d': 'plane',
        'shape3d.scaleable': false,
        'wf.visible': true, // 线框是否可见
        'wf.color': 'white',
        'wf.short': true // 是否显示封闭的线框,true 为不封闭的短线框
    });
    plane.a({
        'angle': 0,
        'light': false
    });
    

    动画

    因为飞机还有螺旋桨、指示灯两个功能,我们还得对这两个模型做动画效果,可查阅 HT for Web 动画手册(http://hightopo.com/guide/guide/plugin/animation/ht-animation-guide.html ),通过用户在 form 表单上选择的结果来决定飞机飞行持续时间、看飞机的视角、飞机沿着“航线”飞行所要旋转的角度、机尾指示灯的“闪烁”功能等等,最后别忘了飞机停止飞行时,如果要让飞机继续飞行,就得回调这个动画,并且设置灯不再闪烁,别忘了要启动动画:

    params = {
        delay: 1500,
        duration: 20000,
        easing: function(t){ 
            return (t *= 2) < 1 ? 0.5 * t * t : 0.5 * (1 - (--t) * (t - 2));
        },
        action: function(v, t){
            var length = g3d.getLineLength(polyline),
            offset = g3d.getLineOffset(polyline, length*v),
            point = offset.point,
            px = point.x,
            py = point.y,
            pz = point.z,
            tangent = offset.tangent,
            tx = tangent.x,
            ty = tangent.y,
            tz = tangent.z;
            plane.p3(px, py, pz);
            plane.lookAt([px + tx, py + ty, pz + tz], 'right');
                            
            var camera = formPane.v('Camera');
            if(camera === 'Look At'){
                g3d.setCenter(px, py, pz);
            }
            else if(camera === 'First Person'){                            
                g3d.setEye(px - tx * 400, py - ty * 400 + 30, pz - tz * 400);
                g3d.setCenter(px, py, pz);                            
            }
                            
            plane.a('angle', v*Math.PI*120);                        
            if(this.duration * t % 1000 > 500){
                plane.a('light', false);
            }else{
                plane.a('light', true);
            }                        
        },
        finishFunc: function(){
            animation = ht.Default.startAnim(params);
            plane.a('light', false);
        }                  
    };                               
                   
    animation = ht.Default.startAnim(params);
    

    其实最让我们好奇的是描绘的路径跟飞机本身的飞行并没有关系,还有那么多左拐右拐的,要如何做才能做到呢?

    绘制飞机轨道

    在这里插入图片描述
    接下来我们来描绘路径,首先这个路径是由 ht.Polyline 作为基础来描绘的:

    polyline = new ht.Polyline();   
    polyline.setThickness(2);
    polyline.s({
        'shape.border.pattern': [16, 16],
        'shape.border.color': 'red',
        'shape.border.gradient.color': 'yellow',
        'shape3d.resolution': 300,
        '3d.selectable': false
    });
    dataModel.add(polyline);
    

    上面的代码只是向 datamodel 数据模型中添加了一个 polyline 管线而已,不会显示任何东西,要显示“航道”首先就要设置航道所在的点,我们先设置航道的初始点:

    points = [{ x: 0, y: 0, e: 0 }];
    segments = [1];
    

    这个 points 和 segments 是 HT for Web Shape 手册(http://hightopo.com/guide/guide/core/shape/ht-shape-guide.html )中定义的,points 是 ht.List 类型数组的定点信息,顶点为 { x: 100, y: 200 } 格式的对象;segments 是 ht.List 类型的线段数组信息,代表 points 数组中的顶点按数组顺序的连接方式。

    图中“航道”左侧的多个圆形轨道也是通过设置 points 和 segments 来设置的:

    for(var k=0; k<count+1; k++){
        var angle = k * Math.PI * 2 * round / count;
        points.push({
            x: cx + radius * Math.cos(angle),
            y: cy + radius * Math.sin(angle),
            e: k * height / count
        }); 
        segments.push(2);
    }
    

    接下来几个拐点也是这种方法来实现的,这里就不赘述了,如果你还没看手册的话,这里标明一点,segments 只能取值 1~5,1 代表一个新路径的起点;2 代表从上次最后点连接到该点;3 占用两个点信息,第一个点作为曲线控制点,第二个点作为曲线结束点;4 占用3个点信息,第一和第二个点作为曲线控制点,第三个点作为曲线结束点;5 不占用点信息,代表本次绘制路径结束,并闭合到路径的起始点:

    points.push({ x: cx+radius, y: 0, e: height/2 });
    points.push({ x: 0, y: 0, e: height/2 });
    segments.push(3);
    
    points.push({ x: radius, y: -radius, e: height/2*0.7 });
    points.push({ x: radius*2, y: radius, e: height/2*0.3 });
    points.push({ x: radius*3, y: 0, e: 0 });
    segments.push(4);   
    
    points.push({ x: 0, y: 0, e: 0 });
    segments.push(2);  
    

    我们已经把路径上的点都添加进“航道”中了,接下来要把点都设置到管道上去才会显示在界面上:

    polyline.setPoints(points);
    polyline.setSegments(segments);  
    

    飞机跑道

    在这里插入图片描述
    “跑道”就比较简单了,只是一个 Node 节点然后设置基础效果而已,没什么特别的:

    runway = new ht.Node();
    runway.s3(-cx+radius*3, 1, 200);
    runway.p3(cx+runway.getWidth()/2, -22, 0);
    runway.s({
        'all.color': '#FAFAFA',
        'all.transparent': true,
        'all.reverse.cull': true,
        'all.opacity': 0.8,
        '3d.selectable': false
    });
    dataModel.add(runway);
    

    最后,在界面上添加一个 formPane 表单面板,定义好之后可以直接添加到 body 上,这样就不会跟 graph3dView 有显示的联系了。

    表单面板

    在这里插入图片描述
    formPane 可以用 formPane.addRow(https://hightopo.com/guide/guide/plugin/form/ht-form-guide.html#ref_func )方法动态添加行,这个方法中可以直接对动态变化的数据进行交互,例如本例中的是否有动画 Animation,我们利用 checkBox 来记录选中或者非选中的状态:

    {
        checkBox: {
            label: 'Animation',
            selected: true,
            onValueChanged: function(){
                if(this.isSelected()){
                    animation.resume();
                }else{
                    animation.pause();
                }                               
            }
        }
    }
    

    也可以通过设置“id”来记录动态改变的值,然后 formPane 就会通过调用 formPane.v(id) 来获取当前值。

    最后

    工业互联网(Industrial Internet)的概念最早由通用电气(GE)在 2012 年提出,即让互联网进入产业链的上游,从根本上革新产业。根据飞常准的数据显示,美国已有 78% 的航班提供机上互联服务。在航天航空领域,工业互联网会打破软件、硬件和人员之间的信息壁垒,依靠大数据的分析,让飞机建立自己的声音,表达给飞行员和维修人员飞行员,具体飞行状况如何或者哪里需要维修。工业互联网技术的深入应用,正在改变着民航飞机的使用效率和制造成本。

    在这里插入图片描述
    https://hightopo.com/demo/large-screen/index.html
    在这里插入图片描述
    https://hightopo.com/demo/cloud-monitor/demo4.html
    在这里插入图片描述
    https://hightopo.com/demo/HTBuilding/index.html

    展开全文
  • 再利用等效控制法求取系统在该滑模面上的等效控制量,采用李雅普诺夫方法设计了系统的切换控制量,从而获得系统总的控制量。该控制器能够保证各个滑模面的稳定性和误差闭环系统的全局渐近稳定性。最后的仿真结果表明...
  • NTP校时(GPS对时系统)航管控制系统应用 NTP校时(GPS对时系统)航管控制系统应用 ...而在航管楼调度工作中,时间参数至关重要,各个飞行控制环节时间同步是基本要求。随着国际民航组织(ICAO)对新航行系统(CN

    NTP校时(GPS对时系统)航管控制系统应用
    NTP校时(GPS对时系统)航管控制系统应用
    伴随着民航业的快速发展,航线愈发拥挤,航管楼的统一协调对于民航运输的安全性就显得更加重要。2015年12月31日晚23:55分,东航当日最后一个航班MU5186安全降落北京。至此,2015年,中国民航实现全年安全运输约846万小时、362万架次,这个成绩与航管楼的统一、科学、有效调度密切相关。而在航管楼的调度工作中,时间参数至关重要,各个飞行控制环节的时间同步是基本要求。随着国际民航组织(ICAO)对新航行系统(CNS/ATM)概念的推广,包括中国在内的国际民航界开始广泛使用全球卫星导航系统(GNSS)。同时伴随着我国自主北斗系统的发展成熟,北斗在民航的广泛应用和标准制定工作得到快速推进。这里面除了增加北斗参与GBAS,对全球卫星导航系统(GNSS)进行差分校正和完好性监测,以提供安装机场周边有效半径范围内的导航和精密进近服务之外,就是北斗时间同步技术的应用。即在民航时钟和时间同步系统等各个方面增加北斗系统授时,对GPS备份兼和兼容,使得空管的时钟系统安全和一致性得到进一步提升。
    而空管的时钟同步网络一般采用基于时间服务器的C/S结构的时间同步策略来进行时间的同步。该方法的主要思想就是在系统中建制一个或若干个具有高度可信度与有效度的时间服务器,系统中的其他节点通过网络从服务器获取时间,同时对各自时间进行修正,进而达到整个系统各个节点时间的同步。这种时钟同步网络的准则就是NTP(Network Time Protocol)及其相关的SNTP(Simple Network Time Protocol)的同步机制标准。
    说到这里首先要介绍时间同步的概念,即将通信网上各种通信设备或计算机设备的时间信息(年月日时分秒)基于UTC(协调世界时)时间偏差限定在足够小的范围内,这种同步过程叫做时间同步。航管楼的信息系统对所使用的时间的同步一致性要求非常高,这也决定了其对相应的时钟源和时间同步机制协议要求非常苛刻。而NTP就是用来使计算机时间同步化的一种可靠协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,可以提供高精准度的时间校正,且可由加密确认的方式来防止恶毒的协议攻击。 NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。而UTC的时间来源从便利和可靠等方面考虑,原子钟和导航卫星是首选。这样北斗+本地高精度振荡器,配合NTP协议,共同保障了航管楼时间同步系统的精准和可靠。

    其中时间同步服务器负责接收、解算北斗卫星导航系统时间信息,并驯服本地振荡源,共同保持和提供高精度时间基准,通过相应接口设备提供给通信、客服、通管、计算机、保护装置、故障录波器、事件顺序记录装置、安全自动装置、远动RTU等设备,达到整个系统的时间精准和同步。
    目前北斗系统的发展不断完善,2月1号,北斗第21颗卫星、全球验证第5颗卫星顺利升空,北斗系统的全球化进程不断加快,预计2018年率先服务“一带一路”区域,2020年服务全球,这也将促进中国民航的全球化业务拓展。同时笔者之前的文章有介绍,我国的原子钟自主化和技术水平同样发展迅速,并且在新一代北斗卫星上得到应用和验证。因此从技术方面来看,北斗服务于民航空管有着可靠的技术保障,必将很好的提高我国民航空管的效率、安全和可靠性。而政策方面更是民航安全、效率和北斗应用推广共赢!

    展开全文
  • 如今,航空航天工业的发展催生了可应用于多种飞机的模块化顶置系统的发展。 通过以与实际飞机可操纵性相似的方式进行工作,它实际上使训练效果最大化。 飞机模拟器的架空系统控制装置作为模块开发,并集成到飞行...
  • STM32四轴飞行制作(1)-- 使用stm32最小系统

    千次阅读 多人点赞 2018-06-05 11:07:00
    这段时间正在学习stm32处理器使用,为了巩固所学知识,初步熟悉STMF103处理器和外设使用,打算制作一架微型四轴飞行器,由于这个项目对我来讲还是有难度,网上也看到一些不太成功案例,因此打算几步来实现...

    这段时间正在学习stm32处理器的使用,为了巩固所学知识,初步熟悉STMF103处理器和外设的使用,打算制作一架微型四轴飞行器,由于这个项目对我来讲还是有难度的,网上也看到一些不太成功的案例,因此打算分几步来实现,即硬件选型(飞控)==>物理结构(机架和电机)==>软件编写(姿态解算+PID控制)==>安装调试(稳定性+性能)。

       目前初步的方案是:

       硬件选型:采用STM103C8T6核心板+MPU6050

       物理结构:采用轴距100mm左右的8250空心杯小四轴结构,具体待定(实际情况为轴距80mm+112mm,使用720空心杯电机)

       软件编写:使用正点原子的开发板和配套软件来开发

       安装调试:打算使用匿名上位机(实际主要通过NRF24L01+USB串口 PC端上位机来调试)

      

      顺便说一下,由于这个项目对于初学者有一定难度,最好保持足够的专注度,不要同时做其它项目,在遇到困难时可以从硬件和软件两个角度想办法,另外对收集到的资料和开发过程要做一些摘要和记录,打铁还需自身硬, 知识不消化等于没有。

     

     目前手头上有miniSTM32开发板,附带的光盘资料整理得很完备也比较多,由于以前学过51单片机,为避免分散注意力导致抓不住重点,我删除了所有的视频资料,打算从《stm32不完全手册》+《Cortex-M3权威指南》+数据手册+使用手册入手,采用开发板+STMF103C8T6核心板+面包板操作,就从点亮一个LED灯开始学习光盘附带的一些例程。

     

    跑马灯实验, 知识要点:GPIO端口的配置

      

     

     MPU6050三轴加速度,角速度测量以及通过DMP计算四元数并获取姿态角实验

     

    接线方式:使用CH340E USB转TTL串口模块给STMF103C8T6+MPU6050统一供电,

                     USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                     MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                     MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

    知识要点:模拟IIC的配置及读写函数,MPU6050三轴加速度和角速度数据的获取,DMP库的移植,通过四元数计算欧拉角

    注意事项:使用匿名上位机V4.22处理上传的串口数据时要使用新的通信协议定义的数据格式,另外要小心延时函数的使用,有可能导致数据读不出,具体原因有待研究

     

     NRF24L01无线模块收发实验

     

    接线方式:使用有源USB Hub给主板和无线模块供电,

                     USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                     MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                     NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1

                     MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

    知识要点:SPI的配置及读写函数,NRF24L01的初始化和收发函数

    注意事项:注意USB供电是否充足

     

     PWM驱动空心杯实验

          

     

    接线方式:使用有源USB Hub给主板和无线模块供电,

                     USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                     MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                     NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA8

                     MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

                     空心杯驱动电路:见上图,SI2302的控制极即G极通过10欧姆电阻接PA8脚

    知识要点:定时器Tim1的配置和引脚配置

    注意事项:STM103C8T6核心板和电机要统一供电,核心板的引脚无法重映射

     

     整机试验一

     

    接线方式:使用有源USB Hub给主板和无线模块供电,

                     USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                     MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                     NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1

                     MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

                     空心杯驱动电路:见上图,SI2302的控制极即G极通过10欧姆电阻接PA8脚,PWM-CH1:A0, PWM-CH2:A1, PWM-CH3:A2, PWM-CH4:A3(使用TIM2四个通道)

    知识要点:使用NRF24L01遥控电机转速

    注意事项:1. 本次试验发现电机噪声污染导致NRF24L01无法工作或核心板自动复位,因此保证核心板的供电稳定在3.3V并且纯净是很重要的,可以使用单独的3.3V稳压模块或者参考上图将电池电压先升压至5V再稳压到3.3V,可以使用电容+电感滤波。

                      2. 目前整机较重,四轴飞行器升力不足,必要时考虑用热熔胶把空心杯电机直接固定到PCB底板上。

     

     整机试验二

     

    接线方式:使用有源USB Hub给主板和无线模块供电,

                     USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                     MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                     NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1

                     MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

                     空心杯驱动电路:见上图,SI2302的控制极即G极通过10欧姆电阻接PA8脚,PWM-CH1:A0, PWM-CH2:A1, PWM-CH3:A2, PWM-CH4:A3(使用TIM2四个通道)

    知识要点:使用PID控制电机转速,上油门后四轴能平稳飞行

    注意事项:1. 本次试验发现采用PCB焊装模块的方式很难保证飞行器的重心在正中间(电池的位置也不能偏离重心),如果重心严重偏离中心,由于空心杯电机升力有限,光靠PID调整电机转速很难保证飞行器平稳飞行;

                      2. 由于PCB(70mm X 90mm)和电池(650mAH)超重加上重心偏离,导致飞行器最终没能飞起来,只是单侧飞起来导致炸桨好几次,因此还是使用PCB layout的方式成功率更高,刚开始制作的时候没有考虑周全这在项目开发中也是比较常见的,只能逢山开路遇水架桥了,目前我已经坚持了两个月,还需要继续努力才可能把四轴飞起来。

                      3.为解决升力不足的问题打算把55mm桨叶更换为75mm桨叶,把650mAH电池更换为350mAH电池,适当调整电池的位置使得重心对中。

                      4.现在航模电池很多都使用专用USB充电线,注意最好不要直接使用电脑的USB端口,而是使用手机充电器+专用USB充电线,我的USB充电线由于和电池的端子不匹配,在改装时USB充电线和电池的正负极接反产生了一连串可怕的后果:笔记本电脑两个USB口烧坏,电池也报销了,如果采用手机充电器就不会有这样严重的问题。

                     5.MPU6050在核心板刚上电时读出的数据是不准确的,不能用于PID控制,如果不校正上电后要等十几秒才能启动油门。

                     6.为了加大轴距我使用了四小片碳纤维板把空心杯电机引出,否则桨叶产生的下降气流被PCB挡住影响升力。

                     7.注意四轴必须是两个正桨+两个反桨交叉布局,正反桨的区分注意不能看颜色而是看形状,如上图所示。

                     8.油门(Thro)不能设置为定时器的最大值而是要预留PID调整所需的空间,比如定时器重装值为999,油门则最大为900左右。

                     9.PID调参时可以将Kp,Ki,Kd单独测试它们的临界值(产生震荡),主要用到的是Kp和Kd,若使用积分需要将积分误差限幅为油门的%5左右。

     

    后记

          由于自制机架无法保证四个电机的垂直度以及它们的中心在圆内接正方形的四个顶点上,最终我还是选用了轴距为100mm的有刷穿越机的机架,对于四轴飞行器物理结构的精度和软件的精确控制同样重要,否则无法区分到底是硬件还是软件的问题。

     

     目前整机可以飞行,高度约20cm,飞行状态也不稳定,无法做到悬停,显然四轴还是偏重,考虑自己焊装飞控以减轻重量。

    转载于:https://www.cnblogs.com/yangjd/p/9135301.html

    展开全文
  • 在分析原有火箭安控系统的基础上,针对火箭飞行的特点及不确定的规则知识,提出了基于智能决策的火箭安控系统。首先给出了集弹道数据处理和安全控制决策于一体的计算机决策支持系统模型;然后根据安控系统的特点,对...
  • 文中针对无人机地面控制站上,操纵手实时监测飞机起飞准备阶段和飞机回收阶段的情况,提出了一种应用在地面控制分系统的高清网络视频监控系统的设计方案。通过在地面控制站上部署采用DaVinci系列影像解码芯片的...
  • 世界各地的先进国家都在鼓励开发可以在海洋环境中自主运行的无人水面飞行器(USV)。 这种无人飞行器的关键... 此外,我们分析了各个领域的自主任务计划控制系统的案例研究,并介绍了构成任务计划系统关键功能的功能。
  • 要求:利用评估网站https://flyeval.com,目标在海拔0m,温度25°C,用网站适配出飞行大于10分钟三旋翼、三轴六旋翼、四旋翼、六旋翼、四轴八旋翼和八旋翼各一架,依据多旋翼飞行评估网站列出该飞行所有飞行...
  • 批量操作系统 批量操作系统的主要特征是“批量”。用户要使用计算机时,必须实现准备好自己的作业,然后交给机房,由机房的操作员将一批作业送入...这类应用的例子包括完全独立的系统(如军事指挥系统、飞行控制系统、..
  • 飞行计划-源码

    2021-02-14 05:22:10
    Flightplan运行时,用于运行分类程序,关联的控制程序和。 可重用工具,基础架构和文档: 网络助推器: ,内存缓存,报头压缩,运行在或。 各种新,包括调用我们网络 。 将Flightplan应用于第三方P4...
  • 对于室内没有GPS号信号情况下,无人机想进行单机高精度、高难度控制算法开发以及多机编队的飞行控制开发,需要对空间中高度、位置、姿态、抖动、延时等指标进行测量,以提升开发效率。 一、光学动作...
  • 嵌入式操作系统

    2020-09-05 16:23:24
    文章目录一、嵌入式软件1.嵌入式软件分类2.嵌入式软件体系结构二...eg:飞行控制软件、手机软件。 支撑软件:辅助软件开发工具软件。 eg:系统分析设计工具、交叉编译器。 2.嵌入式软件体系结构 无操作系统 主要有
  • 操作系统基础

    2017-08-26 16:00:16
    操作系统基础(OS) 概念 直接控制和管理计算机硬件、软件资源,合理的对各类作业进行调度,以方便用户使用的程序集合 三种操作系统 批处理系统:周转时间长,无交互能力 ...操作系统的特性 并发:
  • PID控制、迭代学习PID控制、挠性及奇异摄动系统的 PD控制、机械手PID控制飞行器双闭环PD控制、倒 立摆系统的控制及GUI动画演示,以及其他控制方法 的设计。每种方法都给出了算法推导、实例分析和相 应的MAATLAB...
  • 包括基本PID控制、PID控制整定、时滞系统PID控制、基于微分器PID控制、基于观测器PID控制、自抗扰控制器及其PID控制、PD鲁棒自适应控制、专家PID控制和模糊PD控制、神经网络PID控制、基于差进化PID...
  • 全书共14章,主要为绪论、系统辨识常用输入信号、线性系统的经典辨识方法、动态系统...系统的辨识、随机时序列模型的建立、系统结构辨识、闭环系统辨识、系统辨识在飞行器参数辨识中的应用、神经网络在系统辨识中的应用...
  • 12月17日1时59,嫦娥五号返回器携带月球样品在内蒙古四子王旗预定区域安全...就在今年五月,利亚德刚刚完成对北京航天飞行控制中心多个指挥厅“LED小间距显示系统升级”和“分布式图像处理系统升级”任务。改造...
  • 包括基本PID控制、PID控制整定、时滞系统PID控制、基于微分器PID控制、基于观测器PID控制、自抗扰控制器及其PID控制、PD鲁棒自适应控制、专家PID控制和模糊PD控制、神经网络PID控制、基于差进化PID...
  • 包括基本PID控制、PID控制整定、时滞系统PID控制、基于微分器PID控制、基于观测器PID控制、自抗扰控制器及其PID控制、PD鲁棒自适应控制、专家PID控制和模糊PD控制、神经网络PID控制、基于差进化PID...
  • 从互联网+概念一出来,就瞬间吸引了各行各业能人志士,想要在这个领域上一杯羹。现在传统工业生产行业运用互联网+概念偏多,但是在大众创业万众创新背景下,“互联网+”涌出了层出不穷“玩法”,智慧...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

飞行控制系统的分系统