草庐IT

工作小笔记——电机基本参数和选型

m0_71775106 2023-12-07 原文

文章目录


前言

本文给出电机的基本公式,并根据基本公式说明电机的特性,方便再移动底盘设计中对电机的选型有所指导。
本文仅讨论直流电机。

1. 直流电机的等效电路图

直流电机的等效电路如下图所示。

其中:

  • Ub为电机供电电压
  • R为电机等效电阻(电机内阻)
  • L为电机等效电感
  • Um为电机线圈在磁场里旋转带来的反向电动势。
    因此,对于电机匀速旋转情况下,电机电流保持不变时,电机的直流电路满足如下公式:
    U b = R I m + U m U_b = RI_{m} + U_m Ub=RIm+Um

2. 电机参数的推导

2.1 电机转速和反向电动势之间的关系:反电动势常数 K e K_e Ke

一个常识是电机的转速越高,其产生的反向电动势就越大。这一点可以从如下推导得到。
U m = B L v = B L R ω = B L R 2 π 60 n U_m = BLv=BL R \omega = BL R \frac{2\pi}{60} n Um=BLv=BLRω=BLR602πn

其中:

  • B B B为磁感应强度
  • L L L为导线长度
  • v v v为导线运动速度
  • ω \omega ω为电机转速(单位为rad/s)
  • n n n为电机转速(单位为rpm)
  • R R R为旋转半径

K e = B L R 2 π 60 K_e = BL R \frac{2\pi}{60} Ke=BLR602π,对于一个已经设计好的电机,其值为常数,定义为反电动势常数,即反电动势和电机转速之间成线性关系的比值,所以有:
U m = K e × n U_m = K_e \times n Um=Ke×n

2.2. 电机扭矩和电流之间的关系:扭矩常数 K T K_T KT

电机扭矩的公式为:
T = R F = R B L Ⅰ m T =RF = RBLⅠ_m TRFRBLm
其中:

  • T为扭矩,单位为Nm
  • F为电机产生的力
  • R为旋转半径
  • B为磁感应强度
  • L为导线长度
  • I m I_m Im为电机电流

K T = R B L K_T = RBL KT=RBL,对于一个已经设计好的电机,其值为常数,定义为扭矩常数,即扭矩和电机电流之间成线性关系的比值,所以有:
T = K T × I m T = K_T \times I_m T=KT×Im

2.3 K e K_e Ke K T K_T KT相等

由上面推导可知,直流电机中,在采用标准单位时, K T K_T KT K e K_e Ke相同,这也符合电机的能量转换特性。所谓电机,是指电气-机械之间的双向能量转换器:

  • 从“电气→机械”的方向看能量转换,则为弗莱明左手法则,其转换系数为 K T K_T KT
  • 从“机械→电气”的方向看能量转换,则为弗莱明右手法则,其转换系数变成 K e K_e Ke

因此, K T K_T KT K e K_e Ke是同一系数。

2.4. 电机输出功率

电机扭矩和转速的乘积等于电机的做功,也就是电机的输出功率,即电机的反电动势和电流的乘积:
T × n = K T I m U m K e = 9554 P m T \times n = K_T I_m \frac{U_m}{K_e} = 9554 P_m T×n=KTImKeUm=9554Pm
其中:

  • T为扭矩,单位为Nm
  • n为转速,单位为rpm
  • P为功率,单位为千瓦

3. 电机的平衡态

在电机处于某一稳定匀速运行状态(扭矩和阻力矩相等)下,如果给电机增加电压,则会经历如下过程达到平衡:

  • 外加电压增大,其他条件不变时,电流开始增大
  • 电流增加,导致扭矩增大
  • 扭矩增大,使得电机转动加速,导致转速增加
  • 转速增加,导致反向电动势增加
  • 反向电动势增加,阻止电流增大
  • 上述过程往复,达到新的平衡状态

从上述过程可知,当环境确定的情况下(即阻力矩确定),给定一个电压,电机可达到一个确定的工作点。

4. 电机特性曲线

电机选型时,需要给定工作点,尽量让工作点靠近电机特性曲线的最大效率点处。下图为一个典型的电机特性曲线图。

由特性曲线图可知:

  • 对于移动底盘的驱动轮电机应用,当给定工作电压时,该特性曲线的最大效率点所对应的工作点实际上对应的是该电机需要抵抗的阻力矩。
  • 对于风机应用,则该工作点是力矩和转速的曲线(下图桔色斜线)和风道的风阻和转速的曲线的交点。

根据电机的电路模型,只要给定电机的如下几个参数,即可以画出电机的理论特性曲线,而电机的实际特性曲线则需要通过真实实验数据的测试获得。

  • 反电动势常数 K e K_e Ke
  • 扭矩常数 K T K_T KT
  • 电机内阻 R R R
  • 电机内部损耗压降,如电刷带来的电压损耗等 U d r o p U_{drop} Udrop
  • 电机无负载时的空转扭矩 T f T_f Tf
  • 工作电压 U U U

使用matlab绘制该曲线的代码如下:

% Set the constants of the motor
Kt = 8;
Ke = 8 * 2 * pi / 60;
R = 2; % equivalent resistance 
Tf = 2; % no load torque
Udrop = 0.2; % drop voltage of the brash
% Set the supply voltage
U = 24;

Tload = 0:0.1:100000;
I = (Tload+Tf)/Kt;
n = (U-R*I-Udrop)/Ke;
N = length(n(n>=0)); % only the points with rotation speed larger than 0 is valid
P = U * I(1:N)/1000;
Pm = (Tload(1:N)) .* n(1:N) /9554;
eff = Pm ./ P;

plot(Tload(1:N), I(1:N)/max(I(1:N)));
hold on;
plot(Tload(1:N), n(1:N)/max(n(1:N)));
plot(Tload(1:N), Pm/max(Pm));
plot(Tload(1:N), eff/max(eff));
legend('电流', '转速', '功率', '效率');
xlabel('转矩');
title('电机特性曲线');

参考文献

有关工作小笔记——电机基本参数和选型的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些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

  5. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  6. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的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"

  7. ruby - 检查方法参数的类型 - 2

    我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)

  8. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  9. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  10. ruby-on-rails - 在默认方法参数中使用 .reverse_merge 或 .merge - 2

    两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option

随机推荐