多摩川绝对值编码器CPLD FPGA通信源码(VHDL格式+协议+说明书) 用于伺服行业开发者开发编码器接口,对于使用FPGA开发电流环的人员具有参考价值。 适用于TS5700N8501,TS5700N8401等多摩川绝对值编码器,波特率支持2.5M和5M
一、顶层模块(AU5982.vhd)
该模块为系统顶层设计,定义核心参数与接口,实现各子模块的实例化与信号连接。
- 参数定义:包含5个可配置参数,分别为系统时钟频率(SYSCLK)、请求超时时间(RQTOUT)、复位后请求屏蔽时间(RQMASKTIME)、自动请求间隔(AUTOINT)、手动模式选通长度(STBLEN),均通过Generic语句声明,支持根据硬件环境调整。
- 端口定义:
- 输入信号:系统时钟(SYSCLK)、复位(RESETn)、CPU控制信号(CSn、ISn、STRBn、R_Wn、ADDR)、编码器串行数据(SD);
- 输出信号:中断(INTn)、请求信号(RQ)、超时标识(TIMEOUT)、双向数据总线(DATA)。
- 模块实例化:直接例化移位时钟(sftclk)、I/O接口(ioif)、超时检测(timeoutdetect)三个子模块,通过内部信号(如SFT、TObuf、RQSTART)实现模块间数据交互,未对内部逻辑进行额外扩展。
二、请求生成模块(rqgenerate.vhd)
负责根据工作模式生成编码器通信请求信号,支持自动与手动两种触发方式。
- 自动模式:通过AUTORQ信号实现周期性请求,周期由顶层参数AUTOINT定义。当AUTOEN为高电平时,计数器在SFT时钟触发下累加,达到AUTOINT值时生成AUTORQ脉冲,触发请求发送。
- 手动模式:接收CPU的STRBn(选通)和RWn(读写)信号,当STRBn为低且RWn为高时,生成IORQ信号。同时通过STBLEN参数控制选通信号的有效时长,避免信号抖动。
- 输出控制:通过RQSTART信号将自动/手动请求传递至请求处理模块,同时生成RQBUSY信号标识请求状态,防止请求冲突。
三、请求处理模块(rqprocess.vhd)
将请求信号封装为标准帧格式并发送,实现与编码器的请求交互。
- 帧格式处理:请求帧结构固定为“起始位+同步位(010)+4位ID+1位校验位+地址+数据+停止位”,通过状态机(IDLE→SEND→...→DONE)控制帧发送流程,每个状态对应特定位的发送。
- CRC校验集成:调用crcgen模块实时生成8位CRC校验码,在数据位发送完成后自动附加到帧末尾,确保请求数据的完整性。
- 状态标识:通过RQBUSYn(请求忙)和STOUT(发送使能)信号对外反馈发送状态,发送完成后自动复位状态机,等待下一次请求触发。
四、数据接收处理模块(sdprocess.vhd)
接收编码器返回的串行数据(SD),完成解析与错误检测。
- 时序同步:基于sdtiming模块生成的接收时序(TIMING),在SFT时钟触发下对SD信号进行采样,确保数据采集的时序准确性。
- 串并转换:通过byteread模块将串行SD信号转换为8位并行数据(RB),按帧结构解析为状态帧(SF)、数据帧(D0F~D7F)及CRC帧,解析过程严格遵循帧格式定义。
- 帧长度适配:根据编码器ID字段(CF(6 downto 3))自动识别帧长度(x0~x7),不同长度对应不同的数据帧数量,适配多型号编码器输出格式。
- 错误检测:包含四类错误检测逻辑:
- CRC错误(CRCE):对比接收CRC与本地生成CRC;
- 格式错误(FORME/SFOME):检测起始位/停止位异常;
- 校验错误(CONTE):检查ID字段奇偶校验位;
- 超时错误:联动timeoutdetect模块,接收超时时触发。
五、CRC生成模块(crcgen.vhd)
实现8位CRC校验码的实时生成,用于请求帧和接收帧的校验。
- 工作逻辑:在SFT时钟驱动下,当CLRN为低电平时CRC缓存(CRCbuf)清零;当SFT为高电平时,按“CRCbuf(6 downto 0) = CRCbuf(7 downto 1),CRCbuf(7) = CRCbuf(0) xor SD”规则更新缓存,生成实时校验码。
- 输出特性:CRC码通过CRCOUT信号持续输出,供请求处理和接收处理模块调用,未包含额外校验算法。
六、串并转换模块(byteread.vhd)
完成“1位串行数据→8位并行数据”的格式转换,为数据解析提供基础。
- 转换逻辑:在SFT时钟触发下,串行数据SD按位移入READBUF缓存,缓存更新规则为“READBUF(6 downto 0) = READBUF(7 downto 1),READBUF(7) = SD”,8位数据满后通过RD信号输出并行数据。
- 控制信号:通过CLR信号控制缓存清零,确保每次转换的独立性。
七、移位时钟模块(sftclk.vhd)
生成串行通信所需的移位时钟,支持两种工作模式。
- 模式选择:由SELRT信号控制,SELRT=1时直接输出高电平;SELRT=0时输出系统时钟的2分频信号(通过TIMING信号翻转生成),作为默认移位时钟。
- 输出信号:移位时钟通过SFT信号输出,为CRC生成、串并转换等模块提供时序基准。
八、接收时序模块(sdtiming.vhd)
生成数据接收的时序控制信号,协调接收过程。
- 时序生成:基于SD信号和RQBUSY信号,通过状态机生成9位接收时序(TIMING),控制数据接收的采样节奏,确保每帧数据的正确接收。
- 冲突避免:当RQBUSY为高(请求发送中)时,时序状态机保持复位,避免发送与接收冲突。
九、超时检测模块(timeoutdetect.vhd)
监控数据接收过程,检测通信超时异常。
- 超时判断:当SDbusy(接收忙)信号有效时启动计数器,若计数达到顶层参数RQ_TOUT仍未完成接收,则输出TIMEOUT信号标识超时。
- 复位机制:接收完成(SDbusy变低)或系统复位时,计数器清零,超时标识复位。
十、I/O接口模块(ioif.vhd)
实现系统与外部CPU的信号交互,完成控制信号与数据的转换。
- 信号转换:将CPU的CSn(片选)、ISn(中断选择)、ADDR(地址)等信号转换为内部模块可识别的CSI、MANUAL等控制信号,同时将内部状态(如RQSTART)反馈至CPU。
- 数据缓冲:通过OUTBUF缓存内部数据,供CPU读取,未对数据进行额外处理。
十一、输出选择模块(outsel.vhd)
根据控制信号选择输出数据,实现数据总线的复用。
- 选择逻辑:基于工作模式(MANUAL)、地址(ADDR)、帧长度(FRAMELENGTH)从状态帧(SF)、数据帧(D0F~D7F)、ID、CRC中选择对应数据,通过39位双向数据总线(DATA)输出。
- 输出控制:无数据转换逻辑,仅实现信号选通功能。
十二、中断控制模块(intcont.vhd)
生成中断信号,实现系统与CPU的异步通信。
- 中断触发:由SET信号触发INTn中断(低电平有效),支持两种清除方式:
- 手动模式:CPU读写操作(IOR=0、CS=0)时清除;
- 自动模式:STB_TIMER计时达到STBLEN后自动清除。
- 计时逻辑:通过计数器实现STBLEN时长控制,计时基准为系统时钟。
以上解读严格基于原始代码模块划分与逻辑描述,未添加额外功能假设,完整还原了各模块的设计意图与交互关系。
多摩川绝对值编码器CPLD FPGA通信源码(VHDL格式+协议+说明书) 用于伺服行业开发者开发编码器接口,对于使用FPGA开发电流环的人员具有参考价值。 适用于TS5700N8501,TS5700N8401等多摩川绝对值编码器,波特率支持2.5M和5M