4端口UART及扫描驱动电路设计
- 格式:doc
- 大小:1.99 MB
- 文档页数:42
实验四UART串口通信学院:研究生院学号:1400030034姓名:张秋明一、实验目的及要求设计一个UART串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。
二、实验原理UART是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。
其中各位的意义如下:起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
资料位:紧接着起始位之后。
资料位的个数可以是4、5、6、7、8等,构成一个字符。
通常采用ASCII码。
从最低位开始传送,靠时钟定位。
奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
停止位:它是一个字符数据的结束标志。
可以是1位、1.5位、2位的高电平。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:是衡量资料传送速率的指标。
表示每秒钟传送的符号数(symbol)。
一个符号代表的信息量(比特数)与符号的阶数有关。
例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。
这两者的概念很容易搞错。
三、实现程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity uart isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号;rs232_tx: out std_logic --RS232发送数据信号;); end uart;architecture behav of uart iscomponent uart_rx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送);end component;component speed_select port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps 的高电平为接收或者发送数据位的中间采样点bps_start:in std_logic --接收数据后,波特率时钟启动信号置位);end component;component uart_tx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps 的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去);end component;signal bps_start_1:std_logic;signal bps_start_2:std_logic;signal clk_bps_1:std_logic;signal clk_bps_2:std_logic;signal rx_data:std_logic_vector(7 downto 0);signal rx_int:std_logic;beginRX_TOP: uart_rx port map(clk=>clk,rst_n=>rst_n,rs232_rx=>rs232_rx,clk_bps=>clk_bps_1,bps_start=>bps_start_1,rx_data=>rx_data,rx_int=>rx_int);SPEED_TOP_RX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_1,bps_start=>bps_start_1);TX_TOP:uart_tx port map(clk=>clk, --系统时钟rst_n=>rst_n, --复位信号rs232_tx=>rs232_tx, --RS232发送数据信号clk_bps=>clk_bps_2, --此时clk_bps 的高电平为发送数据的采样点bps_start=>bps_start_2,--接收到数据后,波特率时钟启动置位rx_data=>rx_data, --接收数据寄存器,保存直至下一个数据来到rx_int=>rx_int --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去);SPEED_TOP_TX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_2,bps_start=>bps_start_2);end behav;-----------------------------------------------------------------------------------------------------------------------3个子模块------------------------------------------------------------------------------异步接收模块-------------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity uart_rx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去); end uart_rx;architecture behav of uart_rx issignal rs232_rx0: std_logic;signal rs232_rx1: std_logic;signal rs232_rx2: std_logic;signal rs232_rx3: std_logic;signal neg_rs232_rx:std_logic;signal bps_start_r:std_logic;signal num:integer;signal rx_data_r:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrs232_rx0<='0';rs232_rx1<='0';rs232_rx2<='0';rs232_rx3<='0';elseif (rising_edge(clk)) thenrs232_rx0<=rs232_rx;rs232_rx1<=rs232_rx0;rs232_rx2<=rs232_rx1;rs232_rx3<=rs232_rx2;end if;end if;neg_rs232_rx <=rs232_rx3 and rs232_rx2 and not(rs232_rx1)and not(rs232_rx0);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';rx_int<='0';elseif (rising_edge(clk)) thenif(neg_rs232_rx='1') then--接收到串口数据线rs232_rx 的下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收rx_int<='1';--接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号rx_int<='0';--接收数据中断信号关闭end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrx_data_r<="00000000";rx_data<="00000000";num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rx_data_r(0)<=rs232_rx;--锁存第0bitwhen 2=>rx_data_r(1)<=rs232_rx;--锁存第0bitwhen 3=>rx_data_r(2)<=rs232_rx;--锁存第0bitwhen 4=>rx_data_r(3)<=rs232_rx;--锁存第0bitwhen 5=>rx_data_r(4)<=rs232_rx;--锁存第0bitwhen 6=>rx_data_r(5)<=rs232_rx;--锁存第0bitwhen 7=>rx_data_r(6)<=rs232_rx;--锁存第0bitwhen 8=>rx_data_r(7)<=rs232_rx;--锁存第0bitwhen 10=>rx_data<=rx_data_r;when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;---------------------------------波特率控制模块-----------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity speed_select isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps的高电平为接收或者发送数据位的中间采样点bps_start:in std_logic--接收数据后,波特率时钟启动信号置位或者开始发送数据时,波特率时钟启动信号置位);end speed_select;architecture behav of speed_select issignal cnt:std_logic_vector(12 downto 0);signal clk_bps_r:std_logic;constant BPS_PARA:integer:=5207;constant BPS_PARA_2:integer:=2603;beginprocess(clk,rst_n)beginif (rst_n='0')thencnt<="0000000000000";elseif (rising_edge(clk)) thenif((cnt=BPS_PARA)or(bps_start='0')) thencnt<="0000000000000"; --波特率计数器清零elsecnt<=cnt+'1';--波特率时钟计数启动end if;end if;end if;end process;process(clk,rst_n)beginif (rst_n='0')thenclk_bps_r<='0';elseif (rising_edge(clk)) thenif(cnt=BPS_PARA_2) thenclk_bps_r<='1'; --clk_bps_r高电平为接收数据位的中间采样点,同时也作为发送数据的数据改变点elseclk_bps_r<='0'; --波特率计数器清零end if;end if;end if;clk_bps<=clk_bps_r;end process;end behav;---------------------------------异步发送模块-------------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity uart_tx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去); end uart_tx;architecture behav of uart_tx issignal rx_int0: std_logic;signal rx_int1: std_logic;signal rx_int2: std_logic;signal neg_rx_int:std_logic;signal bps_start_r:std_logic;signal num:integer;signal tx_data:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrx_int0<='0';rx_int1<='0';rx_int2<='0';elseif (rising_edge(clk)) thenrx_int0<=rx_int;rx_int1<=rx_int0;rx_int2<=rx_int1;end if;end if;neg_rx_int <=not(rx_int1)and (rx_int2);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';tx_data<="00000000";elseif (rising_edge(clk)) thenif(neg_rx_int='1') then--接收到串口数据线rs232_rx的下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收tx_data<=rx_data;--接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrs232_tx<='1';num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rs232_tx<='0';when 2=>rs232_tx<=tx_data(0);--发送第1bitwhen 3=>rs232_tx<=tx_data(1);--发送第2bitwhen 4=>rs232_tx<=tx_data(2);--发送第3bitwhen 5=>rs232_tx<=tx_data(3);--发送第4bitwhen 6=>rs232_tx<=tx_data(4);--发送第5bitwhen 7=>rs232_tx<=tx_data(5);--发送第6bitwhen 8=>rs232_tx<=tx_data(6);--发送第7bitwhen 9=>rs232_tx<=tx_data(7);--发送第8bitwhen 10=>rs232_tx<='1';when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;四、实验步骤1、建立新工程UART,选择芯片,型号为cyclone ii EP2C35F484C8。
uart模块的驱动方法
UART(Universal Asynchronous Receiver/Transmitter)是一种常见的串行通信接口,用于在嵌入式系统中实现设备之间的通信。
在嵌入式系统中,UART模块的驱动方法通常涉及以下几个方面:
1. 初始化,首先,需要配置UART模块的参数,包括波特率、
数据位、停止位和校验位等。
这些参数的设置需要根据具体的应用
需求来确定。
通常情况下,需要根据目标设备的规格书来配置这些
参数。
2. 发送数据,一旦UART模块初始化完成,就可以使用相应的
函数来发送数据。
通常情况下,需要将待发送的数据写入到UART发
送缓冲区,然后UART模块会自动将数据发送出去。
3. 接收数据,接收数据的方法通常涉及设置接收中断或者轮询
方式。
在接收中断方式下,当接收到数据时,会触发中断,然后可
以在中断服务程序中处理接收到的数据。
而在轮询方式下,程序会
定期查询接收缓冲区是否有新的数据到达。
4. 错误处理,UART模块在传输过程中可能会出现一些错误,
比如校验错误、帧错误等。
驱动程序需要能够检测并处理这些错误,以确保数据的可靠传输。
5. 控制流,有时候需要在UART通信中实现流控制,比如硬件
流控或软件流控。
驱动程序需要支持这些流控制方式,并能够根据
需要进行配置。
总的来说,UART模块的驱动方法需要考虑到初始化、数据发送、数据接收、错误处理和流控制等多个方面。
针对不同的应用场景和
目标设备,驱动方法可能会有所不同,需要根据具体情况进行调整
和优化。
typec转uart电路-回复如何设计和实现一个Type-C转UART电路在现代的工业和消费电子设备中,Type-C接口作为一种通用的连接标准越来越常见。
它不仅可支持更高的功率传输,还可以实现数据、音频和视频的传输。
与此同时,UART(通用异步收发器)作为一种常用的串行通信协议,广泛应用于嵌入式系统和通信领域。
如果我们需要将Type-C 接口转为UART接口,可以采取以下步骤来设计和实现一个Type-C转UART电路。
第一步:了解Type-C和UART的基本原理和规范在开始设计Type-C转UART电路之前,我们需要对Type-C和UART 的基本原理和规范有一定的了解。
了解Type-C接口的工作原理、信号定义、电气特性以及UART协议的基本原理、通信方式和数据格式等内容。
这将有助于我们更好地理解电路设计和选型。
第二步:选择合适的硬件和芯片在设计电路之前,需要选择合适的硬件和芯片来实现Type-C转UART 的功能。
首先,我们需要选择一款支持Type-C接口的控制器芯片,例如USB Type-C控制器芯片。
其次,我们需要选择一款UART通信芯片,以实现UART和其他设备的连接。
在选择芯片时,我们应该考虑其性能、功耗、稳定性和可靠性等因素。
第三步:设计硬件电路在选择好合适的硬件和芯片后,我们需要进行电路设计。
首先,根据Type-C接口的电气特性,设计Type-C接口电路,包括信号线的连接、阻抗匹配、ESD保护等。
接下来,设计UART接口电路,包括TX(发送)和RX(接收)电路,以及相应的电平转换电路。
根据选定的芯片和需求,将Type-C和UART的信号进行连接,并进行必要的电平转换和匹配。
第四步:软件开发和驱动编写完成硬件设计后,接下来需要进行软件开发和驱动编写。
首先,我们需要根据UART的通信协议,实现相应的发送和接收函数。
其次,根据Type-C接口的工作原理和规范,编写相应的驱动程序,实现Type-C口和UART口之间的数据转换和传输。
uart串口通信电路设计-回复UART(通用异步收发传输)是一种常用的串口通信协议,可以实现设备之间的数据传输和通信。
在本文中,将详细介绍UART串口通信电路的设计步骤。
一、什么是UART串口通信电路?UART串口通信电路是一种数字电路,用于将串行数据转换为并行数据,实现设备之间的数据传输和通信。
UART串口通信电路通常由发送电路和接收电路两部分组成。
发送电路:发送电路将并行数据转换为串行数据,并对数据进行格式化。
它通常由一个发送缓冲器、一个发送时钟和控制逻辑组成。
接收电路:接收电路将串行数据转换为并行数据,并对数据进行解码和处理。
它通常由一个接收缓冲器、一个接收时钟和控制逻辑组成。
二、UART串口通信电路的设计步骤1. 确定通信参数在设计UART串口通信电路之前,首先需要确定通信参数,包括波特率、数据位数、校验位数和停止位数等。
这些参数将决定串口通信的速率和精度。
2. 设计发送电路发送电路的主要任务是将并行数据转换为串行数据,并将数据发送到接收设备。
设计发送电路时,需要考虑以下几点:(1)发送缓冲器:发送缓冲器用于存储待发送的数据。
它通常由一个FIFO (先进先出)缓冲器实现,可以提高通信的效率。
(2)时钟和控制逻辑:发送电路需要一个时钟信号来同步数据传输,并且需要控制逻辑来控制数据的发送和处理。
(3)格式化:发送电路需要对数据进行格式化,包括数据位、校验位和停止位的配置。
格式化的目的是提高数据的准确性和可靠性。
3. 设计接收电路接收电路的主要任务是将串行数据转换为并行数据,并将数据传输到接收设备。
设计接收电路时,需要考虑以下几点:(1)接收缓冲器:接收缓冲器用于存储接收到的数据。
它通常由一个FIFO 缓冲器实现,可以提高数据的接收效率。
(2)时钟和控制逻辑:接收电路需要一个时钟信号来同步数据传输,并且需要控制逻辑来控制数据的接收和处理。
(3)解码和处理:接收电路需要对接收到的数据进行解码和处理,包括校验数据的正确性和提取有效数据。
uart驱动调试方法UART驱动是一种用于串口通信的驱动程序,常用于嵌入式系统中。
调试UART驱动的目的是确保其正常工作,并排除可能的问题。
下面是一些调试UART驱动的方法:1.检查硬件连接:确保UART的引脚正确连接到目标设备上,并且没有虚焊、短路或其他硬件问题。
需要检查TX、RX、地线和电源线的正确连接。
2.配置正确的波特率:确认驱动程序和目标设备的波特率设置一致。
如果波特率设置不正确,通信将无法成功。
3.检查中断和DMA:如果使用中断或DMA进行数据传输,在调试过程中需要确保它们的配置和使用正确。
确认中断和DMA的初始化和处理函数是否正确,以及是否可靠。
4.使用调试工具:使用调试工具可以帮助检测和解决UART驱动的问题。
例如,使用示波器可以观察波形是否符合预期,使用串口调试助手可以查看发送和接收的数据。
还可以使用软件调试器来观察代码执行的过程。
5.打印调试信息:在驱动程序中添加打印语句,以便在运行时输出调试信息。
可以打印各种变量、标志位和状态信息,以便跟踪代码的执行流程。
这种方法可以帮助定位并解决问题。
6.内部测试模式:一些UART控制器提供了内部测试模式,可以自动生成和接收特定模式的数据。
通过使用内部测试模式,可以排除硬件和物理连接的问题,并检查驱动程序的正确性。
7.理解数据协议:UART驱动中很重要的一点是理解通信的协议。
要确保驱动程序正确地构造和解析数据帧,包括起始位、停止位、校验位和数据位。
8.分阶段调试:UART驱动的调试可以分成多个阶段进行。
首先,确保驱动程序可以正常初始化和配置。
然后,测试发送和接收数据的功能。
最后,检查错误处理和异常情况的处理。
9.必要时查看硬件文档:如果遇到了很棘手的问题,无法通过常规的调试方法解决,可以查看硬件文档或厂商提供的技术支持。
硬件文档可以提供关于UART控制器的详细说明和配置建议。
10.与其他设备协同调试:UART驱动通常会与其他设备进行通信,例如处理器、外设或其他串口设备。
uart驱动电路设计摘要:1.UART 概述2.UART 驱动电路设计原则3.UART 驱动电路的主要组成部分4.UART 驱动电路设计流程5.设计实例与注意事项正文:一、UART 概述UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种广泛应用于电子设备中的串行通信接口。
它的主要功能是在发送端将数据字符从并行转换为串行,按位发送到接收端,在接收端将串行数据字符转换为并行数据,以便于设备处理。
UART在电子设备中具有重要作用,如计算机外设、通信设备等。
二、UART 驱动电路设计原则1.稳定性:驱动电路应具有良好的稳定性,确保数据传输的可靠性。
2.兼容性:驱动电路应能兼容不同厂商、不同型号的UART 设备。
3.低功耗:驱动电路应在满足性能要求的前提下,尽量降低功耗。
4.简洁性:驱动电路设计应尽量简洁,便于调试和维护。
三、UART 驱动电路的主要组成部分1.电源模块:为驱动电路提供稳定的电源。
2.晶振模块:提供驱动电路的工作时钟。
3.复位模块:为驱动电路提供复位信号。
4.电平转换模块:实现UART 接口的电平转换,如TTL 电平转换为CMOS 电平。
5.串行发送模块:将数据字符从并行转换为串行,按位发送。
6.串行接收模块:将串行数据字符转换为并行数据。
7.缓存模块:缓存发送和接收的数据,以适应不同速率的UART 设备。
四、UART 驱动电路设计流程1.需求分析:明确驱动电路的功能、性能、兼容性等要求。
2.电路设计:根据需求分析,设计驱动电路的各个模块,并选择合适的元器件。
3.电路仿真:使用仿真软件对驱动电路进行仿真测试,验证电路性能。
4.硬件调试:制作驱动电路硬件原型,进行实际硬件调试。
5.软件调试:编写驱动程序,对驱动电路进行功能测试。
6.性能测试:对驱动电路的稳定性、兼容性、功耗等性能进行测试。
7.优化与完善:根据测试结果,对驱动电路进行优化与完善。
课程设计任务书学生姓名:朱信鹏专业班级:电信1006指导教师:李景松工作单位:信息工程学院题目: PROTEL应用——4端口UART及扫描驱动电路设计初始条件:4端口UART及扫描驱动电路参考图一份,Protel99 SE 电路图辅助设计与绘制软件。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、用PROTEL软件绘制电路的原理图,并给出相应的原理图网络表和原理图元件表。
2、建4个元件的原理图元件库以及相应的封装元件库。
3、用自动和手动相结合的方法设计出印制版电路图,除了给出完整的印制电路板图,还应给出分层图(顶层、底层、丝印层等)。
4、完成课程设计报告。
课程设计报告按章节书写,三项任务形成课程设计的三章内容,前面可以加PROTEL介绍,最后一章为总结。
PROTEL生成的图表须打印出来,以附件的形式放在报告的后面。
时间安排:整个设计分散到学期中进行,期末上交报告,答辩。
参考书目:[1] 柳春峰.Protel 99 SE实用教程.高等教育出版社[2] 顾滨.Protel 99 SE实用教程第二版.人民邮电出版社[3] 江思敏等.Protel电路设计教程.清华大学出版社指导教师签名:年月日系主任(或责任教师)签名:年月日目录1 Protel99se 概述 (1)1.1 Protel 99 SE的系统组成 (1)1.1.1 电路工程设计部分 (1)1.1.2 电路仿真与PLD部分 (2)1.2 Protel 99 SE的功能特性 (2)1.2.1 开放式集成化的设计管理体系 (2)1.2.2 超强功能的、修改与编辑功能 (2)1.2.3 强大的设计自动化功能 (2)2 电路原理图绘制 (3)2.1 原理图的设计思想 (3)2.2 原理图设计的步骤 (3)2.3 绘制原理图前的准备 (3)2.3.1 启动Protel 99 SE (3)2.3.2 创建原理图设计文件 (4)2.3.3 启动原理图编辑器 (5)2.3.4 设置原理图图纸 (6)2.3.5 装入元件库 (6)2.4 放置元件 (7)2.4.1 利用浏览器放置元件 (7)2.4.2 元件的删除 (7)2.4.3 元件的调整 (8)2.4.4 改变元件属性 (8)2.5 绘制原理图 (9)2.5.1 画导线 (9)2.5.2 利用网络标号实现电气连接 (9)2.5.3 放置电路节点 (9)2.5.4 放置电源及接地符号 (9)2.5.5 画总线 (9)2.5.6 绘制总线分支线 (10)2.5.7 放置输入/输出端口 (10)2.5.8 调整线路 (10)2.5.9 元件清单输出 (10)2.5.10报表输出 (10)3 原理图元件库以及封装元件库的建立 (11)3.1 原理图元件库的建立 (11)3.1.1 启动元件库编辑器 (11)3.1.2 元件库管理器的使用 (12)3.1.3 绘制元件工具 (13)3.1.4 新元件库的建立 (14)3.2 封装库的建立 (15)3.2.1元件封装库编辑器 (15)3.2.2 手工创建新的元件封装 (16)3.2.3 使用向导创建元件封装 (18)4 印制版电路设计 (22)4.1 印制电路板基础 (22)4.1.1 PCB环境设置 (22)4.1.2 规划电路板 (22)4.1.3 调入网络表文件和修改零件封装 (22)4.1.4 布置零件封装的位置,也称零件布局 (22)4.1.5 布线规则设置 (23)4.1.6 自动布线和手工调整 (23)4.1.7 最后再做一次DRC检测 (23)4.2 端口UART及扫描驱动PCB设计 (23)4.2.1 设计原则 (23)4.2.2 设计方法 (23)4.2.3 相关数据 (24)4.2.4 作品特点 (24)5 Protel使用设计总结 (25)参考文献 (26)附件一:SCH原理图 (27)附件二:元件清单 (28)附件三:网络表 (29)附件四:PCB分层图 (32)附件五:自制元件封装的元件图及封装图 (35)PROTEL应用实践——4端口UART及扫描驱动电路设计1 Protel99se 概述Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。
1.1 Protel 99 SE的系统组成按照系统功能来划分,Protel99se主要包含以下俩大部分和6个功能模块。
1.1.1 电路工程设计部分(1)电路原理设计部分(Advanced Schematic 99)电路原理图设计部分包括电路图编辑器(简称SCH编辑器)、电路图零件库编辑器(简称Schlib编辑器)和各种文本编辑器。
本系统的主要功能是:绘制、修改和编辑电路原理图;更新和修改电路图零件库;查看和编辑有关电路图和零件库的各种报表。
(2)印刷电路板设计系统(Advanced PCB 99)印刷电路板设计系统包括印刷电路板编辑器(简称PCB编辑器)、零件封装编辑器(简称PCBLib编辑器)和电路板组件管理器。
本系统的主要功能是:绘制、修改和编辑电路板;更新和修改零件封装;管理电路板组件。
(3)自动布线系统(Advanced Route 99)本系统包含一个基于形状(Shape-based)的无栅格自动布线器,用于印刷电路板的自动布线,以实现PCB设计的自动化。
1.1.2 电路仿真与PLD部分(1)电路模拟仿真系统(Advanced SIM 99)电路模拟仿真系统包含一个数字/模拟信号仿真器,可提供连续的数字信号和模拟信号,以便对电路原理图进行信号模拟仿真,从而验证其正确性和可行性。
(2)可编程逻辑设计系统(Advanced PLD 99)可编程逻辑设计系统包含一个有语法功能的文本编辑器和一个波形编辑器(Waveform)。
本系统的主要功能是;对逻辑电路进行分析、综合;观察信号的波形。
利用PLD系统可以最大限度的精简逻辑部件,使数字电路设计达到最简化。
(3)高级信号完整性分析系统(Advanced Integrity 99)信号完整性分析系统提供了一个精确的信号完整性模拟器,可用来分析PCB设计、检查电路设计参数、实验超调量、阻抗和信号谐波要求等。
1.2 Protel 99 SE的功能特性1.2.1 开放式集成化的设计管理体系1.2.2 超强功能的、修改与编辑功能1.2.3 强大的设计自动化功能2 电路原理图绘制2.1 原理图的设计思想电路原理图的设计主要是PROTEL099的原理图设计系统(Advanced Schematic)来绘制一张电路原理图。
在这一过程中,要充分利用PROTEL99所提供的各种原理图绘图工具、各种编辑功能,来实现我们的目的,即得到一张正确、精美的电路原理图。
2.2 原理图设计的步骤,如图2-1所示违反规则检测通过图2-1 原理图设计步骤2.3 绘制原理图前的准备2.3.1 启动Protel 99 SE,如图2-2所示图2-2 启动99SE工作窗口2.3.2 创建原理图设计文件选择主菜单区的【File】/【New Design】选项,按照上面的操作将弹出如图2-3图所示的窗口,更改设计的名称为“4端口UART及扫描驱动.ddb”,单击【OK】后出现如图2-4所示的窗口。
图2-3 创建库文件图2-4 创建库文件2.3.3 启动原理图编辑器在空白处单击鼠标右键,选择【New】会出现如图2-5所示的选择类型对话框。
在图2-5所示的对话框中单击【Schematic Document】图标,选中原理图编辑器图标,双击该图标就可以完成新的原理图文件的创建,如图2-6所示。
默认的文件名为“sheet1.sch”,文件名可以修改,例如改为“4 PORT.sch”。
图2-5 选择原理图框图2-6 原理图文件2.3.4 设置原理图图纸一般系统默认图纸的大小为B号图纸。
当构思好原理图后,最好能先根据构思的整体布局设置好图纸的大小。
在画图中或以后可以再修改也是可以的。
在设计窗口中,单击鼠标右键选择浮动菜单下的文档选项【Document Option…】修改图纸大小。
2.3.5 装入元件库首先,打开原理图管理浏览器。
在工作窗口为原理图编辑器窗口的状态下,单击设计管理器顶部的【Browse Sch】标签即可打开原理图管理浏览器窗口,单击【Add/Remove】按钮,出现如图2-7所示的添加/删除元件库对话框。
图2-7 添加封装库2.4 放置元件2.4.1 利用浏览器放置元件在菜单中【Browse】选项的下拉式选框中,选中【Libraries】项。
然后单击列表框中的滚动条,找出元件所在的元件库文件名,单击鼠标左键选中所需的元件库;再在该文件库中选中所需的元件。
2.4.2 元件的删除可以执行菜单命令【Edit】/【Delete】,当光标变为十字形状后,将光标移到想要删除的元件上,单击鼠标左键,即可将该元件从工作平面上删除。
选中所要删除的多个元件,然后执行菜单命令【Edit】/【Clear】。
2.4.3 元件的调整一、元件移动方法直接用鼠标拖动。
执行菜单【Edit】/【Move】/【Move】命令,再用鼠标移动。
用鼠标单击选中再移动。
用鼠标拖动选择多个元件,再移动。
用【Edit】/【Move】/【Move Selection】命令移动。
二、元件方向的调整【Space】键(空格键):每按一次,被选中的元件逆时针旋转90°。
【X】键:使元件左右对调。
【Y】键:使元件上下对调。
2.4.4 改变元件属性【Attributes】选项卡中的内容较为常用,它包括以下选项。
Lib Ref:在元件库中定义的元件名称,不会显示在绘图页中。
Footprint:封装形式,应该输入该元件在PCB库里的名称。
Designator:流水序号。
Part Type:显示在绘图页中的元件名称,默认值与元件库中名称“Lib R一致。
Sheet Path:成为绘图页元件时,定义下层绘图页的路径。
Part:定义子元件序号,如与门电路的第一个逻辑门为1,第二个为2等。
Selection:切换选取状态。
Hidden Pins:是否显示元件的隐藏引脚。
Hidden Fields:是否显示“Part Fields 1-8”“Part Fields 9-16”选项卡中的元件数据栏。
Field Name:是否显示元件的数据栏名称。
在元件的某一属性上双击鼠标左键,则会打开一个针对该属性的对话框。