版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于基于 verilog 的课程设计的课程设计直流电机的直流电机的 pwmpwm 控制控制指导老师指导老师:翁嘉民班班 级级:1031 电气自动化技术成成 员员:李高峰 201020709112王俊才 201020709186孟令朋 201020709143目目 录录1 1绪论绪论.3 31.1 直流电机介绍.31.1.1 直流电机的特点.31.1.2 直流电机的应用.31.2eda 介绍.31.3fpga 介绍.41.4 verilog hdl 硬件描述语言.41.4.1 verilog hdl 硬件描述语言介绍 .41.4.2 verilog hdl 功能.41.5 pwm 脉冲宽度调制介
2、绍.51.6 直流电机的 pwm 控制.52 2设计原理设计原理.6 62.1 设计原理框图.62.2 原理图.72.3 模块设计.72.3.1 moto_test模块.72.3.2 pwm_logic模块 .92.3.3 频率计模块.112.3.4 计数器模块.12 2.3.32.3.3 频率计模块频率计模块.10102.3.42.3.4 计数器模块计数器模块.12123 3仿真结果仿真结果.14144.4. 引脚锁定引脚锁定.14.145 5论文总结论文总结.14146.6. 实物图实物图.16.167 7实训心得实训心得.17.17参考文献参考文献.直流电机的直流电机的 pwmpwm 控
3、制器的设计控制器的设计1 1绪论绪论1.11.1直流电机介绍直流电机介绍直流电机是实现直流电能与机械能之间相互转换的一种电力机械,按照直流电机的用途分为直流电动机和直流发电机两类。能够将机械能转换成直流电能的电机称为直流发电机;能够将直流电能转换成机械能的电机称为直流电动机。1.1.11.1.1直流电机的特点直流电机的特点从直流电机与交流电机相比中可以看出,直流电机具有优良的调速性能和启动性能。直流电机具有宽广的调速范围,平滑的无级调速特性,可实现频繁的无级快速启动、制动和反转;过载能力大,能承受频繁的冲击负载;能满足自动化生产系统中各种特殊运行的要求。而直流发电机则能提供无脉动的大功率直流电
4、源,且输出电压可以精确地调节和控制。1.1.21.1.2直流电机的应用直流电机的应用直流电机是交通、工矿、建筑等行业中的常见动力机械,是机电行业人员的重要工作对象和工具。在某些要求调速范围广、速度快、精密度高、控制性能优异的场合,直流电机的应用目前仍占有较大的比重,如大型可逆式轧钢机、内燃机车、矿井卷扬机、造纸和印刷机械、宾馆高速电梯、城市电车、电动自行车、龙门刨床、电力机车、地铁列车、船舶机械、大型精密机床和大型起重机等生产机械中。1.21.2eda 介绍介绍eda 电子设计自动化是 electronic design automation 的简称,从 20 世纪60 年代中期发展开始至今,
5、已经取得了飞跃性的进步,在电子技术设计领域,可编程逻辑器件(如 cpld、fpga)的应用,已经非常普及,这些可编程逻辑器件为数字系统的设计带来了相当大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构和改变,这就使得硬件的设计可以如同软件设计那样方便快捷效率高,可编程逻辑器件加快了 eda 技术的发展,在现代社会,尤其是电子信息科技行业发展突飞猛进,在化工、机械、电子、通信、医学、航空航天、矿产、生物、军事等各个领域都有 eda 的广泛应用,相信在为了社会 eda 技术会发展的更加发达。1.31.3fpga 介绍介绍fpga 是 fieldprogrammable gate
6、array 的简称,即现场可编程门阵列,它是在 pal、gal、cpld 等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(asic)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。fpga 采用了逻辑单元阵列,内部包括可配置逻辑模块、输出输入模块和内部连线三个部分。fpga 具有一些重要的特点,例如:采用 fpga 设计 asic 电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片;fpga 可做其它全定制或半定制asic 电路的中试样片;fpga 内部有丰富的触发器和 io 引脚;fpga 是asic 电路中设计周期最短
7、、开发费用最低、风险最小的器件之一;fpga 采用高速 chmos 工艺,功耗低,可以与 cmos、ttl 电平兼容。所以可以这么认为,fpga 芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。fpga是由存放在片内 ram 中的程序来设置其工作状态的,因此,工作时需要对片内的 ram 进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,fpga 芯片将 eprom 中数据读入片内编程 ram 中,配置完成后,fpga 进入工作状态。掉电后,fpga 恢复成白片,内部逻辑关系消失,因此,fpga 能够反复使用。fpga 的编程无须专用的 fpga 编程器,只须用通用的epr
8、om、prom 编程器即可。当需要修改 fpga 功能时,只需换一片 eprom即可。这样,同一片 fpga,不同的编程数据,可以产生不同的电路功能。因此,fpga 的使用非常灵活。1.41.4 verilog hdl 硬件描述语言硬件描述语言1.4.1.4.1 verilog hdl 硬件描述语言介绍硬件描述语言介绍本文的程序采用 verilog hdl 硬件描述语言,verilog hdl 硬件描述语言时目前应用最广泛的硬件描述语言,verilog hdl 可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。verilog hdl适合算法级,寄存器级,逻辑级
9、,门级和版图级等各个层次的设计和描述。本文就是基于 fpga,产生 pwm 波形,通过 verilog hdl 语言编程实现电机的运转控制的。1.4.21.4.2 verilog hdl 功能功能verilog hdl 典型的功能,基本逻辑门,例如 a n d、o r 和 n a n d 等都内置在语言中。 用户定义原语( u d p)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。 开关级基本结构模型,例如 p m o s 和 n m o s 等也被内置在语言中。 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。 可采用三种不同方式或混合方式对
10、设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。 verilog hdl 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。能够描述层次设计,可使用模块实例结构描述任何层次。 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。verilog hdl 不再是某些公司的专有语言而是 i e e e 标准。人和机器都可阅读 verilog 语言,因此它可作为 e d a的工具和设计者之间的交互语言。verilog hdl 语言的描述能力能够
11、通过使用编程语言接口( p l i)机制进一步扩展。p l i 是允许外部函数访问 verilog 模块内信息、允许设计者与模拟器交互的例程集合。 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级( rt l)到算法级,包括进程和队列级。能够使用内置开关级原语在开关级对设计完整建模。 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。 verilog hdl 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。 在行为级描述中, verilog hdl 不仅能够在 rt l 级上进行设
12、计描述,而且能够在体系结构级描述及其算 法级行为上进行设计描述。 能够使用门和模块实例化语句在结构级进行结构描述。 在 verilog hdl 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。 verilog hdl 还具有内置逻辑函数,例如&(按位与)和|(按位或) 。对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。可以显式地对并发和定时进行建模。 提供强有力的文件读写能力。 1.51.5 pwm 脉冲宽度调制介绍脉冲宽度调制介绍脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管
13、或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。pwm 控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。脉冲宽度调制(pwm)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。pwm 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(on),要么完全无(off)。电压或电流源是以一种通(on)或断(off)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流
14、供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用 pwm 进行编码。1.61.6直流电机的直流电机的 pwm 控制控制pwm 信号可以由 cpu 产生,也可以由 fpga 产生。由 cpu 产生 pwm 信号时,是通过模拟比较器产生的,比较器的一端接一个给定的参考电压,另一端接周期性线性增加的锯齿波电压。当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时就输出高电平。所以改变参考电压就可以改变pwm 波形的高电平的宽度,也就是改变 pwm 波形的占空比。cpu 产生 pwm信号,需要 d/a 转换器产生锯齿波电压和设置参考电压,通过外接模拟
15、比较器输出 pwm,因此外围电路很复杂。而用 fpga 的数字 pwm 控制产生 pwm 信号,只需要 fpga 内部资源就可以实现,fpga 的优点和工作原理前文已经描述,运用可编程逻辑器件,采用 verilog hdl 硬件描述语言编程。数字比较器的一端接设定值计数器输出,另一端接线性递增计数器输出。如果线性计数器的计数值小于设定值是就输出低电平,如果线性计数器的计数值大于设定值时输出高电平。fpga 的数字 pwm 控制与模拟 pwm 控制相比,省去了外接的d/a 转换器和模拟比较器,fpga 外部连线很少、电路简单、便于控制。2设计原理设计原理2.12.1设计原理设计原理框图框图直流电
16、机控制电路主要由 3 部分组成:(1) fpga 中产生 pwm 脉宽调制信号电路(2) fpga 中的工作/停止和正/反转方向控制电路(3) 记速显示模块计数器设置 pwm 信号的占空比。通过设定 duty_cycle 的值改变占空比,当pwm_en =1 时,counter 计数器的输出值增加,当计数器的值小于 duty_cycle 时,pwm 的占空比就会增加,电机转速就会加快;否则 pwm 的占空比减小,电机转速就会变慢。在电机控制模块里,设置了按键消抖部分,防止按键的不灵敏带来的误差,同时设置了 3 个按键,通过按键 1 控制电机速度,按键 1 可以改变 duty_cycle 的值,
17、近而通过 pwm_logic 模块改变 pwm 波形达到改变速度的目的;通过按键 2 控制电动机启动、停止,按键 2 可以改变 pwm_en 的值,使电源接通或者关闭以使电机启动或者停止;通过按键 3 控制电动机正/反转,按键 3 可以改变电机控制模块内部的直流电流方向,从而改变电机的运转方向。2.2原理图原理图2.32.3 模块设计模块设计2.3.12.3.1 moto_testmoto_test模块模块该模块设计了 3 个按键,key2:按下该键产生信号,可以使 pwm 波形翻转,以控制电机正/反转;key1:按下该键测试信号,控制 pwm 波形输出或停止,从而控制电动机启动、停止;key
18、0: 按下该键时,可以改变 pwm 波形的占空比,占空比增加,电机加快,占空比减少,电机变慢,如下图所示:模块程序如下:module moto_test(clock,key,duty_cycle,pwm_en,pwm_in,motoa,motob,led);input clock;/系统时钟(48mhz)input2:0 key;/按键输入(key1key3)output3:0duty_cycle;/pwm 占空比控制输出output pwm_en;/pwm 控制使能端input pwm_in;/产生的 pwm 波输入output motoa;/pwm 波输出output motob;/pwm
19、 波输出output4:0 led; /i/o 寄存器reg3:0duty_cycle;reg pwm_en; /内部寄存器reg16:0count;/时钟分频计数器reg2:0 dout1,dout2,dout3,buff; /消抖寄存器reg moto_dir;/电机正反转reg div_clk;/分频时钟wire2:0 key_edge;/按键消抖输出assign led = pwm_en,duty_cycle; /led 输出状态指示/时钟分频部分always (posedge clock)beginif (count 17d120000)begincount = count + 1b
20、1; div_clk = 1b0; end else begin count = 17d0; div_clk = 1b1; endend/按键消抖部分always (posedge clock)beginif(div_clk)begindout1 = key;dout2 = dout1;dout3 = dout2;endend/按键边沿检测部分always (posedge clock)beginbuff = dout1 | dout2 | dout3;endassign key_edge = (dout1 | dout2 | dout3) & buff;always (posedge
21、 clock)/按键 1,控制电动机速度beginif(key_edge0)duty_cycle = duty_cycle + 1b1;endalways (posedge clock) /按键 2,控制电动机启动、停止beginif(key_edge1)pwm_en = pwm_en;endalways (posedge clock)/按键 3,控制电动机正/反转beginif(key_edge2)moto_dir = moto_dir;endassign motoa = moto_dir ? pwm_in : 1b0;assign motob = moto_dir ? 1b0 : pwm_
22、in;endmodule2.3.22.3.2 pwm_logic 模块模块pwm 波形产生模块,此模块接收按键 2 改变带来 duty_cycle 值的改变,通过内部计数器的计数和比较运算,改变占空比,使波形变化,驱动电机运转快还是慢,模块如下图:模块驱动程序如下:module pwm_logic(clk,pwm_en,duty_cycle,pwm_out);input clk;/系统输入时钟input 3:0 duty_cycle;/pwm 占空比值input pwm_en;/pwm 使能output pwm_out;/pwm 输出reg pwm_out;/pwm 输出reg 15:0 co
23、unter;/pwm 内部计数器always (posedge clk) beginif(pwm_en)counter = counter + 1b1;endalways (posedge clk) beginif (pwm_en & (counter15:12 = duty_cycle)pwm_out = 1b1;elsepwm_out = 1b0;endendmodule2.3.32.3.3 频率计模块频率计模块 该模块将被测信号输入,测试信号频率,用于测试电机速度,并且具有数码管输出端,用于显示电机速度。module freqtest(clock,freq_input,dig,s
24、eg,test);input clock;/系统时钟input freq_input;/被测信号输入 output7:0dig; /数码管选择输出引脚output7:0 seg;/数码管段输出引脚output9:0 test; /输出频率信号,用于测试reg 25:0 counter; /时钟分频计数器reg 31:0 freq_result; /频率测量结果寄存器reg 31:0 pre_freq; /脉冲计数寄存器reg rst;wire divide_clk;/1hz 闸门信号wire clk_scan;/数码管扫描显示时钟wire cout1,cout2,cout3,cout4,cou
25、t5,cout6,cout7;assign clk_scan = counter15;/动态扫描时钟assign test = counter9:0;/输出频率信号,用于测试/时钟分频进程:分出 1hz 基准信号always (posedge clock) beginif (divide_clk) counter = 26d0; else counter = 26d48000000);/锁存测量值进程always (posedge clock) beginif(divide_clk)freq_result = pre_freq;end/产生计数器复位信号always (posedge cloc
26、k) beginif(divide_clk)rst = 1b1;elserst = 1b0;end/8 位十进制计数模块:由 8 个十进制计数模块构成cnt10 u1(.clock(freq_input),.rst(rst),.cin(1b1),.cout(cout1),.dout(pre_freq3:0);cnt10 u2(.clock(freq_input),.rst(rst),.cin(cout1),.cout(cout2),.dout(pre_freq7:4);cnt10 u3(.clock(freq_input),.rst(rst),.cin(cout2),.cout(cout3),
27、.dout(pre_freq11:8);cnt10 u4(.clock(freq_input),.rst(rst),.cin(cout3),.cout(cout4),.dout(pre_freq15:12);cnt10 u5(.clock(freq_input),.rst(rst),.cin(cout4),.cout(cout5),.dout(pre_freq19:16);cnt10 u6(.clock(freq_input),.rst(rst),.cin(cout5),.cout(cout6),.dout(pre_freq23:20);cnt10 u7(.clock(freq_input),
28、.rst(rst),.cin(cout6),.cout(cout7),.dout(pre_freq27:24);cnt10 u8(.clock(freq_input),.rst(rst),.cin(cout7),.cout(),.dout(pre_freq31:28);/数码管显示模块scan_led u9(.clk_1k(clk_scan),.d(freq_result),.dig(dig),.seg(seg);endmodule2.3.42.3.4 计数器模块计数器模块该模块输入信号是电机速度,对其进行计数,便于频率计测试module filter_200us(clk,in,out);in
29、put clk;input in;output out;reg19:0 cnt;reg out_r;always (posedge clk)beginif(in = 1h1) /一旦出现高电平即复位计数器begincnt = 20d9600) /clk=48m,约 200us begin/cnt = 20d9601; /计数满后保持out_r = 1h0; /低电平宽度大于 200us 时输出低电平endelse /低电平宽度小于 200us 时输出高电平begincnt = cnt + 20h1;/计数器累加out_r = 1h1; /endendendassign out = out_r;endmodule3 3仿真结果仿真结果由原理图,利用 quartusii 软件对其进行仿真,仿真图如下:4 引脚锁定如下:引脚锁定如下:说明如下:key2: 控制电动机正/反转key1: 控制电动机启动、停止key0: 控制电动机速度仿真时去掉键盘消抖电路。由仿真图可以看出,当 key2键按下,电路产生一个脉冲信号,使 pwm 波形翻转,从而改变了电机转向;按下 key1键时,电路也产生一个脉冲信号,使 pwm波形输出或停止,从而控制电机启动和停止;key0第 1 脉冲占时钟一个周期,相当按键 1 次。k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省南充市2025-2026学年九年级(上)期末化学试卷(含答案)
- 2022~2023法院司法辅助人员考试题库及答案第359期
- 摄影系期末考试题及答案
- 申论教师招聘试题及答案
- 全国一卷地理试题及答案
- 广东省深圳市南山区2024-2025学年八年级上学期期末地理试卷(含答案)
- 《GAT 1365-2017警用数字集群(PDT)通信系统 网管技术规范》专题研究报告
- 《GAT 974.27-2011消防信息代码 第27部分:抢险救灾基本程序代码》专题研究报告深度
- 2026 年初中英语《时态辨析》专题练习与答案 (100 题)
- 2026年深圳中考数学梯形专项训练试卷(附答案可下载)
- 广西出版传媒集团有限公司2026年招聘备考题库附答案详解
- 陶瓷工艺品彩绘师改进水平考核试卷含答案
- 2025广东百万英才汇南粤惠州市市直事业单位招聘急需紧缺人才31人(公共基础知识)测试题附答案
- 粉尘防护知识课件
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库及完整答案详解一套
- (2025年)粮食和物资储备局招聘考试题库(答案+解析)
- 2026年乐陵市市属国有企业公开招聘工作人员6名备考题库及答案详解一套
- DB32/T+5309-2025+普通国省道智慧公路建设总体技术规范
- 人事行政部2026年年度计划
- 2026年上海市徐汇区老年大学招聘教务员备考题库完整参考答案详解
- 2026年国家电投集团苏州审计中心选聘备考题库及完整答案详解一套
评论
0/150
提交评论