當(dāng)前位置: 首頁 > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 霍爾傳感器
發(fā)布日期:2022-10-09 點(diǎn)擊率:82
霍爾傳感器:一種無霍爾傳感器的永磁同步電機(jī)控制器[實(shí)用新型專利] 第1張" title="控制器霍爾傳感器:一種無霍爾傳感器的永磁同步電機(jī)控制器[實(shí)用新型專利] 第1張-傳感器知識(shí)網(wǎng)"/>
專利內(nèi)容由知識(shí)產(chǎn)權(quán)出版社提供
摘要:
本實(shí)用新型公開了一種無霍爾傳感器的永磁同步電機(jī)控制器,所述下導(dǎo)熱片用于吸收電路
板底部所產(chǎn)生的熱量,所述上導(dǎo)熱片用于吸收電路板頂部的元器件所產(chǎn)生的熱量,所述下導(dǎo)熱片上的
所述散熱翅片吸收所述下導(dǎo)熱片的熱量,所述上導(dǎo)熱片上的所述散熱翅片吸收所述上導(dǎo)熱片的熱量,
所述翅片與空氣接觸散發(fā)熱量,避免了電路板底部和頂部的熱量堆積,通過所述水泵使得冷卻液在所
述上導(dǎo)熱片和所述下導(dǎo)熱片中流動(dòng),使得所述上導(dǎo)熱片和所述下導(dǎo)熱片熱量進(jìn)一步減少,使得電路板
頂部的熱量進(jìn)一步減少,過散熱孔將無霍爾傳感器的永磁同步電機(jī)控制器通熱空氣排出,同時(shí)通過兩
個(gè)所述散熱風(fēng)扇加速空氣的流通,進(jìn)一步降低熱量堆積。
申請(qǐng)人:
江陰富茂電機(jī)技術(shù)有限公司
地址:
江蘇省無錫市江陰市石莊璜石路532號(hào)
國籍:
CN
代理機(jī)構(gòu):
南京蘇博知識(shí)產(chǎn)權(quán)代理事務(wù)所(普通合伙)
代理人:
陳婧
更多信息請(qǐng)下載全文后查看
位置檢測(cè)傳感器主要有3種,編碼器、霍爾傳感器、磁傳感器,編碼器一般指AB相正交脈沖的增量器件,有的還會(huì)有一個(gè)Z相信號(hào),用來指示零位;霍爾傳感器一般是指ABC三個(gè)成120度角度間隔排列的器件,這種傳感器一般集成在電機(jī)內(nèi)部,電機(jī)每轉(zhuǎn)一圈會(huì)生成6N個(gè)信號(hào),每個(gè)信號(hào)代表電機(jī)轉(zhuǎn)到了特定的角度;磁編碼器本質(zhì)上也是靠霍爾效應(yīng)檢測(cè),但它是一種輸出絕對(duì)位置的器件,這類傳感器一般都有多種接口,如SPI、IIC、模擬值或PWM占空比。
圖一、SimpleFOC Library編碼器驅(qū)動(dòng)和例程文件目錄ABZ正交編碼ABZ正交編碼器原理圖二、正交編碼器原理與信號(hào)波形
SimpleFOC Library設(shè)計(jì)了兩種正交編碼器的計(jì)數(shù)方法:
正交計(jì)數(shù):對(duì)信號(hào)A和B的每次跳變都進(jìn)行采樣,這樣在每個(gè)脈沖周期內(nèi)將有四次信號(hào)跳變,采樣四次,計(jì)數(shù)四次(即CPR Count Per Rotation),具體計(jì)算見以下源碼。 普通計(jì)數(shù):對(duì)信號(hào)A和B的上升沿進(jìn)行計(jì)數(shù),這樣每個(gè)脈沖周期內(nèi)將有兩次信號(hào)跳變,采樣兩次,但只對(duì)某一個(gè)通道計(jì)數(shù)一次(即PPR Pulses Per Rotation),具體計(jì)算見以下源碼。 正交模式下CPR=PPR*4 普通模式下CPR=PPR,顯然正交模式下分辨率更高,但系統(tǒng)開支也更大,如果對(duì)分辨率要求不高可以使用普通模式。
MCU對(duì)A和B信號(hào)線連接的兩個(gè)IO口使能外部中斷,中斷回調(diào)函數(shù)中實(shí)現(xiàn)了計(jì)數(shù),回調(diào)函數(shù)源碼如下所示,A和B兩個(gè)通道的回調(diào)函數(shù)內(nèi)容一樣,只以A通道為例說明。
圖三、正交模式下計(jì)數(shù)方法ABZ正交編碼器源碼
//定義對(duì)象,使能外部中斷
Encoder encoder = Encoder(2, 3, 8192); //定義正交編碼器對(duì)象,連接到2和3號(hào)引腳,編碼器PPR=8192
void doA(){encoder.handleA();} //A通道中斷回調(diào)函數(shù)
void doB(){encoder.handleB();} //B通道中斷回調(diào)函數(shù)
encoder.enableInterrupts(doA, doB); //使能外部中斷,設(shè)置回調(diào)函數(shù)
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相信號(hào)線,使能Z相的中斷
if(hasIndex() && doIndex != nullptr) attachInterrupt(digitalPinToInterrupt(index_pin), doIndex, CHANGE);
}
// Encoder interrupt callback functions
// A channel
void Encoder::handleA()
{
bool A = digitalRead(pinA); //測(cè)量A引腳高低電平
switch (quadrature)
{
case Quadrature::ON: //正交模式下:
// CPR=4xPPR
if ( A != A_active ) //如果A引腳狀態(tài)不等于"當(dāng)前記錄的狀態(tài)"
{
//如果A引腳"當(dāng)前記錄的狀態(tài)"等于B引腳"當(dāng)前記錄的狀態(tài)"計(jì)數(shù)+1
//對(duì)應(yīng)圖六中左側(cè)A信號(hào)的上升沿與下降沿狀態(tài)
//否則為逆時(shí)針旋轉(zhuǎn),計(jì)數(shù)-1
pulse_counter += (A_active == B_active) ? 1 : -1;
pulse_timestamp = _micros();
A_active = A; //更新A引腳當(dāng)前狀態(tài)
}
break;
case Quadrature::OFF: //普通模式下
// CPR=PPR
if(A && !digitalRead(pinB)) //如果A引腳是高電平且B引腳是低電平
{
pulse_counter++; //計(jì)數(shù)+1,對(duì)應(yīng)圖六中左上角A上升沿狀態(tài)
pulse_timestamp = _micros();
}
break;
}
}
其實(shí)STM32的定時(shí)器是有編碼器計(jì)數(shù)功能的,但這里這種使用外部中斷計(jì)數(shù)的方法更通用,兼容各種MCU,但是編碼器分辨率太高的話會(huì)導(dǎo)致頻繁進(jìn)入中斷。
ABZ正交編碼器例程
#include
//初始化,IO設(shè)置
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()); //串口打印當(dāng)前角度-弧度,多圈值(非0--2Π)
Serial.print(" ");
Serial.println(encoder.getVelocity()); //當(dāng)前速度,弧度每秒
//這個(gè)測(cè)速方法混合了時(shí)間和頻率測(cè)量技術(shù),在高速或低速時(shí)都可以得到較真實(shí)的速度
}
霍爾傳感器霍爾傳感器的原理圖四、無刷電機(jī)內(nèi)置編碼器安裝位置
如上圖所示,右側(cè)的3個(gè)器件就是霍爾傳感器,它們成120度夾角安裝,也有60度安裝的,但控制邏輯不一樣。本節(jié)以一對(duì)極120度夾角電機(jī)模型說明。一對(duì)極指轉(zhuǎn)子只有一對(duì)磁鐵NS極,圖四為多對(duì)極電機(jī)。
圖五、一對(duì)極單機(jī)模型
按特定的組合給電機(jī)的UVW三相供電,如U+,V-,W斷開,此時(shí)電機(jī)轉(zhuǎn)子將轉(zhuǎn)到某一固定位置,假設(shè)為扇區(qū)Sector1,然后切換供電狀態(tài)為W+,V-,U斷開,電機(jī)將繼續(xù)旋轉(zhuǎn)60度到扇區(qū)二,按特定的順序依次切換供電狀態(tài),電機(jī)將會(huì)一直轉(zhuǎn)動(dòng)下去,共有6種供電狀態(tài),對(duì)應(yīng)著6個(gè)扇區(qū),6種霍爾傳感器的觸發(fā)狀態(tài),如下圖所示。
圖六、霍爾的六種觸發(fā)狀態(tài)圖七、霍爾狀態(tài)波形圖
霍爾傳感器就是根據(jù)這六種狀態(tài)確定轉(zhuǎn)子的位置,加上這6種狀態(tài)的循環(huán)次數(shù)就是當(dāng)前電機(jī)轉(zhuǎn)子的真實(shí)位置。
參考文章:
無刷電機(jī)霍爾120度控制和60度控制到底是怎么回事?
//HallSensor.h
//霍爾傳感器狀態(tài)與扇區(qū)對(duì)應(yīng)關(guān)系
// 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正交編碼器程序源碼基本相同,引腳配置和外部中斷設(shè)置基本相同,主要內(nèi)容在updateState函數(shù)中,下邊簡單分析updateState函數(shù)。
霍爾傳感器源碼
void HallSensor::updateState()
{
long new_pulse_timestamp = _micros();
//刷新三個(gè)霍爾傳感器的狀態(tài)
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;
//匹配當(dāng)前所在扇區(qū)
int8_t new_electric_sector = ELECTRIC_SECTORS[hall_state];
static Direction old_direction;
//
if (new_electric_sector - electric_sector > 3) { //如從扇區(qū)0轉(zhuǎn)到了扇區(qū)5,則循環(huán)次數(shù)-1
//underflow
direction = Direction::CCW;
electric_rotations += direction;
} else if (new_electric_sector - electric_sector < (-3)) {//如從扇區(qū)5轉(zhuǎn)到了扇區(qū)0,則循環(huán)次數(shù)+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編碼器的例程基本相同,不再贅述。
磁編碼器
磁編碼器有基于霍爾效應(yīng)原理的,也有基于磁阻效應(yīng)的。SimpleFOC項(xiàng)目使用的有以下幾種,這里以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
};
磁編碼器的原理圖八、單對(duì)極性磁編碼器
AS5600是基于霍爾的旋轉(zhuǎn)磁位置傳感器,有12位高分辨率,使用平面?zhèn)鞲衅鱽韺⒋怪庇谛酒砻娴拇艌?chǎng)分量轉(zhuǎn)換為電壓。它有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;
}
(完)
無刷電機(jī),需要靠霍爾來提供位置換向,讓三相電機(jī)在某個(gè)時(shí)刻保持每兩個(gè)線圈之間通電,常見的霍爾是120°的安裝方式的,也就是霍爾傳感器的電角度是相差120°的,還有一種是相差60°的,不能互用了。如果霍爾接錯(cuò)了,或者信號(hào)不準(zhǔn)確,繞組導(dǎo)通并沒有按照設(shè)計(jì)進(jìn)行,電機(jī)當(dāng)然是無法正常運(yùn)轉(zhuǎn)的,而且如果導(dǎo)通錯(cuò)誤,可能會(huì)造成開關(guān)管短路引起驅(qū)動(dòng)器燒掉,或者電機(jī)出現(xiàn)問題,請(qǐng)關(guān)注:容濟(jì)點(diǎn)火器
單個(gè)霍爾,有一條紅色線是正極線,一般是12-20伏的,另外一條黑色線是負(fù)極,其他一條別的顏色的就是信號(hào)線了。
一般電動(dòng)車負(fù)極都是連成一體的,所以電機(jī)用到的三個(gè)霍爾,可以把負(fù)極短接一起,正極也短接一起,這樣每個(gè)霍爾還有一條信號(hào)線,加起來正常會(huì)有5條線輸出。
這是單個(gè)霍爾的三條線,一般有字體那面朝上,從左到右,分別是電源正極,電源負(fù)極,信號(hào)線。
這是把電源正負(fù)短接一起的三個(gè)霍爾接法,輸出往往會(huì)對(duì)應(yīng)有三條黃綠藍(lán)三種顏色的信號(hào)線,對(duì)應(yīng)電機(jī)線圈的黃綠藍(lán)線圈線來接就是了。對(duì)于120°的霍爾而已,更換時(shí)候,霍爾需要反過來裝配,而且必須插入鋼片的槽里邊,用膠水固定好,如果沒有固定好,當(dāng)然也無法正常工作的。
但是有些廠家,故意把線顏色搞得和別人不一樣了,這種情況,信號(hào)線接錯(cuò)了,應(yīng)該是電機(jī)反轉(zhuǎn),可以調(diào)轉(zhuǎn)一下兩條線就好了。如果控制器有自適應(yīng)功能的,這幾條信號(hào)線可以隨便接,它會(huì)自動(dòng)識(shí)別的。
如果接上都沒有反應(yīng),可能是霍爾問題,或者電源線接錯(cuò)了,或者插頭存在接觸不良等問題。
舉報(bào)/反饋
直流電機(jī)控制板里面的霍爾傳感器是用來檢測(cè)電機(jī)的轉(zhuǎn)動(dòng)速度用的。在有些應(yīng)用的場(chǎng)合,需要對(duì)電機(jī)進(jìn)行調(diào)速,要保證電機(jī)在某個(gè)速度下面保持不變,所以就要加一個(gè)檢測(cè)速度的傳感器進(jìn)行反饋,主控板根據(jù)檢測(cè)的速度值來輸出不同的控制脈沖信號(hào),最終達(dá)到快速調(diào)整電機(jī)轉(zhuǎn)速的目的。也叫做霍爾編碼器。
編碼器的分類
從編碼器檢測(cè)原理上來分,還可以分為光學(xué)式、磁式、感應(yīng)式、電容式。常見的是光電編碼器和霍爾編碼器。光電編碼器是屬于光學(xué)式編碼器,而霍爾編碼器則屬于磁式編碼器。
編碼器的原理
1、光電編碼器的原理解析
光電編碼器是一種通過光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換為脈沖數(shù)字量的傳感器。由光電碼盤和光電檢測(cè)裝置組成。光電碼盤是在一定直徑的圓板上等分地開通若干個(gè)長方形的小孔。由于光電碼盤與電動(dòng)機(jī)同軸,電動(dòng)機(jī)旋轉(zhuǎn)時(shí),檢測(cè)裝置檢測(cè)輸出對(duì)應(yīng)的脈沖信號(hào),一般輸出A,B兩路具有一定相位差的方波信號(hào),通過兩路輸出信號(hào),可判斷電機(jī)的轉(zhuǎn)動(dòng)方向。
2、霍爾編碼器的原理解析
霍爾編碼器則是一種通過磁電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器。霍爾編碼器由霍爾碼盤和霍爾傳感器組成。霍爾碼盤在一定直徑的圓板上等分地布置有不同的磁極。霍爾碼盤與電機(jī)同軸,電機(jī)旋轉(zhuǎn)時(shí),霍爾元件檢測(cè)輸出對(duì)應(yīng)的脈沖信號(hào),一般輸出A,B兩路具有一定相位差的方波信號(hào),通過兩路輸出信號(hào),可判斷電機(jī)的轉(zhuǎn)動(dòng)方向。
兩種編碼器的檢測(cè)原理是一樣的,都是通過輸出A,B相的方波信號(hào)來檢測(cè)。只不過光電式的編碼器精度要比霍爾式編碼器的精度高許多。
簡單的檢測(cè)原理示意圖:
如何計(jì)算轉(zhuǎn)速?
計(jì)算電機(jī)的轉(zhuǎn)速都是通過檢測(cè)輸出脈沖的個(gè)數(shù)來進(jìn)行計(jì)算的。其大概原理是:比如一個(gè)500線的電機(jī)(轉(zhuǎn)一圈會(huì)輸出500個(gè)脈沖),只要通過單片機(jī)定時(shí)器設(shè)定一個(gè)固定的檢測(cè)時(shí)間,假如定時(shí)1S的時(shí)間,然后通過單片機(jī)的外部中斷或者輸入捕獲等方式獲得1S鐘內(nèi)的脈沖個(gè)數(shù),假如1S內(nèi)檢測(cè)到1000個(gè)高電平(1000個(gè)脈沖),那么就代表了電機(jī)剛好轉(zhuǎn)過兩圈,這時(shí)就可以根據(jù)輪子的直徑來算出其對(duì)應(yīng)的轉(zhuǎn)速了。
為了提高檢測(cè)精度,你還可以通過同時(shí)檢測(cè)AB相兩路輸出的高低電平,具體和檢測(cè)一路的原理類似。
總結(jié):在電機(jī)加裝一個(gè)霍爾傳感器無非就是為了測(cè)定電機(jī)的轉(zhuǎn)速來使用的,一般傳感器可以給控制器提供一個(gè)反饋的信號(hào),根據(jù)反饋信號(hào)就可以進(jìn)行信號(hào)的調(diào)制,形成一個(gè)閉環(huán)控制方式。
下一篇: PLC、DCS、FCS三大控
上一篇: 電氣控制線路圖控制原