锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

嵌入式开发板RS485协议串口编程——角度传感器数据读取

时间:2022-08-29 04:30:01 嵌入式传感器节点双磁场传感器

嵌入式开发板RS485协议串口编程-倾角传感器数据读取

基于嵌入式操作系统开发板的串口编程-光敏电阻数据读取TTL本节主要以协议串口编程为基础RS485协议的串口编程掌握了这两种嵌入式开发板的串口编程方法,基本掌握了嵌入式开发板中大多数传感器的数据读取。

RS485通信协议

RS与串行通信协议相比,485通信协议是一种串行通信协议RS232通信协议通信距离短低,RS485传输距离较长,最高传输速率可达10Mbit/s。RS485通信协议采用半双工作模式,只能处于发送状态。因此,在程序或电路设计中应有一个切换发送状态和接收状态的标志。我将在程序中介绍程序中的标志位置。电路中的标志位如下:

D28674C9-FFBF-4cc7-96D4-C0EA3B177EA4

与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)

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章