这个例子展示了如何使用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)的原始数据。
国家海洋电子协会(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句子命名
要运行此示例,您必须拥有以下硬件:
金宝app支持Arduino电路板
GPS天线
USB电缆
连接电线
请注意在你开始这个例子之前,我们建议你完成以下内容:
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屏蔽正在接收卫星信号。信号很容易在视野清晰的地方获得。如果你是第一次使用护盾,护盾可能需要几分钟来获取信号。
介绍配置的操作步骤串行接收
块从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语句进行解码。这个状态图描述了解码算法。
请注意:如果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.点击应用.点击好吧关闭对话框。
在硬件选项卡中的金宝app模式部分中,选择机上运行然后点击监视和优化.当Simulink在硬件上准备、下载和运行模型时,模型窗口的左下角显示状态。金宝app
GPS屏蔽的TX引脚将原始的NMEA句子传输到Arduino硬件的RX1引脚。算法对数据进行解码,并将数据存储在MATLAB Workspace变量中data_rdy,时间,纬度,经度,num_satellite,速度.
请注意:如果在MATLAB Workspace变量中没有接收到数据,验证如下:
GPS屏蔽的TX和RX引脚连接Arduino正常
GPS护盾上的GPS定位LED仍然在发光。
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'显示纬度坐标。
使用相同的模型,修改GPS_Parser源和GPS_Parser包括例如$GPGSV和$GPGLL。
创建一个模型来解码来自其他遵循类似消息格式的传感器的消息。