Altium教程CAN_Receive 6A软件设计0223
- 格式:pdf
- 大小:67.79 KB
- 文档页数:9
AltiumDesigner电路设计教程Altium Designer电路设计教程第一章:Altium Designer简介Altium Designer是一款专业的电子设计自动化(EDA)软件,广泛应用于电路设计、PCB设计和电子产品开发等领域。
本章将对Altium Designer的功能和特点进行介绍。
Altium Designer拥有强大的电路设计功能,可以帮助工程师轻松完成电路原理图的绘制和仿真。
它支持多种常见的电子元件和模块的库文件,使得用户可以方便地进行元件的选择和导入。
同时,Altium Designer还提供直观的界面和丰富的操作工具,使得用户能够快速而准确地完成电路设计。
第二章:电路原理图设计电路原理图是电子产品设计的基础,本章将介绍Altium Designer中电路原理图设计的具体步骤和注意事项。
首先,用户需要创建一个新的工程并设置项目参数。
接下来,可以选择现有的库文件中的元件或者新建元件库,并将需要的元件拖拽到原理图中进行连接。
在连接元件时,可以使用线、块或者其他形状来表示电路中的连接关系。
同时,Altium Designer还支持元件的属性编辑,使得用户可以为每个元件指定具体的参数。
完成电路原理图的设计后,可以进行电路仿真以验证设计的正确性。
Altium Designer内置了强大的仿真工具,可以对电路进行直流、交流、噪声等多种仿真分析。
通过仿真结果,可以发现并改正设计中的问题,从而提高电路的可靠性和性能。
第三章:PCB布局设计PCB布局是将电路原理图转化为实际的印刷电路板(PCB)的过程。
本章将介绍Altium Designer中PCB布局设计的步骤和技巧。
在Altium Designer中,用户可以根据电路原理图自动生成PCB 布局。
首先,可以在PCB布局编辑器中导入原理图,并根据布局要求进行元件的摆放和连线。
Altium Designer提供了多种布局工具,如自动布线、拖拽元件、旋转元件等,使得用户能够高效地进行布局设计。
Altium Designer工具入门FPGA设计入门概要本章主要介绍如何使用Altium创新电子设计平台进行基本的FPGA设计,包括在Altium Designer中建立FPGA工程;针对Desktop NanoBoard子板上的FPGA器件编译设计;对设计进行分析和处理;完成对FPGA的下载。
本章最后对层级设计和虚拟仪器的使用进行了简要的介绍。
Altium创新电子设计平台结合了Altium Designer软件平台和Desktop NanoBoard可重构硬件平台,可提供FPGA实时设计所需的所有工具和技术,包括输入、执行、检查和调试等。
Altium公司的创新电子设计平台完成了底层的细节操作,使设计者能够更关注于器件的智能化和功能的开发。
这些开发是支撑产品差异的来源。
在进入嵌入式软件智能模块和处理器的世界之前,需要牢固掌握在这个创新环境中进行设计的基本原则――实现最基本的设计并使其在Desktop NanoBoard子板上的FPGA器件中运行。
本章将完成一个简单的计数器设计。
当该设计下载到目标子板上的FPGA芯片后,板上的LED持续地从左到右点亮,或者从右到左点亮。
通过这个课程,用户将学会FPGA设计的基本知识:在Altium Designer中建立FPGA工程,并完成原理图设计,包括查找、放置和连接元件。
使用自动配置功能对子板FPGA进行配置。
对设计进行处理,包括编译、综合和组建,以获得相应目标器件的可编程文件。
在FPGA工程中使用层级设计,包括简单定制逻辑(HDL)。
虚拟仪器的用法。
本章所给出的例子是一个简单的扭环计数器(见图一)。
这是一个同步计数器,移位寄存器的输出信号通过反相器接到输入端。
其原理图和相关文件在Altium Designer安装路径下的\Examples\Tutorials\Getting Started with FPGA Design文件夹中。
用户可以在任何时候查阅这个例子以便获得更深层次的理解和迈向新的台阶。
I2C Arbitration 6A 软件设计第一部分 原理图1.1 FPGA_51_External_Memory.SchDocPXXPXX PXX PXX PXXPXXPXX PXXPXX PXX PXX PXX,PXX,PXX,PXX,PXX,PXX,PXX,PXXlibrary IEEE;use IEEE.std_logic_1164.all;entity EXT_MEM_CTRL isport (-- Selects the behaviour of the two external memory chipsMEM_SELECT : in std_logic ;-- External data/program Memory control signals - control from the core E_RAM_WR : in std_logic;E_RAM_RD : in std_logic;E_ROM_WR : in std_logic;E_ROM_RD : in std_logic;E_RAM_DATAI : in std_logic_vector(7 downto 0);E_RAM_DATAO : out std_logic_vector(7 downto 0);E_RAM_ADDR : in std_logic_vector(15 downto 0);-- External memory interface - going directly to the memory chipEXT_RAM0_DATA : inout std_logic_vector(7 downto 0);EXT_RAM0_WR : out std_logic;EXT_RAM0_OE : out std_logic;EXT_RAM1_DATA : inout std_logic_vector(7 downto 0);EXT_RAM1_WR : out std_logic;EXT_RAM1_OE : out std_logic;EXT_ADDRESS : out std_logic_vector(16 downto 0);EXT_CS : out std_logic);end EXT_MEM_CTRL;------------------------------------------------------------------------------------------------------------------------architecture rtl of EXT_MEM_CTRL isbegin-- if MEM_SELECT is 1 then-- RAM0_DATA is the data memory-- RAM1_DATA is the program memory-- RAM_DATA is connected to RAM0_DATA which is the data memory-- ROM_DATA is connected to RAM1_DATA which is the program memory-- the RAM0 control signals are tied to the processor RAM-- the RAM1 control signals are tied to the processor ROM---- otherwise---- RAM1_DATA is the data memory-- RAM0_DATA is the program memory-- RAM_DATA is connected to RAM1_DATA which is the data memory-- ROM_DATA is connected to RAM0_DATA which is the program memory-- the RAM0 control signals are tied to the processor ROM-- the RAM1 control signals are tied to the processor RAM--process(E_RAM_WR, E_ROM_WR, E_RAM_RD, E_ROM_RD, MEM_SELECT, E_RAM_DATAI, EXT_RAM0_DATA, EXT_RAM1_DATA) beginif MEM_SELECT = '1' thenif E_RAM_WR = '1' thenEXT_RAM0_DATA <= E_RAM_DATAI;elseEXT_RAM0_DATA <= (others=>'Z');end if;EXT_RAM1_DATA <= E_RAM_DATAI;elseEXT_RAM1_DATA <= (others=>'Z');end if;if E_RAM_RD = '1' thenE_RAM_DATAO <= EXT_RAM0_DATA;elsif E_ROM_RD = '1' thenE_RAM_DATAO <= EXT_RAM1_DATA;elseE_RAM_DATAO <= (others => '-');end if;EXT_RAM0_WR <= not E_RAM_WR;EXT_RAM0_OE <= not E_RAM_RD;EXT_RAM1_WR <= not E_ROM_WR;EXT_RAM1_OE <= not E_ROM_RD; elseif E_RAM_WR = '1' thenEXT_RAM1_DATA <= E_RAM_DATAI;elseEXT_RAM1_DATA <= (others=>'Z');end if;if E_ROM_WR = '1' thenEXT_RAM0_DATA <= E_RAM_DATAI;elseEXT_RAM0_DATA <= (others=>'Z');end if;E_RAM_DATAO <= EXT_RAM1_DATA;elsif E_ROM_RD = '1' thenE_RAM_DATAO <= EXT_RAM0_DATA;elseE_RAM_DATAO <= (others => '-');end if;EXT_RAM0_WR <= not E_ROM_WR;EXT_RAM0_OE <= not E_ROM_RD;EXT_RAM1_WR <= not E_RAM_WR;EXT_RAM1_OE <= not E_RAM_RD;end if;end process;-- Chip select of the external memory is active lowEXT_CS <= '0' ;-- Address from the processor is connected straight to the external address EXT_ADDRESS <= '0' & E_RAM_ADDR;end rtl;------------------------------------------------------------1.4Ext_Mem_Ctrl.ASM ;............................................................................... EAL.equ 0AFH;P0 .equ 80H;P1 .equ 90H;P2 .equ 0A0H;P3 .equ 0B0H;DPL .equ 82H;DPH .equ 83H;PSW .equ 0D0H;ACC .equ 0E0H ;...............................................................................;............................................................................... MainCountLow.equ 38HRightShift.equ 42HLeftShift.equ 43HCountInner.equ 40HCountOuter.equ 41HExtMemCnt.equ 44H ;................................................................................Section Text, Code; .org 0000HMainProc: ;...............................................................................LJMP INIT ;...............................................................................INIT:MOV DPL,#00HMOV DPH,#22HMOV PSW,#00HMOV P0, #00HMOV MainCountLow, #00HMOV RightShift, #01HMOV LeftShift, #80HCLR EAL;............................................................................... MainLoop : ;...............................................................................LCALL VeryLongDelayLCALL IncrementCounterLCALL ShiftForDiodeLCALL DisplayCounterSJMP MainLoop ;...............................................................................;............................................................................... IncrementCounter ;...............................................................................INC MainCountLowRET ;...............................................................................;............................................................................... ShiftForDiode:;...............................................................................MOV A, RightShiftRR AMOV RightShift, AMOV A, LeftShiftRL AMOV LeftShift, ARET ;...............................................................................;............................................................................... DisplayCounter: ;...............................................................................PUSH DPLPUSH DPHPUSH ACCMOV DPH, #01HMOV DPL, #0FFHMOV A, MainCountLowMOVX @DPTR, AMOV A, #00HMOVX A, @DPTRMOV ExtMemCnt, APOP ACCPOP DPHPOP DPLMOV P0, ExtMemCntRET ;...............................................................................;............................................................................... LongDelay: ;...............................................................................MOV CountOuter, #0AAHLoopOuter:MOV CountInner, #0AAHLoopInner:DEC CountInnerMOV A, CountInnerJNZ LoopInnerDEC CountOuterMOV A, CountOuterJNZ LoopOuterRET ;...............................................................................;............................................................................... VeryLongDelay: ;...............................................................................LCALL LongDelayLCALL LongDelayLCALL LongDelayLCALL LongDelayLCALL LongDelayRET ;................................................................................END。
.目录目录 (1)第一部分应用电子技术实训教学大纲,要求与实训资源简介 (4)1.1应用电子技术实训教学大纲 (4)1.2实训内容与学时分配 (5)1.3实训安排与考核方式 (6)第二部分 Altium Designer10电路设计实训入门 (8)2.1印制电路板与 Protel概述 . (8)2.1.1印制电路板设计流程 (8)2.2原理图设计 . (10)2.2.1原理图设计步骤: . (10)2.2.2原理图设计具体操作流程 . (10)2.3原理图库的建立 . (17)2.3.1原理图库概述. (17)2.3.2编辑和建立元件库 . (17)2.4创建 PCB元器件封装. (23)2.4.1元器件封装概述 (23)2.4.2创建封装库大体流程 . (24)2.4.3绘制 PCB封装库具体步骤和操作 (24)2.5PCB设计 (33)2.5.1重要的概念和规则 . (33)2.5.2 PCB 设计流程 (34)2.5.3详细设计步骤和操作 (34)2.6实训项目 . (41)2.6.1任务分析 . (41)2.6.2任务实施 . (43)第三部分 PCB 板基础知识、布局原则、布线技巧、设计规则723.1 PCB 板基础知识 (72)3.2 PCB 板布局原则 ......................................错误!未定义书签。
3.3 PCB 板布线原则 (74)3.4 Alitum Designer的PCB板布线规则 (75)第四部分自制电路板实训入门 . (78)4.1自制电路板最常用方法及工具介绍 (78)4.2描绘法自制电路板 . (82)4.3感光板法制作电路板( 图解说明全过程 ) ..................错误!未定义书签。
4.4热转印法制作电路板. .................................错误!未定义书签。
4.5丝网印法制作电路板( 图解说明全过程 ) ..................错误!未定义书签。
设计并生成PCB根据WEBENCH生成的电源原理图,就可以在AltiumDesigner中画出设计电路的原理图和PCB 图。
1.Ultra Librarian 的安装和使用1) 在TI官网下载并安装UIltral Librarian并安装,下载地址:2) 在TI官网找到要使用的芯片,在“符号和封装”项目下点击下载CAD文件(后缀为.bxl),如下图所示:3) 打开Ultral Librarian软件,首先点击“Load Data”装载刚刚下载.bxl文件,在选择"SelectTools”中的"Altium Designer”,最后点击“Export toSelected Tools”。
如下图所示:田PatemViem. TQFP.[区留Utrs Lbrarin Binsy Readsr Vericn 5.3.409stup t,Suocta ile to Load.Load Data Doy nload from websites and databasesStep 2, 50lectToolsAcoel15/FCAD20X/MimD=spe! C m 2 0 E 口 CadncaAkgo 14-151CadenceAego 15.2d1 n298G e160 C160 MmirExedicn39 ·2000gm CDX G 0CQnadCalre CI5 VS0 meAl Qrcad L4otV9crneu,MrloPAOS/PeMelggc4crnemm304C207Zu Cadt2Vasn34 Z4eCR5000 eiese|留SymbeNicm PC2.[NtHptop-3.EportocadTools Export to Selected ToolsBenefis Opions- 听i o n s / H e p txit Programof Upgrading4) 随后会生成一个.txt 文档,如下图所示。
快捷键:快速复制放置元件:按住Shift键并拖动要放置的元件Q:尺寸单位转换J+C:查找元件V+F:显示全屏元件V+Z:显示上次比例Ctrl+A:全选Ctrl+C:复制Ctrl+V:粘贴Shift+s:单层显示Shift+空格:改变走线模式L:层面设置G/shift+G/ctrl+shift+G:栅格设置封装集成库的建立新建集成库工程File→New→Project→Integrated Library在集成库工程下新建原理图封装和PCB封装可在File →New→Library中新建,也可鼠标右键点击集成库名添加库文件绘制需要的原理图封装和PCB封装原理图封装不需要太多尺寸要求,可通过编辑→Jump设置原点在器件中心或任意位置,PCB封装则需要根据实物尺寸绘制,可通过Edit(编辑)→Set Reference(设置参考点)将原点设置在元件中心、Pin1或任意位置(一般将原点设置在PCB封装中心或管脚1上,否则导入PCB图后布局拖动元件时光标可能会跑到离元件很远的地方)。
点击Tool →New comment(新元件)可开始下一个元件的绘制。
在界面右下方单击Sch →Sch Library/PCB→PCB Library可调出相对的库面板,原理图封装更改元件名字可通过Tools →Rename Comment修改,也可双击元件名称,在弹出的属性框Symbol Reference一栏中修改。
PCB封装通过双击封装名字修改。
注:单击右下方System→supplier Search(供应商查找),输入元件名称,显示的元件信息可拖动到原理图封装界面的空白处,从而显示在元件属性框内。
确定原理图封装和PCB封装的链接关系在原理图封装界面右下方点击Show Model展开箭头。
点击Add Footprint→Browse,在PCB封装库里选择对应的PCB封装(可选择多个),点击OK、OK,就可形成链接关系。
altium操作技巧Altium Designer是一款功能强大的电子设计自动化软件,广泛应用于电子产品的原理图绘制和PCB布局设计。
在使用Altium Designer时,掌握一些操作技巧能够提高工作效率,本文将介绍一些常用的Altium操作技巧。
一、快捷键的使用Altium Designer提供了丰富的快捷键功能,能够大大提高操作速度。
例如,按下“P”键可以快速放置器件,按下“W”键可以快速绘制连线,按下“M”键可以快速移动器件等。
通过熟练掌握这些快捷键,可以在操作中省去不少鼠标点击的步骤,提高工作效率。
二、快速复制和移动在Altium Designer中,可以使用鼠标右键进行快速复制和移动功能。
选中需要复制或移动的器件或连线,按住鼠标右键拖动即可。
同时,按住Ctrl键还可以进行多个器件或连线的选择,快速进行批量复制和移动操作。
三、层管理在PCB布局设计中,层管理是一个非常重要的功能。
Altium Designer提供了灵活的层管理功能,可以方便地进行层的显示和隐藏。
在工具栏中可以找到“层管理器”按钮,点击后会弹出层管理器对话框。
在层管理器中,可以选择需要显示或隐藏的层,以便更好地观察和编辑PCB布局。
四、封装库的使用Altium Designer提供了丰富的封装库,可以直接使用已有的封装来加快器件布局的速度。
在工具栏中可以找到“封装库管理器”按钮,点击后会弹出封装库管理器对话框。
在封装库管理器中,可以选择需要使用的封装库,然后直接从库中选择合适的封装来使用。
五、规则检查Altium Designer提供了强大的规则检查功能,可以帮助设计者在设计过程中及时发现问题并进行修正。
在PCB编辑界面中,点击工具栏中的“规则检查”按钮,即可进行规则检查。
通过规则检查功能,可以检查布局是否符合设计要求,如器件之间的最小间距、电气连接的正确性等。
六、版本控制在团队合作的项目中,版本控制是非常重要的。
Altium Designer 提供了版本控制功能,可以帮助团队成员协同工作,避免冲突和重复工作。
CAN_Receive 6A软件设计02231.2CAN_Receiver_2.ASMDoSetFrameToTransmit:SFTT_RPT_Test_Not_Can_Tx:GetCANReg STATUS_REGISTERBTFSS CANCommand, Bit2; check the Transmit Buffer status bitGOTO SFTT_RPT_Test_Not_Can_TxSetCANReg TRANSMIT_BUFFER_REGISTER_ACR0, 0x03SetCANReg TRANSMIT_BUFFER_REGISTER_ACR1, 0x55SetCANReg TRANSMIT_BUFFER_REGISTER_ACR2, 0x00SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_ACR3; now set the transmit buffer to hold the value to outputSetCANRegFromMemory TRANSMIT_BUFFER_REGISTER_AMR0, MainCountSetCANReg TRANSMIT_BUFFER_REGISTER_AMR1, 0x00SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_AMR2SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_AMR3SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_0SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_1SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_2RETLW 0 ;...............................................................................;............................................................................... DoTransmitFrame:; Setting Bit 0 in the Command register tells the CAN to transmit the; contents of its transmit bufferSetCANReg COMMAND_REGISTER, 0x01RETLW 0;...............................................................................DoReceiveFrame:GetCANReg INTERRUPT_REGISTERBTFSS CANCommand, Bit0; check the Receive Interrupt bit - if it's set, we need to read from the FIFO GOTO CheckBufferClearReadReceivedData:; if receive interrupt active; read data from receive buffer and put data1 into CANReceivedData registerGetCANReg ACCEPTANCE_CODE1_REGISTERMOVF CANCommand, WXORLW 0x55.gen IF <NOT> WGetCANReg RECEIVE_BUFFER_REGISTER_AMR0MOVF CANCommand, WMOVWF CANReceivedData.gen ENDIF; release receive bufferSetCANReg COMMAND_REGISTER, 0x04CheckBufferClear:GetCANReg STATUS_REGISTERBTFSC CANCommand, Bit0; no more data to readGOTO ReadReceivedDataRETLW 0;............................................................................... ; Given a register address in 'CANRegister' and a command to be written to; that address in 'CANCommand' this function will send the command to the CAN. ;............................................................................... DoCANSetRegister:MOVLW PortAsOutputTRIS CAN_ADDRESS_PORTMOVF CANRegister, WMOVWF CAN_ADDRESS_PORTMOVLW PortAsOutputTRIS CAN_CTRL_PORTBCF CAN_CTRL_PORT, CAN_ADDRESS_LATCH_ENABLE_BIT; latch the addressBSF CAN_CTRL_PORT, CAN_SELECT_BITMOVLW PortAsOutputTRIS CAN_COMMAND_PORTMOVF CANCommand, WMOVWF CAN_COMMAND_PORTMOVLW PortAsOutputTRIS CAN_CTRL_PORTBSF CAN_CTRL_PORT, CAN_WRITE_BITMOVLW PortAsOutputTRIS CAN_CTRL_PORTMOVLW CAN_RESETMOVWF CAN_CTRL_PORT; reset all control linesRETLW 0 ;...............................................................................;............................................................................... ; Given a register address in 'CANRegister' the value is read from that register ; into 'CANCommand' ;............................................................................... DoCANGetRegister:MOVLW PortAsOutputTRIS CAN_ADDRESS_PORTMOVF CANRegister, WMOVWF CAN_ADDRESS_PORTMOVLW PortAsOutputTRIS CAN_CTRL_PORTBCF CAN_CTRL_PORT, CAN_ADDRESS_LATCH_ENABLE_BIT; latch the address constant BSF CAN_CTRL_PORT, CAN_SELECT_BITBSF CAN_CTRL_PORT, CAN_READ_BITMOVLW PortAsInputTRIS CAN_COMMAND_PORTMOVF CAN_COMMAND_PORT, WMOVWF CANCommand; store resultMOVLW PortAsOutputTRIS CAN_CTRL_PORTMOVLW CAN_RESETMOVWF CAN_CTRL_PORT; reset all control linesRETLW 0 ;...............................................................................;............................................................................... ; Clears LCD Screen ;............................................................................... DoLCDClearScreen:MOVLW 0x01MOVWF FirstLineCALL LCDClearScreenCore; clear first lineMOVLW 0x00MOVWF FirstLineCALL LCDClearScreenCore; clear second lineRETLW 0DoLCDClearScreenCore:.gen FOR LoopCounter = #0 TO #16MOVLW' 'MOVWF CharacterToDisplayMOVF LoopCounter, WMOVWF LinePositionCALL LCDSendCharacter.gen ENDFORRETLW 0 ;...............................................................................;............................................................................... ; Sends the character in 'CharacterToDisplay' to the LCD; at address 'LinePosition', on a line determined by the; 'FirstLine' boolean.DoLCDSendCharacter:CALL LCDWaitTillReadyMOVLW PortAsOutputTRIS LCD_DATA_PORTMOVF CharacterToDisplay, WMOVWF LCD_DATA_PORT; output the character on the data linesMOVLW PortAsOutputTRIS LCD_CTRL_PORTMOVF LinePosition, WANDLW LCD_LINE_ONBTFSS FirstLine, Bit0; the next line turns on the 'line' bit if this isn't the first line IORLW LCD_LINE_OFFIORLW LCD_STROBE_OFFMOVWF LCD_CTRL_PORTANDLW LCD_STROBE_ONMOVWF LCD_CTRL_PORTMOVF LinePosition, WMOVLW 0xFFMOVWF LCD_CTRL_PORTRETLW 0 ;...............................................................................;...............................................................................; Doesn't return until the LCD is readyDoLCDWaitTillReady:MOVLW PortAsInputTRIS LCD_CTRL_PORT; Set Port To Inputs.gen REPEAT.gen UNTIL LCD_BUSY; Check Busy flag, if High (Busy) then try againRETLW 0 ;...............................................................................;...............................................................................DoDelay1s:.gen FOR LoopCounter = #0 TO #40MOVLW 250MOVWF CountOuterCALL Delay100us.gen ENDFORRETLW 0 ;...............................................................................;...............................................................................; Delay100us:; This function will consume (CountOuter * (99 * 4 + 4)) + 3 == (CountOuter * 400) + 3 cycles ; At 40Mhz processor clock, this will generate a CountOuter * 100 uSecs software delay; Note: if CountOuter is zero, the function will consume (256 * 400) + 3 cycles ;...............................................................................DoDelay100us:LoopOuter:MOVLW 99MOVWF CountInnerLoopInner:NOPNOPDECFSZ CountInner,fGOTO LoopInnerDECFSZ CountOuter,fGOTO LoopOuterRETLW 0 ;...............................................................................;............................................................................... DoDelay2us:MOVLW 1MOVWF CountInnerD2_LoopInner:NOPNOPDECFSZ CountInner,fGOTO D2_LoopInnerRETLW 0 ;...............................................................................END。