串口RS485通信详解

注意:串口发送数据是按位逐个发送的,且在传输字节的过程中是从字节的低位开始发送的。串口的一些内容不再逐一介绍说明,可以参加之前的usb转串口及RS232通信等文章

特性介绍

485(一般称作 RS485/EIA-485)是隶属于 OSI 模型物理层的电气特性规定为 2 线,半双工,多点通信的标准。它的电气特性和 RS-232 大不一样。用缆线两端的电压差值来表示传递信号。值得注意的是:RS485 仅仅规定了接受端和发送端的电气特性,它没有规定或推荐任何数据协议。

RS485接口可以只使用两根线进行通讯(其他串口通讯至少需要三根线,一根为地线作为参考电平),通过差分电平(利用两个信号的差值来判断信息,使用差分信号来传输的,也就是一根线传同相信号,一根线传反相,这样差值最大,抗干扰能力强。)来确定信号是0还是1,也正因为这个原因,所以RS485每次有且仅有一根线能够传输数据,另外一根线作为比对信号,因此RS485是半双工的通讯方式。主要特点如下:

  • 接口电平低,不易损坏芯片。 RS485 的电气特性:逻辑“ 1”以两线间的电压差为+(2~6)V
    表示;逻辑“ 0”以两线间的电压差为-(2~6)V 表示。接口信号电平比 RS232 降低了,
    不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。
  • 传输速率高。 10 米时, RS485 的数据最高传输速率可达 35Mbps,在 1200m 时,传输
    速度可达 100Kbps。
  • 抗干扰能力强。 RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力
    增强,即抗噪声干扰性好。 传输距离远,支持节点多。 RS485 总线最长可以传输 1200m
    以上(速率≤100Kbps)
  • 一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到 128 个或者 256 个节点,
    最大的可以支持到 400 个节点。

Read More

ubuntu关闭笔记本触摸板

ubuntu 16.04的版本中,试过多个笔记本都可以通过键盘的快捷按键关闭触摸板的使用,但仍然显得不够智能,因为缺乏相关的程序和驱动,无法做到自动选择触摸板和鼠标。另外虽然我用的是ubuntu的系统但因为没有使用它的WM所以触摸板无法直接禁用,必须通过手动的方式才可以实现。

本文搜集了一些比较通用的触摸板禁用方式,另外后续如果找到更好的方法,还会补充上来。以下在dell的超极本和msi的游戏本上面实现过,且实验环境是ubuntu 16.04,其他系统和笔记本不能确保一定可以实现。

详细步骤:

方法1:

  • sudo rmmod psmouse 这个是禁用触摸板
  • sudo modprobe psmouse 这个是启用触摸板

方式简单快捷,但是会将触点和触板都禁用了,一般还是希望保持触点是启用的,且仅有启用和禁用的两个功能,每次需要指令才可以实现,无法做到智能识别鼠标自动启用禁用。

Read More

计算机中的通信简介

计算机从最初发展到现在已经有半个多世纪的历史,众所周知其实计算机就是一堆电路的组成,传统最为通用的计算功能仅仅是控制高低电平,输入输出(0和1)。而计算机中的CPU和其他设备如内存,硬盘,主板的其他电路连接过程中,控制的过程就是通过相关的通信协议,让一堆的高低电平输入输出最终可以转化为我们我们工作需要的内容,而赋予这些0,1实际意义的就是通信协议。计算机中有着众多的通信协议,有些协议已经逐渐被淘汰,而另外一些经过这么多年的发展仍然在各行各业经久不衰,一些更新更稳定更满足这个时代需求的协议也正在被越来越多的智能设备移动设备所采纳。本文仅仅是简要的叙述计算机嵌入式中最常用的一些协议。

这边如果对码元,波特率等还不是恨清除的可以参考传输速率这篇文章。

在了解通信协议和传输前,得先弄明白:总线和协议,串行传输和并行传输,同步通信和异步通信,全双工和半双工等基本概念,至于具体的通信方式和协议,这边仅作简述,有单独文章进行具体阐述。

总线和协议

在展开讲解之前,先来区分两个概念:总线和协议。

总线是一组信号线的集合,它定义了各引线的信号、电机、机械特性,使计算机内部各组成部分之间以及不同的计算机之间建立信号联系,进行信息传送和通信,按照作用范围简单来分可以分为内部总线和外部总线。内部总线:就是计算机内部功能模板之间进行通信的总线,它是构成完整的计算机系统的内部信息枢纽,但按功能仍要分为数据总线DB,地址总线AB,控制总线CB,电源总线PB。外部总线是计算机与计算机之间或计算机与其他智能设备之间进行通信的连接。但随着嵌入式不断的发展,现在在两者的区分已经不是那么严格,USB的传输可以认作是外部串行传输方式,而传统所认为是内部穿行传输方式的IIC现在也被一些外接的传感器所使用,因此在嵌入式领域已经无需再纠结是内部总线还是外部总线,毕竟为了满足需求很多原有的协议已经进行的改进使得传输距离更远,抗干扰性更强了,也有更多曾经的内部总线被在外部所使用了。

