主要内容

使用Arduino硬件从GPS屏蔽读取串行数据

这个例子展示了如何使用Simulink®Support Pa金宝appckage金宝app for Arduino®Hardware从Arduino硬件上的GPS屏蔽接收串行数据。

金宝app支持的硬件

  • Arduino超级2560

  • Arduino兆理应

  • Arduino由于

  • Arduino达芬奇

  • Arduino MKR1000

  • Arduino MKR WIFI 1010

  • Arduino MKR零

  • Arduino Nano 33物联网

  • Arduino Nano 33 BLE Sense

  • arduino派生的板有多个串行端口

介绍

在这个例子中,Simulink模型金宝app使用Arduino硬件读取串行数据GPS屏蔽使用Arduino硬件在主机上读取和显示GPS数据用于解释如何从Arduino硬件上的GPS屏蔽解码美国国家海洋电子协会(NMEA)的原始数据。

来自GPS屏蔽上的GPS接收器的NMEA数据

国家海洋电子协会(NMEA)格式是定义数据如何在各种海洋电子设备之间传输的规范。GPS接收机是一种船用电子设备,也以NMEA格式传输数据。数据按一个称为a的序列传送句子.每个句子以ASCII字符的形式包含纬度、经度、速度和时间等信息。一个句子最多可以有80个字符。每个句子都是独立于其他句子的。

n mea句子格式

n mea头| |值描述  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ StartChar | | ASCII 36美元SentenceName |例如,GPGGA | n mea句子标识符分隔符| | ASCII为44 Data_1 Data_N |为例,083445.00,1256.60109,N |数据字段,如经纬度CheckChar | * | ASCII for 42 CheckSum |例如:7E |十六进制数,表示$和*之间所有字符的8位exclusive OR | | EndChar | CR |回车

u-blox Neo-6M GPS屏蔽,支持六种类型的NMEA句子:$GPGSV, $金宝appGPGLL, $GPRMC, $GPVTG, $GPGGA,和$GPGSA。这个例子着重于如何从Arduino上的u-blox Neo-6M GPS屏蔽解码$GPGGA和$GPRMC NMEA句子。

$GPGGA NMEA句子命名

$GPRMC NMEA句子命名

所需的硬件

要运行此示例,您必须拥有以下硬件:

步骤1:连接GPS屏蔽,GPS天线和Arduino硬件

请注意在你开始这个例子之前,我们建议你完成以下内容:

1.如图所示,将u-blox NEO-6M GPS屏蔽上的引脚连接到您的Arduino Mega 2560板上的引脚。

u-blox NEO-6M GPS盾销| Arduino兆2560针  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 5 v | 5 v接地|接地Vin | Vin 3 v | 3 v RX(销1)| TX1(销18)TX(销2)| RX1(销19)

请注意:如果您使用的是其他Arduino板,那么Arduino上TX1和RX1引脚对应的引脚号是不一样的。

2.将GPS天线连接到GPS屏蔽。

3.用USB线将Arduino板连接到你的电脑上。

等待GPS屏蔽上的GPS Fix LED开始发光。发光的LED表示GPS屏蔽正在接收卫星信号。信号很容易在视野清晰的地方获得。如果你是第一次使用护盾,护盾可能需要几分钟来获取信号。

步骤2:配置Serial Receive Block

介绍配置的操作步骤串行接收块从GPS屏蔽接收原始的串行NMEA句子。

1.打开使用Arduino硬件从GPS屏蔽读取串行数据模型。此模型被配置为在外部模式下运行。在这个模型中,GPS Shield将数据发送到Arduino硬件的串口1。接收到的数据存储在MATLAB®Workspace变量中。

本例中提供的模型是为Arduino Mega 2560板预先配置的。你可以在任何一块板上运行这些模型金宝app支持的硬件通过改变硬件板参数。金宝app有关如何更改的更多信息硬件板参数,请参阅步骤4:配置Arduino硬件模型这个例子的一部分。

2.双击串行接收阻塞并验证这些参数值。

参数值| |描述  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 端口号| 1 | Arduino的串行端口连接到GPS盾牌。数据类型| uint8 | GPS屏蔽NMEA语句中数据的数据类型。|设置为uint8,因为NMEA语句中的数据是ASCII字符。数据长度| 32 |每个时间步长接收的字节数。采样时间| 0.03 |来自GPS屏蔽的串行数据遵循9600 8N1格式。| |波特率为9600波特率,8数据位(1字节),无奇偶校验,1停止位。| |发送一个字节的串行数据所需的时间是10/9600秒(~1毫秒)。| |因此,发送32字节的数据所需的时间是~32毫秒。因此,将采样时间指定为<= 0.03秒。| |大于0.03秒可能导致数据丢失。

3.点击应用.点击好吧关闭对话框。

串行接收块现在配置为每0.03毫秒从屏蔽读取原始的NMEA句子。当区块从GPS屏蔽接收到32字节的数据时,状态端口输出1,从而使GPGGA_ GPRMC_Parser美元子系统。的GPGGA_ GPRMC_Parser美元子系统包含全球定位系统(GPS)解析器块和解码算法。

