电机的DSP控制课程设计报告.docx

上传人:b****5 文档编号:28117333 上传时间:2023-07-08 格式:DOCX 页数:16 大小:632.04KB
下载 相关 举报
电机的DSP控制课程设计报告.docx_第1页
第1页 / 共16页
电机的DSP控制课程设计报告.docx_第2页
第2页 / 共16页
电机的DSP控制课程设计报告.docx_第3页
第3页 / 共16页
电机的DSP控制课程设计报告.docx_第4页
第4页 / 共16页
电机的DSP控制课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

电机的DSP控制课程设计报告.docx

《电机的DSP控制课程设计报告.docx》由会员分享,可在线阅读,更多相关《电机的DSP控制课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。

电机的DSP控制课程设计报告.docx

电机的DSP控制课程设计报告

 

课程名称:

电机的DSP控制课程设计

 

院系:

电子信息与电气工程学院

专业:

电气工程与自动化

班级:

学号:

姓名:

 

上海交通大学

 

1.电机控制的DSP芯片

本课程设计用的芯片为TMS320F28027;

本课程设计中主要用到的一些电路模块:

显示和键盘电路、BC7281、

A/D采样电路、PWM输出电路。

2.软件设计要求

2.1学会DSP开发环境的使用,能编写C语言程序;

2.2编写数码管显示程序、键盘扫描程序;

程序运行后,初始值为0,通过1个键,按一下加1,通过另一个键,按1下减1;(按着不放,超过1秒,不断加1或减1,时间超过5秒,不断加10,或减10)。

2.3编写AD采样程序;

根据输入的电压值,把AD的结果显示出来,当输入电压变化时,显示值也变化。

2.4编写6路PWM正弦波程序(变频器逆变需6路);

PWM的开关频率为10KHz,其输出的正弦波频率为0~100Hz,根据AD的值变化,50Hz时输出100%电压,0~50Hz按V/f等于常数输出,死区时间取2us。

频率值显示在数码管上。

3.软件实现

3.1数码管显示程序、键盘扫描程序

3.1.1程序设计思路

此程序关键是如何去计时,最初考虑是用计时器中断去设计程序,但此方法需要在中断中执行判断按键是否持续,以及更改和现实数字,中断中操作过多,经常出错。

故后来改为用延时环节计时,此方法的优点是不需要用中断,但计时不够精确。

3.1.2程序模块

for(;;)

{time=0;//计时变量time初始值为0;

if(KEY==0)

{key_number=Read_7281(0x13);//读取按键值

switch(key_number)

{

case0x00:

{keynumber++;

if(keynumber>9999)keynumber=0;

write();

delay

(2);

}break;

case0x01:

{keynumber--;

if(keynumber<0)keynumber=9999;

write();

delay

(2);

}break;

}//switch

}//if

while(KEY==0)//如果按键没有松开,则开始计时;

{

if(time<=5)//延时环节,延时为1秒;

{

for(cnt1=0;cnt1<270;cnt1++)

{

for(cnt2=0;cnt2<10000;cnt2++){if(KEY!

=0)break;}

if(KEY!

=0)break;//如果按键松开,则跳出循环,重新开始计时;

}

}

if(KEY!

=0)break;

time++;//如果1秒内按键未松开,则计时变量time加1;

cnt1=cnt2=0;

if(time>=1&&time<=5)//按着不放超过1秒,则不断加1或减1;

{

switch(key_number)

{

case0x00:

{

keynumber++;

if(keynumber>9999)keynumber=0;

write();

}break;

case0x01:

{

keynumber--;

If(keynumber<0)keynumber=9999;

write();

}break;

default:

break;

}

}

if(time>5)//按着不放超过5秒,则不断加10或减10;

{

switch(key_number)

{

case0x00:

{

keynumber+=10;

if(keynumber>9999)keynumber=0;

write();

delay(15);

}break;

case0x01:

{

keynumber-=10;

if(keynumber<0)keynumber=9999;

write();

delay(15);

}break;

default:

break;

}

}

}

}//for

3.2AD采样程序

3.2.1程序设计思路

此程序相对简单,只需要用ADC中断获取通道的采样值,再将采样值在数码管上显示即可。

3.2.2程序模块

//ADC中断,获取通道采样值;

interruptvoidadc_isr(void)