通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保在通信过程中数据顺利地传送到确定的地方。

因为总线的种类实在太多,各种总线的衍生品层出不穷,这边就不详细列举,以下仅仅将目前嵌入式/微机上面最为常见的通信方式列举出来。

Read More

2016年底计划表

2016转眼又快结束,这个月加上国庆休假一下子又过去了半个多月,直到今天才开始上班。今年除了工作上面的几个项目进一步完善外,这边为16年最后几个月制定一个小计划:

  • 按照自己的风格,为神州王开发板写一套完整的学习案例,并同步到github。
  • 学习研究python,以视频文档和案例学习为主。
  • 装修自己的blog

Read More

Note 7 的一些个人看法

本文是一篇杂谈笔记,一直比较关注科技圈多年,喜欢各种电子产品,且能够DIY或者修理一些小东西,虽然对三星这家公司一直缺乏好感,但还是吐槽一番。

最近闹的比较火的三星Note 7手榴弹事件,终于在这两天落下了帷幕,最终三星将中国市场和海外市场同等对待,停售并回收所有该款机型,无需退还相关赠送配件,允许用户退换或者置换手机,并作出一系列相关补偿。事情看起来似乎是皆大欢喜,恶势力最终向国人低头。

但换而言之,通过三星的一些列举动不得不说是:搬起石头砸自己的脚。首先三星和苹果一直是占据高端手机市场几乎所有份额的,三星早些时候在12年以前可以说是国内最最畅销的手机厂家。原因是:产品线广,覆盖低中高多个销售人群,品牌大众认可度高,国内缺乏有力的竞争对手,那时候小米,华为等也才刚刚起步没多久。三星的衰亡也恰恰因为这些原因,首先,13年以后,国内主打性价比性能的手机层出不穷,而三星天然的重广告轻研发的基因,也让它的中低端机型用户体验奇差无比。国内中低端市场逐渐被国产手机厂家占领,三星从此排名一落千丈,且这几年似乎已经从中国主流消费者眼中销声匿迹了。

Read More

多种电平的区分

电平就是指电路中两点或几点在相同阻抗下电量的相对比值,即电量水平。常用逻辑电平:有TTL、CMOS、LVTTL、ECL、PECL、GTL;RS232、RS422、LVDS等。

TTL电平

TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑”1”,0V等价于逻辑”0”,这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。

TTL集成电路的全名是晶体管-晶体管逻辑集成电路(Transistor-Transistor Logic),按典型电压可分为四类:5V系列(5V TTL和5V CMOS)、3.3V系列,2.5V系列和1.8V系列。

  • 5V TTL和5V CMOS逻辑电平是通用的逻辑电平。
  • 3.3V及以下的逻辑电平被称为低电压逻辑电平,常用的为LVTTL电平。
  • 低电压的逻辑电平还有2.5V和1.8V两种。

Read More

传输速率

数据传输过程中常常会涉及到传输速率,这边详细区分和介绍下波特率和比特率的区别。另一种说法是:在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形就称为码元。码元,承载信息量的基本信号单位。

码元:

书面解释:在数字通信中常常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为(二进制)码元。 而这个间隔被称为码元长度。值得注意的是当码元的离散状态有大于 2 个时(如M大于2个) 时,此时码元为M进制码元。

码元通俗的说就是信号,一个数字脉冲就是一个码元。但事实这种解释不够全面,同一个时间段,信号可以变化3次,也可以变化1次。实际上,正如码元的定义一样,码元是与时间相联系的。这边的时间并不是一个明确的时间,例如:串口通信时,双方约定波特率为 9600(9600bps),则代表一秒钟传输 9600 个位(bit),这时每个码元所在的时间片段就约为1/9600s。再例如:I2C 的传输速率最大为 400Kbps,而 I2C 的通信更加的自由,实际使用过程中,双方并不会事先指定好通信速度,而是采用一根单独的SCL总线来限定通信的速度即码元所间隔的时间,在SDA保持恒定的情况下,SCL总线每次变化电平时的这段时间间隔就作为一个码元所在的时间片段。

