伤城文章网 > 信息与通信 > 基于FPGA的步进电机控制芯片设计

基于FPGA的步进电机控制芯片设计


《工业控制计算机》2011 年第 24 卷第 4 期

71

基于 FPGA 的步进电机控制芯片设计
FPGA-based Stepper Motor Control Chip Design
刘征东 吴学杰 (西南交通大学牵引动力国家实验室,四川 成都 610031)
摘 要

研究了一种以 FPGA 为基础的步进电机控制芯片的设计, 本 芯 片 采 用 Actel 公 司 的 ProASIC3 系 列 FPGA :A3P030 进 行 开 发 , 采 用 Verilog HDL 硬 件 描 述 语 言 进 行 硬 件 电 路 设 计 , 使 用 Actel 公 司 出 品 的 Libero 集 成 开 发 环 境 , 通 过 C8051F060 单片机,以 C 语言为开发语言对设计的芯片进行实际测试。 关键词:步进电机,FPGA ,Actel,Libero
Abstract In this paper,there is a FPGA -based stepper motor control chip design.The chip Actel's ProASIC3 Series FPGA: A3P030 is used for development.This paper uses hardware description language Verilog HDL for hardware design.Using Libero integrated development environment produced by Actel company.Testing the chip design through C8051F060 microcontroller with C program language. Keywords:stepper motor FPGA,Actel,Libero

本文通过 Verilog HDL 硬件描述语言,在 FPGA 芯片上,利 用 FPGA 的可重复编程特点,实现对步进电机频率连续可调,脉 冲数可调的精确控制。

频至 8192Hz ,即 2 Hz 。 接着,将分频得到的 2 Hz 分别以 2 、2 、2 …… 2 、2 为 分频系数进行分频,从而得到不重叠的 2 的频率脉冲。 然后,将各路分频脉冲的输出分别和一个 14 位的寄存器进 行逻辑“与”,最后,将 14 个逻辑“与”的结果引入一个 14 个输入 的逻辑“或”门,最终,得到频率从 1Hz 到 8192Hz 的连续可调的 整数频率脉冲。 单片机可以通过对 14 位的寄存器写入控制字, 从而控制脉冲频率的合成。 合成的逻辑原理图如图 2 所示。
n 14 14 13 12 2 1

14

1

步进电机控制原理 步进电机是将电脉冲信号转变为角位移或线位移的开环控

制元件。 在非超载的情况下,电机的转速、停止的位置只取决于 脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加 一个脉冲信号,电机则转过一个步距角。 这一线性关系的存在, 加上步进电机只有周期性的误差而无累积误差等特点。 使得在 速度、位置等控制领域用步进电机来控制变的非常的简单。 在本次芯片设计中, 我们以被广泛使用的四项步进电机为 控制目标。 四项步进电机的驱动信号是以双向移位寄存器来实 现的。 由图 1 可知。 在图 1 中, 移位寄存器接收来自 单片机的正向 / 反向控制信号,控制移 位的方向, 从而控制步进电机的转动 方向。 脉冲则是由我们所设计的芯片 提供。 脉冲的频率控制步进电机的转 动速度,脉冲的个 数 控 制 步 进 电 机 的 图 1
步进电机驱动原理图

转动步数。 Q1 、Q2 、Q3 、Q4 为驱动电路的输出。

2

控制芯片设计 控制芯片设计包括频率合成模块设计和与单片机的接口模

图2

脉冲合成逻辑图

在 图 2 中 ,f 表 示 由 48MHz 分 频 之 后 得 到 的 脉 冲 , 即

块设计。

2.1 频率合成模块设计
频 率 合 成 模 块 需 要 实 现 的 是 将 系 统 时 钟 分 频 合 成 之 后 ,实 现某一阈值内的脉冲频率连续可调, 从而保证步进电机的转动 速度在某一范围内连续可调。 我们采用了脉冲叠加的方式, 实现在某一阈值内的脉冲频 率以整数连续可调。 具体做法如下。 首 先 将 FPGA 的 原 始 时 钟 频 率 48MHz 进 行 分 频 , 得 到 步 进电机脉冲频率的上限值。 考虑到精度的要求,所分频的频率上 限值以 2 的整数次方为宜。 在设计中,我们将 48MHz 的时钟分

