在智能小車的研制開發(fā)中,,很重要的一部分就是智能小車要能根據(jù)周圍障礙物的情況自主的調(diào)節(jié)行駛速度和行駛方向,。本文中所設(shè)計的直流電機調(diào)速系統(tǒng)是智能小車的一個重要組成部分,直流電機調(diào)速系統(tǒng)主要由S3C44B0X處理器和電機驅(qū)動芯片L298N構(gòu)成,,主要功能是驅(qū)動小車的兩個車輪,,調(diào)節(jié)小車的行駛速,通過改變兩個車輪的轉(zhuǎn)速差調(diào)節(jié)行駛方向,。
1 硬件設(shè)計
由ARM公司設(shè)計的采用RISC架構(gòu)的ARM處理器性能強,,功耗低,體積小,,支持Thumb(16位)/ARM(32位)雙指令集,,指令執(zhí)行速度快。目前ARM系列微處理器在32位RISC嵌入式產(chǎn)品中已經(jīng)占據(jù)75%以上的市場份額,。尤以ARM7TDMI系列應用最廣,,其性價比也是最高。
1.1 S3C44B0X簡介
S3C44B0X是由Samsung公司推出的基于ARM7TDMI核的16/32位RISC處理器,。此款處理器提供了豐富的通用的片上外設(shè),,大大減少了系統(tǒng)電路中除處理器以外的元器件配置。S3C44B0X具有6個16位定時器,,每個定時器可以按照中斷模式或DMA模式運行,。定時器0,1,,2,,3,4具有PWM功能,,定時器5是一個內(nèi)部定時器,。定時器0和1,,2和3,4和5分別共享一個8位的預分頻器(Prescaler),,預分頻值的范圍為0—255,,通過寄存器TCFG0設(shè)定三個預分頻器的值;定時器0,,1,,2,3還各擁有一個具有5個不同分頻信號(1/2,,1/4,,1/8,1/16,,1/32)的時鐘分割器(Divider),,定時器4和5則各具有一個包含4個分頻信號(1/2,1/4,,1/8,,1/16)的時鐘分割器。這6個定時器的分割值通過寄存器TCFG1設(shè)定,。
定時器輸入時鐘頻率=MCLK/Prescaler/Divider,。其中MCLK=60MHz是系統(tǒng)的主頻。
1.2 硬件實現(xiàn)
為提高系統(tǒng)效率,、降低功耗,,功放驅(qū)動電路采用基于雙極型H橋型脈寬調(diào)制方式(PWM)的集成電路L298N。L298N是SGS公司的產(chǎn)品,,內(nèi)部包含二個H橋的高電壓大電流橋式驅(qū)動器,接收標準TTL邏輯電平信號,,可驅(qū)動46伏,、2安培以下的電機,工作溫度范圍從-25度到130度,。其內(nèi)部的一個H橋原理圖如圖1所示,。EnA是控制使能端,控制OUTl和OUT2之間電機的停轉(zhuǎn),, IN1,、IN2腳接入控制電平,控制OUTl和OUT2之間電機的轉(zhuǎn)向,。當使能端EnA有效,,IN1為低電平IN2為高電平時,三極管2,,3導通,,1,,4截止,電機反轉(zhuǎn),。當IN1和IN2電平相同時,,電機停轉(zhuǎn)。
另一個H橋的工作原理同上,。由EnB控制OUT3和OUT4之間電機的停轉(zhuǎn),,根據(jù)IN3、IN4腳的輸入電平情況控制OUT3和OUT4之間電機的轉(zhuǎn)向,。
由于S3C44B0X本身就帶有5個PWM輸出口,,直接輸出控制信號到L298N即可,無須另加電路,。系統(tǒng)原理框圖如圖2所示,。系統(tǒng)中選用了工作在中斷模式下的定時器1和2作為產(chǎn)生PWM的定時器。通過編程設(shè)定I/O口PE4和PE5作為定時器1,,2輸出PWM的端口,,接入L298N的EnA和EnB端口,根據(jù)定時器1,,2輸出的PWM頻率分別控制兩個直流電機的轉(zhuǎn)速,。 PE6設(shè)定為輸出端口連接IN1并通過一反向器連接IN2;同樣,,PE7也設(shè)為輸出端口,,接入IN3并經(jīng)一個反向器接入IN4。通過接入反向器,,IN1和IN2,,IN3和IN4就不會同時處于高電平或低電平,即不會因為IN1和IN2,,IN3和IN4電平相同而使電機停止轉(zhuǎn)動,。電機的停止操作可以通過調(diào)制脈沖寬度為0即占空比為0或者關(guān)閉定時器的使能位實現(xiàn)。這樣只需一路信號PE6就可控制IN1和IN2的狀態(tài),,PE7控制IN3和IN4的狀態(tài),,從而使得系統(tǒng)的控制信號得到減少,在一定程度上簡化了系統(tǒng),。為保證L298N驅(qū)動芯片正常工作,,還要在其與直流電機之間加入四對續(xù)流二極管
2 系統(tǒng)的軟件設(shè)計
2.1 定時器工作方式
在S3C44B0X中,,每個定時器具有一個倒計時器,,通過定時器時鐘源驅(qū)動16位倒計時寄存器TCNTn。定時器啟動前,要向定時計數(shù)緩沖區(qū)寄存器(TCNTBn)寫入一個初始值,,這個值在定時器啟動時載入到倒計時器TCNTn中,。在定時器的比較緩沖器寄存器(TCMPBn)中同樣也要寫入一初始值,運行時用來載入到比較寄存器TCMPn中與倒計時器TCNTn的值相比較,。系統(tǒng)啟動時,,需要通過置手動刷新位的方式,將TCMPBn和TCNTBn這兩個緩沖區(qū)的值載入到TCMPn和TCNTn中,。TCMPBn和TCNTBn這兩個緩沖區(qū)的應用(即雙緩沖器)使定時器能夠在頻率和占空比同時變化時,,仍然產(chǎn)生一個穩(wěn)定的輸出。一般啟動定時器的步驟如下:
1),,將初始值寫入到TCNTBn和TCMPBn中,。
2),設(shè)置對應定時器的自動重載位
3),,設(shè)置對應定時器的手動更新位,反向器置為off狀態(tài).
4),,設(shè)置對應定時器的啟動位來啟動定時器,同時清除手動更新位,。
此時定時器TCNTn開始倒計數(shù),,當TCNTn具有與TCMPn相同的值時,TOUTn的邏輯電平由低變高,。當計數(shù)器
2.2 調(diào)制PWM
脈沖寬度調(diào)制(Pulse Width Modulation—PWM)是指將輸出信號的基本周期固定,,通過調(diào)整基本周期內(nèi)工作周期的大小來控制輸出功率,。對于一個定時器來說,其時鐘源輸入頻率一般不變,,即TCFG0(定時器預分頻值)和TCFG1(定時器分割值)的值設(shè)定后就不需改變,。這樣對于PWM提供了一個穩(wěn)定的時鐘源,。電機的轉(zhuǎn)速與電機兩端的電壓成比例,,而電機兩端的電壓與控制波形的占空比成正比,因此電機的速度與占空比成比例,,占空比越大,,電機轉(zhuǎn)得越快。系統(tǒng)中PWM脈沖頻率就由TCNTBn決定,,PWM脈沖寬度值則由TCMPBn的值來決定,,而占空比即為TCMPn/TCNTn,。如果要使電機轉(zhuǎn)速下降,即得到一個比較低的PWM脈寬輸出值,,可以減少TCMPBn的值,;要使電機轉(zhuǎn)速增加,即得到一個更高的PWM的輸出值,,可以增加TCMPBn的值,。由于雙緩沖器的特性,下一個PWM周期的TCMPBn值可以通過ISR(中斷服務程序)或其他手段在當前PWM周期中低電平時的任何一點寫入,即在程序中可以通過中斷重新設(shè)定TCMPBn的值來改變電機的轉(zhuǎn)速,。緩沖區(qū)TCMPBn,,TCNTBn的值不一定等于這個周期的TCMPn,TCNTn的值,,但一定是TCMPn,,TCNTn的下一個周期的值。
2.3 程序代碼
本文中的應用程序是在ADS1.2的開發(fā)環(huán)境下交叉編譯后下載到Flash中運行的,。程序代碼(以定時器1為例):
//初始化端口
void Init_PortE( )
{
rPCONE=0x5a00; //定義I/O口//PE4,PE5,PE6,PE7的//功能
rPUPE=0xf8; //禁止相應位的電阻上拉使能
}
//啟動A號電機,,此電機由定時器1控制
void Start_MotorA ( )
{
rTCNTB1=Motor_CONT;//給兩個緩沖器//賦值
rTCMPB1=Motor_cont;
rTCON |=(0x01<<11); //定時器1自動重載
rTCON |=(0x01<<9); //手動刷新置位
rTCON &= ~ (0x01<<10); //關(guān)反向器
rTCON |=(0x01<<8); //啟動定時器1
rTCON &= ~ (0x01<<9); //清手動刷新位
}
//A電機停止
void Stop_Motor1()
{
rTCON &= ~ (0x01<<8); //清定時器1使能位
}
//改變電機占空比和轉(zhuǎn)向
void SetPWM (int valueA, int drct)
{
rPDATE=drct; // drct定義PE6口輸出高電平還是低電平,控制電機轉(zhuǎn)向
rTCMPB1=Motor_COUNT*valueA/0x64;//valueA為占空比,亦可設(shè)置valueA為0使電機A停//止轉(zhuǎn)動,。
}
另一電機的相關(guān)設(shè)置同上,。小車行進過程中可以同時改變兩組PWM的占空比來調(diào)節(jié)小車的行駛速度;通過設(shè)置兩組不同的占空比形成兩個車輪的轉(zhuǎn)速差達到改變行駛方向的目的,。
在對比了100Hz,,1KHz,10KHz的PWM輸出驅(qū)動電機的情況發(fā)現(xiàn):當頻率為100 Hz時,,電機運行呈間隙轉(zhuǎn)動狀態(tài),;當頻率為10KHz時,電機運行不平穩(wěn),;當頻率為1KHz時,,不同占空比下電機運行都很平穩(wěn),轉(zhuǎn)速,、轉(zhuǎn)向改變迅速,。圖3是由示波器產(chǎn)生的PWM頻率為1KHz,占空比為30%,,電機反轉(zhuǎn)情況下的調(diào)制波形,。
3 結(jié)束語
本文中所設(shè)PWM的輸出頻率為1KHZ,所用直流電機是120轉(zhuǎn)/分鐘,,額定電壓為12V(電機外不加其他感性負載),。本課題最終實現(xiàn)的是基于ARM的嵌入式智能小車系統(tǒng),而直流電機的PWM調(diào)速控制是其中一個重要的子系統(tǒng)。實驗證明,,Samsung公司的16/32位RISC處理器S3C44B0X對調(diào)制PWM實現(xiàn)方便,,可編程,電機轉(zhuǎn)速,、轉(zhuǎn)向的改變迅速,,無停頓,可以很好的為智能小車服務,。