上一篇文章我们讲了一些无刷电机的基础知识,包括无刷电机的内部结构,驱动原理等,我们知道了只需要按照转子的当前位置,来按顺序给定子线圈通电,就能让电机转动起来。
但是,上一篇中我们跳过了一个关键步骤,就是如何检测转子的位置。本篇我们就讲讲常用的位置检测方法,以及引出的一些相关问题。
我们知道,获取磁铁的位置可以用霍尔传感器,无刷电机的转子就是永磁体,因此只要在合适的位置安装霍尔传感器,就能知道转子的旋转位置。
在无刷电机中,一般用3个开关型霍尔器件就能检测转子的位置。霍尔的安装位置可以相隔120°,也可以相隔60°,我们以下图3N2P型电机,霍尔相隔120°的安装方式为例:

a、b、c是三个霍尔传感器。当N极接近霍尔a时,a输出高电平1;当N远离a时,a输出低电平。同理b、c也是一样的特性。
因为2P的转子是一对极,所以在转子逆时针转动一周时,a、b、c霍尔的输出波形就都会高低电平变化一次,如下图所示:

例如,下图中,转子当前的位置会使得霍尔输出cba = 110:

这样我们通过霍尔传感器的输出,可以确定转子的当前位置,再结合上一篇讲的方法,就可以使它转动起来了。
如果我们想使用“二二导通”的方法让它逆时针转动,在图中位置cba = 110,则应该使得B线圈加正电压C线圈加负电压A悬空;这个加电状态保持到N极转到接近c位置时,霍尔输出会自动变为cba = 100,则我们的加电状态应该变为A线圈加正电压C线圈加负电压B线圈悬空,才能让转子继续逆时针转动。
不难发现,三个霍尔的输出在一个周期内是6个状态,正好对应了“二二导通”法电机转动一圈时对线圈通电的6个状态。
于是,我们只需要用abc三个霍尔的输出来控制ABC三个线圈的加电状态,就能控制电机连续地转动起来了。
具体来说,逆时针转动时,如下切换:

顺时针转动时,如下切换:

至此,有霍尔感的无刷电机驱动,就可以用上述方法驱动起来了。
关于有传感器的位置检测,还有许多其他方法,如编码器、光电传感器、旋转变压器等等。后续小白白会专门写一篇文章讲解。
在一些微、小电机系统中,安装位置传感器对电机的体积和成本会有不利影响,因此,无传感器的位置检测技术也非常有实用价值。我们先来讲解它的原理,再聊聊它的优缺点。
我们以下面这张图为例:

对比一下上节中有传感器的驱动方式,在这个位置,是B线圈加正电压C线圈加负电压A线圈悬空。
电机的转子磁铁在转动时,显然在A线圈上会有产生一个感应电动势。假如当转子磁铁转动时,S极先接近线圈A,然后从另一边远离线圈A,在线圈A中产生的感应电动势就会有一个由正变为负的过程(或者由负变正),也即是感应电动势会有一个过零点。(注意一下,这里的感应电动势过零点,是以三个线圈的中心连接点为参考点的)。
所以,我们可以在电机转动时,检测不加电的那一相的感应电动势得过零点,就能知道转子的位置了。
检测过零点的方法有很多种,可以用比较器,如下图的电路,是检测其中一相的示例:

注意图中的中点电压,一般无刷电机是不会把中点引出来的,要通过其他方式获取,可以用三相线串电阻后连到一起得到。下图是一种经典的获取中心点电压的方法,左边是三相线上取的电压,右边输出是中心点和三相过零的检测点:

上图中的电阻值可以依据供电调整,主要是分压用的。
另外,电机转动起来时、以及用PWM控制时,都会产生很多干扰,在过零比较时需要加入滤波电路,上图中的电容就是一种简单的滤波方法,但是要注意,加电容滤波以后会造成电压的相位滞后,所以电容值不能过大。如果是通过软件采集后再判断过零点,也可以通过软件来滤波。
检测到转子的位置,就可以据此进行换向了,最佳换向位置是在过零点之后30°。那么如何知道转过30°需要多长时间呢?
通常的方法,是近似认为转子的转速是均匀的,从上一次换相到本次过零的时间,就约等于本次过零到下次换相的时间。由此,我们只需要用单片机进行计时,就可以知道近似的30°的换向位置。
另一种更加简单直接的方法,是在检测到过零点后,立即进行换向,这种方法换向位置不是最佳的,会损失一些效率。
至此,无传感器的位置检测和驱动方法,我们已经基本了解了。
但是,此时又出现了一个新问题,在初始启动、转子还没有转动时,磁铁和线圈没有相对运动,线圈里是没有感应电动势产生的,那该怎样确定转子的位置呢?我们看下一节,无传感器电机的启动问题。
由于无传感器的模式,需要靠感应电动势来判断转子的位置,所以电机刚开始启动时,或者转速很低时,感应电动势很小,是无法用来检测位置的。所以无传感器的无刷电机的启动是个难点问题。
一般的方法是采用三段法启动,即先预定位,再启动加速,最后进入闭环控制。具体的实现方法如下:
就是先给某两相通电一小会儿,让转子转到预定的位置;这个通电时间、占空比需要依据不同的电机和负载情况确定;否则可能会由于长时间在一个线圈上加电烧坏,或者时间太短不能预定位。
就是依据所要转动的方向,依次给各相加电(换相);启动的过程,需要多次换相,并逐渐加速;同样的,这个加速过程也与具体的电机和负载相关,需要测试来确定,换相频率太低,电机加速慢,线圈也会发热严重;换相频率太高,电机运行起来容易失步,导致加速失败。
常见的加速有三种方式:恒频升压法、恒压升频法、升频升压法,字面意思就可以理解,就不多解释了;如某些航模电调,加速时,每次延时时间比上一次减少1/25,直到电机完全转起来。
当启动加速到一定转速时,反电动势及其过零点可以被稳定的检测到时,就可以切换到闭环控制状态,也就是按上一节的控制逻辑进行换相驱动了。
由无感驱动的方法可以看出,它的启动是比较复杂的,在低速运转时感应电动势较小时也运行困难,所以无感无刷电机不合适用在频繁启停、低速运转的场合,而比较适合用于体积、成本受限、运行速度比较高的场合。
通过上述讲解,我们知道了,无论是有感还是无感无刷电机,在转动时,是靠转子的位置去确定下一时刻的通电状态,而转到下一个位置的时间只与供电电压相关,所以,无刷电机调速时,最简单得方法是调整供电电压,或者使用PWM控制。
使用PWM控制时,常用的方法是在导通区间内,上下桥臂其中之一恒通、另一半用PWM控制,如下图所示,左图是下桥臂恒通上桥臂PWM控制的方式,右图是上桥臂恒通下桥臂PWM控制的方式:

好了,到这里无刷电机的相关基础知识就已经讲完了。
如果觉得有用,可以关注我的微 信 公 众 号:小白白学电子,不定期有文章和福利分享:
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O