机器故障?购置更换零件?停产设备麻烦?不要犹豫,请速与我们联系,我们可以快速提供优质、合格的工业备件,解决您各处寻找的烦恼!
--------------------------------------------------
允许我给您介绍下这个产品和我们的服务:现货 全新原装*** 15天质量问题无条件包退换
一年质保 完善的***服务 雄厚的技术人才后盾 真正的为客户排忧解难
客户的满意 是对我们的肯定 更是我们的动力
单子,得之,我幸。不得,我力争到底 全心服务
--------------------------------------------------
GE IC698CPE020全新现货,库存充足
优质的产品★优质的价格★优质的***★优质的服务,是您***佳的选择!
其中R1-R8的电阻值为320Ω。R9-R12的电阻值为2.2KΩ。Q1-Q4为达林顿管D401A,Q5-Q8为S8550。J1、J2与步进电机的六条引线相连
2.2 CPLD硬件电路的设计
使用CPLD器件使电路的设计变得十分简洁。我们只需要把CPLD的I/O脚引出来, 接上相应的外围器件就可以了。CPLD与专用数字芯片(如74SC164等)的一个重要区别是其I/O 口的功能可任意在软件上设定,这样在硬件设计中便可只用考虑电源线与地线的分布。以减小高频电流噪声对数据传输的影响。
在设计CPLD电路时,电源、时钟以及I/O与目标芯片都可通过接插件进行连接。***后在管脚锁定的时候把CPLD的I/O分别与单片机和电机电路部分相连就可以了,这样使电路的安装调试变得更加简便。
2.3 控制的实现
由于篇幅的限制。在此只讨论单片机与CPLD逻辑接口部分以及CPLD中控制信号的产生部分。
首先说明单片机和CPLD逻辑接口的问题。AT89S51与EPM7128SLC84的I/O电压都为5V。所以它们的I/O可以直接连接。无需增加额外的电路。如果使用的是I/O电压为3.3V的可编程逻辑器件,则需要考虑逻辑接口这个问题。
同时通过时序分析. 我们可以知道该系统中EPM7128SLC84的输入信号建立时间Ts=8ns。也就是说输入CPLD的信号必须持续8ns以上才能够被CPLD识别。单片机如采用12MHZ的晶振,则信号的改变时间为微秒级,完全满足这个条件。
当单片机根据实际情况计算出控制信息(电机的速度和方向)后就要联络CPLD以便及时的把信息传给它。单片机和CPLD交换数据可以选用并行传送或者串行传送的方式。考虑到单片机和CPLD的引脚都比较丰富。而且并行传送的接口相对简单,因此选用并行的方式交换数据。规定传送数据的协议如下图所示:
由图可知,单片机每次用P0口发送3个字节的数据(N1、N2分别为速度和方向控制字,N3为和校验字节),当CPLD检测到EN从高到低的跳变表示传进数据开始。每个字节的有效数据出现在CLK的上升沿。ACK为CPLD的应答信号。当CPLD接收完数据后进行和校验.如果不对则把ACK拉高。单片机若检测到ACK为高电平则重新开始送数的过程。CPLD接收到正确的数据后就把它转换成步进电机的物理运动。直到接收到新的控制信息。我们用VHDL语言编程,并选择EPM7128SLC84-15作为目标器件进行时序仿真和硬件测试。程序的框图如下:
- EN:系统使能信号。
- CPLD_CLK:系统时钟信号。
- N1:速度控制信号。
- N2:方向控制信号。
系统时钟CPLD_CLK在速度控制信号N1的控制下得到脉冲分配器(状态机)的输入时钟,此时钟的频率决定控制逻辑输出的频率从而(在允许的范围内)控制电机的转速。EN为高电平时系统使能开始正常运转。N1为01H代表电机正转,00H代表电机反转。
程序的脉冲分配器部分采用状态机的方法编写。状态机是纯硬件数字系统中的顺序控制电路,在状态机的运行方式上类似于控制灵活方便的CPU,而在运行速度和工作可靠性方面都优于CPU。
状态机部分的VHDL代码如下:
PROCESS(C_ST,EN,N1,BCLK)
BEGIN
IF RISING_EDGE(BCLK) THEN C_ST<=N_ST;
IF EN="1" THEN
CASE C_ST IS
WHEN ST0=> IF N1=00000000 THEN
N_ST<=ST1; ELSE N_ST<=ST7;END IF;
CON_OUT<=1000;
WHEN ST1=> IF N1=00000000 THEN
N_ST<=ST2; ELSE N_ST<=ST0;END IF;
CON_OUT<=1100;
WHEN ST2=> IF N1=00000000 THEN
N_ST<=ST3;ELSE N_ST<=ST1;END IF;
CON_OUT<=0100;
WHEN ST3=> IF N1=00000000 THEN
N_ST<=ST4;ELSE N_ST<=ST2;END IF;