{

Voltage0[0]=AdcResult.ADCRESULT0;//模数转换结果由ADCINA0通道采样产生

Voltage0[1]=AdcResult.ADCRESULT1;//模数转换结果由ADCINA1通道采样产生

Voltage0[2]=AdcResult.ADCRESULT2;//模数转换结果由ADCINA2通道采样产生

Voltage0[3]=AdcResult.ADCRESULT3;//模数转换结果由ADCINA3通道采样产生

Voltage0[4]=AdcResult.ADCRESULT4;//模数转换结果由ADCINA4通道采样产生

//28027缺ADCINA5ADCRESULT5

Voltage0[5]=AdcResult.ADCRESULT6;//模数转换结果由ADCINA6通道采样产生

Voltage0[6]=AdcResult.ADCRESULT7;//模数转换结果由ADCINA7通道采样产生

//28027缺ADCINB0ADCRESULT8

Voltage0[7]=AdcResult.ADCRESULT9;//模数转换结果由ADCINB1通道采样产生

Voltage0[8]=AdcResult.ADCRESULT10;//模数转换结果由ADCINB2通道采样产生

Voltage0[9]=AdcResult.ADCRESULT11;//模数转换结果由ADCINB3通道采样产生

Voltage0[10]=AdcResult.ADCRESULT12;//模数转换结果由ADCINB4通道采样产生

//28027缺ADCINB5ADCRESULT13

Voltage0[11]=AdcResult.ADCRESULT14;//模数转换结果由ADCINB6通道采样产生

Voltage0[12]=AdcResult.ADCRESULT15;//模数转换结果由ADCINB7通道采样产生

AdcRegs.ADCINTFLGCLR.bit.ADCINT1=1;//ClearADCINT1flagreinitializefornextSOC

PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//AcknowledgeinterrupttoPIE

return;

}

//for循环

for(;;)//计算每一位的数值,并显示;

{

qw=Voltage0[0]/1000;

bw=(Voltage0[0]-1000*qw)/100;

sw=(Voltage0[0]-1000*qw-100*bw)/10;

gw=Voltage0[0]-1000*qw-100*bw-10*sw;

qw1=Voltage0[1]/1000;

bw1=(Voltage0[1]-1000*qw1)/100;

sw1=(Voltage0[1]-1000*qw1-100*bw1)/10;

gw1=Voltage0[1]-1000*qw1-100*bw1-10*sw1;

Write_7281(0x15,(0x70+qw));//向最右边算起第8位写0

Write_7281(0x15,(0x60+bw));//向最右边算起第7位写0

Write_7281(0x15,(0x50+sw));//向最右边算起第6位写0

Write_7281(0x15,(0x40+gw));//向最右边算起第5位写0

Write_7281(0x15,(0x30+qw1));//向最右边算起第4位写0

Write_7281(0x15,(0x20+bw1));//向最右边算起第3位写0

Write_7281(0x15,(0x10+sw1));//向最右边算起第2位写0

Write_7281(0x15,(0x00+gw1));//向最右边算起第1位写0

delay(3);

}

3.36路PWM正弦波程序

3.3.1程序设计思路

PWM开关频率和死区的设置,可以在InitEPwm1Example(),这个函数中通过对周期寄存器赋值来控制开关频率,死区则通过对RaisingEdgeDelay和FailingEdgeDelay赋值来设置。

程序要求开关频率为10KHZ,而28027主频为60MHZ,由于60M/3000/2=10K,故周期寄存器赋值3000;程序要求死区为2us,故只需将上升沿延迟和下降沿延迟均设定为1us即可。

输出波形为正弦波,即要求占空比按正弦变化,本组通过查表(表中数据按正弦变化),来进行脉宽调制。

对于频率的控制,首先按50HZ为基准,要求每次步长为1查表,将表中数据查完一遍,输出的波形即为50HZ。

则由于开关频率为10KHZ,10K/50=200,所以正弦表中应含有200个数值,且数值大小按正弦变化。

当频率小于50HZ时,按F/50这一比例系数为步长进行查表,由于F<50,故查表较慢,即输出波形的频率变小。

当频率大于50HZ时,也按F/50这一比例系数为步长进行查表,由于此时F>50,故查表较快,即输出波形频率变大。

对与V/f为常数,则可通过简单的运算即可实现。

3.3.2程序模块

//正弦表

//Sintable,MaxValue4096,MinValue0

unsignedshortsin_table[200]={2073,2138,2202,2266,2330,2393,2456,2519,2582,2643,2705,

2765,2825,2884,2942,3000,3056,3112,3166,3220,3272,3323,3372,3421,3468,3513,3558,

3600,3641,3681,3719,3755,3790,3823,3854,3883,3911,3937,3961,3983,4003,4021,4037,

4051,4063,4074,4082,4088,4092,4095,4095,4093,4089,4083,4075,4066,4054,4040,4024,

4006,3987,3965,3942,3916,3889,3860,3829,3797,3762,3726,3689,3649,3609,3566,3522,

3477,3430,3382,3333,3282,3230,3177,3123,3068,3011,2954,2896,2837,2777,2717,2656,

2594,2532,2469,2406,2342,2279,2215,2150,2086,2022,1957,1893,1829,1765,1702,1639,

1576,1513,1452,1390,1330,1270,1211,1153,1095,1039,983,929,875,823,772,723,674,627,

582,537,495,454,414,376,340,305,272,241,212,184,158,134,112,92,74,58,44,32,21,13,

7,3,0,0,2,6,12,20,29,41,55,71,89,108,130,153,179,206,235,266,298,333,369,406,446,486,529,573,

618,665,713,762,813,865,918,972,1027,1084,1141,1199,1258,1318,1378,1439,1501,1563,

1626,1689,1753,1816,1880,1945,2009};

