www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]#i nclude#i nclude//電動(dòng)車雙閉環(huán)程序,采用雙閉環(huán)方式控制電機(jī),以得到最好的zh轉(zhuǎn)速性能,并且可以//限制電機(jī)的最大電流。本應(yīng)用程序用到兩個(gè)CCP部件,其中CCP1用于PWM輸出,以控//制電機(jī)電壓;CCP2用于觸發(fā)AD,定

#i nclude

#i nclude

//電動(dòng)車雙閉環(huán)程序,采用雙閉環(huán)方式控制電機(jī),以得到最好的zh轉(zhuǎn)速性能,并且可以

//限制電機(jī)的最大電流。本應(yīng)用程序用到兩個(gè)CCP部件,其中CCP1用于PWM輸出,以控

//制電機(jī)電壓;CCP2用于觸發(fā)AD,定時(shí)器TMR2、TMR1,INT中斷,RB口電平變化中斷,

//看門狗以及6個(gè)通用I/O口

#define AND 0xe0 //狀態(tài)采集5,6,7位

#define CURA 0X0a //電流環(huán)比例和積分系數(shù)之和

#define CURB 0X09 //電流環(huán)比例系數(shù)

#define THL 0X6400 //電流環(huán)最大輸出

#define FULLDUTY 0X0FF //占空比為1時(shí)的高電平時(shí)間

#define SPEA 0X1d //轉(zhuǎn)速環(huán)比例和積分系數(shù)之和

#define SPEB 0X1c //轉(zhuǎn)速環(huán)比例系數(shù)

#define GCURHILO 0X0330 //轉(zhuǎn)速環(huán)最大輸出

#define GCURH 0X33 //最大給定電流

#define GSPEH 0X67 //最大轉(zhuǎn)速給定

#define TSON 0X38 //手柄開啟電壓1.1 V,TSON*2為剎車后手柄開啟電壓,即

//2.2 V

#define VOLON 0X4c //低電壓保護(hù)重開電壓3.0 V即33 V

#define VOLOFF 0X49 //低電壓保護(hù)關(guān)斷電壓2.86 V即31.5 V

volatile unsigned char DELAYH,DELAYL,oldstate,speed,

speedcount,tsh,count_ts,count_vol,gcur,currenth,

voltage; //寄存器定義

static bit sp1,spe,ts,volflag,spepid,lowpower,

off,shutdown,curpid; //標(biāo)志位定義

static volatile unsigned char new[10]={0xaf,0xbe,0xff,0x7e,0xcf,

0xff,0xd7,0x77,0xff,0xff}; //狀態(tài)寄存器表

//------------PIC16F877初始化子程序------------

void INIT877()

{

PORTC=0X0FF; //關(guān)斷所有MOSFET

TRISC=0X02; //設(shè)置C口輸出

PIE1=0X00; //中斷寄存器初始化,關(guān)斷所有中斷

TRISA=0XCF; //設(shè)置RA4,RA5 輸出

TRISB=0XEF; //RB 口高三位輸入,采集電機(jī)三相的霍爾信號(hào)

PORTC=new[(PORTB&AND)>>5];//采集第一次霍爾信號(hào),并輸出相應(yīng)的信號(hào),導(dǎo)通

//兩個(gè)MOS管

T2CON=0X01; //TMR2 4分頻

CCPR1L=0X0FF; //初始時(shí)PWM輸出全高

CCP1CON=0X0FF; //CCP1設(shè)置為PWM方式

CCP2CON=0X0B; //CCP2設(shè)置為特殊方式,以觸發(fā)AD

ADCON0=0X81; //AD時(shí)鐘為32分頻,且AD使能,選擇AN0通道采集手

//柄電壓

TMR2=0X00; //TMR2寄存器初始化

TMR1H=0X00; //TMR1寄存器初始化

TMR1L=0X00;

T1CON=0X00; //TMR1為

CCPR2H=0X08;

CCPR2L=0X00; //電流采樣周期設(shè)置為TAD=512 μs

PR2=0XC7; //PWM頻率設(shè)置為5 kHz

ADCON1=0X02; //AD結(jié)果左移

OPTION=0XFB; //INT上升沿觸發(fā)

TMR2ON=1; //PWM開始工作

INTCON=0XD8; //中斷設(shè)置GIE=1,PEIE=1,RBIE=1

ADIE=1; //AD中斷使能

speedcount=0x00; //轉(zhuǎn)速計(jì)數(shù)寄存器

speed=0x7f; //轉(zhuǎn)速保持寄存器

spe=1; //低速標(biāo)志位

sp1=1; //低速標(biāo)志位

oldstate=0x0ff; //初始狀態(tài)設(shè)置,區(qū)別于其他狀態(tài)

count_ts=0x08; //電流采樣8次,采集1次手柄

count_vol=0x00; //采樣256次手柄,采集1次電池電壓

ts=1; //可以采集手柄值的標(biāo)志位

ADGO=1; //AD采樣使能

TMR1ON=1; //CCP2部件開始工作

}

