一種基于C8051F單片機的直流無刷電機轉(zhuǎn)速控制系統(tǒng)
[關(guān)鍵詞]:單片機、無刷直流電機、轉(zhuǎn)速控制
[Abstract]:,configuration of software and hardware.
[Keywords]: MCU,direct current and brushless motor, rotate speed Control The article introduces application of C8051F020 in rotate speed Control of direct current and brushless motor, realization method
引言:
具有梯形反電動勢的永磁同步電動機通常被稱為無刷直流電動機,它具有結(jié)構(gòu)簡單、體積小、重量輕、效率高、高功率密度、啟動扭矩大、慣量小和響應(yīng)快等其它種類直流電機無法比擬的特性。采用電子換向器替代了傳統(tǒng)直流電動機的機械換向裝置,從而克服了電刷和換向器所引起的噪聲、火花、電磁干擾、壽命短等一系列弊病。由于無刷直流電動機既具備交流電動機的結(jié)構(gòu)簡單、運行可靠、維護方便等一系列優(yōu)點,又具有直流電動機的運行效率高、無勵磁損耗以及調(diào)速性能好等諸多優(yōu)點,故其在在家用消費類產(chǎn)品(空調(diào)、冰箱、洗衣機)和IT周邊產(chǎn)品(打印機、軟驅(qū)、硬驅(qū))中得到廣泛的應(yīng)用。
C8051F單片機是美國Silabs公司推出的一種與51系列單片機內(nèi)核兼容的單片機,具有高速、高性能、高集成度。以C8051F020為例,具有如下特點:
C8051F020片上系統(tǒng)單片機片內(nèi)資源:
一、模塊外設(shè)
(1)逐次逼近型8路12位ADC0
轉(zhuǎn)換速率最大100ksps
可編程增益放大器PGA
溫度傳感器
(2)8路8位ADC1輸入與P1口復(fù)用
轉(zhuǎn)換速率500ksps
可編程增益放大器PGA
(3)兩個12 位DAC
(4)兩個模擬電壓比較器
(5)電壓基準(zhǔn)內(nèi)部提供2.43V
外部基準(zhǔn)可輸入
(6)精確的VDD監(jiān)視器
二、高速8051微控制器內(nèi)核
流水線式指令結(jié)構(gòu)速度可達25MIPS
22個矢量中斷源
三、存儲器
片內(nèi)4352字節(jié)數(shù)據(jù)RAM
64KBFlash程序存儲器可作非易失性存儲
外部可擴展的64KB 數(shù)據(jù)存儲器接口
四、數(shù)字外設(shè)
8個8位的端口I/O
I2CSPI2個增強型UART串口
可編程的16位計數(shù)器/定時器陣列(PCA)
5個通用16位計數(shù)器/定時器
專用的看門狗WDT
五、JTAG調(diào)試和邊界掃描接口,可實現(xiàn)在線實時動態(tài)調(diào)試。
由以上特點可以看出,C8051F單片機具有豐富的片上硬件資源及高運算速度,這為實現(xiàn)復(fù)雜的控制算法提供了保障,而且?guī)缀醪恍柘到y(tǒng)擴展即可滿足控制系統(tǒng)對硬件資源的需求,極大地提高了系統(tǒng)可靠性。
硬件部分:
硬件部分主要由電機、電機驅(qū)動電路及單片機及顯示塊組成。其功能框圖如下:
電機驅(qū)動采用美國安森美公司開發(fā)的高性能第二代單元無刷直流電機控制器MC33035。該芯片內(nèi)部具有定頻調(diào)寬PWM電路,它集譯碼、過熱、過流、欠壓保護、正反轉(zhuǎn)控制等諸多功能于一身,是一種功能齊全的電機控制器。
通過脈寬調(diào)制PWM來控制電動機電樞電壓可以實現(xiàn)調(diào)速。在正常情況下,誤差放大器輸出與振蕩器輸出鋸齒波信號比較后,產(chǎn)生脈寬調(diào)制(PWM)信號如下圖所示。改變輸出脈沖寬度,相當(dāng)于改變供給電動機繞組的平均電壓,從而控制其轉(zhuǎn)速。所以我們可以通過單片機控制DAC0的輸出,控制輸入到直流無刷電機的電壓,進而控制PWM波的占空比達到控制電機轉(zhuǎn)速的目的。
MC33035的脈寬調(diào)節(jié)原理圖
軟件部分:
無刷直流電機內(nèi)置3個霍爾效應(yīng)傳感器,用來檢測轉(zhuǎn)子的位置,也決定電機的換相,并可以根據(jù)該信號來計算電機的轉(zhuǎn)速。當(dāng)電機正常運行時,通過霍爾傳感器可得到3個脈寬為180度電角度的互相重疊的信號,而電機轉(zhuǎn)速的改變可以從位置傳感器輸出脈沖頻率的改變上反映出來,因此可以利用單片機對這個脈沖信號進行監(jiān)測得到電機轉(zhuǎn)速。因頻率和轉(zhuǎn)速成正比測量,所以測出輸出脈沖的頻率即可計算出轉(zhuǎn)速。另外,為了提高精度,高速(>/1000HZ)采用測頻法,低速(1000HZ)采用測周法。
將脈沖信號輸出與INT0連接,采用INT0中斷對轉(zhuǎn)速脈沖計數(shù),每1s讀一次計數(shù)值,將此值與預(yù)設(shè)的轉(zhuǎn)速值比較,若大于預(yù)設(shè)的轉(zhuǎn)速值,則減小DAC0的數(shù)值;若小于預(yù)設(shè)的轉(zhuǎn)速值,則增加DAC0的值,調(diào)整電機的轉(zhuǎn)速直到轉(zhuǎn)速值等于預(yù)設(shè)定的值。電機當(dāng)前的轉(zhuǎn)速值可在七段數(shù)碼管上顯示,在電機的可控范圍內(nèi)控制電機轉(zhuǎn)速等于預(yù)設(shè)值。
程序框圖:
單片機程序采用C51完成,部分源程序如下:
一、系統(tǒng)時鐘初始化,采用18.432MHZ外部晶振:
void SYSCLK_Init (void)
{
int i; //延時計數(shù)器
OSCXCN=0x67; //開啟外部振蕩器18.432MHz晶體
for(i=0;i256;i++) ; //等待振蕩器啟振
while(!(OSCXCN0x80)) ; //等待晶體振蕩器穩(wěn)定
OSCICN=0x88; //選擇外部振蕩器為系統(tǒng)時鐘源并允許丟失時鐘檢測器
}
二、IO口初始化
void PORT_Init (void)
{
XBR0 =0x07; //使能SMBus,SPI0,和UART0
XBR1 =0x04; //P1.0---int0
XBR2 =0x40; //使能數(shù)據(jù)交叉開關(guān)和弱上拉
EMI0CF =0x27;
EMI0TC =0x21;
P74OUT =0xFF;
P0MDOUT =0x15;
P1MDOUT |=0x3C; //P1.2-P1.5推挽輸出
P1 = 0xc3;//P1.2-P1.5=0
}
三、定時器0初始化,定時時間為1ms
void Timer0_Init (void)
{
CKCON|=0x8;
TMOD|=0x1; //16位
Count1ms=10;
TR0 = 0; //停止定時器0
TH0 = (-SYSCLK/1000) >> 8; //設(shè)初值,1ms時溢出
TL0 = -SYSCLK/1000;
TR0 = 1; //開啟定時器0
IE|= 0x2;
}
四、Timer0中斷:
void Timer0_ISR (void) interrupt 1
{
TH0 = (-SYSCLK/1000) >> 8;
TL0 = -SYSCLK/1000;
if (Count1ms) Count1ms--;
if (Count1s) Count1s--; //Count1s初值為1000
else
{
Count1s=1000;
SaveMotorCount=MotorCount; //MotorCount為測得每秒脈沖個數(shù)
MotorCount=0;
SD=SaveMotorCount/2-SetSpeed; //常量SetSpeed的值為轉(zhuǎn)速的預(yù)設(shè)值,單位為轉(zhuǎn)/秒
SaveMotorCount*=30; //轉(zhuǎn)/分
if (SD)
{
if ((SD>5)||(SD-5))
iDAC0-=SD*4;
else
iDAC0-=SD;
DAC0=iDAC0; }
}
}
五、外部0中斷:
void Int0_ISR (void) interrupt 0
{ MotorCount++;}
軟件仿真調(diào)試方法:
(1)觀察DAC0的窗口,改變DAC0的數(shù)值觀察電機轉(zhuǎn)速的變化
(2)使用示波器觀察CKMOT的頻率計算出電機的轉(zhuǎn)速與七段數(shù)碼管顯示的數(shù)值比較,比較速度測量的準(zhǔn)確性
(3)改變常量SetSpeed的值(轉(zhuǎn)速的預(yù)設(shè)值),觀察速度穩(wěn)定后七段數(shù)碼管的數(shù)值
(4)可將斷點設(shè)在外部中斷INT0的入口和T0中斷的入口運行程序觀察程序運行是否正常。
結(jié)束語:
由于C8051F020的高集成度,因此只需少量外圍電路。另外,C8051F020內(nèi)核與普通51系列兼容,且指令簡單易學(xué),可縮短系統(tǒng)開發(fā)周期。實踐證明,本控制系統(tǒng)精度高,穩(wěn)定性好,硬件簡單且工作可靠,具有很好的推廣價值。
具有梯形反電動勢的永磁同步電動機通常被稱為無刷直流電動機,它具有結(jié)構(gòu)簡單、體積小、重量輕、效率高、高功率密度、啟動扭矩大、慣量小和響應(yīng)快等其它種類直流電機無法比擬的特性。采用電子換向器替代了傳統(tǒng)直流電動機的機械換向裝置,從而克服了電刷和換向器所引起的噪聲、火花、電磁干擾、壽命短等一系列弊病。由于無刷直流電動機既具備交流電動機的結(jié)構(gòu)簡單、運行可靠、維護方便等一系列優(yōu)點,又具有直流電動機的運行效率高、無勵磁損耗以及調(diào)速性能好等諸多優(yōu)點,故其在在家用消費類產(chǎn)品(空調(diào)、冰箱、洗衣機)和IT周邊產(chǎn)品(打印機、軟驅(qū)、硬驅(qū))中得到廣泛的應(yīng)用。
C8051F單片機是美國Silabs公司推出的一種與51系列單片機內(nèi)核兼容的單片機,具有高速、高性能、高集成度。以C8051F020為例,具有如下特點:
C8051F020片上系統(tǒng)單片機片內(nèi)資源:
一、模塊外設(shè)
(1)逐次逼近型8路12位ADC0
轉(zhuǎn)換速率最大100ksps
可編程增益放大器PGA
溫度傳感器
(2)8路8位ADC1輸入與P1口復(fù)用
轉(zhuǎn)換速率500ksps
可編程增益放大器PGA
(3)兩個12 位DAC
(4)兩個模擬電壓比較器
(5)電壓基準(zhǔn)內(nèi)部提供2.43V
外部基準(zhǔn)可輸入
(6)精確的VDD監(jiān)視器
二、高速8051微控制器內(nèi)核
流水線式指令結(jié)構(gòu)速度可達25MIPS
22個矢量中斷源
三、存儲器
片內(nèi)4352字節(jié)數(shù)據(jù)RAM
64KBFlash程序存儲器可作非易失性存儲
外部可擴展的64KB 數(shù)據(jù)存儲器接口
四、數(shù)字外設(shè)
8個8位的端口I/O
I2CSPI2個增強型UART串口
可編程的16位計數(shù)器/定時器陣列(PCA)
5個通用16位計數(shù)器/定時器
專用的看門狗WDT
五、JTAG調(diào)試和邊界掃描接口,可實現(xiàn)在線實時動態(tài)調(diào)試。
由以上特點可以看出,C8051F單片機具有豐富的片上硬件資源及高運算速度,這為實現(xiàn)復(fù)雜的控制算法提供了保障,而且?guī)缀醪恍柘到y(tǒng)擴展即可滿足控制系統(tǒng)對硬件資源的需求,極大地提高了系統(tǒng)可靠性。
硬件部分:
硬件部分主要由電機、電機驅(qū)動電路及單片機及顯示塊組成。其功能框圖如下:
電機驅(qū)動采用美國安森美公司開發(fā)的高性能第二代單元無刷直流電機控制器MC33035。該芯片內(nèi)部具有定頻調(diào)寬PWM電路,它集譯碼、過熱、過流、欠壓保護、正反轉(zhuǎn)控制等諸多功能于一身,是一種功能齊全的電機控制器。
通過脈寬調(diào)制PWM來控制電動機電樞電壓可以實現(xiàn)調(diào)速。在正常情況下,誤差放大器輸出與振蕩器輸出鋸齒波信號比較后,產(chǎn)生脈寬調(diào)制(PWM)信號如下圖所示。改變輸出脈沖寬度,相當(dāng)于改變供給電動機繞組的平均電壓,從而控制其轉(zhuǎn)速。所以我們可以通過單片機控制DAC0的輸出,控制輸入到直流無刷電機的電壓,進而控制PWM波的占空比達到控制電機轉(zhuǎn)速的目的。
MC33035的脈寬調(diào)節(jié)原理圖
軟件部分:
無刷直流電機內(nèi)置3個霍爾效應(yīng)傳感器,用來檢測轉(zhuǎn)子的位置,也決定電機的換相,并可以根據(jù)該信號來計算電機的轉(zhuǎn)速。當(dāng)電機正常運行時,通過霍爾傳感器可得到3個脈寬為180度電角度的互相重疊的信號,而電機轉(zhuǎn)速的改變可以從位置傳感器輸出脈沖頻率的改變上反映出來,因此可以利用單片機對這個脈沖信號進行監(jiān)測得到電機轉(zhuǎn)速。因頻率和轉(zhuǎn)速成正比測量,所以測出輸出脈沖的頻率即可計算出轉(zhuǎn)速。另外,為了提高精度,高速(>/1000HZ)采用測頻法,低速(1000HZ)采用測周法。
將脈沖信號輸出與INT0連接,采用INT0中斷對轉(zhuǎn)速脈沖計數(shù),每1s讀一次計數(shù)值,將此值與預(yù)設(shè)的轉(zhuǎn)速值比較,若大于預(yù)設(shè)的轉(zhuǎn)速值,則減小DAC0的數(shù)值;若小于預(yù)設(shè)的轉(zhuǎn)速值,則增加DAC0的值,調(diào)整電機的轉(zhuǎn)速直到轉(zhuǎn)速值等于預(yù)設(shè)定的值。電機當(dāng)前的轉(zhuǎn)速值可在七段數(shù)碼管上顯示,在電機的可控范圍內(nèi)控制電機轉(zhuǎn)速等于預(yù)設(shè)值。
程序框圖:
單片機程序采用C51完成,部分源程序如下:
一、系統(tǒng)時鐘初始化,采用18.432MHZ外部晶振:
void SYSCLK_Init (void)
{
int i; //延時計數(shù)器
OSCXCN=0x67; //開啟外部振蕩器18.432MHz晶體
for(i=0;i256;i++) ; //等待振蕩器啟振
while(!(OSCXCN0x80)) ; //等待晶體振蕩器穩(wěn)定
OSCICN=0x88; //選擇外部振蕩器為系統(tǒng)時鐘源并允許丟失時鐘檢測器
}
二、IO口初始化
void PORT_Init (void)
{
XBR0 =0x07; //使能SMBus,SPI0,和UART0
XBR1 =0x04; //P1.0---int0
XBR2 =0x40; //使能數(shù)據(jù)交叉開關(guān)和弱上拉
EMI0CF =0x27;
EMI0TC =0x21;
P74OUT =0xFF;
P0MDOUT =0x15;
P1MDOUT |=0x3C; //P1.2-P1.5推挽輸出
P1 = 0xc3;//P1.2-P1.5=0
}
三、定時器0初始化,定時時間為1ms
void Timer0_Init (void)
{
CKCON|=0x8;
TMOD|=0x1; //16位
Count1ms=10;
TR0 = 0; //停止定時器0
TH0 = (-SYSCLK/1000) >> 8; //設(shè)初值,1ms時溢出
TL0 = -SYSCLK/1000;
TR0 = 1; //開啟定時器0
IE|= 0x2;
}
四、Timer0中斷:
void Timer0_ISR (void) interrupt 1
{
TH0 = (-SYSCLK/1000) >> 8;
TL0 = -SYSCLK/1000;
if (Count1ms) Count1ms--;
if (Count1s) Count1s--; //Count1s初值為1000
else
{
Count1s=1000;
SaveMotorCount=MotorCount; //MotorCount為測得每秒脈沖個數(shù)
MotorCount=0;
SD=SaveMotorCount/2-SetSpeed; //常量SetSpeed的值為轉(zhuǎn)速的預(yù)設(shè)值,單位為轉(zhuǎn)/秒
SaveMotorCount*=30; //轉(zhuǎn)/分
if (SD)
{
if ((SD>5)||(SD-5))
iDAC0-=SD*4;
else
iDAC0-=SD;
DAC0=iDAC0; }
}
}
五、外部0中斷:
void Int0_ISR (void) interrupt 0
{ MotorCount++;}
軟件仿真調(diào)試方法:
(1)觀察DAC0的窗口,改變DAC0的數(shù)值觀察電機轉(zhuǎn)速的變化
(2)使用示波器觀察CKMOT的頻率計算出電機的轉(zhuǎn)速與七段數(shù)碼管顯示的數(shù)值比較,比較速度測量的準(zhǔn)確性
(3)改變常量SetSpeed的值(轉(zhuǎn)速的預(yù)設(shè)值),觀察速度穩(wěn)定后七段數(shù)碼管的數(shù)值
(4)可將斷點設(shè)在外部中斷INT0的入口和T0中斷的入口運行程序觀察程序運行是否正常。
結(jié)束語:
由于C8051F020的高集成度,因此只需少量外圍電路。另外,C8051F020內(nèi)核與普通51系列兼容,且指令簡單易學(xué),可縮短系統(tǒng)開發(fā)周期。實踐證明,本控制系統(tǒng)精度高,穩(wěn)定性好,硬件簡單且工作可靠,具有很好的推廣價值。
關(guān)鍵詞:單片機、無刷直流電機、轉(zhuǎn)速控制
霍爾傳感器相關(guān)文章:霍爾傳感器工作原理
霍爾傳感器相關(guān)文章:霍爾傳感器原理 脈寬調(diào)制相關(guān)文章:脈寬調(diào)制原理
評論