通过定义可以看出,通常来所说的码元就是表示二进制码元,当用一个码元传输一个多重含义的数据时,码元还是码元,但我们称其为 M 进制码元。但实际我们也可以设计一个M进制的码元,举个栗子:假如基带信号是 7536154210…..,直接发送,则每个码元作为(八进制)码元传输,这样一个码元相当于8个不同的待识别状态数据。(每个码元有 8 种状态,实际早期为何不使用 10 进制来定义计算机就是因为,一个数据包含的意义越多,越难解析识别,也越容易出错,会增加设计的复杂度,很显然,远距离通讯一般都还是采用二进制码元较多)。而大多数计算机都只能传输2进制数值,假如基带信号是 101011000110111010…..,如果直接发送,则每个码元携带一个比特的信息(每个码元只有 2 种状态),但是如果将信号中的三个比特编为一组,即 101,011,000,110,111,010……,三个比特同样可以表述 8 种不同的排列,我们可以用不同的调制方法来表示这种信,如 8 种不同的振幅,频率,相位等,如果采用相位调制,相位 ϕ0 表示 000,ϕ1 表示 001,以此类推,那么接收端如果收到相位是ϕ0的信号就知道表示的是000,以此类推,这样一个码元就不知不觉的传输了三个比特位的信号(每个码元有 8 种状态,每一个码元可表示的比特数越多,则在接收端进行解调时要正确识别每一种状态就越困难)。

根据上述内容总结:一个以 m 波特传送信号的线路,其传送二进制数据的速率不一定是 m 比特/秒,因为每个信号可以运载几个比特,例如,若使用 0、1、2、3、4、5、6、7 共 8 个电平级,则需要 ,即 3 个比特来表示一个信号值,因而这种条件下比特率将是波特率的3倍。某系统每秒钟传送 2400 个码元,则该系统的传码率为 2400 波特或 2400B。但要注意,码元传输速率仅仅表征单位时间内传送码元的数目,而没有限定这时的码元是何种进制,因统一系统的各点上可能采用不同的进制,故给出码元速率时必须说明码元的进制和该速率在系统中的位置。

常用进制(或键位数)的码元有: 8 进制(也称 8 键制)数字码元键盘,10 进制数字码元键盘,5 进制笔画数字码元键盘,还有 26 进制字母码元键盘,26进制部件字母码元键盘,还有韩文的 28 进制字母码元键盘,俄文的 33 进制字母码元键盘,以及中国维文的 30 进制字母码元键盘等。

Read More

ubuntu下安装搜狗输入法

一个系统输入法很重要,尤其对于中文输入法来说,而国内目前而言,肯定是搜狗的输入法最本土化,制作的也最出众了,主要还是有网络词库的功能,除了无法实现账户登录同步外,其他基本和windows没有任何区别。

搜狗输入法的配置针对不同的系统有时还真有点小麻烦,本来是不打算写这篇文章的,因为之前的几次配置都是轻松的完成了,但这次就花了个吧小时都没搞定,主要原因还是对ubuntu图形界面一些设置位置无法找到,加上搜狗输入依赖诸如fcitx之类的软件并不能即装即用。错误往往出在某一部做的不够完善,下面列举出详细安装配置步骤。

安装步骤

  • 官网下载下来sogou for linux
  • 注意搜狗拼音依赖于fcitx框架,但这边使用的是ubuntu 16.04已经预装了fcitx,如果是更老的版本则需要手动安装fcitx,安装方法
  • 接下来需要选择默认的键盘输入系统,在ubuntu的所有设置(All Settings)中选择语言支持(Language Support)将Keyboard input method system:fcitx。
  • 配置fcitx,可以通过ubuntu的软件直接打开,也可以终端输入运行fcitx-config-gtk3。使用左下角的添加按钮,手动添加sogou输入法,注意:当前输入法如果不是中文,则需要手动将默认勾选的only show current language去掉,然后才可以找出搜狗拼音,同时需要保留一个默认的英文输入法
  • 完成以上步骤后,基本完成了搜狗拼音的安装,已经可以简单的使用了。

Read More

GP22芯片详解

GP22是一款工业计算时间的芯片,由于其精度高在几十ps级别,所以被广泛的应用在气表水表上面。本人由于工作上面的原因,有机会接触到这款芯片,但该芯片的研究学习并不简单,由于有多个寄存器,再加上寄存器的配置复用位数很多,所以注定这款芯片不简单,另外一些模拟数字电路,晶振校准能耗,采样精度等等各种功能很是繁杂,所以可以说这款芯片已经是类似于51单片机这种需要学习研究一下的芯片了。这篇文章将不断地总结记录,在使用这种芯片的重点,已经一些问题的总结。

Read More

(转)机器人工程师学习计划

本文是转载的一篇知乎专栏上的文章,写的相当好。可惜当年上学的时候无人指点,浪费了太多的光影。

1
2
3
4
作者:YY硕
链接:https://zhuanlan.zhihu.com/p/22266788
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

前言

很多朋友私信问我对机器人和人工智能感兴趣,该怎么展开学习。最近稍微有点空,我写写我的看法。

