基于Matlab仿真ARINC429

本文介绍了使用Matlab进行ARINC429协议的仿真,包括发送和接收协议的规定,以及如何根据协议模拟波形显示、速率控制和数据填充。通过示例展示了ARINC429格式的详细内容,并提供了部分源码供读者参考。
摘要由CSDN通过智能技术生成

前言    

        通过对于ARINC429的了解,发现一个问题即每个用户对于ARINC429理解并不一致,每个公司对于ARINC429的规范并不一致,每个圈子对于ARINC429的规定也不一致,有的同学会问不就是32BIT数据吗?还能玩出什么花活来,还别说,真让他们玩出花活来了。为了方便大家理解写了一个简单的程序。

正文

        前期对于我们自己设计的ARINC429转USB产品板的功能规定如下:


表1:发送协议

序号

字节

说明

1

0xAA

固定字节1

2

0x55

固定字节2

3

0xYX

X:ARINC429发送源(SDI):1bit~0bit

Y:ARINC429发送校验位(P):0x0:表示FPGA自动算;0x3:表示校验位写1;0x1:表示校验位写0.

4

0xXX

ARINC429发送数据20bit~16bit

5

0xXX

ARINC429发送15bit~8bit

6

0xXX

ARINC429发送7bit~0bit

7

0xXX

ARINC429发送label

8

0x00

固定字节3

        

表 2  接收数据协议

序号

名称

描述

1

DAT1

7:校验位;6~5:SDI;4~0:ARINC429数据[21:16]

2

DAT2

7~0:ARINC429数据[15:8]

3

DAT3

7~0:ARINC429数据[7:0]

4

DAT4

7~0:LABLE数据

根据上协议,模拟仿真如下:

 如上图所示,将界面分为三个区域,分别是1,2,3,对应着波形显示、速率控制和数据填充:。

区域1

        波形对应ARINC429定义如下:

表 3 ARINC429格式说明

End

30

29

28

27

26

25

24

校验位

SSM

DATA(MSB:28)

23

22

21

20

19

18

17

16

DATA

15

14

13

12

11

10

9

8

DATA(LSB:10)

SDI

7

6

5

4

3

2

1

Start

LABEL(MSB:1 ->LSB:8)

实际示波器对比:

 

        

区域3

值得详细说明的是区域3模块,上面HEX为ARINC429转USB接收数据显示(0xC2040202)即区域3.接收字节,下面HEX为ARINC429转USB发送字节(0xAA55020204020200)即区域3.发送字节,当根据协议填充发送字节并点击对应右侧波形生成后,区域3.接收字节会自动填写接收数据,且在区域1中,绘制波形;当填充接收字节,同样可以在区域1内绘制波形,但不会填充区域3.发送字节数据。

部分源码

function [wave] = wave_creat(data,speed_100k);
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here

    if(speed_100k == 0)
        b = zeros(1,100); 
        for(i = 1:1:32)
            if(mod(data,2) == 1)
                a{33-i} = [5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
            end
            if(mod(data,2) == 0)
                a{33-i} = [-5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];                
            end
            data = fix(data/2) ;
        end
    end
     if(speed_100k == 1)
        b = zeros(1,10); 
        for(i = 1:1:32)
            if(mod(data,2) == 1)
                a{33-i} = [5 5 0 0];
            end
            if(mod(data,2) == 0)
                a{33-i} = [-5 -5 0 0];                
            end
            data = fix(data/2) ;
        end
     end
    wave = [b,a{1},a{2},a{3},a{4},a{5},a{6},a{7},a{8},a{9},a{10},a{11},a{12},a{13},a{14},a{15},a{16},a{17},a{18},a{19},a{20},a{21},a{22},a{23},a{24},a{25},a{26},a{27},a{28},a{29},a{30},a{31},a{32},b];
    plot(wave);
    [m,n] = size(wave);
    axis([0 n -8 8])
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eidolon_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值