logo资料库

关于云台控制及pelco-d pelco-p及串口通信.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
RS485/云台控制(PTZ)学习文档 zxf 一.项目任务: 在 linux 环境下通过 RS485 串口实现对云台镜头的各种控制(包 括摄像头的打开,关闭,各个方向的运动及运动速度,预设点,自动 扫描,变倍,调焦,光圈,视角宽窄等等的各项控制)。 二.学习步骤 1.验证串口,云台等硬件 考 虑 先 在 windows 环 境 下 运 行 串 口 调 试 精 灵 等 软 件 , 采 用 RS232-RS485 的接口转换器将 PC 机与云台相连,通过串口调试精灵 向云台发送命令(根据具体云台所采用的协议 pelco-d 或是 pelco-p), 验证云台能否正常工作,以保证后续工作顺利进行。 2.熟悉 linux 下的串口编程 串口是电脑上一种很通用设备通信的协议,常用 PC 机上包含的 是 RS232 规格的串口,当然,除了 RS232 ,还有 RS485 和 RS422
两种规格,用于不同的设备通信;linux 环境下万物皆文件,都是文 档,串口是设备文档,配置好后,其他东西就当成文档进行操作。 串口编程中比较重要的是串口的设置,需要配置的部分包括波特 率,数据位,停止位,奇偶校验等。关于 linux 下串口设置的例子和 程序网上有很多,而且基本上内容大同小异。 可以采用如下方法来验证自己在 linux 下的串口程序:准备 PC 机 两台(一台装 Linux 系统,另一台装 windows 即可),用串口线分别 和两台计算机的串口相连,在 windows 机下运行串口调试软件,并打 开 com1(linux 下对应串口 ttyS0)等待操作。在 linux 机下运行自己 的串口程序,注意打开的串口和波特率,校验位等设置要和 windows 机一致,可以将自己的串口程序运行在接收数据状态,并打印信息, 在 windows 机下用串口调试精灵发送数据,验证在 linux 机下接受是 否正确,同样可以验证发送数据是否正确。 关于串口设置程序: 1. 配置波特率:注意每台机器都有输出输入接收信息的速度, 所以用 cfsetispeed 和 cfsetospeed 来分别设置。Linux 串口设 置过程中有一个非常重要的结构体 struct termios ,它包括了 串口端的任何配置,在 termios.h 中被定义。系统为波特率专 门准备了一张表用 B38400,B19200…代替。实际上传出的是 38400 和 19200 这些值。函数原型:Void set_speed(int fd,int speed). 2. 配置奇偶校验,数据,停止位。
这三个参数通常放在一起配置,databits 是数据位,stopbits 是停止位,parity 是校验位。Termios 成员中共定义 c_cflag 控制项 c_lflag 线路项 c_iflag 输入项 c_oflag 输出项 c_cc 控制字符 c_ispeed 输入波特 c_ospeed 输出波特 那么多项,对于每一项都有很多的配置,比较复杂,但就一个 通用的串口框架,主要进行奇偶校验,数据,停止位的配置。 而其他的一些控制项。函数原型: int set_Parity(int fd,int databits,int stopbits,int parity) 3. 配置好串口后,就可以打开串口,并不断的从串口读数据, 并打印出这些数据进行验证自己的程序。此部分 Down 了个 串口程序来熟悉 linux 下的串口编程。 三.云台控制协议 pelco-D/P 云台有水平云台,旋转云台和万向云台等多种类型,水平云台 和旋转云台的运动速度是恒定的。只有上下左右四个方向,每个 方向都有一个限位开头,因而每一方向行程的距离固定,而万向 云台运动速度是可变的,且运动方向是任意,控制比较复杂。对 与云台的工作原理和电路进行了基本了解,由于实际应用时只需 通过串口向云台发送其能识别的命令来完成相应的控制即可。云 台测的东西没有进一步的深入了解。 云台控制系统设计时要选协议,每个云台都有协议可以选择, 要么自动识别,要么通过拨码开关来选择。具体要看设备说明书。 每个厂家的拨码方式不一样。协议选好后,就可以向云台发送命
令控制云台,控制云台时发送一个指令,都要在发送一个停止指 令,否则云台将一直执行那一操作。查资料发现大多数云台都支 持 pelco-D 和 pelco-P 协议。目前这两个协议也有很多版本,大多 是扩充。 PELCO-D: 数据格式:1 位起始位、8 位数据、1 位停止位,无效验位。波特 率:2400B/S 命令格式: 1.该协议中所有数值都为十六进制数 2.同步字节始终为 FFH 3.地址码为摄像机的逻辑地址号,地址范围:00H–FFH 可以 在设备中设置。 4.指令码表示不同的动作 5.数据码 1、2 分别表示水平、垂直方向速度(00-3FH),FFH 表示“turbo”速度 6.校验码 = MOD[(字节 2 + 字节 3 + 字节 4 + 字节 5 + 字 节 6)/100H] 命令字 1 和命令字 2 设置如下:
Sence 码与 Bit4 和 Bit3 有关。在 Bit4 和 Bit3 为 1 的情况下, 如果 Sence 码为 1,则命令就是自动扫描和和摄像机打开;如果 Sence 码为 0,则命令就是手动扫描和摄像机关闭。当然如果 Bit4 或 Bit3 为 0 的话那命令就无效了。 数据 1 表示镜头左右平移的速度,数值从$00(停止)到$3F(高 速),另外还有一个值是$FF,表示最高速。 数据 2 表示镜头上下移动的速度,数值从$00(停止)到$3F(最高 速)。 校验码是指 Byte2 到 Byte6 这 5 个数的和(若超过 255 则除以 256 然后取余数)。 Pelco-D 的命令码和数据码的参考命令:
以地址码 0x01 为例的部分指令: {0xff,0x01,0x00,0x08,0x00,0xff,0x08,}//上 {0xff,0x01,0x00,0x10,0x00,0xff,0x10,}//下 {0xff,0x01,0x00,0x04,0xff,0x00,0x04,}//左 {0xff,0x01,0x00,0x02,0xff,0x00,0x02,}//右 {0xff,0x01,0x00,0x20,0x00,0x00,0x21,}//变倍短 {0xff,0x01,0x00,0x40,0x00,0x00,0x41,}//变倍长 {0xff,0x01,0x00,0x80,0x00,0x00,0x81,}//聚焦近 {0xff,0x01,0x01,0x00,0x00,0x00,0x02,}//聚焦远 {0xff,0x01,0x02,0x00,0x00,0x00,0x03,}//光圈小 {0xff,0x01,0x04,0x00,0x00,0x00,0x05,}//光圈大 {0xff,0x01,0x00,0x0b,0x00,0x01,0x0d,}//灯光关
{0xff,0x01,0x00,0x09,0x00,0x01,0x0b,}//灯光开 {0xff,0x01,0x00,0x07,0x00,0x01,0x09,}//转至预置点 001 {0xff,0x01,0x00,0x03,0x00,0x01,0x05,}//设置预置点 001 {0xff,0x01,0x00,0x05,0x00,0x01,0x07,}//删除预置点 001 以上对应的停命令均是: {0xff,0x01,0x00,0x00,0x00,0x00,0x01,}//停命令 Pelco-P: PELCO-P 协议一般采用 RS-485 传输,波特率为 4800, 1 位起始位和停止位,8 位数据位,无校验位。格式: 起始码是固定值$A0。地址码是设备的逻辑地址,可由接收设备上的 DIP 开关 来设定????。 数据位 1-4 意义: 停止码是固定值 $AF 。校验码是 Byte2 到 Byte6 这 5 个数的异或
值(XOR)。地址码是从 0 编起的,所以地址码$00 表示第一台设备。 以地址码 0x01 为例: {0xa0,0x01,0x00,0x08,0x00,0x30,0xaf,0x39,}//上 {0xa0,0x01,0x00,0x10,0x00,0x30,0xaf,0x21,}//下 {0xa0,0x01,0x00,0x04,0x10,0x00,0xaf,0x15,}//左 {0xa0,0x01,0x00,0x02,0x10,0x00,0xaf,0x13,}//右 {0xa0,0x01,0x00,0x40,0x00,0x00,0xaf,0x41,}//变倍短 {0xa0,0x01,0x00,0x20,0x00,0x00,0xaf,0x21,}//变倍长 {0xa0,0x01,0x02,0x00,0x00,0x00,0xaf,0x03,}//聚焦近 {0xa0,0x01,0x01,0x00,0x00,0x00,0xaf,0x00,}//聚焦远 {0xa0,0x01,0x08,0x00,0x00,0x00,0xaf,0x09,}//光圈小 {0xa0,0x01,0x04,0x00,0x00,0x00,0xaf,0x05,}//光圈大 无命令字发送//灯光关 无命令字发送//灯光开 {0xa0,0x01,0x00,0x96,0x00,0x20,0xaf,0xb7,}//自动巡航 {0xa0,0x01,0x00,0x99,0x00,0x20,0xaf,0xb8,}//关闭自动巡航 {0xa0,0x01,0x00,0x07,0x00,0x01,0xaf,0x07,}//转至预置点 001 {0xa0,0x01,0x00,0x03,0x00,0x01,0xaf,0x03,}//设置预置点 001 {0xa0,0x01,0x00,0x05,0x00,0x01,0xaf,0x01,}//删除预置点 001 以上对应的停命令均是(上下左右、变倍、聚焦、光圈均有 停命令): {0xa0,0x01,0x00,0x00,0x00,0x00,0xaf,0x01,}
分享到:
收藏