ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:24.40KB ,
资源ID:4491601      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4491601.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP无刷直流电动机驱动控制程序Word格式文档下载.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

DSP无刷直流电动机驱动控制程序Word格式文档下载.docx

1、 / 9 转速过零标志 Uint16 Mode:3; / 10-12 保留 Uint16 Dshow: / 13 保留 Uint16 Sign: / 14 当前转向标志;union Flag_Reg Uint16 all; struct Flag_Bits bit;FlagRegs;/全局变量/串口通信变量unsigned int Sci_Rx8=0,0,0,0,0,0,0,0; /接收数据数组unsigned int Sci_Tx8=0,0,0,0,0,0,0,0; /发送数据数组char T_pointer=0; /发送数据数组指针char R_pointer=0; /接收数据数组指针ch

2、ar T_length=1; /发送数据长度 char R_length=0; /接收数据长度 char a2=0;/控制参数unsigned int spd_kp=0; /转速环P参数unsigned int spd_ki=0; /转速环I参数 unsigned int id_kp=0,id_ki=0; /电流PI参数signed int spd_given=0; /转速给定signed int spd_given1=0;signed int spd_given2=0;/控制变量unsigned int cap1=0; /前次换向标志位unsigned int cap2=0; /本次换向标志

3、位unsigned int intruptcount=0; /定时器1下溢中断次数unsigned int speed_given = 1000;signed int Idc_given2=0; /算得本次电流给定值signed int speed_e1=0; /前次转速误差signed int speed_e2=0; /本次转速误差signed int Ia_e1=0; /前次电流误差 signed int Ia_e2=0; /本次电流误差char t2first=0;signed int COMP2=0; /装比较寄存器值/转速反馈char Spd_Data=0; /滤波计数int spe

4、ed_counter=0; /速度环计数器unsigned int cap_a; /本次捕获单元数据unsigned int cap_b; /上次捕获单元数据long cap_c; /捕获单元数据差signed int BLDC_SPD10=0,0,0,0,0,0,0,0,0,0;/转速滤波signed int spd_fd_q1=0; /转速反馈临时变量unsigned int spd_fd_q0=0; /转速检测值char cc=0;/电流反馈unsigned int ia6=0,0,0,0,0,0; /A相电流反馈值 unsigned int ib6=0,0,0,0,0,0; /B相电流

5、反馈值signed int ia_fd=0,ib_fd=0; /电流反馈signed int Temp_filter=0; /临时变量unsigned int t1per=0; /周期寄存器数值/临时变量signed long long1_tmp=0;signed long long2_tmp=0;signed int u16_tmp1=0;signed int u16_tmp2=0;/子程序声明interrupt void t1uf_int(void);interrupt void cap_int(void);void Ad(void);void speed(void); /计算速度void

6、 Ia_PI(void); /电流环调节Iavoid speed_PI(void); /速度环调节void bldc(void);void Check_Rxdata(void);void Sci_Send(signed int sci_delay);char *Fen_Jie(signed int Send_Temp);unsigned int Sci_Rx_check(unsigned int i_Rx,unsigned int *p_Rx);signed int DIV_CAL(long signed int dividend,signed int divisor);unsigned in

7、t U_DIV_CAL(long unsigned int udividend,unsigned int udivisor);/主程序开始void main(void)/控制寄存器初始设置 InitSysCtrl(); /初始化系统 DINT; /关全局中断 IER = 0x0000; IFR = 0x0000; InitPieCtrl(); /初始化PIE中断 InitPieVectTable(); /初始化PIE中断矢量表 InitGpio(); /初始化Gpio输入输出口 InitEv(); /初始化Eva的T和T2 InitAdc_Eva(); /初始化AD InitData(); E

8、ALLOW; / This is needed to write to EALLOW protected registers PieVectTable.T1UFINT=&t1uf_int;/T1下溢中断地址 PieVectTable.CAPINT4=&cap_int; PieVectTable.CAPINT5=& PieVectTable.CAPINT6=& EDIS; / This is needed to disable write to EALLOW protected registers PieCtrl.PIEIER2.bit.INTx6 = 1; /T1下溢中断使能 PieCtrl.

9、PIEIER5.bit.INTx5 = 1; PieCtrl.PIEIER5.bit.INTx6 = 1; PieCtrl.PIEIER5.bit.INTx7 = 1; IER |= M_INT2; / Enable CPU Interrupt 2 IER |= M_INT4; / Enable CPU Interrupt 4 IER |= M_INT5; / Enable CPU Interrupt 5 EvbRegs.EVBIMRC.bit.CAP4INT=1; EvbRegs.EVBIMRC.bit.CAP5INT=1; EvbRegs.EVBIMRC.bit.CAP6INT=1; Ev

