发布日期:2022-10-09 点击率:58
霍尔传感器:一种无霍尔传感器的永磁同步电机控制器[实用新型专利] 第1张" title="控制器霍尔传感器:一种无霍尔传感器的永磁同步电机控制器[实用新型专利] 第1张-传感器知识网"/>
专利内容由知识产权出版社提供
摘要:
本实用新型公开了一种无霍尔传感器的永磁同步电机控制器,所述下导热片用于吸收电路
板底部所产生的热量,所述上导热片用于吸收电路板顶部的元器件所产生的热量,所述下导热片上的
所述散热翅片吸收所述下导热片的热量,所述上导热片上的所述散热翅片吸收所述上导热片的热量,
所述翅片与空气接触散发热量,避免了电路板底部和顶部的热量堆积,通过所述水泵使得冷却液在所
述上导热片和所述下导热片中流动,使得所述上导热片和所述下导热片热量进一步减少,使得电路板
顶部的热量进一步减少,过散热孔将无霍尔传感器的永磁同步电机控制器通热空气排出,同时通过两
个所述散热风扇加速空气的流通,进一步降低热量堆积。
申请人:
江阴富茂电机技术有限公司
地址:
江苏省无锡市江阴市石庄璜石路532号
国籍:
CN
代理机构:
南京苏博知识产权代理事务所(普通合伙)
代理人:
陈婧
更多信息请下载全文后查看
位置检测传感器主要有3种,编码器、霍尔传感器、磁传感器,编码器一般指AB相正交脉冲的增量器件,有的还会有一个Z相信号,用来指示零位;霍尔传感器一般是指ABC三个成120度角度间隔排列的器件,这种传感器一般集成在电机内部,电机每转一圈会生成6N个信号,每个信号代表电机转到了特定的角度;磁编码器本质上也是靠霍尔效应检测,但它是一种输出绝对位置的器件,这类传感器一般都有多种接口,如SPI、IIC、模拟值或PWM占空比。
图一、SimpleFOC Library编码器驱动和例程文件目录ABZ正交编码ABZ正交编码器原理图二、正交编码器原理与信号波形
SimpleFOC Library设计了两种正交编码器的计数方法:
正交计数:对信号A和B的每次跳变都进行采样,这样在每个脉冲周期内将有四次信号跳变,采样四次,计数四次(即CPR Count Per Rotation),具体计算见以下源码。 普通计数:对信号A和B的上升沿进行计数,这样每个脉冲周期内将有两次信号跳变,采样两次,但只对某一个通道计数一次(即PPR Pulses Per Rotation),具体计算见以下源码。 正交模式下CPR=PPR*4 普通模式下CPR=PPR,显然正交模式下分辨率更高,但系统开支也更大,如果对分辨率要求不高可以使用普通模式。
MCU对A和B信号线连接的两个IO口使能外部中断,中断回调函数中实现了计数,回调函数源码如下所示,A和B两个通道的回调函数内容一样,只以A通道为例说明。
图三、正交模式下计数方法ABZ正交编码器源码
//定义对象,使能外部中断
Encoder encoder = Encoder(2, 3, 8192); //定义正交编码器对象,连接到2和3号引脚,编码器PPR=8192
void doA(){encoder.handleA();} //A通道中断回调函数
void doB(){encoder.handleB();} //B通道中断回调函数
encoder.enableInterrupts(doA, doB); //使能外部中断,设置回调函数
void Encoder::enableInterrupts(void (*doA)(), void(*doB)(), void(*doIndex)())
{
// attach interrupt if functions provided
switch(quadrature){ //quadrature:是否开启正交模式
case Quadrature::ON:
// A callback and B callback
if(doA != nullptr) attachInterrupt(digitalPinToInterrupt(pinA), doA, CHANGE);
if(doB != nullptr) attachInterrupt(digitalPinToInterrupt(pinB), doB, CHANGE);
break;
case Quadrature::OFF:
// A callback and B callback
if(doA != nullptr) attachInterrupt(digitalPinToInterrupt(pinA), doA, RISING);
if(doB != nullptr) attachInterrupt(digitalPinToInterrupt(pinB), doB, RISING);
break;
}
//如果有Z相信号线,使能Z相的中断
if(hasIndex() && doIndex != nullptr) attachInterrupt(digitalPinToInterrupt(index_pin), doIndex, CHANGE);
}
// Encoder interrupt callback functions
// A channel
void Encoder::handleA()
{
bool A = digitalRead(pinA); //测量A引脚高低电平
switch (quadrature)
{
case Quadrature::ON: //正交模式下:
// CPR=4xPPR
if ( A != A_active ) //如果A引脚状态不等于"当前记录的状态"
{
//如果A引脚"当前记录的状态"等于B引脚"当前记录的状态"计数+1
//对应图六中左侧A信号的上升沿与下降沿状态
//否则为逆时针旋转,计数-1
pulse_counter += (A_active == B_active) ? 1 : -1;
pulse_timestamp = _micros();
A_active = A; //更新A引脚当前状态
}
break;
case Quadrature::OFF: //普通模式下
// CPR=PPR
if(A && !digitalRead(pinB)) //如果A引脚是高电平且B引脚是低电平
{
pulse_counter++; //计数+1,对应图六中左上角A上升沿状态
pulse_timestamp = _micros();
}
break;
}
}
其实STM32的定时器是有编码器计数功能的,但这里这种使用外部中断计数的方法更通用,兼容各种MCU,但是编码器分辨率太高的话会导致频繁进入中断。
ABZ正交编码器例程
#include
//初始化,IO设置
encoder.init();
//使能外部中断
encoder.enableInterrupts(doA, doB);
Serial.println("Encoder ready");
_delay(1000);
}
void loop() {
// display the angle and the angular velocity to the terminal
Serial.print(encoder.getAngle()); //串口打印当前角度-弧度,多圈值(非0--2Π)
Serial.print(" ");
Serial.println(encoder.getVelocity()); //当前速度,弧度每秒
//这个测速方法混合了时间和频率测量技术,在高速或低速时都可以得到较真实的速度
}
霍尔传感器霍尔传感器的原理图四、无刷电机内置编码器安装位置
如上图所示,右侧的3个器件就是霍尔传感器,它们成120度夹角安装,也有60度安装的,但控制逻辑不一样。本节以一对极120度夹角电机模型说明。一对极指转子只有一对磁铁NS极,图四为多对极电机。
图五、一对极单机模型
按特定的组合给电机的UVW三相供电,如U+,V-,W断开,此时电机转子将转到某一固定位置,假设为扇区Sector1,然后切换供电状态为W+,V-,U断开,电机将继续旋转60度到扇区二,按特定的顺序依次切换供电状态,电机将会一直转动下去,共有6种供电状态,对应着6个扇区,6种霍尔传感器的触发状态,如下图所示。
图六、霍尔的六种触发状态图七、霍尔状态波形图
霍尔传感器就是根据这六种状态确定转子的位置,加上这6种状态的循环次数就是当前电机转子的真实位置。
参考文章:
无刷电机霍尔120度控制和60度控制到底是怎么回事?
//HallSensor.h
//霍尔传感器状态与扇区对应关系
// seq 1 > 5 > 4 > 6 > 2 > 3 > 1 000 001 010 011 100 101 110 111
const int8_t ELECTRIC_SECTORS[8] = { -1, 0, 4, 5, 2, 1, 3 , -1 };
霍尔位置传感器的程序源码与ABZ正交编码器程序源码基本相同,引脚配置和外部中断设置基本相同,主要内容在updateState函数中,下边简单分析updateState函数。
霍尔传感器源码
void HallSensor::updateState()
{
long new_pulse_timestamp = _micros();
//刷新三个霍尔传感器的状态
int8_t new_hall_state = C_active + (B_active << 1) + (A_active << 2);
//去除噪声
// glitch avoidance #1 - sometimes we get an interrupt but pins haven't changed
if (new_hall_state == hall_state) {
return;
}
hall_state = new_hall_state;
//匹配当前所在扇区
int8_t new_electric_sector = ELECTRIC_SECTORS[hall_state];
static Direction old_direction;
//
if (new_electric_sector - electric_sector > 3) { //如从扇区0转到了扇区5,则循环次数-1
//underflow
direction = Direction::CCW;
electric_rotations += direction;
} else if (new_electric_sector - electric_sector < (-3)) {//如从扇区5转到了扇区0,则循环次数+1
//overflow
direction = Direction::CW;
electric_rotations += direction;
} else {
direction = (new_electric_sector > electric_sector)? Direction::CW : Direction::CCW;
}
electric_sector = new_electric_sector;
// glitch avoidance #2 changes in direction can cause velocity spikes. Possible improvements needed in this area
if (direction == old_direction) {
// not oscilating or just changed direction
pulse_diff = new_pulse_timestamp - pulse_timestamp;
} else {
pulse_diff = 0;
}
pulse_timestamp = new_pulse_timestamp;
total_interrupts++;
old_direction = direction;
if (onSectorChange != nullptr) onSectorChange(electric_sector);
}
霍尔传感器例程
例程与ABZ编码器的例程基本相同,不再赘述。
磁编码器
磁编码器有基于霍尔效应原理的,也有基于磁阻效应的。SimpleFOC项目使用的有以下几种,这里以AS5600说明。
MagneticSensorI2CConfig_s AS5600_I2C = {
.chip_address = 0x36,
.bit_resolution = 12,
.angle_register = 0x0C,
.data_start_bit = 11
};
MagneticSensorI2CConfig_s AS5048_I2C = {
.chip_address = 0x40, // highly configurable. if A1 and A2 are held low, this is probable value
.bit_resolution = 14,
.angle_register = 0xFE,
.data_start_bit = 15
};
MagneticSensorSPIConfig_s AS5147_SPI = {
.spi_mode = SPI_MODE1,
.clock_speed = ,
.bit_resolution = 14,
.angle_register = 0x3FFF,
.data_start_bit = 13,
.command_rw_bit = 14,
.command_parity_bit = 15
};
// AS5048 and AS5047 are the same as AS5147
MagneticSensorSPIConfig_s AS5048_SPI = AS5147_SPI;
MagneticSensorSPIConfig_s AS5047_SPI = AS5147_SPI;
MagneticSensorSPIConfig_s MA730_SPI = {
.spi_mode = SPI_MODE0,
.clock_speed = ,
.bit_resolution = 14,
.angle_register = 0x0000,
.data_start_bit = 15,
.command_rw_bit = 0, // not required
.command_parity_bit = 0 // parity not implemented
};
磁编码器的原理图八、单对极性磁编码器
AS5600是基于霍尔的旋转磁位置传感器,有12位高分辨率,使用平面传感器来将垂直于芯片表面的磁场分量转换为电压。它有3种输出方式,模拟值,PWM和IIC。
磁编码器例程--模拟值模式
//examplessensor_testmagnetic_sensorsmagnetic_sensor_analog_examplefind_raw_min_maxfind_raw_min_max.ino
#include
// read the data msb and lsb
wire->requestFrom(chip_address, (uint8_t)2);
for (byte i=0; i < 2; i++) {
readArray[i] = wire->read();
}
// depending on the sensor architecture there are different combinations of
// LSB and MSB register used bits
// AS5600 uses 0..7 LSB and 8..11 MSB
// AS5048 uses 0..5 LSB and 6..13 MSB
readValue = ( readArray[1] & lsb_mask );
readValue += ( ( readArray[0] & msb_mask ) << lsb_used );
return readValue;
}
(完)
无刷电机,需要靠霍尔来提供位置换向,让三相电机在某个时刻保持每两个线圈之间通电,常见的霍尔是120°的安装方式的,也就是霍尔传感器的电角度是相差120°的,还有一种是相差60°的,不能互用了。如果霍尔接错了,或者信号不准确,绕组导通并没有按照设计进行,电机当然是无法正常运转的,而且如果导通错误,可能会造成开关管短路引起驱动器烧掉,或者电机出现问题,请关注:容济点火器
单个霍尔,有一条红色线是正极线,一般是12-20伏的,另外一条黑色线是负极,其他一条别的颜色的就是信号线了。
一般电动车负极都是连成一体的,所以电机用到的三个霍尔,可以把负极短接一起,正极也短接一起,这样每个霍尔还有一条信号线,加起来正常会有5条线输出。
这是单个霍尔的三条线,一般有字体那面朝上,从左到右,分别是电源正极,电源负极,信号线。
这是把电源正负短接一起的三个霍尔接法,输出往往会对应有三条黄绿蓝三种颜色的信号线,对应电机线圈的黄绿蓝线圈线来接就是了。对于120°的霍尔而已,更换时候,霍尔需要反过来装配,而且必须插入钢片的槽里边,用胶水固定好,如果没有固定好,当然也无法正常工作的。
但是有些厂家,故意把线颜色搞得和别人不一样了,这种情况,信号线接错了,应该是电机反转,可以调转一下两条线就好了。如果控制器有自适应功能的,这几条信号线可以随便接,它会自动识别的。
如果接上都没有反应,可能是霍尔问题,或者电源线接错了,或者插头存在接触不良等问题。
举报/反馈
直流电机控制板里面的霍尔传感器是用来检测电机的转动速度用的。在有些应用的场合,需要对电机进行调速,要保证电机在某个速度下面保持不变,所以就要加一个检测速度的传感器进行反馈,主控板根据检测的速度值来输出不同的控制脉冲信号,最终达到快速调整电机转速的目的。也叫做霍尔编码器。
编码器的分类
从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器和霍尔编码器。光电编码器是属于光学式编码器,而霍尔编码器则属于磁式编码器。
编码器的原理
1、光电编码器的原理解析
光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换为脉冲数字量的传感器。由光电码盘和光电检测装置组成。光电码盘是在一定直径的圆板上等分地开通若干个长方形的小孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出对应的脉冲信号,一般输出A,B两路具有一定相位差的方波信号,通过两路输出信号,可判断电机的转动方向。
2、霍尔编码器的原理解析
霍尔编码器则是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。霍尔编码器由霍尔码盘和霍尔传感器组成。霍尔码盘在一定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电机同轴,电机旋转时,霍尔元件检测输出对应的脉冲信号,一般输出A,B两路具有一定相位差的方波信号,通过两路输出信号,可判断电机的转动方向。
两种编码器的检测原理是一样的,都是通过输出A,B相的方波信号来检测。只不过光电式的编码器精度要比霍尔式编码器的精度高许多。
简单的检测原理示意图:
如何计算转速?
计算电机的转速都是通过检测输出脉冲的个数来进行计算的。其大概原理是:比如一个500线的电机(转一圈会输出500个脉冲),只要通过单片机定时器设定一个固定的检测时间,假如定时1S的时间,然后通过单片机的外部中断或者输入捕获等方式获得1S钟内的脉冲个数,假如1S内检测到1000个高电平(1000个脉冲),那么就代表了电机刚好转过两圈,这时就可以根据轮子的直径来算出其对应的转速了。
为了提高检测精度,你还可以通过同时检测AB相两路输出的高低电平,具体和检测一路的原理类似。
总结:在电机加装一个霍尔传感器无非就是为了测定电机的转速来使用的,一般传感器可以给控制器提供一个反馈的信号,根据反馈信号就可以进行信号的调制,形成一个闭环控制方式。
下一篇: PLC、DCS、FCS三大控
上一篇: 电气控制线路图控制原