一款5.8G雷达传感器模块,发射和接收高频电磁波,通过多普勒原理检测发射与接收信号的频差,可用于判断区域内是否存在移动物体。
模组概述:
模组资料包:AT5815.zip
模组资料包已提供了示例代码,使用GPIO模拟I2C,只需要配置对应的GPIO和延时函数即可,以下是一份在Hi3861L上调试通过的代码:
#define SDA_IO_IDX HI_GPIO_IDX_10 #define SCL_IO_IDX HI_GPIO_IDX_14 #define IIC_SCL_OUT(x) hi_gpio_set_output_val(SCL_IO_IDX, !!(x)) #define IIC_SDA_OUT(x) hi_gpio_set_output_val(SDA_IO_IDX, !!(x)) #define IIC_SCL_IN ({hi_gpio_value value; hi_gpio_get_input_val(SCL_IO_IDX, &value); value;}) #define IIC_SDA_IN ({hi_gpio_value value; hi_gpio_get_input_val(SDA_IO_IDX, &value); value;}) #define SDA_OUT do{hi_gpio_set_dir(SDA_IO_IDX, HI_GPIO_DIR_OUT);}while(0) #define SDA_IN do{hi_gpio_set_dir(SDA_IO_IDX, HI_GPIO_DIR_IN); hi_io_set_pull(SDA_IO_IDX, HI_IO_PULL_UP);}while(0) #define SCL_OUT do{hi_gpio_set_dir(SCL_IO_IDX, HI_GPIO_DIR_OUT);}while(0) #define SCL_IN do{hi_gpio_set_dir(SCL_IO_IDX, HI_GPIO_DIR_IN); hi_io_set_pull(SCL_IO_IDX, HI_IO_PULL_UP);}while(0) static void DelayUs(unsigned char Time) { hi_udelay(Time * 2); } static void DelayMs(unsigned char Time) { hi_sleep(Time); } static void DelayS(unsigned char Time) { hi_sleep(Time * 1000); } |
在适配Demo代码后,剩下的工作就是调整模块的寄存器参数,以适配不同的触发时间和触发距离,可供调整的寄存器参数有以下几个:
以下是根据实测整理出来的一份针对触发时间分别为1秒、5秒、10秒,触发距离分别为0.5米、1米、2米、3米的参数表格:
1秒 | 5秒 | 10秒 | ||||||||||
delta | gain | winlen | winthr | delta | gain | winlen | winthr | delta | gain | winlen | winthr | |
0.5米 | 200 | 0x7b | 4 | 3 | 190 | 0x7b | 4 | 2 | 200 | 0x7b | 4 | 1 |
1米 | 120 | 0x6b | 4 | 3 | 120 | 0x6b | 4 | 2 | 130 | 0x6b | 4 | 1 |
2米 | 140 | 0x4b | 4 | 3 | 130 | 0x4b | 4 | 2 | 130 | 0x3b | 4 | 1 |
3米 | 90 | 0x3b | 4 | 3 | 90 | 0x3b | 4 | 1 | 90 | 0x3b | 4 | 1 |