//------------延時(shí)子程序---------------

#pragma interrupt_level 1

void DELAY1(x)

char x;

{

DELAYH=x; //延時(shí)參數(shù)設(shè)置

#asm

DELAY2 MOVLW 0X06

MOVWF _DELAYL

DELAY1 DECFSZ _DELAYL

GOTO DELAY1

DECFSZ _DELAYH

GOTO DELAY2

#endasm

}

//-----------狀態(tài)采集子程序----------------------

void sample()

{

char state1,state2,state3,x;

do {

x=1;

state1=(PORTB&AND); //霍爾信號(hào)采集

DELAY1(x);

state2=(PORTB&AND);

}while(state1-state2); //當(dāng)三次采樣結(jié)果不相同時(shí)繼續(xù)采集狀態(tài)

if(state1-oldstate!=0) //看本次采樣結(jié)果是否與上次相同,不同

//則執(zhí)行

{oldstate=state1; //將本次狀態(tài)設(shè)置為舊狀態(tài)

state1=(oldstate>>5);

PORTC=new[state1]; //C口輸出相應(yīng)的信號(hào)觸發(fā)兩個(gè)MOS管

if(sp1==1){spe=1;sp1=0;}

else { //如果轉(zhuǎn)速很低,則spe置1

spe=0;sp1=0;

speedcount<<=1;

state3=(TMR1H>>2); //否則,spe=0,計(jì)轉(zhuǎn)速

speed=speedcount+state3; //speed寄存器為每256 μs加1

}

speedcount=0;

}

}

//-----------------AD采樣子程序----------------------

void AD()

{

char x;

ADIF=0; //清AD中斷標(biāo)志位

if(ts==1){ //如果為手柄采樣,則采樣手柄值

CHS0=1; //選擇電流采樣通道

count_vol=count_vol+1; //電池采樣計(jì)數(shù)寄存器

spepid=1; //置轉(zhuǎn)速閉環(huán)運(yùn)算標(biāo)志

ts=0;tsh=ADRESH; //存手柄值

if(count_vol==0) { //如果電池采樣時(shí)間到,則選擇AN2通道,采集電池電壓

CHS0=0;CHS1=1;volflag=1;x=1;DELAY1(x);ADGO=1;

}

}

else if(volflag==1) { //電池采樣完畢,進(jìn)行相應(yīng)的處理

CHS1=0;CHS0=1;volflag=0;voltage=ADRESH;lowpower=1;

}

else

{ //否則,中斷為采樣電流中斷

speedcount=speedcount+1; //speedcount寄存器加1,作為測量轉(zhuǎn)速用

if(speedcount>0x3d)

sp1=1; //如果轉(zhuǎn)速低于1 000 000 μs/(512 μs*3eh*3)

// 則認(rèn)為為低速狀態(tài)

currenth=ADRESH;

curpid=1;

count_ts=count_ts-1;

if(count_ts==0) { //如果手柄時(shí)間到,則轉(zhuǎn)入手柄采樣通道

CHS0=0;count_ts=0x08;ts=1;x=1;DELAY1(x);ADGO=1;

}

}

}

//-------------剎車處理子程序------------------

void BREAKON()

{

char x;

off=0; //off清零,如果是干擾則不復(fù)位

shutdown=0;

if(RB0==1) { //如果剎車信號(hào)為真,則停止輸出電壓

ADIE=0; //關(guān)AD中斷

INTE=0; //關(guān)剎車中斷

CCPR1L=FULLDUTY; //輸出電壓0

TMR1ON=0; //關(guān)CCP2,不再觸發(fā)AD

for(;ADGO==1;) continue; //如正在采樣,則等待采樣結(jié)束

ADIF=0; //ADIF位清零

CHS0=0; //選擇通道0采樣手柄

CHS1=0;

x=1;

DELAY1(x);

do {

ADGO=1;

for(;ADIF==0;)continue;

ADIF=0;

CCPR1L=FULLDUTY;

asm("CLRWDT");

tsh=(ADRESH>>1);

}while(tsh>TSON||RB0==1); //當(dāng)手柄值大于2.2 V或剎車仍舊繼續(xù)時(shí),執(zhí)行以

//上語句

off=1; //置復(fù)位標(biāo)志

}

}

//---------欠保護(hù)子程序-------------------

void POWER()

