發布日期:2022-10-09 點擊率:61
霍爾傳感器:一種無霍爾傳感器的永磁同步電機控制器[實用新型專利] 第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三大控
上一篇: 電氣控制線路圖控制原