//此即为正弦表,此表中数据按正弦规律变化,通过查表可以控制占空比,即控制电压大小,通过改变查表的快慢即可控制输出波形的频率。

//EPWM1配置

//10KHz:

60M/3000/2=10Kcenter-aligned

#defineEPWM1_TIMER_TBPRD3000//Periodregister周期寄存器赋值3000

#defineEPWM2_TIMER_TBPRD3000//Periodregister

#defineEPWM3_TIMER_TBPRD3000//Periodregister

voidInitEPwm1Example(){

//SetupTBCLK

EPwm1Regs.TBPRD=EPWM1_TIMER_TBPRD;//Settimerperiod801TBCLKs

//周期寄存器值为3000,60M/3000/2=10K;即开关频率设置为10KHZ;

EPwm1Regs.TBPHS.half.TBPHS=0x0000;//Phaseis0

EPwm1Regs.TBCTR=0x0000;//Clearcounter

…………

…………

…………

EPwm1Regs.DBCTL.bit.OUT_MODE=DB_FULL_ENABLE;

EPwm1Regs.DBCTL.bit.POLSEL=DB_ACTV_HIC;//ToggleEPWM1Bonly

EPwm1Regs.DBCTL.bit.IN_MODE=DBA_ALL;//DelayonRaisingandFaling

EPwm1Regs.DBRED=120;//1usdeadband

EPwm1Regs.DBFED=120;

//死区配置,RED和FED均设置为1us,即死区时间为2us;

…………

…………

}

//for循环

for(;;){

FreqFloat=ADCResults[0]/38;

//频率与通道采样值乘正比,除以38是为了控制频率调节范围为0~100HZ;

FreqInt=(unsignedint)FreqFloat;

th=(FreqInt%100)/10;//将频率输出在数码管上;

Write_7281(0x15,(0x50+th));

th=FreqInt%10;

Write_7281(0x15,(0x40+th));

Delay

(2);

asm("NOP");

}

//EPWM中断函数

interruptvoidepwm1_isr(void){

//UpdatetheCMPAandCMPBvalues

//update_compare(&epwm1_info);

unsignedintPhaseAPosition;

unsignedshorti,j,k;

InterruptedTimes++;

PWMStep=FreqFloat/50.0;//设置查表的步长,以50HZ为基准;

PhaseAPositionHistory+=PWMStep;//按步长依次查表;

if(PhaseAPositionHistory>200){PhaseAPositionHistory-=200;}//若超过200,则循环

PhaseAPosition=(unsignedint)PhaseAPositionHistory;

if(FreqInt>50){

i=(unsignedshort)((float)sin_table[PhaseAPosition%200]/1.37f);

j=(unsignedshort)((float)sin_table[(PhaseAPosition+133)%200]/1.37f);

k=(unsignedshort)((float)sin_table[(PhaseAPosition+67)%200]/1.37f);

//频率大于50HZ时的变换式,输出电压为100%幅值;

}else{

i=(unsignedshort)((float)FreqInt*2*sin_table[PhaseAPosition%200]/137.0f);

j=(unsignedshort)((float)FreqInt*2*sin_table[(PhaseAPosition+133)%200]/137.0f);

k=(unsignedshort)((float)FreqInt*2*sin_table[(PhaseAPosition+67)%200]/137.0f);

}

//频率小于50HZ时所用的变换式,保证了电压变化在50HZ处的连续,也保证了V/f为常数;

if(PWMEnabled){//设置各路PWM的占空比;

EPwm1Regs.CMPA.half.CMPA=i;

EPwm2Regs.CMPA.half.CMPA=j;

EPwm3Regs.CMPA.half.CMPA=k;

}

//EPwm1Regs.CMPB=i;//SetCompareBvalue

//ClearINTflagforthistimer

EPwm1Regs.ETCLR.bit.INT=1;//清中断标志位

//Acknowledgethisinterrupttoreceivemoreinterruptsfromgroup3

PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;

}

3.3.3程序设计结果

图片1死区2us

图片21、2路PWM,相位差

图片31、3路PWM,相位差

图片41、5路PWM,相位差

图片5频率50HZ时输出的电压波形

图片6频率小于50HZ时输出的电压波形(V/f为常数),电压幅值变小

 

图片7频率大于50HZ时输出的电压波形,幅值不变

4.课程总结

16周的课程设计即将结束,16周的学习,有老师的讲解,也有自己的摸索。

课堂上,老师对不同种类电机运行原理,以及对PWM等知识的介绍,让我温习了电机学和电力电子的基础知识。

同时通过编程,让我在科创4B和DSP实践等课程的基础上,对TMS320C28027单片机及其源码有了进一步了解。

最终在小组成员的努力下,顺利的完成了本课程的任务,在此要感谢各位小组成员,能够一起面对困难,克服困难,也要感谢老师和助教的监督和指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1