ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:129.76KB ,
资源ID:29952865      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29952865.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于fpga的无刷直流电机控制软件篇之霍尔信号.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于fpga的无刷直流电机控制软件篇之霍尔信号.docx

1、基于fpga的无刷直流电机控制软件篇之霍尔信号基于fpga的无刷直流电机控制软件篇之霍尔信号) 作者: 日期: 霍尔信号根据在电机安装位置的不同,有2种不同的时序图,分别是60度和120度。这个要根据电机的厂家提供的资料。我这次选型的电机是60度。时序图如下:s1-s6分别对应6个状态,每一个状态的电气角度是60度。霍尔信号在这里不仅要用来换向。还要用测速,提高电机控制系统的测速反馈。先来说换向。s1-s6代表6个状态,每个状态对应6个开关管的开启和关闭。上图为6个状态对应霍尔信号逻辑电平和对应6个开关管的开关逻辑状态。软件部分这里很好处理,简单的状态机就可以实现了。但是,不要忘记我们的集成模

2、块是dvr8312,它的控制接口为pwm_a pwm_b,pwm_c rst_a,rst_b,rst_c,并不是对应6个开关管。这是dvr8312手册上给出的用常规6个开关管信号的逻辑图。我们就按手册的来。程序如下:timescale 1ns / 1psmodule PWM_ctrl(clk,rst_n, pwm_ah,pwm_bh,pwm_ch, rst_an,rst_bn,rst_cn, hall_a,hall_b,hall_c );input clk;input rst_n;input hall_a; /三相霍尔信号input hall_b;input hall_c;output pwm

3、_ah; /a相输出output pwm_bh; /b相输出output pwm_ch; /c相输出output rst_an; /rst_a输出output rst_bn; /rst_b输出output rst_cn; /rst_c输出/-/霍尔换相 分为6状态 每状态只有2相通电/ s1s2s3s4s5s6/hall_a 111000/hall_b 001110/hall_c 100011/pwm_ah 110000/pwm_al 000110/pwm_bh 001100/pwm_bl 100001/pwm_ch 000011/pwm_cl 011000/-reg 2:0 hall1;re

4、g 2:0 hall2;reg pwm_ahr;reg pwm_bhr;reg pwm_chr;reg pwm_alr;reg pwm_blr;reg pwm_clr;/reg9:0 ctrl_reg;regpwm_reg;reg 9:0 cnt;parameter ctrl_reg = 200;always(posedgeclk or negedge rst_n)if(!rst_n)begin pwm_reg =1b0; cnt = 10b0; endelse begin if(cnt =ctrl_reg) pwm_reg = 1b1; else pwm_reg = 1b0; endalwa

5、ys (posedge clk or negedge rst_n)if(!rst_n) cnt = 10b0;else cnt = cnt + 1b1;always (posedge clk or negedge rst_n)if(!rst_n)begin hall1 = 3b0; hall2 = 3b0; endelse begin hall1 = hall_a,hall_b,hall_c; hall2 = hall1; end/-always (posedge clk or negedge rst_n)if(!rst_n)begin pwm_ahr = 1b0; pwm_bhr = 1b0

6、; pwm_chr = 1b0; pwm_alr = 1b0; pwm_blr = 1b0; pwm_clr = 1b0; endelse begin case(hall2) 3b101:begin pwm_ahr = pwm_reg; pwm_bhr = 1b0; pwm_chr = 1b0; pwm_alr = 1b0; pwm_blr = pwm_reg; pwm_clr = 1b0; end 3b100:begin pwm_ahr = pwm_reg; pwm_bhr = 1b0; pwm_chr = 1b0; pwm_alr = 1b0; pwm_blr = 1b0; pwm_clr

