




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2013.7 多摩川编码器总结一、摘要基于CPLD和DSP实现CPLD与多摩川编码器的通讯,通过对编码器发送请求,得到编码器发回的数据并进行解码,得到绝对位置值。二、学习步骤:1、熟悉工作环境,掌握Modelsim以及Quartus的使用。2、阅读多摩川编码器的通讯协议。3、根据协议编写testbench,并在Modelsim上进行仿真调试。4、仿真通过后,通过Quartus编译后下载到CPLD上并与编码器通讯,实际情况下运行。5、完成各项要求的功能。6、对代码进行优化,尽可能减少资源占用。7、验收。三、总体结构结构分三部分:多摩川编码器,CPLD,DSP。1、编码器跟CPLD之间通过MAX4
2、85电平转换进行连接。2、CPLD与DSP则通过总线进行连接(这一部分结构编写学长已经完成并且提供了端口连接)3、主要工作是CPLD的解码部分。四、通讯协议1、TS5668的技术指标:(物理层)精度:单圈精度: 17位(131 072)多圈精度: 16位(65 536)最高转速/ ( r·min - 1 ): 6 000】输出:差分NRZ编码二进制传输速度/Mbp s: 2. 5发送、接收电路:差分形式通信方式:主从模式接口:3FG,4sig+ ,5sig-,7VCC,8DGND。4和5为差分信号接口。2、通信步骤如下图:(逻辑链路层)1)CPLD向编码器发送一个控制字CF2)3us
3、后编码器返回数据包。3)CPLD对数据包进行解码,并将得到的数据放在总线上,等待DSP获取。具体流程如下图:3、字的结构:下图分别为CF、DF、CRC字的结构。 1)CF 字的开始位为0,再是010的同步位,以及4位的控制位,1位奇偶校验位(对控制位进行奇偶校验),结束位为1,共十位。 通过不同的Data ID code可以实现不同的功能,具体功能如下表:2)SF 该字包含错误信息,如编码错误和通讯警报。通过检测相应位置上的值,就可以确定编码器的工作状态是否正常。 3)CRC 进行CRC校验时,要对所有数据进行校验。计算时除掉每字的起始位和分隔符。4)数据传输正如CF介绍中提到,不同的CF控制
4、命令会对应不同的数据结构传输。主要有三类,而我们用的是Data ID0,绝对数据传输。后面的空格表明没有数据传输。 数据传输中,低位在前,高位在后,每一字都是以0开始以1结束。由于是17位精度编码器,DF2数据位的高7位都是0。五、需求分析 1、启动DSP每隔60us向CPLD发送一个启动脉冲,CPLD捕捉到上升沿后开始向编码器发送CF请求命令。如果CPLD已经处于发送或接受状态,再接收到启动脉冲,不予响应。2、485使能由于CPLD与编码器的通讯需要MAX485进行电平转换,而MAX485是一个半双工器件,因此,需要提供一个端口控制485的使能端,决定485的读写控制。3、频率要求板子上提供
5、10M频率的时钟,而多摩川编码器的通讯协议需要2.5M频率时钟,因此需要分频。4、异常情况分析考虑到传输过程中的异常情况(比如把“0”传输成“1”,或者反之),以及其他可能会出现的错误情况。1)编码器接受到错误的CF,给出了相应的回应。2)编码器接受到错误的CF,没有回应。3)编码器自身出现错误(在SF中会给出错误类型)。5、与DSP的通讯得到绝对位置值之后,需要将读取的结果发送给DSP,而这一过程需要提供一个端口使CPLD与DSP连接。六、整体设计1、流程图基于多摩川编码器的通讯协议以及需求分析,可以做出以下流程图。闲置有启动脉冲无响应或无正确响应发送CF正确完成一周期或错误结束一周期等待响
6、应有正确响应接收数据处理数据2、分配状态根据流程图,可以通过“状态机”来完成各个状态之间的切换,因此,分配状态为:Idle(闲置),Request(请求),Wait(等待),Receive(接收)四个状态。状态机的编写有一段式、两段式和三段式,这里状态比较简单,可以采用结构简单的一段式。(对于复杂的状态机,不推荐使用一段式)具体写法如下:reg1:0 stateparameter Idle = 2'b00,Request = 2'b01,Wait = 2'b10,Receive = 2'b11;case (state)Idle: Request: Wait: R
7、eceive: 3、闲置状态CPLD处于闲置状态,等待DSP发送命令。当DSP发送启动脉冲后,CPLD检测到上升沿,即由闲置状态进入请求状态,同时,为请求状态做好初始化准备。而在其它状态检测到上升沿时,则不予响应。具体代码如下:1)检测启动脉冲always (posedge start or posedge start_fg1)beginif(start = 1)start_fg <= 1'b1;if(start_fg1 = 1)start_fg <= 1'b0;end2)状态更改并为请求状态做好初始化准备Idle:begintxd <= 1;if(start
8、_fg = 1'b1)beginstate <= Request;E_c <= 1;/485使能,1向编码器写数据start_fg1 <= 1'b1;endend4、请求状态CPLD处于请求状态时,每一个时钟周期发送一个高低电平。请求命令为:0010000001。发送结束后,进入等待状态,等待编码器响应。 具体代码如下:Request: beginif(i = 8'd10)/发送结束beginstate <= Wait;start_fg1 <= 1'b0;E_c <= 0;/485使能,0接受编码器数据CF_r <= 1
9、0'd0;txd <= 1;i <= 0;endelsebegintxd <= CF9-i;i <= i+1'b1;endend5、等待状态CPLD处于等待状态时,等待编码器相应。编码器一旦发送低电平过来,为避免传输干扰,设定了一个头部检测。头部检测的方式为,每次左移并接受一个数据,检测开始的头4位,如果头4位正确,则进入到接受状态;如果头4位不正确,则继续左移并接受数据,在指定时间内,如果没有成功接受到数据,则认为这一次通讯失败,并给出错误类型erro <= 2'd3,同时数据位报全1(数据位默认为全1),并且进入到闲置状态,等待下一次的
10、请求命令。在最初设计时,这里加入了一个“超时重发”的功能,即通讯失败后进入请求状态,重新发送请求命令,再次进入到等待状态,并且允许超时重发3次,3次都失败后则执行前面提到的错误处理办法。只是后来由于时间以及资源的闲置,把这一个模块删掉了,如果资源以及时间允许的话,可以考虑加上这一模块。具体代码如下:Wait:begintxd <= 1;E_b <= 1;if(CF_r3:0 = 4'b0010)/头检测begin state <= Receive;i <= 0;CF_r <= (CF_r << 1)|re;i <= 4;endelsebe
11、ginCF_r <= (CF_r << 1)|re;if(i = 4'd14)beginstate <= Idle;erro <= 2'd3;endelsei <= i+1'b1;endend6、接受状态这一状态是编码器的主要工作状态,同时由于接收的信息比较多,也是处理起来比较麻烦的一部分。首先,利用计数器计数10次,读出CF信息,并且保存到CRC_buf里;再次利用计数器计数10次,读出SF信息,也保存在CRC_buf里;再利用计数器计数30次,取出位置信息,这里需注意一点,编码器发回的位置信息是低位在前,高位在后,因此,在接受数据
12、时,需要将其调整一下。最后,利用计数器计数10次,读出CRC的信息。接收完数据后,就进行CRC校验。由于这一部分工作是同组另一位学长完成,这里不做具体阐述。如果CRC校验通过,则输出位置信息;如果CRC校验不通过,则输出错误信息,并且报全1。以上是正常情况,同时还需要对CF进行检查。如果发回的CF与发送出去的CF不同,则出错。出错的话,按照协议,编码器可能会发回一个最长的数据包,与实际情况不符。因此,也算作一种错误。另外,SF的错误信息是编码器自身的错误,根据要求,如果有这种错误的话,需要断电处理。因此,检测到这种错误时,给出错误信息,并不需要额外处理。代码如下:Receive:beginif
13、(i < 9) beginCF_r <= (CF_r << 1)|re;i <= i+1'b1;endelse if(i = 9) /CF检验beginif(CF_r = CF)beginCRC_buf <= CRC_buf|CF_r8:1,40'd0;CF_r <= (CF_r << 1)|re;i <= i+1'b1;endelsebeginstate <= Idle;i <= 0;erro <= 2'd0;endendelse if(i < 19) beginCF_r &l
14、t;= (CF_r << 1)|re;i <= i+1'b1;endelse if(i = 19) beginif(CF_r4 | CF_r3)/检测SF,出错应该断电处理beginerro <= 2'd2;i <= i+1'b1;endelsebeginCRC_buf <= CRC_buf|CF_r8:1,32'd0;DATA1 <= (DATA1 >> 1)|re, 29'd0;i <= i+1'b1;end endelse if(i < 49)begin DATA1 <
15、= (DATA1 >> 1)|re, 29'd0; i <= i+1'b1;endelse if(i < 59)beginCF_r <= (CF_r << 1)|re;i <= i+1'b1;end elsebegin DATA123:0 = DATA128:21,DATA118:11,DATA18:1;for(i=0;i<24;i=i+1)begin CRC_buf31-i=DATA1i;endCRC_buf = CRC_buf|CF_r8:1;for(i=47;i>7;i=i-1'b1)begin
16、CRC_buf47:40=CRC_buf46:40,(CRC_buf47CRC_buf39);CRC_buf39:0=CRC_buf38:0<<1;/shift end if (!CRC_buf47:40)DATA=DATA123:0; state <= Idle;E_b <= 0;i <= 0;endend、错误状况汇总对于运行状态中,可能出现的一些错误情况进行了一些汇总。首先,根据错误的处理方式进行分类。1) 下一周期可以恢复正常的情况:A、 CF错误。返回的CF与发送的CF不相同,此时按照程序逻辑继续运行。B、 通讯失败。CPLD发送请求命令后,编码器没有相应。C、 CRC错误。CRC校验不通过,此时按照程序逻辑继续运行。2) 下一周期不能恢复,需要断电处理:SF错误。、代码优化经验积累代码在实现了预定功能之后,需要的就是资源优化了。在网上搜
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年销售工作计划方案
- 2025年电子测量器项目可行性研究报告
- 2023年四川单招语文试卷作文
- 2025年电动干油泵项目可行性研究报告
- 2025年生物氨硝净项目可行性研究报告
- 资阳口腔职业学院《地下空间规划与设计》2023-2024学年第一学期期末试卷
- 吉林工业职业技术学院《医学微生物学》2023-2024学年第一学期期末试卷
- 上海第二工业大学《电视节目策划与传播》2023-2024学年第二学期期末试卷
- 山东农业工程学院《大学英语初级II》2023-2024学年第二学期期末试卷
- 三门峡社会管理职业学院《数字电子技术基础》2023-2024学年第二学期期末试卷
- 安全安全技术交底模板
- 部编版五年级下册语文期中试卷(含答案)
- 中职教育基础模板课件《集合的概念 》
- 2024年中考地理二轮复习:地理实践与跨学科主题学习(测试)(原卷版)
- 2024年中国成人心肌炎临床诊断与治疗指南解读课件
- 高中化学校本课程
- 日本旅游合同范本
- 【矩阵正定的若干判定方法探究4000字(论文)】
- 中国脑卒中防治指导规范(2021 年版)
- 江苏省常州市溧阳市2022-2023学年二年级下学期期中数学试卷
- JCT 2126.6-2012 水泥制品工艺技术规程 第6部分:先张法预应力混凝土管桩
评论
0/150
提交评论