{

char x;

lowpower=0;

voltage>>=1; //電壓值換為7位,以利于單字節(jié)運(yùn)算

if(voltage ADIE=0;

INTE=0;

TMR1ON=0;

CCPR1L=FULLDUTY;

for(;ADGO==1;)continue;

ADIF=0;

CHS0=0;CHS1=1;

x=1;

DELAY1(x);

do{ADGO=1;

for(;ADIF==0;)continue;

ADIF=0;

voltage=(ADRESH>>1);

CCPR1L=FULLDUTY;

asm("CLRWDT");

}while(voltage off=1; //置復(fù)位標(biāo)志

}

}

//------------電流環(huán)運(yùn)算子程序-----------------

void CURPI()

{

static int curep=0x00,curek=0x00,curuk=0x00;

union data{int pwm;

char a[2];}b; //定義電流環(huán)運(yùn)算寄存器

curpid=0; //清電流運(yùn)算標(biāo)志

curep=curek*CURB; //計(jì)算上一次偏差與比例系數(shù)的積

if(currenth<2)currenth=2; //如果采樣電流為零,則認(rèn)為有一個(gè)小電

流以利于

//使轉(zhuǎn)速下降

currenth>>=1;

curek=gcur-currenth; //計(jì)算本次偏差

curuk=curuk+curek*CURA-curep; //按閉環(huán)PI運(yùn)算方式得到本次輸出結(jié)果,

//面對結(jié)果進(jìn)行處理

if(curuk<0x00) { //如果輸出小于零,則認(rèn)為輸出為零

curuk=0;CCPR1L=FULLDUTY;CCP1X=0;CCP1Y=0;

}

else if(curuk-THL>=0)

{ //如果輸出大于限幅值,則輸出最大電壓

curuk=THL;CCPR1L=0;CCP1X=0;CCP1Y=0;

}

else { //否則,按比例輸出相應(yīng)的高電平時(shí)間到CCPR1寄存器

b.pwm=THL-curuk;

b.pwm<<=1;

CCPR1L=b.a[1]; //CCPR1L=(b.pwm>>8)&0x0ff;將PWM寄存器的高半字節(jié)

if(b.pwm&0x80!=0) CCP1X=1;

else CCP1X=0;

if(b.pwm&0x40!=0) CCP1Y=1;

else CCP1Y=0;

}

}

//---------------轉(zhuǎn)速環(huán)運(yùn)算子程序-----------------------

void SPEPI()

{

static int speep=0x00,speek=0x00,speuk=0x00;

int tsh1,speed1; //轉(zhuǎn)速寄存器定義

spepid=0; //清轉(zhuǎn)速運(yùn)算標(biāo)志

if(spe==1)

speed1=0x00; //若轉(zhuǎn)速太低,則認(rèn)為轉(zhuǎn)速為零

else speed1=0x7f-speed; //否則計(jì)算實(shí)際轉(zhuǎn)速

if(speed1<0) speed1=0;

speep=speek*SPEB;

tsh1=tsh-0x38; //得到計(jì)算用的手柄值

speek=tsh1-speed1;

if(tsh1<0) {speuk=0;gcur=0;} //當(dāng)手柄值低于1.1 V時(shí),則認(rèn)為手柄給定為零

else { //否則,計(jì)算相應(yīng)的轉(zhuǎn)速環(huán)輸出

if(tsh1>=GSPEH) //限制最大轉(zhuǎn)速

tsh1=GSPEH;

speuk=speuk+speek*SPEA-speep; //計(jì)算得轉(zhuǎn)速環(huán)輸出

if(speuk<=0X00) {speuk=0x00;gcur=0x00;}//轉(zhuǎn)速環(huán)輸出處理

else if(speuk>GCURHILO) { //轉(zhuǎn)速環(huán)輸出限制,即限制最大電流約12

A

speuk=GCURHILO;gcur=GCURH;}

else { //調(diào)速狀態(tài)時(shí)的輸出

gcur=(speuk>>4)&0x0ff;

}

}

}

//-----------主程序-------------------------

main()

{

for(;;){

INIT877(); //單片機(jī)復(fù)位后,先對其進(jìn)行初始化

off=0; //清復(fù)位標(biāo)志

for(;off==0;) { //復(fù)位標(biāo)志為零,則執(zhí)行下面程序,否則復(fù)位

if(curpid==1) CURPI(); //電流PI運(yùn)算

else if(spepid==1) SPEPI(); //轉(zhuǎn)速PI運(yùn)算

else if(lowpower==1) POWER();

else if(shutdown==1) BREAKON();

asm("CLRWDT");

}

}

}

//---------中斷服務(wù)子程序---------------------

#pragma interrupt_level 1

void interrupt INTS(void)

{

if(RBIF==1) {RBIF=0;sample();}

else if(ADIF==1) AD();

else if(INTF==1)

{shutdown=1;INTF=0;} //剎車中斷來,置剎車標(biāo)志

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