电机的DSP控制课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称:电机的DSP控制课程设计
院系:电子信息与电气工程学院
专业:电气工程与自动化
班级:
学号:
姓名:
上海交通大学
目录
1. 电机控制的DSP芯片 (3)
2.软件设计要求 (3)
2.1学会DSP开发环境的使用,能编写C语言程序; (3)
2.2编写数码管显示程序、键盘扫描程序; (3)
2.3 编写AD采样程序; (3)
2.4编写6路PWM正弦波程序(变频器逆变需6路); (3)
3. 软件实现 (3)
3.1数码管显示程序、键盘扫描程序 (3)
3.1.1程序设计思路 (3)
3.1.2程序模块 (4)
3.2 AD采样程序 (6)
3.2.1程序设计思路 (6)
3.2.2 程序模块 (6)
3.3 6路PWM正弦波程序 (7)
3.3.1 程序设计思路 (7)
3.3.2 程序模块 (8)
3.3.3程序设计结果 (10)
4. 课程总结 (14)
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)
{
case 0x00:
{ keynumber++;
if(keynumber>9999)keynumber=0;
write();
delay(2);
}break;
case 0x01:
{ 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)
{
case 0x00:
{
keynumber++;
if(keynumber>9999)keynumber=0;
write();
}break;
case 0x01:
{
keynumber--;
If(keynumber<0)keynumber=9999;
write();
}break;
default : break;
}
}
if(time>5) //按着不放超过5秒,则不断加10或减10;
{
switch(key_number)
{
case 0x00:
{
keynumber+=10;
if(keynumber>9999)keynumber=0;
write();
delay(15);
}break;
case 0x01:
{
keynumber-=10;
if(keynumber<0)keynumber=9999;
write();
delay(15);
}break;
default : break;
}
}