基于fpga的无刷直流电机控制软件篇之霍尔信号_第1页
基于fpga的无刷直流电机控制软件篇之霍尔信号_第2页
基于fpga的无刷直流电机控制软件篇之霍尔信号_第3页
基于fpga的无刷直流电机控制软件篇之霍尔信号_第4页
基于fpga的无刷直流电机控制软件篇之霍尔信号_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

霍尔信号根据在电机安装位置的不同,有2种不同的时序图,分别是60度和120度。这个要根据电机的厂家提供的资料。

我这次选型的电机是60度。

时序图如下:

s1-s6分别对应6个状态,每一个状态的电气角度是60度。

霍尔信号在这里不仅要用来换向。还要用测速,提高电机控制系统的测速反馈。

先来说换向。s1-s6代表6个状态,每个状态对应6个开关管的开启和关闭。

上图为6个状态对应霍尔信号逻辑电平和对应6个开关管的开关逻辑状态。

软件部分这里很好处理,简单的状态机就可以实现了。

但是,不要忘记我们的集成模块是dvr8312,它的控制接口为pwm_apwm_b,pwm_crst_a,rst_b,rst_c,并不是对应6个开关管。

这是dvr8312手册上给出的用常规6个开关管信号的逻辑图。我们就按手册的来。

程序如下:

`timescale1ns/1ps

modulePWM_ctrl(clk,rst_n,

pwm_ah,pwm_bh,pwm_ch,

rst_an,rst_bn,rst_cn,

hall_a,hall_b,hall_c

);

inputclk;

inputrst_n;

inputhall_a;

//三相霍尔信号

inputhall_b;

inputhall_c;

outputpwm_ah;

//a相输出

outputpwm_bh;

//b相输出

outputpwm_ch;

//c相输出

outputrst_an;

//rst_a输出

outputrst_bn;

//rst_b输出

outputrst_cn;

//rst_c输出

//---------------------------------------------------------------------

//霍尔换相分为6状态每状态只有2相通电

//

s1

s2

s3

s4

s5

s6

//hall_a

1

1

1

0

0

0

//hall_b

0

0

1

1

1

0

pwm_ahr<=1'b0;

pwm_bhr<=1'b0;

pwm_chr<=pwm_reg;

pwm_alr<=pwm_reg;

pwm_blr<=1'b0;

pwm_clr<=1'b0;

end

3'b001:begin

pwm_ahr<=1'b0;

pwm_bhr<=1'b0;

pwm_chr<=pwm_reg;

pwm_alr<=1'b0;

pwm_blr<=pwm_reg;

pwm_clr<=1'b0;

end

default:;

endcase

end

assignrst_an=pwm_ahr|pwm_alr;

assignrst_bn=pwm_bhr|pwm_blr;

assignrst_cn=pwm_chr|pwm_clr;

assignpwm_ah=pwm_ahr;

assignpwm_bh=pwm_bhr;

assignpwm_ch=pwm_chr;

//-----------------------------------------------------------------------------

endmodule

如果要换向的话,只需要改变状态切换顺序就可以。这里就不详细说了。简要说明,软件思路,计数器计数,pwm_reg为经过控制算法处理后的控制量,和计数器进行比较,如果小于输出高电平,大于输出低电平。

仿真图如下:

占空比为50%时。可以明显看到每个换向状态只有2个管开,而且分别对应一上一下。

具体计数器的位数选择我会在以后的系统连接中作说明。

没有整个系统的联系这个位数是无法确定的。位数也同样决定了时钟频率。作为电机控制的2个环路之一速度环。

这里采用霍尔信号进行测速。

再来看霍尔的时序图

一次高电平对应180度的电气角度。如果对高电平进行计数,计数值就对应180度的电气角度。计数时间就是时钟周期与计数值的积,这就得到电气速度。相对应机械角度要查看电机的磁极对数,电气速度/磁极对数就是相应的机械速度。

利用霍尔信号测速的方法有分两种。一种就是如我之前说的对高电平计数,还有一种就是固定一个时间内对霍尔信号的高电平计数。同样也可得到速度。

这部分我参考了很多资料。最后选用一种对2相霍尔信号取与非,得到一个一个霍尔开关状态下的高电平,用计数器对这个高电平计数的方法。

这部分具体效果如果只能等实际测定后才能下结论。

程序如下:

odulespeed_get(clk,rst_n,hall_a,hall_b,speed

);

inputclk;

inputrst_n;

inputhall_a;

inputhall_b;

//inputhall_c;

output[15:0]speed;

reghall_ar1,hall_ar2;

reghall_br1,hall_br2;

//reghall_cr1,hall_cr2;

always@(posedgeclkornegedgerst_n)

if(!rst_n)begin

hall_ar1<=1'b0;

hall_ar2<=1'b0;

hall_br1<=1'b0;

hall_br2<=1'b0;

end

elsebegin

hall_ar1<=hall_a;

hall_ar2<=hall_ar1;

hall_br1<=hall_b;

hall_br2<=hall_br1;

end

wirehall_speed=hall_ar2&&(~hall_br2);

reghall_speed1;

always@(posedgeclkornegedgerst_n)

if(!rst_n)begin

hall_speed1<=1'b0;

end

elsebegin

hall_speed1<=hall_speed;

end

wirehall_neg=hall_speed1&&~hall_speed;

wirehall_pos=~hall_speed1&&hall_speed;

reg[15:0]cnt_speed;

reg[15:0]speed_reg;

reg[1:0]state;

always@(posedgeclkornegedgerst_n)

if(!rst_n)begin

cnt_speed<=16'b0;

state<=2'b00;

end

elsebegin

case(state)

2'b00:begin

if(hall_pos)state<=2'b1;

elsestate<=1'b0;

end

2'b01:begin

cnt_speed<=cnt_speed+1'b1;

if(hall_neg)

state<=2'b11;

elsestate<=2'b01;

end

2'b11:begin

speed_reg<=cnt_speed;

cnt_s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论