本帖最后由 damiaa 于 2021-2-10 12:07 编辑
【测评SGP40】+UART通信测试传感器
1), SEK-SVM40支持I2C和UART通信。Sensirion_Gas_Sensors_SEK-SVM40_Technical_Description_D1手册里有详细的介绍。
Sensirion_Gas_Sensors_SEK-SVM40_Technical_Description_D1.pdf
(497.35 KB, 下载次数: 5)
硬件接口连线如下:
1,2电源电压,3,4,I2C和uart共享,5选择I2C 还是uart 接GND为i2C,悬空或者接VCC为uart。
2),有一些代码,有支持arduino的,有嵌入式的。但arduino的好像用到了serial1,因为stm32的板子跑arduino 不知道怎么整除serial1。因此作罢。
就用at32F407的uart口吧。也很好的。下篇里面仔细介绍。现在先把uart的通信搞明白。
Sensirion_Gas_Sensors_SEK-SVM40_UART_Interface_Description_D1手册对串口通信说得很明白。
Sensirion_Gas_Sensors_SEK-SVM40_UART_Interface_Description_D1.pdf
(285.59 KB, 下载次数: 4)
3),根据Sensirion_Gas_Sensors_SEK-SVM40_UART_Interface_Description_D1介绍,物理层通信串口通信参数uart 115200 n,8,1。
SHDLC Frame Layer层采用一套简易的SHDLC包裹I2C的MISO MOSI。
4),具体实现看UART Commands
有13个命令。 按资料介绍。只要把串口接好。发送命令就会有回传结果。
5),下面准备一个uart-ttl的工具,这里采用ch340.
准备串口通信助手 也可以直接用官方的哪个uart-ttl +串口通信助手
连接svm40到uart-ttl 注意 VCC GDD TX RX 四根,svm40的TX接uart-ttl RX svm40的RX接uart-ttl TX !
接好后插到电脑
查看一下串口
打开串口调试助手 设置串口通信参数 115200 n,8,1
把命令都加进去。打开串口,就可以实验了。
6,通信时发现有些命令是关联的,比如,如果模块处于复位状态。或者按svm40_device_reset后
svm40_get_signals读命令就不能正确执行。要先发送启动测量命令svm40_start_measurement
7,具体数据分析。
1,svm40_start_measurement 开启测量
2,svm40_get_signals
3,svm40_get_raw_signals
4,svm40_stop_measurement 关闭测量
5,svm40_get_temperature_offset
6,svm40_set_temperature_offset
7,svm40_get_voc_parameters
8,svm40_set_voc_parameters
9,svm40_store_input_parameters
10,svm40_get_voc_states
11,svm40_set_voc_states
12,svm40_get_version 版本号获取
13,svm40_device_reset 模块复位
13个命令里面除了6,8,11命令带参数外,其他都是固定一个命令,资料里有说,看MOSI Data Byte number Description
因此实验是很方便的,直接送手册里面数据就OK,6,8,11倒是要计算一下。
1,4,是开启关闭测量,12,版本号获取,13,模块复位。
2,获得测量值。
3,svm40_get_raw_signals
0, 1 int16 provides the VOC Index (no unit) with a scaling factor of 10, e.g., an output of +250
corresponds to a VOC Index of +25.0.
2, 3 int16 provides the relative humidity (in % RH) compensated for the temperature offset with a
scaling factor of 100, e.g., an output of +2’500 corresponds to +25.00 % RH.
4, 5 int16 provides the temperature (in °C) with a scaling factor of 200, e.g., an output of +5’000
corresponds to +25.00 °C.
命令 7E 00 03 01 0A F1 7E
应答 7E 00 03 00 06 00 00 20 1C 09 81 30 7E
VOC 0000 ==> 0
RH 201C ==> 8220 82.20%
TEMPERATURE 0981 ==> 2433 12.165°C
再用官方的串口工具和官方uart-ttl读一下比较
数值是81.09% 12.275°C 因为温湿度是动态变化的,所以值是对得上的。
数值是0
5,svm40_get_temperature_offset
6,svm40_set_temperature_offset
7,svm40_get_voc_parameters
8,svm40_set_voc_parameters
9,svm40_store_input_parameters
10,svm40_get_voc_states
11,svm40_set_voc_states
准备了一块板子,串口调试好了,下一步准备把模块加上试试。
|