版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客厅背板施工方案(3篇)
- 手绘横幅-活动策划方案(3篇)
- 柔性砂浆施工方案(3篇)
- 样板施工方案图(3篇)
- 武汉员工活动策划方案(3篇)
- 汉服国际活动策划方案(3篇)
- 沙滩推广活动策划方案(3篇)
- 医学心理学与临床路径整合应用优化
- 就业指导中心服务指南
- 医学影像云在骨科远程诊断中应用
- 32位MIPS-CPU-设计-实验报告详解
- 2024年金华义乌市卫生健康系统事业单位招聘笔试真题
- T/CSBME 065-2023医用敷料材料聚氨酯泡沫卷材
- 《撬重物的窍门》说课(附反思板书)(课件)五年级下册科学苏教版
- 第一单元1 多彩的亚洲美术 课件 -2024-2025学年浙人美版(2024)初中美术七年级下册
- GB/T 45166-2024无损检测红外热成像检测总则
- 《山东省技工院校学生职业技能等级认定工作指引(试行)》
- 酒精滴针眼的护理
- 安全生产风险分级管控和隐患排查治理
- 律所合伙人转让协议书模板
- Photoshop平面设计与制作(第3版)中职全套教学课件
评论
0/150
提交评论