最近整理了一下永磁同步电机最经常使用的几个参数的测量和计算方法,记录分享一下。
1. 电阻、电感测量
2. 极对数测量
3. 磁链常数计算
1、电阻、电感测量:
在测量之前要知道电机是星形接法还是三角形接法,大家应该都知道对于星形接法有:
线电流 = 相电流
线电阻 = 2 * 相电阻
线电压 = √3 * 相电压
对于三角形接法有:
线电阻 = 2/3 * 相电阻
√3 * 线电流 = 相电流
线电压 = 相电压
星形接法和三角形接法电机明显的区别就是负载不同,承受的电压也不同。有上面的关系可以看出星形接法有助于降低绕组承受电压、启动电流、绝缘等级。三角形接法电机有助于提高电机功率,但是启动电流也大…
咳咳,不好意思,跑题了。
这里只针对星形接法电机测量来说。
接着说哈~
数字电桥的情况下:
将数字电桥两端夹在任意两相之间测量,然后调换顺序,测量出三组值,平均值后结果除2。
电感也是一样的做法,只不过任意两相的电感和转子的位置有关,在转子同一方向转动180度电角度的情况下呈现类似正弦波信号.

啦啦啦~ 这样电感和电阻就测量出来了。
无数字电桥的情况下:
这个可以参考http://t.csdn.cn/uxcJw
当然,除了上面两种办法还可以利用软件进行离线参数识别。
这里也做下简单的介绍:
定子电阻辨识方法:
因为有永磁同步电机在ABC轴西的定子电压方程:

us:定子电压空间矢量
Ls:等效同步电感
当给永磁同步电机的三相绕组施加较低的直流电压时,电机的定子侧没有交变的电流,不会产生旋转磁场,因而电机转子不会转动,也没有反电动势,这时产生的三相定子电流会很快到达一个稳定的值。因为电流是一个稳定的值,电机又不转动,所以在稳态时则电压方程几乎可以约等于为:
us =Rs * is
因为已知施加电压,等效图

那么由图可知 -ia /2 = ib = ic
由已知量计算得出定子电阻Rs = 2/3 * UA/ia
定子电感的辨识方法有很多种,譬如高频注入法、脉冲电压法等等,这个之后再一一详细描述。
接下来是极对数的测量。
2、极对数的测量方法
第一种是只利用直流稳压电源就可以。
做法就是将电压设置为0,电源的限制电流设置在电机额定电流的5%~10%;
然后将正负极任意接两根相线上,打开电源输出。用手旋转电机,感觉一下电机是否有明显的阻抗力,否则增加电流
然后旋转电机时,记录电机一圈卡顿的次数,极对数 = 卡顿的次数。
这个就很简单。
第二种只利用示波器
做法就是将用示波器的地线夹住电机的一根相线,任意的另一根相线接探头,然后旋转电机一圈(缺点:不太好控制刚好一圈),截取波形,数下峰值的个数,为偶数值除以2,就是电机的极对数。

由上图可知为6个波峰,就是3极对数
3、 磁链常数计算
磁链其实就是电压对时间的积分,反着来说电机的反电动势为磁链的微分,可以通过测量反电动势得到磁链常数。
啊哈哈,那就是只要确定了反电动势就可以算出磁链了。
抄只有一段话:https://www.zhihu.com/question/360666988/answer/933930161
通电导体在磁场中受力的作用,这样就会产生磁场。转子就是所谓的通电导体,在施加的磁场中便会产生力的作用。转子由于通电也会产生磁场,切割定子线圈也会产生一个电动势,这个电动势称之为反电动势,因为他的电势方向和我们施加于定子用于产生磁场的电动势方向是相反的。这个过程也称之为电枢反应,所以电机的电压平衡方程一般可以写作:
u=R*i+v
这个v就是反电动势。
因为电机空载的时候绕组电流小,所以在这种情况下反电动势的误差自然也小。所以要用空载时的反电动势来做计算。
那么怎么测反电动势呢?对拖
但是平时拿到一个电机,我们要搞半天才能对拖出结果,太麻烦了。
一般我们只要确定一个稳定的电周期就可以了,自己想办法让电机稳定转几圈不就完事了吗?!(懒人做法)

如上图,周期我随便写了个大概值哈,截图的时候忘记测了。
公式我总结的三个计算,其实化简一下是一样的,啊哈哈。

计算1我都化简好了,只要你测量出来周期值(单位:s),和线电压峰峰值就可以直接套公式了:
例:如上图我测量的峰峰值为88.4V,周期4ms = 0.004s
那么磁链常数就等于0.0162649。
计算2和计算3是一样的。

拜拜,先搞这么多~~
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el