资源描述
系统设计专题之电机调速控制设计
学院: 自动化和电气工程学院
班级: ********
姓名: *****
学号: *******
日期: *******
1CPLD系统介绍
1.1CPLD介绍
CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一个用户依据各自需要而自行结构逻辑功效数字集成电路。其基础设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成对应目标文件,经过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计数字系统。
1.2CPLD系统基础构架
关键包含有处理器、外围电路及接口和外部设备三大部分其中外围电路通常包含有时钟、复位电路、。程序存放器、数据存放器和电源模块等部件组成。外部设备通常应配有USB、显示器、键盘和其它等设备及接口电路。在一片CPLD微处理器基础上增加电源电路、时钟电路和存放器电路,就组成了一个CPLD关键控制模块。其中操作系统和应用程序全部能够固化在ROM中。
1.3CPLD系统特点
采取32位EPM3032A微处理器和实时操作系统组成CPLD控制系统,和传统基于单片机控制系统和基于PC控制方法相比,含有以下突出优点:
性能方面:采取32位RISC结构微处理器,主频从30MHz到1200MHz以上,靠近PC机水平,但体积更小,能够真正地“嵌入”到设备中。
实时性方面:CPLD机控制器内嵌实时操作系统(RTOS),能够完全确保控制系统强实时性。
人机交互方面:CPLD控制器可支持大屏幕液晶显示器,提供功效强大图形用户界面,这些方面性能也靠近于PC,优于单片机。
系统升级方面:CPLD控制器可为控制系统专门设计,其功效专一,成本较低,而且开放用户程序接口(API)确保了系统能够快速升级和更新。
1.4CPLD技术应用领域
CPLD技术可应用在:工业控制;交通管理;信息家电;家庭智能管理;网络及电子商务;环境监测;机器人等领域。
在工业和服务领域中,大量CPLD技术也已经应用于工业控制、数控机床、智能工具、工业机器人、服务机器人等各个行业,正在逐步改变着传统工业生产和服务方法。比如,飞机电子设备、城市地铁购票系统等全部可应用CPLD系统来实现。
2设计内容
2.1任务目标
依据所学CPLD系统知识,经过硬件和软件想结合,编程控制电机正转、反转、加速和减速。
2.2硬件原理图
硬件原理图图1所表示:EPM3032A芯片起到接收PWM信号并实现对电机控制作用。
图1 硬件原理图
2.3 H桥原理图
H桥电动机驱动电路包含4个三极管和一个电机。图2所表示。要使电机转动,必需导通对角线上一对三极管。依据不一样三极管导通情况,电流可能从左至右或从右至左流过电机,从而控制电机转向。
图2 H桥原理图
当G1和G4导通时,电机受正向电压,导通一段时间后,令G4截止,因为电机中存在电感,电流不能突变,电流经G1和Q3导通续流,此时电动机两端变压为零,输出电压均值为电动机电压。这么就实现了电机正转。
在周期不变情况下,改变变换器输出电压占空比,就改变了输出电压均值,也就改变了电机转速。当输出高电平时间增大,而低电平所占时间减小时,此时实现是加速,反之就是减速。
当G2和G3导通,电机受负向电压,导通一段时间后,令G2截止,因为电机中存在电感,电流不能突变,电流经G3和Q1导通续流,此时电动机两端变压为零,和正转类似,这么就实现了电机反转。反转时也能实现加减速,同正转。
2.4直流电机调速
直流电机控制驱动芯片:L9110.
L9110 是为控制和驱动电机设计两通道推挽式功率放大专用集成电路器件,将分立电 路集成在单片 IC 之中,使外围器件成本降低,整机可靠性提升。该芯片有两个 TTL/CMOS 兼容电平输入,含有良好抗干扰性;两个输出端能直接驱动电机正反向运动,它含有 较大电流驱动能力,每通道能经过 800mA 连续电流,峰值电流能力可达 1.5A;同时它 含有较低输出饱和压降;内置钳位二极管能释放感性负载反向冲击电流,使它在驱动 继电器、直流电机、步进电机或开关功率管使用上安全可靠。L9110 被广泛应用于玩具汽 车电机驱动、脉冲电磁阀门驱动,步进电机驱动和开关功率管等电路上。
图3 L9110管脚定义、参数
L9110直流电机控制芯片管脚波形图:
图4 L9110管脚波形图
L9110直流电机控制芯片电路接线图。
图5 L9110电路接线图
利用脉冲宽度调制(PWM)原理进行调速。PWM是靠改变脉冲宽度来控制输出电压。图3所表示。经过改变周期来控制输出频率,而输出频率改变可经过改变脉冲调制周期来实现。
图6 脉冲宽度调速原理图
平均电压:。为PWM脉冲占空比,决定平均电压大小。占空比越大,电路开通时间越长。
PWM含有以下优点:
(1)无需进行数模转换;
(2)抗噪性能强,PWM是数字形式,噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1,才能对数字信号产生影响,PWM用于通信时极大延长通信距离;
(3)PWM既经济也节省空间。
3 试验一,熟悉编程环境和仿真工具
3.1QuartusⅡ编程软件
Quartus II 是Altera企业综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL和AHDL(Altera Hardware 支持Description Language)等多个设计输入形式,内嵌自有综合器和仿真器,能够完成从设计输入到硬件配置完整PCLD设计步骤。
3.2在系统可编程器件设计步骤
1.创建新设计项目:设计第一步,它任务是建立一个项目,包含项目文件和项目标题。
2.选择器件:在器件选择窗口中选择要使用器件。针对某个可编程器件进行设计时,建立项目后,应首先选择器件。
3.输入和修改源文件:设计过程中最关键一步。全部设计思想经过源程序形式输入计算机。一个项目可能由一个或多个源文件组成。
4.编译和优化:编译用途和其它语言是一样。若不能经过编译,则需修改源文件。
5.仿真:使用ModelSim软件进行仿真。目标是对设计正确性进行检验。从功效上对设计正确性进行检验,它假定信号传输时间为0,和适配器时间无关。若仿真结果和设计要求不符,则需修改设计。
6.下载:经过下载电缆,将生成pof数据文件下载到电路EPM3032ATC44-10器件中。下载又称为编程。一个器件只有经过下载这一步骤,才能将设计结果转化为该器件功效,在电路板上发挥应有作用。
3.3建立由原理图源文件组成设计
1.创建一个新设计项目
(1)选择菜单File->New Project,在Create Project Wiszard对话框Work Director栏中,选择工程保留路径,在Name中键入项目名。
(2)按Next按钮,出现添加工程文件对话框,以下图:
这里先不管它,然后按next进行下一步,选择FPGA器件型号,以下图:
(3)在Family下拉框中,选择MAX3000A系列,选择此系列具体芯片EPM3032ATC44-10。实施next出现选择其它EDA工具对话框,Simulation选项中Tool name选择ModelSim-Altera,Format(s)选择SystemVerilog HDL,按next进入工程信息总概对话框;
(4)按Finish按钮即建立一个项目。
2.建立一个Verilog文件
(1)实施FileNew,弹出新建文件对话框,以下图:
选择Verilog HDL File,点击OK,开始程序编写。双击左侧下方Tasks窗口中Compile Design,对程序进行编译;编译假如出现错误,对程序进行修改,直至完全编译成功。
(2) 选择Processing->Start->Start Test Bench Template Writer,生成激励文件.vt。选择Files->open,打开工程文件夹下simulation->modelsim中All Files里.vt文件,对其进行修改,使输入信号初始化,将系统时钟信号进行延时,避免出现仿真时内存不够情况,修改后点击保留。以下图:
(5)为仿真添加激励文件。选择Assignments->setting->EDA Tool Settings->Simulation,在NativeLink settiong下,选择Compile test bench,
点击Test Benches。在弹出Test Benches窗口下点击New,弹出New Test Bench Settings窗口。在Test bench name下命一个名字,在Top level module in test bench中输入.vt文件中带有_vlg_tst名字。勾选Use test bench to perform VHDL timing Simulation,在Design instance name in test bench中输入i1;点击下方Test bench and simulation files下File name后...,选择.vt文件,点击Add。连点OK,直至回到QuartusⅡ主界面。以下图
3.4建立一个 MSim 工程,将其放在了D:\pro 下,建立完成后样子图 3.1:
图7 软件主界面
然后,编译,打开MSim.vt文件,编辑输入模拟量(#2 repeat(3000) #2 GCLK<=~GCLK;)。图5所表示:
图8 编辑输入模拟量
配置modelsim仿真设置,打开仿真器,仿真结果以下:
图9 仿真波形
4 试验二,电机调速控制编程和调试
4.1编程
依据任务要求,编写程序以下:程序有5个输入和2个输出。clk为时钟脉冲输入,SW1、SW2、SW3和SW4分别代表控制电机开启/停止、正/反转、加速和减速。
首先检测脉冲新信号上升沿,设定一个寄存器,统计脉冲个数。然后对按键进行判定。加速和减速控制是经过改变参考值,以实现改变占空比,实现调速。
程序1:
图10 控制程序
4.2调试结果及分析
1)连接界面
2)下载程序界面。
图12 控制程序下载界面
4.3仿真结果
1. PWM正转仿真波形
1)进行仿真输出波形图所表示,能够实现电机正转加速:
(speed = 2'b11、flag_zhengzhuan==1;)
图13 正转加速波形
2)进行仿真输出波形图所表示,能够实现电机正转加速:
(speed = 2'b10、flag_zhengzhuan==1;)
3)进行仿真输出波形图所表示,能够实现电机正转加速:
(speed <= 2'b01、flag_zhengzhuan==1;)
4)进行仿真输出波形图所表示,能够实现电机正转加速:
(speed = 2'b00、flag_zhengzhuan==1;)
2. PWM反转仿真波形
2)进行仿真输出波形图所表示,能够实现电机正转加速:
(speed = 2'b11、flag_fanzhuan==1;)
2)进行仿真输出波形图所表示,能够实现电机正转加速:
(speed = 2'b10、flag_fanzhuan==1;)
2)进行仿真输出波形图所表示,能够实现电机正转加速:
(speed = 2'b01、flag_fanzhuan==1;)
5 总结
首先,经过系统设计专题这门课,学习了什么是CPLD系统,对CPLD系统部分知识(如定义,基础构架,特点,应用及发展前景等)有了部分基础了解,对CPLD有了更系统认识。CPLD系统就是将计算机硬件和软件结合起来组成一个专门装置,这个装置能够完成部分特定功效和任务,能够在没有些人工干预情况下独立地进行实时监测和控制。
其次,经过亲自动手编写对应程序来完成试验,锻炼了独自处理问题能力。同时,在完成目标过程中,发觉了部分问题,比如学习并掌握理论知识并不难,将理论知识应用到实际工程上就极难了,恰恰我们缺乏就是这种能力,老师们能够依据学生情况将该课程设定为为实践课程而不是一味讲解理论,对学生提升实践能力很有帮助。
最终,在龚老师指导和帮助下,经过自己努力和同学进行讨论,最终能顺利完成既定目标。
附录一
试验一程序:
module MSim(GCLK, PWMAH);
input GCLK;
output PWMAH;
reg[3:0] q; //
reg PWMAH;
initial
begin
PWMAH <= 0;
q = 0;
end
always @(posedge GCLK) //
if(q == 1)
begin
PWMAH <= 1;
q = q+1;
end
else if(q == 9)
begin
PWMAH <= 0;
q = q+1;
end
else if(q == 15)
q = 0;
else q = q+1;
endmodule
附录二
试验二程序:
module MSim(clk, SW1, SW2, SW3,SW4, pwm1, pwm2);
input clk;
input SW1; //电机启/停控制按键
input SW2; //电机正/反转控制按键
input SW3; //电机减速控制按键
input SW4; //电机加速控制按键
/**
*@吕宪龙
*输出控制变量
*
*/
output pwm1; //正转
output pwm2; //反转
/**
*@吕宪龙
*定义寄存器锁住信号
*
*/
reg pwm1;
reg pwm2;
reg[1:0] speed;
reg[6:0] cnt;
reg flag_zhengzhuan; //正转标志位
reg flag_fanzhuan; //反转标志位
reg flag; //正反转换挡
//防抖设计
reg[2:0] dout1,dout2,dout3,buff; //消抖寄存器
wire[2:0] key_edge; //按键消抖输出
/**
*@吕宪龙
*程序变量初始化
*
*/
initial
begin
pwm1 = 0;
pwm2 = 0;
speed = 2'b00;
//dir = 2;
flag_zhengzhuan = 0;
flag_fanzhuan = 0;
flag = 0;
end
/**
*@吕宪龙
*程序循环体部分
*
*/
always@(posedge clk)
begin
if(cnt < 7'd100)
cnt <= cnt + 7'b1;
else
cnt <= 7'b0;
end
always@(posedge clk)
begin
if(!SW1) //电机开启/停止控制按键
begin
if( flag_fanzhuan == 0 && flag_zhengzhuan == 0 ) //电机正在停止,则运行
begin
flag_zhengzhuan = 1;
flag_fanzhuan = 0;
speed <= 2'b10;
end
else if(speed == 0) //速度为零,则开启
speed <= 2'b10;
else if(speed != 0 ) //速度不为零,则停止
flag_zhengzhuan = 0;
flag_fanzhuan = 0;
end
if(!SW2) //电机正转/反转控制按键
begin
if(flag_zhengzhuan == 1) //电机正在正转,则反转
begin
flag_zhengzhuan = 0;
flag_fanzhuan = 1;
end
else if(flag_fanzhuan == 1) //电机正在反转,则正转
begin
flag_zhengzhuan = 1;
flag_fanzhuan = 0;
end
// speed <= 2'b10;
end
if(!SW3) //电机加速控制按键
begin
speed <= speed + 1;
end
if(!SW4 ) //电机减速控制按键
begin
speed <= speed - 1;
end
if(flag_zhengzhuan==1) //电机正转调速
begin
pwm2 = 0;
if(speed == 2'b11) //4档
begin
if(cnt < 7'd02)
pwm1 <= 1'b0;
else
pwm1 <= 1'b1;
end
else if(speed == 2'b10) //3档
begin
if(cnt < 7'd30)
pwm1 <= 1'b0;
else
pwm1 <= 1'b1;
end
else if(speed != 2'b01 ) //档
begin
if(cnt < 7'd75)
pwm1 <= 1'b0;
else
pwm1 <= 1'b1;
end
else if(speed != 2'b00 ) //1档,占空比10%
begin
if(cnt < 7'd99)
pwm1 <= 1'b0;
else
pwm1 <= 1'b1;
end
end
if(flag_fanzhuan==1) //电机反转调速
begin
pwm1 <= 0;
if(speed == 2'b10) //4档
begin
if(cnt < 7'd02)
pwm2 <= 1'b0;
else
pwm2 <= 1'b1;
end
else if(speed == 2'b10) //3档
begin
if(cnt < 7'd30)
pwm2 <= 1'b0;
else
pwm2 <= 1'b1;
end
else if(speed != 3'b01 ) //2档
begin
if(cnt < 7'd80)//70)
pwm2 <= 1'b0;
else
pwm2 <= 1'b1;
end
else if(speed != 3'b00 ) //1档
begin
if(cnt < 7'd99)
pwm2 <= 1'b0;
else
pwm2 <= 1'b1;
end
end
end
endmodule
展开阅读全文