




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、/*a(l*/# includenregs240x.hM void ad_init() ADCTRL 1=0X0000;/仿真停止時掛起;采樣時間1分頻;AD為啟動/停止模式,排/序器為獨立編組方式,且禁止特殊的兩種工作模式ADCTRL2=0X0400;/編組器1復位不起作用(采用手動復位),中斷標志置1時立即申請中斷,此時未啟動AD轉換MAXCON =0X0001;/2 個通道轉換,ADCIN00,ADCIN08;CHSELSEQ 1=0X0080; 轉換通道順序是 0, 8;結果丁寄器 RESULT0 和 RESULT 1CHSELSEQ2=0X0000;CHSELSEQ3=0X0000;
2、CHSELSEQ4=0X0000;#define Kcmient -313 /Q20, 910,電流系數,由丁實際的母線電壓為30v,所以耍將算得的值*30/310extern iadb;int ialfa,ibeta;void clarke()/ab>alfa,betaint iapul2Jbpul2;iapu 12=(int)(long)Kcurrent*ia)»8); /iapul2 9ibpul2 Q12 格式 ibpul 2=(iiit)(long)KcuiTent*ib)»8);ialfa=(int)(loiig)5018*iapul2)>>1
3、2);sqrt(3/2)的 Q12 格式為 5018,ibeta=(iiit)(long)2896*(iapu 12+2*ibpu 12)» 12);/sqrt(2)/2 的 Q12 格式為 2896/ialfajpujbetajpu為Q12格式,且為PU值,其Q0格式再乘以1.796A后和實際值相等.ref .ref .ref .ref .sect_c_intO adintl jpwm_int2 _phantom ".vectors”rset: B inti: B int2: B int3: B int4: B int5: B int6: B_c_intO _ad_int
4、l _pwm_iiit2 _phantom jphantom jphantom _phantom;00h reset:02h INTI;04h INT2;06h INT3;08h INT4;OA11 INT5;0Ch INT6/ev.c文件描述,基于ev寄存器的一些操作,#includeHregs240x.hn#include"ev.h"描述:EV初始化void ev_init(E ' Handle p) 定時器GPTCONA=GPTCONB=0;T1 CON=T2CON=T3CON=T4CON=0;T1 PR=T2PR=T3PR=T4PR=0:T1 CNT=T2C
5、NT=T3CNT=T4CNT=0;T1 CMPR=T2CMPR=T3CMPR=T4CMPR=0;比較器COMCONA=COMCONB=0;ACTRA=ACTRB=O;DBTCONA=DBTCONB=0;CMPR1=CMPR2=CMPR3=CMPR4=CMPR5=CMPR6=O;中斷管理E AIMRA=EAIMRB=E AIMRC=EVEIMRA=EVEIMRB=EEIMRC=O;屏 蔽所有I1 斷EAIFRA=EAIFRB=EAIFRC=EBIFRA=E、"BIFRB=EFIFRC=OXFFFF; 淸除所冇中斷標志T1PR=TP;周期寄存器值,設置PWM脈寬調制周期TlCON=0X0
6、840; 仿真掛起時立即停止,連續增減計數模式,允許定時器操作,時鐘源為內部時鐘,計 數器值為0時重?ACTRA=0X0999;/SVPWM逆時針,基本空間矢量000, 2.4.6引腳高有效,1, 3, 5引腳低有效DBTCONA=0X04F4; 死區 4*32/30M=4.3usEAIMRA=0X0200: 開定時器1下溢中斷CMPRl=0X02EE; 占空比為 0, 0X02EE=750CMPR2=0X02EE;CMPR3=0X02EE;描述:輸岀適量到ACTRA.void ev_pwm(EY_Handle p) "CMPR1 =p->tcml;CMPR2=p->tc
7、ni2;CMPR3=p->tcni3:描述:pwm管腳有效void ev_open(E' ' Handle p) "COMCONA=0X8200;描述:pwm管腳高祖有效void ev_close(EA "Handle p)" 一COMCONA=0X8000;/initreg.c描途:初始化2407A的寄存器#includenregs240x.hM void init reg(void)"asm(” setc SXM ”); 抑制符號位擴展asm(” setc OVM ");/累加器中結果溢出方式:正相溢出發生,累加器中的
8、值是最大正數(7FFF FFFFH), 負相溢出時,累加器中是最大負數(8000 0000H)asm(” clrc CNF '*); /B0被配置為數據存儲空間WSGR=0X0000; /禁止所有等待狀態IMR=0X0003; /0011,開中斷INT2 (定時器1下溢中斷),INT1 (烏優先級模式的ADC中斷)IFR=0X0FFFF; /清楚所有中斷標憑SCSRl=0X02FC;/0000 0010 1111 1100, 30MHZ (晶振 15MHZ, 2 倍頻)XINT1 CR=XINT2CR=0X8006; /1000 0000 0000 0110 屏蔽外部屮斷 1 和 2W
9、DCR=0X0068;/0110 1000 關看門狗WDKEY=OXOO55;WDKEY=0X00AA;MCRA=0X0FFB:配置捕獲單元CAPh2,3 QEP1.2和PWM1-6端口/位10值/0SCITXDIOPAO1/1SCIRXDIOPAI1/2XINT1IOPA20/3CAP1/QEP1(A)IOPA31/4CAP2/QEP2(B)IOPA41/5CAP3(Z)IOPA51/6PWM1IOPA61/7PWM2IOPA71/8PWM3IOPB01/9PVM4IOPB11/10PWM5IOPB21/11PWM6IOPB31/12T1PWM/T1CMPIOPB4(U)0/13T2PWM/
10、T2CMPIOPE5(J0/14TDIRAIOPB60/15TCLKINAIOPB70MCRB=0x0FE01;配冒讀寫端口、仿真控制端口/位10值/0W/RIOPCO1/1BIOIOPC10/2SPISIMOIOPC20/3SPISOMIIOPC30/4SPICLKIOPC40/5SPISTEIOPC50/6CANTXIOPC60/7CANRXIOPC70/8XINT2/ADCSOCIOPDO0/9EMU0RESERXT1/10EMU1RESERAT1/11TCKRESERAT1/12TD1RESERVE1/13TD0RESERVE1/14TMSRESERAT1/15TMS2RESERAT1
11、MCRC=0x0000;/位10值/0CLKOUTIOPEO0/1PWM7IOPEI0/2PWM8IOPE20/3PWM9IOPE30/4PWM10IOPE40/5PWM11IOPE50/6PWM12IOPE60/7CAP4/QEP3IOPE70/8CAP5/QEP4IOPFO0/9CAP6IOPF10/10T3PWM/T3CMPIOPF2(W)0/11T4PWM/T4CMPIOPF30/12TDIRBIOPF40/13TCLKINBIOPF50/14RESERVEIOPF60/15RESERATRESERXT0PADATDIR=OxOOOO;PBDATDIR=OxOOOO; /OxOCOOO
12、 1100配置所有引腳均為輸入PCDATDIR=OxOOOO; /2020PDDATDIR=OXOOOO;PEDATDIR=OXOOOO;PFDATDIR=OxOOOO; /OxOBOO/Q軸電流調節器參數extern iq_ref; /Q12 q軸電流調節器輸入,即速度調節器的輸出unsigned Kpq=2457;/Q12 q軸電流比例系數unsigned Ki_iq=122; /Q12 q 軸電流積分系數imsigned Kc_iq=204; /Q12 q軸電流兒分修正系數int min_iq=-11901; 電流pu值為4096, max=4096*3.69/1.27 q軸電流調節器輸
13、出的限幅值 int maxq=11901;/D軸電流調節器參數#define ID_REF 0 /QI2 d軸電流輸入的參考值unsigned Kp_id=4096;/Q 12 d 軸電流比例系數unsigned Ki_id= 122; /Q12 d 軸電流積分系數unsigned Kc_id=122;/Q12 d軸電流兒分修正系數intmin_id=-11901; 電流pu值為4096, max=4096*3.69/1.27, d軸電流調節器輸出的限幅值 int max_id=11901;extern iq_fdb; extern id fdb; int uq_out;/Q12q軸電流的反饋
14、值/Q12d軸電流的反饋值/Q12q軸電流調節器的輸出值int udout; int xi_iq=0;Q12d軸電流調節器的輸出值 /Q12 q軸電流調節器的積分累積童int xi_id=0;/Q12 d軸電流調節器的積分累積量void ipiOint ek_iq; /QI2 偏差值int un iq; /QI2iiit el iq; /QI2int ek id: /QI2 int im id; /QI2 iiit el id; /QI2extern Ni;/Q軸電流調節ek_iq=iq_ref-iq_fdb; /QI2 計算偏雄俏 un_iq=xi_iq+(int)(long)Kp_iq*e
15、k_iq)» 12); /Q12 if(iin_iq>max_iq) uq_out=max_iq; else if(iui_iq<miii_iq) uq_out=min_iq; else u jout=unq:el_iq=uq_out-un_iq; /Q12xi_iq=xi_iq+(int)(long)Ki_iq*ek_iq)» 12)+(int)(long)Kcq*el_iq)>> 12);/D軸電流調節ek_id=ID_REF-id_fdb; /QI2 計算偏差值 un_id=xi_id+(int)(long)Kp_id*ek_id)>&g
16、t; 12); /Q12if(iui_id>max_id) ud_out=inax_id; else if(im_id<min_id) ud_out=min_id; else ud out=un id;el_id=iid_out-un_id; /Q12xi_id=xi_id+(int)(long)Ki_id*ek_id)» 12)+(int)(long)Kcd*el_id)>> 12);Ni=Ni-1 ; 計算電流調節次數/*nqrv ittife*/extern ud_out,uq_out;/Q12extern sin_tlieta,cos_theta; /
17、Q15int iialfa.ubeta; /Q12void niparkO /alfa,beta>d.qualfa=(int)(long)cos_theta*ud_out)» 15)+(int)(long)-sin_theta*uq_out)»l 5);ubeta=(int)(long)sin_theta*ud_out)» 15)+(int)(long)cos_theta*uq_out)»l 5): _ " z*pap $4*/ #includenqmath.hHextern ialfajbeta;/Q12extern sin theta
18、.cos theta; /Q15int id_fdb.iq_fdb;/QI2void parkO/alfa,beta->d,q id_fdb=(iiit)(long)cos_theta*ialfa)»15)+(int)(long)sin_theta*ibeta)»15); iq_fdb=(int)(long)-sm theta*ialfa)» 15)+(int)(long)cos theta*ibeta)» 15); / phantonieC 文件void intenupt phaiitom(void)return:描述:轉子相位初始化文件,pha
19、se_initO#includenregs240x.hMint theta m;void pliaseiiiitO "int u,v,w;u=PBDATDIR&0X0010; 讀 u 相的狀態值if(u=OxOO 10) u= 1; else u=0;v=PBDATDIR&0X0020; 讀 v 相的狀態值if(v=0x0020) v=l;else v=0;w=PFDATDIR&0X0004; 讀 w 相的狀態值if(w=0x0004) w= 1;電角度30度else v=0:if(u= 1 & v=0&w= 1) theta_m=208;el
20、se if(u=l&v=0&w=0) else if(u= l&v=l &w=0) else if(u=0&v=l &w=0)theta_m=625; 電角度 90 度 tlieta_m=1042;/電角度 150 度 theta_m=1458;/電角度 210 度else if(u=O&v= 1 &w= 1)theta_m=1875;/電角度 270 度else if(u=O&v=0&w=l)theta_m=2292;/電角度 330 度/pnl.c 文件描述:輸入變量的Q15格式轉換和計算#includeHpn
21、l.hMvoid pnl_calc(PNL_Handle p)" 一計算 p->udcif(p->rudc>=U_QMAX)p->udc=0X7FFF;elsep->udc=(unsigned)(imsigiied long)p->mdc«l 5)/U_QMAX);p->k=(unsigiied)(unsigned long)46334«15)/p->udc); /sqrt(2)的 Q15 格式為 46334 /k=sqrt(2)/udc/*QJp* */# includeHregs240x.hMvoid qep i
22、iiitOT2CNT=OXOOOO;T2PER=0X7530; T2CON=0X1870;能位,禁止比較操作,計數器清零通用定時器周期寄存器的值為30000通用定時器2為定向增減計數模式,以IE交編碼脈沖電路作為時鐘源,使用IH身的使 計數值為o時亜載,使用H己的周期寄存?CAPCONA=OXOEOOO; 禁止捕獲單元,使能QEP電路,/*PI J*/#define N_REF 1024/Q12速度調節器參數unsigned Kp_spd=40960; /QI2 unsigned Ki_spd=0;/Q12tuisigned Kc_spd=0;/Q12int max_spd=5120;/Q12
23、int min_spd=-5120;/Q127501024輸入速度給定速度比例系數速度積分系數速度積分修正系數速度調節器輸出的限幅值Ibase=1.796A 的 Q12 格式 4096*(1+20%)extern n_fdb; int spd out; int xi_spd=0;/Q12實際反饋轉速/Q12速度調節器的輸出/Q12 void spiOiiit ek_spd; /QI2iiit rni spd; /Q12int el spd; /Q12ek_spd=N_REF-n_fdb; /QI2 計算偏差值iin_spd=xi_spd+(int)(long)Kp_spd*ek_spd)
24、87; 12); /Q12if(im_spd>niax_spd) spd_out=max_spd; else if(iui_spd<min_spd) spd_out=niin_spd; else spd_out=iui_spd;el_spd=spd_out-iin_spd; /Q12xi_spd=xi_spd+(int)(long)Ki_spd*ek_spd)» 12)+(int)(long)Kc_spd*el_spd)» 12);/svpwm.c 文件描述:三部分,計算角度、選擇適量、計算有效適量作用時間# includensTpwm.ht,#includeH
25、qmath.h"extern iialfa,ubeta;/Q12void svpvm_calc(SVPWM_Handle p) iiit xyz;/Q12unsigned int a,b,c;/QOunsigned int tl.tm:unsigned int tl qO.tm qO; /qOunsigned int taontbonJcon;x=ubeta; /QI2 y=(int)(long)28377*ualfa)»15)+(mt)(long)16384*ubeta)»15);/y=sqi1(3)/2*iialfa+l/2*ubeta z=-(int)(lo
26、ng)28377*ualfa)»15)+(int)(long)16384*ubeta)»15);/z=-sqrt(3)/2 *iialfa+l/2 *ubeta/sqrt(3)/2 的 Q15 格式為 28377, 1/2 的 QI5 格式為 16384if(x>=0) a=l;else a=0;if(-z>=0) b=l;else b=0;if(-y>=0) c=l;else c=0;p->sector=4 c+2 *b+a;switch(p->sector)case 1:11 =(misigiied)(unsigned long)z*p-&
27、gt;k)» 15), tm=(unsigned)(unsigned long)y*p->k)»l5); break;為 Q12 格式case 2: tl=(unsigned)(unsigned long)y*p->k)»l 5),tm=(iinsigned)(unsigiied long)-x*p->k)»l5);break; /k 為 Q15 格式 case 3:11 =(misigiied)(unsigned long)-z*p->k)»l5),tm=(unsigned)(unsigiied long)x*p-&g
28、t;k)»l 5); break;case 4:11 =(iinsigned)(iinsigned long)-x*p->k)» 15),tm=(iuisigned)(unsigiied long)z*p->k)» 15); break;case 5: tl=(unsigned)(unsigned long)x*p->k)»l5),tm=(unsigned)(unsigiied long)-y*p->k)» 15);break;case 6:11 =(iinsigned)(iuisigned long)-yH<p-
29、>k)»l 5),tm=(iinsigned)(unsigiied long)-z*p->k)»l 5);break;default:break;11 _qO=(nnsigned)(unsigned long)tl *TP)»12); tm_qO=(uiisigiied)(unsigiied long)tm*TP)»l 2);if(t l_qO+tm_qO>TP)""11 _qO=(unsigned)(tinsigiied long)t 1 _qO*TP)/(t I_q0+tin_q0); tm_qO=(unsign
30、ed)(uiisigned long)tm_qO *TP)/(t l_qO+tm_qO); "taon=(unsigned)(TP-t l_q0-tm_q0)/2);tbon=taon+t l_qO;tc on=tbon+tm_qO;svvitch(p->sector)case 1: p>tcml=tbon, p>tcm2=taon, p>tcm3=tcon: break; case 2: p->tcml=taon, p->tcm2=tcon, p->tcm3=tbon; break; case 3: p>tcml=taon, p>
31、;tcni2=tboa p->tcm3=tcon; break; case 4: p>tcml=tcoa p->tcin2=tbon, p>tcm3=taon: break; case 5: p>tcml=tcon, p>tcm2=taoa p->tcm3=tbon: break; case 6: p->tcnil=tbon, p>tcm2=tcon, p->tcm3=taon: break; default:break;#includenqmath.hH#define Ktheta 26844 角度系數 extern pulse;
32、extern theta m;/QO theta_m耍進行初始定位,02500unsigned int count0=0; /QO unsigned int theta e; /Q0每個電流采樣周期內的脈沖増量,電機的止反轉決定其疋負值,疋轉編碼器增計數,反轉減計int coirnt;數int siii_tlieta,cos_theta; /Q15int s_count=0; 7/每個速度采樣周期內的脈沖削帚,電機的正反轉決定其正負值,正轉編碼器增計數,反轉減計 數void theta_calc()unsigned int count 1; int tlieta_e_p; int tlieta
33、_e_pul5;/Q0 /QO /QI 5/讀編碼脈沖數以thetaO點作為脈沖計數的零點count l=pulse;couiit=coiint 1 -cornitO; 計算每個電流采樣周期內的編碼器脈沖增量值 處理編碼器讀數溢出的情況,UP pulse的溢出,計數值會由65535變為0或者由0變為65535 由于在電機1F轉轉速為最大值3000r/min時count的值最大為50,將范用放寬一些,取值為100 由在電機反轉轉速為最大值3000i7min時count的值最小為50,將范闌放寬一些,取值為100 if(couiit<-100) count=couiit+30000; /co
34、unt 溢出時的處理else if(coiuit>lOO) coiuit=coiuit-30000:s coimt=s comit+count; 累加速度采樣周期內的脈沖增M:theta m=count+theta m; 機械角度,并將范圍調整為(0, 10000)theta_m=theta_m+10000; " 一 else if(theta_m> 10000)theta m=theta m-10000:coiintO=coiuitl;更新初始計數值Q0計算絕對電角度 在parke,clarke變換中用的是電角度 theta_e=4*theta_m;電角度的范由是(0,
35、 40000)while(theta_e> 10000)將其范I韋I變到(0, 10000) theta_e=theta_e -10000; " theta_e_p=theta_e-5000; 范 1-5000-5000 theta_e_pul5=(mt)(long)Ktheta*tlieta_e_p)»12); /theta_e_pul 5 為 Q15 格式 計算屜角度的sin,cos值,Q15格式sin_theta=qsinlt(theta_e_pu 15); /Q15 cos_tlieta=qcoslt(theta_ejpul 5); /Q15" &q
36、uot;卄卄卄卄“卄卄杠卄卄* AD中斷服務子程序 * #include"regs240x.hMunsigned int ad flag=O; 聲明 flag 為外部變最int iajb;void inteiTupt ad intlO imsigiied int iaOjbO; if(PIVR=OX0004)判斷是否為ad中斷,ia0=RESULT0;ib0=RESULTl;ia=(ia0»6)-388; /-388 是為 了可以表示電流的 lE負值,6.25A 對h'Z-388,-6.25A 對應 388,所以 Kcunent 為負值ib=(ib0»6)
37、-388;ad_flag=l;/置位轉換結束標志位elsereturn:不是:返回ADCTRL2=ADCTRL2|0X4200; /是:復位SEQ1,且消除屮斷標志位INT FLAG SEQ1標志寫T”清0 asm(M clrc iiitm ”);開中斷,因為一進入ad中斷,就屏蔽了其他所有中斷/ z main.c 文件務述:主程序。j前綴是為了讓其在CCS中顯示在最后而匕 定義和聲明對象#include,'pnl.h,'PNL pnl=PNL_DEFAULTS;#includeHev.hf,extern E ev;函數聲明void init reg(void); void ad init(void); void qep init(void);void phaseinit(void);void main(void)asm(M setc intm f,); 關中斷init_reg();初始化2407A寄存器ev.init(&ev); ad_initO;初始化ev寄存器qep_initQ;phaseinitO; piil.calc(&pnl):轉子相位初始化給定參數轉換成Q15格式ev.open(&ev);開 pwmasm(M clrc intm f,); /開中斷循環運行,手動停止電機運行/ pw
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建寧德部分達標中學2024~2025學年高一下冊期中聯合考試數學試題
- 電氣系統故障維修現場風險評估考核試卷
- 互聯網保險平臺用戶行為數據挖掘與分析考核試卷
- 員工安全意識評估考核試卷
- 部編道德與法治七年級上冊-第三單元師長情誼單元測試1
- 2025年中國NE-NE激光血管內照射儀數據監測研究報告
- 2025年中國FR螺紋果盆數據監測報告
- 2025年中國CD光碟名片卡數據監測報告
- 2025年中國3-氨基丁酸數據監測研究報告
- 2025至2030年中國鞋服材料市場分析及競爭策略研究報告
- GB/T 44351-2024退化林修復技術規程
- 中建EPC項目勞務分包合同示范文本
- 高考語文復習:各模塊思維導圖、例題
- 山東省濟寧市(2024年-2025年小學四年級語文)統編版期末考試((上下)學期)試卷及答案
- DL∕T 1901-2018 水電站大壩運行安全應急預案編制導則
- DL∕T 1076-2017 火力發電廠化學調試導則
- DB6101-T 3186-2024 物業服務評價技術規范
- 抖音紅娘話術
- 創設生活化教學與情境模擬
- 砂石料供應、運輸、售后服務方案
- 2023年安徽省公務員《申論》試題及答案解析(C卷)
評論
0/150
提交評論