远程控制系统的设计与实现 实验报告

上传人:壹****1 文档编号:562920410 上传时间:2022-08-14 格式:DOCX 页数:7 大小:135.92KB
返回 下载 相关 举报
远程控制系统的设计与实现 实验报告_第1页
第1页 / 共7页
远程控制系统的设计与实现 实验报告_第2页
第2页 / 共7页
远程控制系统的设计与实现 实验报告_第3页
第3页 / 共7页
远程控制系统的设计与实现 实验报告_第4页
第4页 / 共7页
远程控制系统的设计与实现 实验报告_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《远程控制系统的设计与实现 实验报告》由会员分享,可在线阅读,更多相关《远程控制系统的设计与实现 实验报告(7页珍藏版)》请在金锄头文库上搜索。

1、EDA 实验二实验报告一、工作原理介绍计算机和外部设备之间进行信息的交换称为通信,其基本方式可分为并行通信和串行通 信。串行通信的收发各方需协调工作,这种协调从原理上可分为同步和异步。在异步串行通信中,双方为了保证通信正确必须事先对传送速率、传送步骤、数据格式 和出错检验方式等作出约定。由于通信双方使用各自的时钟,且传送的信息是随机出现在数 据流中的,所以为每一个字节独立的设置起始位和结束位,即每传送一个字节都要建立一次 同步。异步串行通信一般按帧传输,帧与帧之间可能有任意个空闲位。一帧数据包括起始位、 数据位、奇偶校验位和停止位。传送开始前,线路处于空闲状态,线路上送出连续的“1”。 开始时

2、首先发一个“0”作为起始位,然后在线路上出现的是字节的二进制编码数据,一般 采用ASCII编码。然后是奇偶校验位,最后是停止位“1”,可以按照约定持续1位或者2位 时间宽度。由于异步串行通信按位收发,因此它的传送速率用每秒钟传输数据的位数来表示,称之 为波特率,每一位数据占据的时间宽度为波特率的倒数。在接收数据时,为了正确地收到各 位,需要用一个远高于波特率的时钟信号对PC发来的串行信号不断地采用。接收时钟一般 设为波特率的n倍,n称为波特率因子,可以取值16、32、64等。二、实验设计思路和仿真验证1、串口发送、接收模块的状态转换图状态转换图由Quartus软件的State Machine

3、Viewer给出:发送模块:接收模块:对于发送模块,图中的状态从左到右分别为SO、S10、S1S9。SO为待命状态,输出高电平 作为空闲位,当按下等号时跳到S10,并对储存在移位寄存器中的数据进行适当的移位,以 便输出没有多余的零的数据。移位后,状态跳到S1,并输出低电平作为起始位,且状态开 始以发送数据的频率(波特率)跳转,从S2跳到S9,以输出8位数据位,再跳回SO并输 出高电平作为停止位。此后的状态跳转都不经过S10,到重新发送数据时才经过S10。对于接收模块,S0也为待命状态,当输入信号变为低电平时,在8个时钟周期内(频率为 波特率的16倍),若输入信号一直为低电平,则状态跳到S1,等

4、16个时钟采样一次并跳 到下一状态,直到状态为S9时输出显示得到的数据,再等8个时钟后回到状态S0。S10是 为清零专门设置的一个状态。2、串口发送、接收模块的仿真波形图发送模块的仿真波形图:多字节:单字节:innnhmmn_lOoaooooac000000:1)t3oaoo:ioac010000:1Ln_rl H输入的数据为8、 4、 2、 1,由图可见,多字节发送时,信号按8、 4、 2、 1的顺序从低位到 高位输出它们相应的ASCII码,分别为00111000、00110100、00110010、00110001。单字节 发送时,信号只输出了数字1的ASCII码。接收模块的仿真波形图多字

5、节:为了能在一次仿真中得到接收多字节、单字节两种情况的波形图,在接收多字节数据后进行了清零(reset=1时清零)。清零之前,由光标所在处的SR值(0000|0001|1001|1000)可知接收 得到的数据为198。单字节:清零后,接收到的数据为9。3、串口发送、接收模块的控制逻辑(1) 发送模块的多字节连续发送 发送模块的状态描述如下: always (posedge clk)begincase (state)S0:beginif (count=0) z=all;else z=z;if (Eq=1)if (count=0) state=S10;else if (countNum) stat

6、e=S1;else state=S0;else state=S0;if (Eq=0) count=0;else count=count;endS1:begin x=z4*N-1:4*N-4;state=S2;end S2:begin z4*N-1:4=z4*N-5:0;state=S3;endS3:state=S4;S4:state=S5;S5:state=S6;S6:state=S7;S7:state=S8;S8:state=S9;S9:beginstate=S0;count=count+1b1;endS10:beginif (cntN-Num)beginz4*N-1:4=z4*N-5:0;

7、cnt=cnt+1b1; state=state;endelsebeginstate=S1;cnt=0;endendendcaseend其中,all是在键盘上输入的数据或串口调试助手发送给实验板的数据,Eq在按下等号键后 变为高电平,一段时间后变为低电平, Num 为数据代表数字的个数,如在键盘上输入三个 数或调试助手发送三个数,则Num的值为3。z和x均为中间变量。在接收到开始发送的信号(Eq的高电平)后,模块开始进行状态跳转、循环,循环的次数用 count记录,当count达到要发送的数据个数时,循环停止,状态停在SO处。为了按顺序输 出多字节的数据,在循环的过程中,数据可以进行移位,选择