7、 = pwm_reg; end 3b110:begin pwm_ahr = 1b0; pwm_bhr = pwm_reg; pwm_chr = 1b0; pwm_alr = 1b0; pwm_blr = 1b0; pwm_clr = pwm_reg; end 3b010:begin pwm_ahr = 1b0; pwm_bhr = pwm_reg; pwm_chr = 1b0; pwm_alr = pwm_reg; pwm_blr = 1b0; pwm_clr = 1b0; end 3b011:begin pwm_ahr = 1b0; pwm_bhr = 1b0; pwm_chr = pwm_

8、reg; pwm_alr = pwm_reg; pwm_blr = 1b0; pwm_clr = 1b0; end 3b001:begin pwm_ahr = 1b0; pwm_bhr = 1b0; pwm_chr = pwm_reg; pwm_alr = 1b0; pwm_blr = pwm_reg; pwm_clr = 1b0; end default:; endcase endassign rst_an = pwm_ahr | pwm_alr;assign rst_bn = pwm_bhr | pwm_blr;assign rst_cn = pwm_chr | pwm_clr;assig

9、n pwm_ah = pwm_ahr;assign pwm_bh = pwm_bhr;assign pwm_ch = pwm_chr;/-endmodule如果要换向的话,只需要改变状态切换顺序就可以。这里就不详细说了。简要说明,软件思路,计数器计数,pwm_reg为经过控制算法处理后的控制量,和计数器进行比较,如果小于输出高电平,大于输出低电平。仿真图如下:占空比为50%时。可以明显看到每个换向状态只有2个管开,而且分别对应一上一下。具体计数器的位数选择我会在以后的系统连接中作说明。没有整个系统的联系这个位数是无法确定的。位数也同样决定了时钟频率。作为电机控制的2个环路之一速度环。 这里采用

10、霍尔信号进行测速。再来看霍尔的时序图一次高电平对应180度的电气角度。如果对高电平进行计数,计数值就对应180度的电气角度。计数时间就是时钟周期与计数值的积,这就得到电气速度。相对应机械角度要查看电机的磁极对数,电气速度/磁极对数就是相应的机械速度。利用霍尔信号测速的方法有分两种。一种就是如我之前说的对高电平计数,还有一种就是固定一个时间内对霍尔信号的高电平计数。同样也可得到速度。这部分我参考了很多资料。最后选用一种对2相霍尔信号取与非,得到一个一个霍尔开关状态下的高电平,用计数器对这个高电平计数的方法。这部分具体效果如果只能等实际测定后才能下结论。程序如下:odule speed_get(c

11、lk,rst_n,hall_a,hall_b,speed );input clk;input rst_n;input hall_a;input hall_b;/input hall_c;output 15:0 speed;reg hall_ar1,hall_ar2;reg hall_br1,hall_br2;/reg hall_cr1,hall_cr2;always (posedge clk or negedge rst_n)if(!rst_n)begin hall_ar1 = 1b0; hall_ar2 = 1b0; hall_br1 = 1b0; hall_br2 = 1b0; endel

12、se begin hall_ar1 = hall_a; hall_ar2 = hall_ar1; hall_br1 = hall_b; hall_br2 = hall_br1;endwire hall_speed = hall_ar2 &( hall_br2);reg hall_speed1;always (posedge clk or negedge rst_n)if(!rst_n)begin hall_speed1 = 1b0; endelse begin hall_speed1 = hall_speed; end wire hall_neg = hall_speed1 & hall_sp

13、eed;wire hall_pos = hall_speed1 & hall_speed;reg 15:0cnt_speed;reg 15:0speed_reg;reg 1:0 state;always (posedge clk or negedge rst_n)if(!rst_n) begin cnt_speed = 16b0; state = 2b00; endelse begin case(state) 2b00:begin if(hall_pos) state = 2b1; else state = 1b0; end 2b01:begin cnt_speed = cnt_speed + 1b1; if(hall_neg) state = 2b11; else state = 2b01; end 2b11:begin speed_reg = cnt_speed; cnt_speed = 16b0; state = 2b00; end default:state = 2b00; endcase endassign speed = speed_reg; endmodule对于这个高电平,我做了边沿检测处理,用这2个检测脉冲来启动和清零计数器。仿真图:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1