如何用N76E003做无刷电机控制器?
网上关于单片机BLCD驱动资料很多,但能通俗易懂的少,看这些资料不得要领、源代码更是看得是一头雾水,尤其关于PWM、换相完全不得其法。本文,就准备以最基本的通俗易懂的思维,带大家一步一步的来了解无刷电动机驱动的思路和设计。
由于属于入门级别的,所以只以有霍尔的三相无刷电机为例子来展开。其实搞懂了有霍尔,则无霍尔也仅仅只是程序上的升级版而已。
网上关于三相无刷电机的基本原理、UVW接法,转动原理就不重复了,这里就直接核心的内容,先根据霍尔来展开。
霍尔传感器,这里也假定大家已经知道其基本原理和输出信号(如果想理解原理,大家另行去找资料看),这里所说的,是已经获取到完整的霍尔信号,并进一步就霍尔信号和驱动信号来一步一步的展开。
说起霍尔,又绕不过去一个令很多人疑惑的概念:120°和60°。
所谓120°霍尔,和60°霍尔,从实际上来说,是以物理角度安装位置就可以明确区分的,其安装角度步距角度为60°就叫60°霍尔,120°的类推。
下面是旋转一个360度电气角度的120°霍尔信号时序:
行业标准霍尔编码从100开始,这里图片的波形时序也按照该标准。
这里特别称为360度电气角度,是因为,360度完成了一个循环,而并不是电机转了360°,电机到底转了多少角度还和电机的极数有关,极数越多,则360°一个循环驱动周期电机转动的角度越小。UVW都是一个极的,则电机真的转了360度,而都是2个极的则只转了180°,以此类推,这个大家了解就好,关系就是驱动扭矩和转速等的区别,和原理、程序基本没什么区别。
下图是60°霍尔信号的时序:
对比上面2个时序图,大家应该可以发现,60°和120°时序的差别,也就是各个霍尔是在角度差异120°还是60°时候改变状态而已。
现在,我们把60°霍尔的Hb信号反一个相,或者在电机上面转换一个面安装,同时把这个这个信号当成Hc,而把原来的Hc当成Hb,再来看看新是时序逻辑,发现了没,它就是120°霍尔的时序图了。图是直接在60度时序上面变换,所以看起来第一顺序就不是典型的100了,大家顺延类推就好。
这就是网上常常说的,60°-120°其实安装位置是一样的,只是中间一个反了个个安装而已说法的由来,当然这个说法好像都忽略了,相位顺序最后2个必须颠倒一下。
上面说了120°和60°的关系了,相信大家都已经明白,其实这些问题,如果放到程序里面去处理,会更加简单,所以,这里就只讨论120°霍尔条件下的电机及其驱动,弄清楚这个,大家肯定可以非常简单的处理出60度霍尔的对应方法。
图为一个三相无刷电机典型的输出驱动线路简化图。这里分别标注了各个驱动信号的位置和意义,当然这里的AH---CL都只是逻辑上的高低电平表述,实际上我们必须通过浮栅驱动等手段来实现MOS管的具体驱动线路,这些,会在后面讲到。
有了典型驱动线路,那么,我们该怎么去驱动这个线路能?
下面就通过另一个时序图,清楚的了解一下单片机各驱动端输出逻辑和霍尔的关系。
经过对单片机6个端口的驱动时序要求,我们进一步分析,可以得到时序图后面标注的输出和霍尔ABC的逻辑关系。各个关系自己看图就好了。
对应这样的驱动时序要求,我们会单片机编程的,已经在想了,这逻辑实现起来,在程序上面不怎么难嘛,是的,这就是我们说的换相逻辑,其实,到这里,如果你会基本的编程,那么你就已经可以根据输入的3个霍尔信号,编程完成AH-CL6个驱动IO端口的逻辑了。为了编程过程更加清晰明了,我们下面根据上图的换相逻辑,用一个混合的逻辑图来进一步说明:
这里,我们把3个IO,分别接到3个霍尔信号端,同时采用N76E003管脚中断方式,每个霍尔状态变化都将引起一次中断,用一个寄存器(可位寻址),每个中断分别读取3个霍尔点位,并取反存储到对应bit,然后根据竖线所表示的逻辑关系,直接逻辑运算,就已经获得了各端口输出信号,如果我们把各位集中暂存在某寄存器,等六位完成后,一次性送到一个IO寄存器,就可以一次性输出变化后的驱动信号,而不会有任何时序上的先后。
上面的霍尔换相驱动,我们是基于时序图并用基本的逻辑运算来实现,看起来有点复杂,其特点是思路明确,直接模拟逻辑运算过程实现换相。缺点是程序过程稍嫌复杂,换相运算量相对大点,而这个是不利于提高转速的。
那么是不是有更简洁快速的方法呢?当然有,我们马上可以想到另外一种常用手段那就是查表。我只需要把可能的几种组合,变成表里面的数据,直接查表不就成了。
请看下面的图:
我们把各输出端口,分别定义为bit5-bit0,其中,AH=bit5;AL=bit4;....CL=bit0,程序输出时候,这些位,将直接对应单片机P端口的输出寄存器。
再看看把霍尔信号当成地址数据,则可以发现,地址占3位,而状态只有6种就开始重复了,那么其中有000和111是非法地址,其他都是合法地址。根据上面的思路,我们按照地址升序排列,就可以获得下面的表格:
就这样,当霍尔信号边沿变化,中断到来时候,我们只需要检查一下是不是非法地址,并直接排除,然后就把霍尔数据当成3位地址查表,将查表数据直接填入到IO输出寄存器,就实现了非常简单的换相逻辑,而且运算量非常小。
到这里,有人会问了,你上面描述的,换相是有了,可都只是方波,这里没PWM什么事情啊。对的,为了清除的说明问题,这里还真没有加入PWM,你可以理解为,上面说的所有换相逻辑,都是PWM100%时候的波形,也就是,如果我们按照上面的去做,我保证电机完全可以正常转起来的,缺点就是转起来就是最高速度,它是不会调速的.......。当然还有启动时候电流大什么的,这些我们暂时就先忽略了吧。
电机不能调速怎么成,我们当然必须要能够用PWM无级变速、那么实际的速度控制的我们该怎么做呢?
其实非常简单,我们把上面描述的换相逻辑当中的波形,每路驱动信号幅度为1的那高电平部分,直接替换成我们可以控制的PWM信号,则一个带PWM调速的无刷有霍尔电机就完成了。
当我们能够把输出变成这样一种驱动信号的时候,再描述一下PWM调速的过程:
当我们准备运转电机时候,则单片机PWM开始增加,然后电机在换相逻辑控制下,输出符合上面时序图的带PWM的驱动波形,然后电机开始旋转,在某个合适的PWM占空比条件下,电机最终就会稳定在一个合适的速度,而不再是上面那个简单方波,一接上电机,电机就是全速运转。
到这里,关于换相逻辑的部分都已经说明白了,那么我们怎么具体去实现呢?
N76E003其实为电机驱动做好了充分的准备,人家芯片硬件都弄的好好的,我们只需要把这些硬件驱动起来便是了。。。
编辑:admin 最后修改时间:2020-11-04