8、在状态S2中移位,具体命令 为z4*N-1:4=z4*N-5:0,该语句将z中后面部分的数据赋值给前面部分的数据(数据有重 叠部分),相当于对数据做了一次移位操作。这样,模块就能按顺序输出多字节的数据。(2) 接收模块的多字节连续接收 接收模块的状态描述如下: case (state)S0:begind=0;if (sign=0) cnt=cnt+1b1;else cnt=8-diff) begin state=S1;cnt=0;endelse state=S0;endS1:begindiff=0; cnt1=16) begin sr4*N-1:4=sr4*N-5:0;state=S2; d0

9、=sign; cnt1=0; Num=Num+1b1;endelse begin state=S1;Num=Num;endendS9:beginif (d6:4=3b011)if (d3:0=4b0000)n=0;else if (d3:0=4b0001)n=1;else if (d3:0=4b0010)n=2;else if (d3:0=4b0011)n=3;else if (d3:0=4b0100)n=4;else if (d3:0=4b0101)n=5;else if (d3:0=4b0110)n=6;else if (d3:0=4b0111)n=7;else if (d3:0=4b10

10、00)n=8;else if (d3:0=4b1001)n=9;elsen=14;elsen=14;cnt9=cnt9+1b1;sr3:0=8)if (sign=0)begincnt9=0;state=S0;diff=1;endelsebegincnt9=cnt9;state=S9;endelsestate=S9;end上面只给出部分重要状态的代码,其中sign为输入的ASCII码信号,ent、cntl均为控制状态 跳转时间的变量,diff为补偿状态跳转多用的时间(一个时钟周期)。由上述描述可以看出, 无论是进行单个字节间断地发送,还是进行多字节连续发送,该模块都会把所有发送了的数 据储存下来

11、,也就是说,数据储存与数据发送的时间间隔无关。使用该模块的麻烦之处在于, 要储存新的数据,就必须先按清零键。如果要求模块能自动地清零,可以在状态S0中补充合适的清零命令,将S9中ent9保持原 值的命令改为取某个大于8的值,并以ent9等于该值作为清零的条件。(3)串口调试助手发送可变数据长度的控制逻辑接收模块中的最大数据长度可以通过改变N的值来调节,N代表数字(或字符)的个数。实 现该功能的命令为sr4*N-1:4=sr4*N-5:0,即对储存好的数据进行整体移位,再接收新输 入的数据,且无论 N 为何值(一定范围内的值),该命令都可以实现数据移位,所以模块 可以仅通过改变N值来改变容量。如

12、果调试助手发送的数据长度小于最大长度,则sr中的前面一部分数据为0。三、实验总结1、不同实现方法和创新串口发送模块的“C”键功能任务要求,“C ”键是用来清除输入的1位错误数字的,而为了让该功能更人性化,我设置 了连续按“C”键能清除最后输入的多位数字的功能,与计算器的DEL键的功能相同。实现 该功能的主要模块为Turn模块、Clk_Send模块和Count模块。Turn 模块的输出信号根据按键的行为而变化,当数字键被按下时,输出信号为低电平,而 当C键被按下时,输出信号为高电平。Clk_Send模块的输出信号(注意与发送电路的时钟信 号相区别)在数字键或C键被按下时,输出一正脉冲o Coun

13、t模块用来记录输入数字的个数, 当数字键被按下时,记录的数加一;当 C 键被按下时,记录的数减一,减为零时不再继续减 一。两个模块的输出接到移位寄存器电路的输入端,Clk_Send作为电路的触发信号(上升沿触发)。 当Turn为低电平时,sr中的数据正常移位;当Turn为高电平时,sr中的数据逆向移位,同 时令高位数据为零(如输入4321,移位为 4432,应将最高位的4 变为 0)。一开始,按上述思路设计完电路后,电路没能正常工作,后来发现原因是Turn和Clk_Send 信号来得过早,将信号作延迟处理后,电路正常工作,C键的功能正常。(2)串口接收模块的显示方式 任务要求中,串口接收模块的

14、显示方式自定,我选择滚动显示的方式。实现该功能的主要模 块有Seg_Accept模块和Display模块。Seg_Accept模块的4个数据输出端按顺序输出接收到 的数字的前 4 位,并在等号键被按下以后,以较低的频率移位。 Display 模块则将 4 个数字 稳定显示在数码管上,它的时钟频率要更高一些。2、问题及解决方法(1)在设计串口接收模块时,曾出现接收到的数据不正确的问题,每次接收到的数据,经常 会有1个E出现(当接收到的数据不是数字的时候,显示为E),而且E的位置是随机的。 后来发现,接收模块的时钟电路设计不合理,翻转条件应为大于80 而不是大于 81;(2)在设计串口接收电路的显示模块时,一开始是将低频率的时钟信号和较高频率的时钟信 号同时输入到模块里,同时利用两个时钟进行数据移位、扫描显示等处理。这样做很容易产 生警告,一般情况下,警告内容是Presettable and clearable registers converted to equivalent with latches. Registers power-up to an undefined state, and DEVCLRn places

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号