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