i 直流电机控制电路设计 ---基于 EasyFPGA030 学校:广东工业大学 作者:黄禄兴 江信 简流威 时间:2009 年8月28 日 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com ii 目录第1章基于 EasyFPGA030 的电动机控制电路设计.1 1.1 功能概述.1 1.2 器件介绍.1 1.2.1 FPGA 简介.1 1.2.2 A3P030 芯片简介.1 1.2.3 直流电机简介.2 1.2.4 L298N 驱动芯片简要介绍.3 1.3 电路制作及焊接.3 1.3.1 EasyFPGA030 的硬件电路设计.3 1.3.2 EasyFPGA030 的电源电路设计.4 1.3.3 L298N 驱动直流电机电路设计.5 2.3.1 焊接.5 1.3.4 元件清单.6 1.3.5 最终效果图.6 1.4 程序设计原理.6 1.5 总结与体会.10 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 1 第1章 基于 EasyFPGA030 的电动机控制电路设计 1.1 功能概述 本实验是基于 EasyFPGA030 的电动机控制电路设计. 用EasyFPGA030 开发套件实现对 直流电机的正转,反转,加速,减速等控制.整个设计分为硬件设计和软件设计两大部分. 其中软件分三个模块,三个模块分别为:分频模块、正反转模块和加速减速模块.硬件部分 的重点是驱动和控制.整体框图如图 1.1 所示. 图1.1 程序流程图 1.2 器件介绍 1.2.1 FPGA 简介 FPGA 是目前芯片业界中最为昂贵的芯片之一,其主要成本并不体现在芯片的性能,而 是更多的将价值深植到芯片的开发环境与软件工具. 目前业界提供 FPGA 的产品有 ACTEL、 Altera、Xilinx、Lattice 等为数不多的几家.Actel 对流行的 Libero 集成设计环境进行升级可 让用户在易用及简单"选与点" (Pick-and-Click) 操作的用户界面上完全生成可编程系统芯 片;至于低成本的 Actel 融合启动套件则保证设计能迅速和有效地从构想以至完全实施. FPGA 按照工艺来分,大致可分为 sram 架构和 flash 架构的 FPGA.Actel 主要提供非易 失性 FPGA,产品主要基于反熔丝工艺和 FLASH 工艺.Actel 公司推出的一种非易失性、可 重新编程的门阵列 -ProASIC FPGAs.该系列产品的主要特点是:提供 98,000 到110,000 个 可用门; 内嵌有 FIFO 控制逻辑的两端口 SRAM (容量达到 138,000 比特) ; 提供大于 200MHZ 的内部时钟频率;该系列产品的功耗是基于 SRAM 的FPGA 产品的 1/3 到1/2. 1.2.2 A3P030 芯片简介 A3P030 属于 flash 架构的 FPGA,Flash FPGA 的ProASIC3/E 系列器件在价格、性能和 门密度方面有着重大突破,并提供了时下应用所要求的各种功能.M7 ProASIC3/E 内置了 ARM7 软内核,编程非常方便.此外,它还以 ASIC 的单位成本水平提供更快的产品上市速 度.ProASIC3/E 系列器件以非易失 Flash 技术为基础,支持 3 万到 300 万门密度和多达 616 个高性能 I/O 端口.A3P030 是ProASIC3 家族中的一员,传承 ProASIC3 系列的优势特点: 单芯片和低功耗的解决方案、上电即行、高度的安全性和可靠性.为了适应不同的市场应用 领域, A3P030 在替换 CPLD 中表现得非常出色, 而且方便初学者快速掌握和熟练运用 Flash 架构的 FPGA,同时又是加速产品原型开发验证的较好选择.其外观引脚如图 1.2 所示. 特征与优势: ? 基于非易失性 Flash 技术,单芯片解决方案,上电即行; ? 高度的可靠性,固件错误免疫; 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 2 ? 采用精细颗粒架构 VersaTile,资源利用率高; ? 具有 30K 系统门规模,一定的应用领域; ? 提供 1kbit 的片内可编程非易失性 FlashROM,信息存储; ? 灵活高效的全局时钟网络,提高设计性能; ? 在封装上,A3P030 有132-QFN 和100-VQFP 两种; ? 支持最大 81 个用户 I/O,热插拔和冷备份. 图1.2 A3P030 管脚封装 1.2.3 直流电机简介 电动机简称点击, 是使机械能与电能相互转换的机械, 直流电机把直流电能变为机械能. 作为机电执行元部件,直流电机内部有一个闭合的主磁路.主磁通在主磁路中流动,同时与 两个电路交联,其中一个电路是用以产生磁通的,称为激磁电路;另一个电路是用来传递功 率的,称为功率回路或电枢回路.现行的直流电机都是旋转电枢式,也就是说,激磁绕组及 其包围的铁芯组成的磁极为定子, 带换向单元的电枢绕组和电枢铁芯结合构成直流电机的转 子.直流电机有以下 4 方面的优点: ? 调速范围广,且易于平滑调节; ? 过载、起动、制动转矩大; ? 易于控制,可靠性高; ? 调速时的能量损耗较小. 所以,在调速要求高的场所,如轧钢机、轮船推进器、电车、电气铁道牵引、高炉送料 等方面,直流电机均得到广泛的应用.直流电机外观如图 1.3 所示. 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 3 图1.3 直流电机外观图 长期以来, 直流电机以其良好的线性特性、 优异的控制性能等特点成为大多数变速运动 控制和闭环位置伺服控制系统的最佳选择.特别随着计算机在控制领域,高开关频率、全控 型第二代电力半导体器件(GTR、GTO、MOSFET、IGBT 等)的发展,以及脉宽调制(PWM) 直流调速技术的应用,直流电机得到广泛应用.为适应小型直流电机的使用需求,各半导体 厂商推出了直流电机控制专用集成电路,构成基于微处理器控制的直流电机伺服系统. 1.2.4 L298N 驱动芯片简要介绍 L298 是SGS 公司的产品,比较常见的是 15 脚Multiwatt 封装的 L298N,内部同样包含 4 通道逻辑驱动电路.可以方便的驱动两个直流电机,或一个两相步进电机. L298N 芯片可以驱动两个二相电机, 也可以驱动一个四相电机, 输出电压最高可达 50V, 可以直接通过电源来调节输出电压;可以直接用单片机的 IO 口提供信号;而且电路简单, 使用比较方便. L298N 可接受标准 TTL 逻辑电平信号 VSS,VSS 可接 4.5~7 V 电压.4 脚VS 接电 源电压,VS 电压范围 VIH 为+2.5~46 V.输出电流可达 2.5 A,可驱动电感性负载.1 脚和 15 脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号.L298 可 驱动 2 个电动机,OUT1,OUT2 和OUT3,OUT4 之间可分别接电动机,本实验装置我们选 用驱动一台电动机.5,7,10,12 脚接输入控制电平,控制电机的正反转.EnA,EnB 接 控制使能端,控制电机的停转.外观如图 1.4 所示. 图1.4 L298N 外观 1.3 电路制作及焊接 1.3.1 EasyFPGA030 的硬件电路设计 EasyFPGA030 的硬件电路总体框如图 1.5 所示, 一般情况下电源、 时钟和复位是 FPGA 运行所必需的部件,但是如果 FPGA 只实现纯组合逻辑,则时钟也可以省去.Flash 架构的 FPGA 掉电后数据不会丢失, 所以无需像 SRAM 架构的 FPGA 一样需要外部添加一个昂贵 的配置芯片,按键和 LED 是简单的输入输出外设,且都是低电平有效,根据需要来使用. 这个开发套件为了实现单板的操作, 将下载器也集成在了板上, 可以非常方便用户下载程序. 完成后的实物如图 1.6 所示. 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 4 图1.5 EasyFPGA030 硬件总框图 图1.6 EasyFPGA030 实验板 1.3.2 EasyFPGA030 的电源电路设计 A3P030 需要两组电源输入:内核电压和 I/O 电压.内核电压为 1.5V,I/O 电压可以有 多种输入:3.3V、2.5V、1.8V、1.5V,其中 3.3V 是最为常用的一种 I/O 电压,所以开发板 上I/O 电压选择 3.3V,一般情况下两组独立的电源即可. Flash 架构的 FPGA 无论是静态功耗还是动态功耗都比较低,静态功耗一般情况下是 5mW 左右,动态功耗依照设计而定,而且 Flash 架构的 FPGA 上电不需要太大的启动电流 和配置电流,所以这里选用 Exar 公司的 SPX3819 电源芯片,它具有 500mA 的输出电流, 1% 的精度,90μA 的静态电流,3.3V 给I/O 和一些外设供电,1.5V 给内核供电,如图 1.7 所示.其中使用 0.1μF 和1μF 两个电容对输入电源进行滤波,使用 1μF 和10μF 两个电容 对输出电源进行滤波处理,使得电源信号具有较小的噪声. 图1.7 电源电路 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 5 1.3.3 L298N 驱动直流电机电路设计 L298N 驱动引脚图如图 1.8 所示. 图1.8 L298N 引脚电路 L298N 驱动电路如图 1.9 所示. 图1.9 L298N 驱动原理图设计电路 2.3.1 焊接 按电路原理图焊接电路,完成后如图 1.10 所示. 图1.10 焊接完成 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 6 1.3.4 元件清单 元件清单如表 1 所示. 表1元件清单 名称 参数 数量 EasyFPGA030 开发套件 1 套L298N 驱动芯片 1 只L7805 稳压管 1 只 发光二极管 绿1只二极管 1N4007 8 电容 104 2 只10uF 2 只 电阻 1K 1 只 杜邦线 6 根 排针 若干 1.3.5 最终效果图 最终效果如图 1.11 所示. 图1.11 最终效果图 1.4 程序设计原理 本设计是基于 Actel FPGAA3P030 而设计的直流电动机控制系统, 通过编程控制直流电 动机的正反转及加减速.软件分三个模块,三个模块分别为:分频模块、正反转模块和加速 减速模块. 文件相关信息及输入输出口定义如程序清单 1 所示. 程序清单 1 文件信息* ** 文件名称: controler.v ** 创建者: huangluxing ** 创建日期: 2009. 8.30 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 7 ** 版本号: V1.0 ** 功能描述: 实现直流电机的正反转及加速减速的控制 // 引脚变量定义 module controler( clock, zf, bs, out_z, out_f, out_bs ); //以上为端口定义 // 以下为 I/O 说明 input clock; //系统时钟 input [1:0] bs; //变速控制,对应两个按钮开关 input [1:0] zf; //正反转控制,对应两个按钮开关 output out_z; //正转输出控制端,对应硬件电路的正转输入端 output out_f; //反转输出控制端,对应硬件电路的反转输入端 output out_bs; //变速输出控制端,对应硬件电路的转速控制输入端 // 以下为内部信号说明 reg out_bs; //变速控制输出寄存器 reg out_z; //正转控制输出寄存器 reg out_f; //反转控制输出寄存器 reg [15:0] counter_div; //时钟分频计数器 reg [3:0] pwm_count; //PWM 内部计数器 reg[15:0]duty_cycle; //PWM 占空比控制 wire pwm_clk; //PWM 计数时钟 wire div_clk; //正反转时钟 分频模块流程如图 1.12 所示. 图1.12 分频模块流程图 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 8 程序清单 2 ** 模块名称:分频模块 ** 功能描述:对系统时钟进行分频,产生需要的时钟? always @(posedge clock) begin counter_div <= counter_div + 1'b1; end assign pwm_clk = (counter_div[6:0] == 7'h7f); assign div_clk = (counter_div[15:0] == 16'hffff); 正反转模块流程如图 1.13 所示. 图1.13 正反转模块流程图 程序清单 3 ** 模块名称:直流电机的正反转控制模块 ** 功能描述:实现对直流电机的正转和反转的控制功能 always@(posedge div_clk) //分频后时钟上升沿到来时执行此 always 块begin //此begin_end 语句将 always 块中的语句定义为顺序执行 case(zf) //当正反控制按钮有信号输入时,执行此 case 语句 2'd0: begin out_z = 0; out_f = 0; end 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 9 //以下为对应硬件的反转状态 01 2'd1: begin out_z = 0; out_f = 1; end //以下为对应硬件的正转状态 10 2'd2: begin out_z = 1; out_f = 0; end //以下为对应硬件的急刹状态 11 2'd3: begin out_z = 1; out_f = 1; end endcase end 加速减速模块流程如图 1.14 所示. 图1.14 加速减速模块流程图 程序清单 4 ** 模块名称:直流电机的加减速控制模块 ** 功能描述:实现对直流电机的加速和减速的控制功能? 广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 10 //PWM 波计数器 always @(posedge clock) begin if(pwm_clk) pwm_count <= pwm_count + 1'b1; end //PWM 波的改变占空比 always @(posedge clock) begin if ( pwm_count[3:0] < duty_cycle[15:12] ) out_bs <= 1'b1; else out_bs <= 1'b0; end //直流电机细分控制 PWM 波参数表 always @(bs) begin case(bs) 4'h0:duty_cycle = 16'hf000; 4'h1:duty_cycle = 16'he600; 4'h2:duty_cycle = 16'hbb00; 4'h3:duty_cycle = 16'h6e00; endcase end 1.5 总结与体会 在完成这个设计的时候,我得到了从所未有的满足.过去对于 FPGA 的认识我都只是 停留在课本上,并没有怎么实践.可是现在我对 FPGA 已经有了一点理解,从本质上的. 虽然要学的还有很多,但是我知道我已经找到方向了,有什么比方向更重要呢? 开发是一个痛苦的过程, 但是当你看到自己设计的东西出现了成果时, 那份成功的喜悦 是不可言明的.在你努力地完成一个设计项目时,你的知识和能力都会有所提高,其中最重 要的应该是在开发过程以及解决问题的过程中所积累的经验, 这是课本上永远也学不到的东 西.这些对你以后的工作将是非常必要的.当然,一次的开发得到的经验并不是很多,但是 他却是成功的起始点.是我们成功所必经的一个过程. 在这次的开发过程中, 我学到了很多东西. 在设计一个项目时, 我们必须先明确其要求, 在开始开发之前我们还要做到开发工作的明细安排. 也就是我们做事要有一定的顺序, 不能 胡来.如我们可以将一个项目分成几个部分,先从整体上了解其功能,在将他的各部分功能 分开来实现,到最后再将各部分功能综合起来,以完成系统的设计.在调试过程中,我们也 要有一定的方法.总之,只有步步为营,我们才能克服各种困难,最终达到我们的目标,完 成设计.当然,设计并不可能毫无阻碍,我们面对他,唯一的做法就是想办法解决他,而不 是逃避.此外,我们还要综合考虑其他的一些因素如性价比,电路的实用情况等,以使我们 的成果能最好地发挥利用.