两年前,我在知乎回答如何定义「机器人」? - YY硕的回答中试图给机器人做出一个比较仔细的定义,我觉得机器人和人工智能最大的区别在于是否要和物理世界进行交互。今年初在另一篇知乎回答里对机器人或人工智能的研究会帮助我们更好的了解人类自己吗? - YY硕的回答我说到传感器是和物理世界交互的基础。后来,我又在知乎回答有哪些与控制、机器人等相关的 quotes? - YY硕的回答中提到莫拉维克悖论(Moravec’s paradox),谈到了机器人学里公认的难题是在物理世界中实现类人的活动能力。

把之前的回答再翻出来是为了支持以下观点:机器人学的核心问题是做好和物理世界的交互。现在主流的机器人学分支里,处理与物理世界的交互的学科分为三类:传感器和处理算法(激光雷达,多目视觉,融合算法);多刚体系统动力学控制(工业机器人动力学控制和接触力控制);机器人自主移动(locomotion不知道该怎么翻译,轮式、足式、飞行等移动机器人的研究)。我建议对机器人学有兴趣的同学着重在这几个问题上面。

另外,根据世界第一的机器人教育机构卡耐基梅隆大学的机器人学博士的课程分类方式(http://www.ri.cmu.edu/education/COSAug2016.pdf),机器人学有四个核心领域:

感知。视觉传感器、图像传感器、触觉和力传感器、惯导等。
认知。人工智能、知识表达、规划、任务调度、机器学习等。
行为。运动学、动力学、控制、manipulation和locomotion等。
数学基础。最优估计、微分几何、计算几何、运筹学等。
结合卡耐基梅隆大学的核心课程要求,我觉得我定义的机器人学核心问题算是基本没跑偏的。本文后面谈到的机器人项目都是以上述观点和课程要求为基础。

一些可能有争议性的观点:

  1. 机器人学是富人的活动。虽然工业越来越发达,但好的开发板和电机还是非常贵。如果要下定决心学习机器人学并且做出实物,你必须找到做实物出来的资金。要么是自己花钱,要么就得找学校的机器人社团,或者找什么愿意资助年轻人学习的贵人。另外现在没有任何一本完整的书可以教你怎么造一个四旋翼空中机器人或者大狗机器人,你需要参考十几本不同的教科书,这些书不管中文版还是英文版都很贵。

  2. 机器人学是屠龙之术。这话是Ninebot创始人说的。虽然最近几年,平衡车、扫地机器人、多旋翼飞行器让机器人学开始进入人们的生活,但是可行的商业应用还是很少,而且已有的机器人和理论都还很难解决好与物理世界交互这件事情。所以一定要确保自己在机器人学这个道路上同时练好了能去其他行当吃饭的技能,比如编程、机械设计和硬件设计。也要做好心理准备,接受自己有可能在学会屠龙之术以后几年都造不出对社会有用的东西的事实。

  3. 基于上述所说的观点,如果是已经工作之后才想要学习机器人的话,可能已经太迟了,因为很可能兴趣战胜不了客观限制因素。如果作为兴趣去学习,只能学到做巡线小车和舵机机械臂什么的,可能也满足不了中二病的创造欲。

个人认为机器人学是一个艰苦的道路,想要成为一个独挡一面的机器人工程师需要多年理论和实践的同步训练。理论学习和动手实践的过程还要互相排好时间表,在做某个实践项目的同时去学习最相关理论往往可以达到事半功倍的效果,但是同时那些不太相关的理论会看起来非常枯燥,因此如何妥善安排自己的实践项目也是很重要的事情。

这篇文章里我计划介绍一个电子工程、机械工程和计算机专业学生从大学一年级到研究生二年级的机器人学习计划,基本是我对自己过去学习方式的一个总结。按照这个方法来学习,能够成为一个能力全面,但是稍微偏软件一点的机器人工程师。这个六年的学习计划,估算下来,全年中每天在上课和完成课程要求之外要投入学习时间6-8个小时,这些时间一方面用于阅读课程知识的英文教材,一方面用于阅读其他学科的教材,一方面用于实践项目。

机器人工程师在大型项目里的定位类似于飞机系统里的总体设计师。和机械工程师、硬件工程师、软件工程师、算法工程师、控制工程师比起来,机器人工程师参与某个具体技术的时间较少,但是能够听得懂所有工程师说的话,能够作为不同模块间的协调人,带领整个团队去攻坚。当然如果机器人工程师能够在一个领域达到那个领域的工程师的优秀水平,肯定更好。

由于时间仓促,再加上个人水平有限,文章中如有纰漏和错误,恭请读者指出,谢谢。如果同学还有什么想知道的内容和教材,也欢迎留言交流。

Read More