当前位置:   article > 正文

基于Matlab仿真ARINC429_arinc429 hi3856

arinc429 hi3856

前言    

        通过对于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.发送字节数据。

部分源码

  1. function [wave] = wave_creat(data,speed_100k);
  2. %UNTITLED Summary of this function goes here
  3. % Detailed explanation goes here
  4. if(speed_100k == 0)
  5. b = zeros(1,100);
  6. for(i = 1:1:32)
  7. if(mod(data,2) == 1)
  8. 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];
  9. end
  10. if(mod(data,2) == 0)
  11. 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];
  12. end
  13. data = fix(data/2) ;
  14. end
  15. end
  16. if(speed_100k == 1)
  17. b = zeros(1,10);
  18. for(i = 1:1:32)
  19. if(mod(data,2) == 1)
  20. a{33-i} = [5 5 0 0];
  21. end
  22. if(mod(data,2) == 0)
  23. a{33-i} = [-5 -5 0 0];
  24. end
  25. data = fix(data/2) ;
  26. end
  27. end
  28. 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];
  29. plot(wave);
  30. [m,n] = size(wave);
  31. axis([0 n -8 8])
  32. end

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/799032
推荐阅读
相关标签
  

闽ICP备14008679号