嵌入式开发板RS485协议串口编程——角度传感器数据读取
时间:2022-08-29 04:30:01
嵌入式开发板RS485协议串口编程-倾角传感器数据读取
基于嵌入式操作系统开发板的串口编程-光敏电阻数据读取TTL本节主要以协议串口编程为基础RS485协议的串口编程掌握了这两种嵌入式开发板的串口编程方法,基本掌握了嵌入式开发板中大多数传感器的数据读取。
RS485通信协议
RS与串行通信协议相比,485通信协议是一种串行通信协议RS232通信协议通信距离短低,RS485传输距离较长,最高传输速率可达10Mbit/s。RS485通信协议采用半双工作模式,只能处于发送状态。因此,在程序或电路设计中应有一个切换发送状态和接收状态的标志。我将在程序中介绍程序中的标志位置。电路中的标志位如下:
与RS还有不同的232,RS485的工作模式是差异化工作模式。所谓差异化工作模式,是指在一堆双绞线中定义为A,一条定义为B。通常,发送驱动器A、B正电平在之间 2 6V,负电平为-2-6V,是另一种逻辑状态(和和RS232是相反的),另一个引脚信号接地。
倾角传感器RS485通信协议
我用的是维特智能的倾角传感器——SINDT-RS485.具体描述可参考其使用说明书,这里就不赘述了。
其工作电压和线色的定义如下:
可以通过上述已知条件和嵌入式开发板获得RS连接485串口的方式:
我们的目的是实时读取倾角传感器X、Y、Z轴的角度信息。通过阅读说明书,我们需要向倾角传感器发送角度信号指令,然后将实时检测数据发送给倾角传感器。角度信号指令如下:
其中MODADDR倾角传感器地址0x50。倾角传感器上传回来的数据格式如下:
有了以上信息,我们就可以开始编程了!
嵌入式开发板RS485串口编程
首先是打开RS设备节点485串:
int open_port(char *com) { int fd; fd = open(com, O_RDWR|O_NOCTTY); if (-1 == fd){ return(-1); } if(fcntl(fd, F_SETFL, 0)<0) /* 将串口设置为堵塞状态*/ { printf("fcntl failed!\n"); return -1; } return fd; }
之后,设置波特率、数据位、停止位、奇偶校准位等。我之前已经在嵌入式操作系统开发板串口编程-光敏电阻数据读取中粘贴了初始化程序,这里我就重复一下。
然后向倾角传感器发送角度信号指令,我把指令放在字符数组中:
static char byteSend[8]; byteSend[0] = 0x50; byteSend[1] = 0x03; byteSend[2] = 0x00;//寄存器高位 byteSend[3] = 0x3d;//低位寄存器 //角度寄存器 byteSend[4] = 0x00;//寄存器数量高 byteSend[5] = 0x03.//寄存器数量低 byteSend[6] = 0x99;//CRCH byteSend[7] = 0x86;//CRC
将指令发送到主程序中,并设置标志位,发送后读取角度信息:
int main(int argc, char **argv) { int fd; int iRet; fd = open_port(argv[1]); serial_uart_init(fd); char context; int i = 0; int j = 0; int flag = 0; char r_buf[10]; char readtext; while (1) { while(flag == 0){ if(i > 7){ flag = 1; i = 0; break; } context = byteSend[i]; iRet = write(fd, &context, sizeof(context)); i ; } usleep(50000); bzero(r_buf, 10); while(flag == 1){ //阅读传感器发送的数据,并解析处理 if(j > 9){ flag = 0; j = 0; break; } iRet = read(fd, &readtext, sizeof(readtext)); r_buf[j] = readtext; //printf("read:x\n", r_buf[j]); j ; } usleep(50000); if(r_buf[0] == 0x50 && r_buf[1] == 0x03){ printf("AngleX:%7.3f, AngleY:%7.3f, AngleZ:%7.3f\n", ((float)((r_buf[3]<<8) | r_buf[4])/32768.0*180),((float)((r_buf[5]<<8) | r_buf[6])/32768.0*180),((float)((r_buf[7]<<8) | r_buf[8])/32768.0*180)); } } return 0; }
程序已经在这里完成。
在Ubuntu交叉编译工具编译程序:
将倾角传感器按上述连接方式连接到开发板上,即可操作程序,结果如下:
到这里就成功实现了读取倾角传感器的角度信息啦,还可以读取加速度,磁场等等信息。
在嵌入式开发过程中,仅仅掌握串口编程是不够的。下一节我将介绍嵌入式开发板CAN使用通信编程实例CAN通信驱动伺服电机。掌握串口编程和CAN通信编程,你就可以完成一些具体的嵌入式开发的项目啦。
我会在微信官方账号贴完整代码,需要关注微信官方账号回复。RS获取485串口编程。如果您有任何问题,也可以在下面留言。我看到后会回复你。
我是河边爬乌龟的小学生,在学习嵌入式软件开发的路上。欢迎大家互相交流。微信官方账号:河边爬乌龟。
(群名:嵌入式软件开发交流群;群 号:1004953094)