10、bRegs.CAPCONB.all=0x36FF; NOP; EvbRegs.CAPCONB.all=0xB6FF; EINT; /使能全局中断INTM ERTM; / Enable Global realtime interrupt DBG/等待中断(中断之外的时间内进行LCD的发送和接收) for(;) SCI_CTL(); /串口控制/*/接收数据检测/*void Check_Rxdata()switch(Sci_Rx0) case m: /转速给定和转速在线更新v FlagRegs.bit.Vflag=1; if(Sci_Rx1=- FlagRegs.bit.Sign1=0; /转速为

11、负值 spd_given1 = Sci_Rx_check(4,Sci_Rx); else FlagRegs.bit.Sign1=1; /转速为正值 spd_given1 = Sci_Rx_check(3,Sci_Rx); if(Sci_Rx0= FlagRegs.bit.Sign2=FlagRegs.bit.Sign1; FlagRegs.bit.Sign=FlagRegs.bit.Sign1; break; s /启动 Sci_Tx0=a Sci_Tx1=+ Sci_Tx2=0 Sci_Tx3= Sci_Tx4= Sci_Tx5= Sci_Tx6= Sci_Tx7=z spd_given=s

12、pd_given1; Protect_Data(); Motor_Start(); FlagRegs.bit.Send=1; T_length=8; T_pointer=0;t /停止 Motor_Stop(); default:/*/ 串口接收/发送判断/*SCI_CTL() if(SciaTx_Ready() = 1) & (FlagRegs.bit.Send = 1)/发送数据准备好并且软件使能发送 if(FlagRegs.bit.Test=0) /SCI测通状态 SciaRegs.SCITXBUF = Sci_RxT_pointer; T_pointer+; /发送缓冲器数组指针+1

13、if(T_pointer=R_length) FlagRegs.bit.Test=1; FlagRegs.bit.Send=0; T_pointer=0; else /SCI非测通状态 SciaRegs.SCITXBUF = Sci_TxT_pointer; /发送缓冲器数组指针+1 if(T_pointer=T_length) FlagRegs.bit.Send = 0; if(T_pointer=10) FlagRegs.bit.Send= 0; R_pointer=0; #if !SCIA_INT if(SciaRx_Ready() = 1) /接收数据准备好 FlagRegs.bit.

14、SendEnd=0; FlagRegs.bit.Send= 0; Sci_RxR_pointer = SciaRegs.SCIRXBUF.all; R_pointer+; if(Sci_RxR_pointer-1=) R_length=R_pointer-1; FlagRegs.bit.Send= 1; FlagRegs.bit.SendEnd=1; if(FlagRegs.bit.Test=1) Check_Rxdata(); R_pointer = 0; if(R_pointer= 10) R_pointer = 0; #endif /*/接收数据格式调整unsigned int Sci_

15、Rx_check(unsigned int i_Rx,unsigned int *p_Rx) unsigned long data_Rx; unsigned int *p_tmp_Rx=p_Rx+i_Rx; data_Rx=1000*(*p_tmp_Rx)+100*(*(p_tmp_Rx+1)+10*(*(p_tmp_Rx+2)+(*(p_tmp_Rx+3)-53328; return(data_Rx);/发送数据格式调整char *Fen_Jie(signed int Send_Temp) unsigned int Temp; char s1,s2,s3,s4; char String_Tm

16、p6=0,0,0,0,0,0 if(Send_Temp21; if(s1=10) s1=9; Temp=Send_Temp-s1*1000; s2=(long)Temp*5253)19; if(s2=10) s2=9; Temp=Temp-s2*100; s3=(long)Temp*3277)15; if(s3=10) s3=9; s4=Temp-s3*10; if(s4=10) s4=9; String_Tmp1=s1+48; /千位 String_Tmp2=s2+48; /百位 String_Tmp3=s3+48; /十位 String_Tmp4=s4+48; /个位 return(Str

17、ing_Tmp); /*/ 数据发送void Sci_Send(signed int sci_delay) /串口数据发送 char *p_send=0; a2+; if(a2=sci_delay)&(FlagRegs.bit.Send=0)&(FlagRegs.bit.SendEnd=1) p_send=Fen_Jie(spd_fd_q0); Sci_Tx1=*p_send; Sci_Tx3=*(p_send+1); Sci_Tx4=*(p_send+2); Sci_Tx5=*(p_send+3); Sci_Tx6=*(p_send+4); a2=0;/电机状态控制/ 数据处理Protect

18、_Data() if(spd_kp30000) spd_kp=30000; if(spd_ki30000) spd_ki=30000; if(id_kp30000) id_kp=30000; if(id_ki30000) id_ki=30000; EvaRegs.T1PR =7500; /矢量控制开关频率5K固定 t1per=7500; EvaRegs.T1CON.all = 0X080C; /连续增减计数 /电机停止 /* Motor_Stop() EvaRegs.CMPR1=0; EvaRegs.CMPR2=0; EvaRegs.CMPR3=0; EvaRegs.ACTR.all=0X0F

19、FF; FlagRegs.bit.Openint=0; EvaRegs.T1CON.bit.TENABLE=0; EvbRegs.T3CON.bit.TENABLE=0;/电机启动Motor_Start() EvaRegs.ACTR.all=0X0999; FlagRegs.bit.Openint=1; /周期寄存器 5khz EvbRegs.T3PR =0xffff; / 周期寄存器 EvbRegs.T3CON.all = 0X170C; / 连续增减计数 EvbRegs.EVBIMRA.all=0X0000; / T3下溢使能 EvbRegs.EVBIFRA.all=0X0FFFF; / 清中断标志位 GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=0; /将cap456设置为io口 GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=0; GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=0; cap2 = GpioDataRegs.GPBDAT.all & 0x0700; /记录cap4-6初始状态 cap2 = cap28; cap2 = cap2&0x0007; if(FlagRegs.bit.Sign=1) ca

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2