发表于《开源一块飞控SS0》
tmn_A作者
8个月29天前IP:广东
948800
4楼
void controller_init(void)
{
    inss_start_read();
    gps_start_read();
    NRF24L01P_init();
    LED_OFF();
    memset(ind.velocity, 0, 12);
    memset(ind.position, 0, 12);
    memset(esd.dh, 0, 8);

    tx_packet[0] = 0xFF;
    tx_packet[1] = 0x00;
    NRF24L01P_send();

    HAL_Delay(200);
}

void controller_selftest(void)
{
    uint8_t test_state;
    tx_packet[0] = 0xFF;
    tx_packet[1] = 0x01;
    while(1)
    {
        test_state = 0;
        //检查惯性导航及环境数据
        if(ins.dt_us > 6000)test_state = 1;
        if(fabs(modulus(ins.acc) - g) > DELTA_a)test_state = 1;
        if(modulus(ins.gyro) > DELTA_g)test_state = 1;
        if(fabs(modulus(esd.mag) - GEOMAG) > DELTA_m)test_state = 1;
        if(esd.t_p_h[2] <= 0)test_state = 1;//这个是防止没刷新到的,只需要再海平面以上工作
        //检查GPS数据
        if(gps.gps_position_state == '0')test_state = 1;
        if(gps.gps_velocity_state == 'N')test_state = 1;
        if(gps.dimension != '3')test_state = 1;
        if(gps.HDOP > 3)test_state = 1;
        if(gps.VDOP > 3)test_state = 1;
        //暂时只需要在北半球,东半球使用
        if(gps.N_S != 'N')test_state = 1;
        if(gps.E_W != 'E')test_state = 1;
        if(test_state == 0 && NRF24L01P_send() == 0)break;
    }
    printf("SELFTEST_PASS\n");
    LED_ON();
}
void controller_record_initial_data(void)
{
    esd.h_0 = esd.t_p_h[2];
    memcpy(gnss.latitude_0, gps.latitude, 12);
    memcpy(gnss.longtitude_0, gps.longitude, 12);
    gnss.altitude_0 = gps.altitude;
}

飞控主板初始化、自检部分,来自Flight_Controler0的controller.c各位可以看看大致的逻辑,以及什么时候发送状态。那些结构体的定义不用管,内容就是字面的,然后想看的翻工程即可。

评论
文号 / 948800

百炼成钢
名片专栏发私信
学术分 0
总主题 15 帖总回复 172 楼拥有证书:进士 机友 笔友
注册于 2020/08/28 12:52:17最后登录 2026/10/30 21:53:39
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:广东

个人简介

辰星引力工作室成员,火箭爱好者,嵌入式爱好者,物理爱好者,还有亚雷斯塔克劳利是我老婆。

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的