第三步:查看解码算法的源代码

查看MATLAB系统目标解码算法源代码:

1.双击全球定位系统(GPS)解析器块。这个块是一个使用MATLAB系统创建的自定义块。

块解码原始的NMEA句子从串行接收块使用解码算法。块输出NMEA语句中的字段,如状态、时间、纬度、经度和速度。

输出时禁用参数外港块,data_rdy时间纬度经度,num_satellite,设置为重置.选择此选项可确保该块只在GPGGA_ GPRMC_Parser美元子系统启用。如果子系统被禁用,块输出0

2.在“块参数”对话框中,单击源代码链接。代码:

一个。指定NMEA语句属性,如StartChar和EndChar。

b。使用GPS_Parser源GPS_Parser包括文件。这些文件的开始部分解释解码算法的实现。该模型利用解码算法对GPS屏蔽中的NMEA语句进行解码。这个状态图描述了解码算法。

第四步:配置Arduino硬件的Si金宝appmulink模型

请注意:如果u-blox Neo-6M GPS护盾通过串口1连接到您的Arduino Mega 2560板,可以跳过本节。

1.要配置模型,单击Simulink工具栏上的模型配置参数按钮。金宝app

2.在“配置参数”对话框中,选择硬件实现

3.硬件板列表,选择您正在使用的Arduino板类型。

4.列表下目标硬件资源中,选择串行端口属性

5.设置GPS屏蔽所连接串口的波特率。在这个例子中串口1波特率参数设置,因为连接GPS屏蔽的TX1和RX1引脚对应Arduino Mega 2650的串口1。

6.请选择与GPS屏蔽波特率一致的波特率。本例中GPS屏蔽的波特率为9600

7.点击应用.点击好吧关闭对话框。

步骤5:在外部模式下运行金宝appSimulink模型(监控和调优)

硬件选项卡中的金宝app模式部分中,选择机上运行然后点击监视和优化.当Simulink在硬件上准备、下载和运行模型时,模型窗口的左下角显示状态。金宝app

GPS屏蔽的TX引脚将原始的NMEA句子传输到Arduino硬件的RX1引脚。算法对数据进行解码,并将数据存储在MATLAB Workspace变量中data_rdy时间纬度经度num_satellite,速度

请注意:如果在MATLAB Workspace变量中没有接收到数据,验证如下:

  • GPS屏蔽的TX和RX引脚连接Arduino正常

  • GPS护盾上的GPS定位LED仍然在发光。

第六步:在Arduino硬件上金宝app部署Simulink模型

1.打开使用Arduino硬件在主机上读取和显示GPS数据模型。在这个模型中,GPS Shield将数据发送到Arduino硬件的串口1。Arduino通过串口0 (USB端口)将数据发送到您的计算机。您可以在计算机的任何串行终端上查看接收到的数据。

本例中提供的模型是为Arduino Mega 2560板预先配置的。你可以在任何一块板上运行这些模型金宝app支持的硬件通过改变硬件板参数。金宝app有关如何更改的更多信息硬件板参数,请参阅第四步:配置Arduino硬件的Si金宝appmulink模型这个例子的一部分。

2.在这个模型中:

一个。双击全球定位系统(GPS)解析器块,并选择要在串行终端上显示的NMEA字段。在这个例子中全球定位系统(GPS)解析器块只译码NMEA语句的纬度字段。

b。双击串行传输阻塞和验证这些参数值:

参数值| |描述  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
发送模式| println |在每个NMEA句子后添加一个回车字符'\r'(ASCII 13)和| |一个换行字符'\n'(ASCII 10)。Label | GPS_latitude |要打印的数据的标签。Format | Decimal |打印数据的格式。精度| 5 |十进制数据格式的精度值。

串行传输子系统只有在状态港口的GPGGA_ GPRMC_Parser美元子系统输出1

3.2 .在“配置参数”对话框中,执行硬件实现>目标硬件资源>>串行端口属性,观察串口0波特率被设置为9600

4.硬件选项卡中的金宝app模式部分中,选择机上运行然后点击构建、部署和启动.当Simulink在硬件上准备、下载和运行模型时,模型窗口的左下角显示状态。金宝app等待模型开始在硬件上运行。

GPS屏蔽的TX引脚将原始的NMEA句子传输到Arduino硬件的RX1引脚。算法解码数据并将数据发送到计算机上的串行终端。

5.打开计算机上的串行终端(例如,Arduino IDE串行监视器)。

登录串口时:

  • 指定与您的串行连接相对应的COM端口号。要了解如何找到COM端口号,请参见手动配置主机和引导程序COM端口

  • 请按照“型号配置参数”对话框中设置的波特率进行设置。在此例中,波特率为9600

登录后,可以看到在串行终端上以标签'GPS_latitude'显示纬度坐标。

其他可以尝试的事情

  • 创建一个模型来解码来自其他遵循类似消息格式的传感器的消息。