8192Hz 的脉冲。 F 表示经过叠加合成之后的脉冲输出。 此模块所对应得 Verilog HDL 源代码如下所示:
always @(posedge clk) begin counter <= counter +1'b1; end assign assign assign assign div1 = (counter[0:0] == 1'b1); div2 = (counter[1:0] == 2'b11); div3 = (counter[2:0] == 3'b111); div4 = (counter[3:0] == 4'b1111);

72
assign assign assign assign assign div5 = (counter[4:0] == 5'b11111); div6 = (counter[5:0] == 6'b111111); div7 = (counter[6:0] == 7'b1111111); div8= (counter[7:0] == 8'b11111111); div9=(counter[8:0] == 9'b111111111);

基于 FPGA 的步进电机控制芯片设计
assign neg_rd = rd_r2 & (觸rd_r1);

以 上 是 下 降 沿 检 测 的 源 代 码 , 其 中 ,rd_r0,rd_r1,rd_r2 为 reg 型。 当 RD 引脚下降沿来临时,neg_rd 将产生一个矩形脉冲 信号。
always @(posedge neg_rd) begin case (addr) 3'b000 : freq[7:0] <= data 3'b001 : freq[15:8]<= data; 3'b010 : step[7:0] <= data; 3'b011 : step[15:8] <= data; 3'b100 : step[23:16] <= data; default: err_out = 1'b1; endcase end

assign div10=(counter[9:0]==10'b1111111111); assign div11=(counter[10:0]==11'b11111111111); assign div12=(counter[11:0]==12'b111111111111); assign div13=(counter[12:0]==13'b1111111111111); assign div14=(counter[13:0]==14'b11111111111111);

以上是对 8192Hz 的 clk 进行分频,得到 div(N) 的输出。 assign A1 = div14& ctl[0]; assign A2 = div13 & ctl[1]; assign A3 = div12 & ctl[2]; assign A4 = div11 & ctl[3]; assign A5 = div10 & ctl[4]; assign A6 = div9 & ctl[5]; assign A7 = div8 & ctl[6]; assign A8 = div7 & ctl[7]; assign A9 = div6 & ctl[8]; assign A10 = div5 & ctl[9]; assign A11 = div4 & ctl[10]; assign A12 = div3 & ctl[11]; assign A13 = div2 & ctl[12]; assign A14 = div1 & ctl[13]; 以上是对分频后的各频率脉冲与 14 位的 ctl 寄存器的各个

这组代码既是当 neg_rd 上升沿到来时,根据三位地址口:

addr[0](A0),addr[1](A2),addr[3](A3) 的 值 ,将 八 位 数 据 口 data 的数据存入相应的寄存器 freq 和 step 中。 2.3 芯片的功能测试 本 控 制 芯 片 的 测 试 是 通 过 C8051F060 单 片 机 对 FPGA 进 行测试,测试系统的基本框图如图 4 所示。

bit 位进行逻辑“与”操作。
assign out=A1|A2|A3|A4|A5|A6|A7|A8|A9|A10|A11|A12|A13|A14;

以上是将逻辑“与”的结果送入 14 位输入的逻辑“或”门,最 终得到叠加合成的特定频率值的脉冲 out。

2.2 与单片机的接口设计
考虑到单片机和本设计芯片之间的接口距离不长, 且对于 传输速率要求不高, 在本芯片与单片机的接口设计中采用八位 并口接口。 如图 3 所示。
图4 测试系统原理图

由以上原理图可以看出,单片机通过 P0 将八位数据放到数 据总线上, 通过 P1.0~P1.2 将三位地址放到地址总线上, 通过

P1.4 对 FPGA 的 RD 引脚进行控制,当 P1.3 引脚产生一个下降 沿时,数据和地址同时被 FPGA 所接收。 当芯片接收到“启动”命 令时,FPGA 的 Output 引脚便开始发出特 定 频 率 , 特 定 步 数 的 方波脉冲。 通过 P1.4 引脚对发出的脉冲进行计数,测试得到与
预设置相同的脉冲个数,即步数。 通过示波器检测脉冲的频率, 得到与预设置值一致的脉冲频率。 由此,FPGA 对于步进电机频 率和步数的控制基本达到了设计的需求,可以进行实际的运用。
图3 与单片机接口设计

3

结束语 通 过 测 试 ,FPGA 芯 片 对 步 进 电 机 的 频 率 及 步 数 控 制 可 以

图 3 中,D0~D7 为八位并行的数据口, 单片机通过这个并 行口将需要的频率及脉冲数以八位并行的方式传递给控制芯 片。 A0 、A1 、A2 则是命令口,或者叫做地址口。 通过这个命令口 八种不同的状态, 将数据口的八位数据分别存放到芯片内相对 应的寄存器当中,当数据口和地址口的数据稳定之后,与单片机 相连接的 RD 引脚一旦检测到下降沿, 则将数据和地址进 行 采 集进入芯片。 实现此接口模块的 Verilog HDL 源代码如下所示:
always @(posedge clk_48m) begin rd_r0 <= rd; rd_r1 <= rd_r0; rd_r2 <= rd_r1; end

达到一般工业控制要求。 由于 FPGA 现场可编程的特点,对于不 同 的 步 进 电 机 ,可 以 根 据 实 际 情 况 ,对 已 有 的 设 计 进 行 修 改 ,从 而达到灵活,普遍的适应不同步进电机的控制需求。 参考文献
[1 ]袁亮,蔡川 . 基于 FPGA 频率连续可调脉冲合成电路实现研究[J ]. 科 技信息,2008 [2 ]夏 宇 闻 .Verilog 数 字 系 统 设 计 教 程 [M ]. 北 京 :北 京 航 空 航 天 大 学 出 版社,2008 [3 ]李湘,刘大汉,江玉华 . 波形发生器设计[K ]. 广州:周立功单片机发展 有限公司,2009 [收稿日期:2011.2.18 ]


搜索更多“基于FPGA的步进电机控制芯片设计”

网站地图

All rights reserved Powered by 伤城文章网 5xts.com

copyright ©right 2010-2021。
伤城文章网内容来自网络,如有侵犯请联系客服。zhit325@126.com