-
--
姓名
吴
镌
樊
想
孙
璐
陈玉枫
自动化
学号
2011/12/
7
专业
实验名称
实验内容
实验目的
和要求
实验设备
实验原理
时间
成绩
直流电机控制实验
通过
C
语言编程控制控制
I/O
管脚产生不同占空比的
PWM
信号,
从而控
制直流电机的转速
1
.学习用
C
语言编制中断程序,控制
F2812 DSP
通用
I/O
管脚产生不同
占空比的
PWM
信号。
2
.学习
F2812DSP
的通用
I/O
管脚的控制方法。
3
.学习直流电机的控制原理和控制方法。
计算机,
ICETEK-F2812-EDU
实验箱(或
ICETEK
仿真器
p>
+ICETEK
–
F2812-A
系统板
+
相关连线及电源)。
1
.
TMS320F2812DSP
的
McBSP
引脚
通过设置
PWM11
和
PWM5
的工作方式和状态,可以
实现将它们当成通
用
I/O
引脚使用。
2
.直流电机控制
< br>直流电动机是最早出现的电动机,
也是最早能实现调速的电动机。
近年来,
直流电动机的结构和控制方式都发生了很大的变化。
< br>随着计算机进入控制
领域,
以及新型的电力电子功率元器
件的不断出现,
使采用全控型的开关
功率元件进行脉宽调制
p>
(Puls Width Modulation
,简称
PWM)
控制方式已成
为绝对主流。
PWM
调压调速原理
直流电动机转速
n
的表达式为:
Φ?
=
Kn U
IR
其中,
U
为电枢端电压;
I
为电枢电流;
R
为电枢电路总电阻;
Φ为每极
磁通量;
K
为电动机结构参
数。
所以直流电动机的转速控制方法可分为两
类:
对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制
法。
p>
其中励磁控制法在低速时受磁极饱和的限制,
在高速时受换向火花和
换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这
种控制方法用得很少。现在,大多数应用场合都使用电枢控制法。绝大多
数直流
电机采用开关驱动方式。
开关驱动方式是使半导体功率器件工作在
开关状态,通过脉宽调制
PWM
来控制电动机电枢电压,实现调速。
--
--
上图是利用开关管对直流电动机进行
PWM
调速控制的原理图和输入输
出
电压波形。图中,
当开关管
MOSFET
的栅极输入高
电平时,开关管导通,直流电动机电枢
绕组两端有电压
Us
p>
。
t1
秒后,
栅极输入变为低电平,开关管截止,电动机电枢两端电压为
0
。
t2
秒后,栅极输入重
新变为高电平,开关管的动作重复前面的过程。这样,对应着输入的电平
高
低,直流电动机电
枢绕组两端的电压波形如图中所示。
电动机的电枢绕组两端的电压平均值
Uo
为
S S
S
U U
T
t
t t
t U
O
U
=
=
α
+
+
=
1
1 2
1
0
式中α为占空比,α
=t1/T
占空比α表示了在一个周期
T
p>
里,开关管导通的时间与周期的比值。α
的变化范围为
0
≤α≤
1
。
由此式可知,
当电源电压
Us
< br>不变的情况下,
电枢的端电压的平
均值
< br>Uo
取决于占
空比α的大小
,
改变α值就可以改变端电压的平均值,
从而达到调速的目
p>
的,这就是
PWM
调速原理。
--
--
PWM
调速方法:
在
PWM
调速时,占空比α是一个重要参数。以下
3
种方法都可以改变
占空比的值:
p>
(1)
定宽调频法:
这种方法是保持
t1
不变,
只改变
t2
,
这样使周期
T(
或频率
)
也随之改变。
p>
(2)
调宽调频法:
这种方法是保持
t2
不变,
只改变
t1
,
这样使周期
T(
或频率
)
也随之改变。
p>
(3)
定频调宽法:这种方法是使周期
T(
或频率
)
保持不变,而改变
t1
和
t2
。
<
/p>
前两种方法由于在调速时改变了控制脉冲的周期
(
或频率
)
,当控制脉冲的
频率
与系统的
固有频率接近时,将会引起震荡,因此这两种方法用
得很少。目前,在直
流电动机的控制中,
主要使用定频调宽法
图中
PWM
输入对应
ICETEK
–
F2812
-A
评估板上
P4
外扩插座第
26
引
脚的
PWM11
信
号,
DSP
将在此引脚上给出
PWM
信号用来控
制直流电机的转速;
图中的
DIR
输入对应
ICETEK
–
F2812-A
评估板上
P1
外扩插座第
6
引脚的
P4
信号,
DSP
将在
此引脚上给出高电
平或低电平来控制直流电机的方向。
从
DSP
输出的
PWM
信号和转向信号
先经过
2
个与门和
1
个非门再与各个开关管的栅极相连。
控制原理
当电动机要求正转时,
PWM11
给出高电平信号,
该信号分成
3
路:
第
1
路
接与门
Y1
的输入端,使与门
Y1
的输出由
PWM
决定,所以开关管
V1
栅极受
PWM
控制;第
2
路直接
与开关管
V4
的栅极相连,
使
V4
导通;
第
3
路经非门
F1
连接到与门
Y2
的
输入端,使与门
Y2
输出为
0
,这样使开关管
V3
截止;从非门
F1
输出的另一路与开关管
V2
的栅极相连,其
低电平信号也使
V2
截止。
同样,当电动机要求反转时,
PWM5
给出低电平信号,经过
2
个与门和
1
个非门组成的
--
--
逻辑电路后,使开关管
V3
受
PWM
信号控制,
V2
导通,
V1
、
V4
全部
截止。
4
.程序编制
程序中采用定时器中断产生固定频率的
PWM
波,在每个中断中根据当
前占
空比判断应
输出波形的高低电平。
主程序用轮询方式读入键盘输入,得到转速和方向控制命令。
在改变电机方向时为减少电压和电流的波动采用先减速再反转的控制顺
< br>序。
(
1
)对实
通过
C
语言编程改变
pwm
波的占空比,将此
pwm
波从
I/O
验
内
容
和
口输出到直流电动机,从而改变其转速,通过
引脚上给出高
实
验
原
< br>理
电平或低电平和逻辑电路来控制直流电机的方向。
及调试:
进行分析,
理
出
完
成
实
验
的
设
计思路。
实验设计
(
2
)列出
设
计
所
需
的
特
殊
环
节
…
初始化
2.
电机使能
3.
键盘实时监测
4.
中断调用
--
--
(
3
)画出
设
计
流
程
图。
(
4
p>
)调试
程序
#include
//
DSP281x
Headerfile
Include File
#include
//
DSP281x
Examples
Include File
// Prototype statements for
functions found within this file.
interrupt void cpu_timer0_isr(void);
void Delay(unsigned int nTime);
void Gpio_select(void);
void error(int);
void
program_stop();
void Gpio_PortA(void);
void Gpio_PortB(void);
void
Gpio_PortF(void);
void
Gpio_PortDEG(void);
--
--
char ConvertScanToChar(unsigned char
cScanCode);
void RefreshLEDArray();
//
刷新显示
void
SetLEDArray(int nNumber);
//
修改显示内容
#define T46uS
0x0d40
#define SCANCODE_0
0x70
#define SCANCODE_1 0x69
#define SCANCODE_2 0x72
#define SCANCODE_3 0x7A
#define SCANCODE_4 0x6B
#define SCANCODE_5 0x73
#define SCANCODE_6 0x74
#define SCANCODE_7 0x6C
#define SCANCODE_8 0x75
#define SCANCODE_9 0x7D
#define SCANCODE_Del 0x49
#define SCANCODE_Enter 0x5A
#define SCANCODE_Plus 0x79
#define SCANCODE_Minus 0x7B
#define SCANCODE_Mult 0x7C
#define SCANCODE_Divid 0x4A
#define SCANCODE_Num 0x77
#define CTRGR *(int *)0x108000
#define CTRLCDCMDR *(int *)0x108001
#define CTRKEY *(int *)0x108001
#define CTRLCDCR *(int *)0x108002
#define CTRCLKEY *(int *)0x108002
#define CTRLCDLCR
*(int *)0x108003
#define
CTRLCDRCR *(int *)0x108004
#define
CTRLA *(int *)0x108005
#define CTRLR
*(int *)0x108007
Uint16
var1 = 0;
Uint16 var2 = 0;
Uint16 var3 = 0;
Uint16
test_count = 0;
Uint16 Test_flag = 0;
Uint16 Test_var
= 0;
Uint16 Test_status[32];
Uint16 PASS_flag = 0;
unsigned int uWork;
int jishu=0;
--
--
unsigned int
uWork,nCount=0,uN,uN1,nCount1,nDir;
unsigned int uPort8000;
unsigned int nScreenBuffer[1024];
unsigned char ledbuf[8],ledx[8];
unsigned char ledkey[10][8]=
{
{0x00,0x00,0x7
C,0x82,0x82,0x82,0x7C,0x00},
{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},
//1
{0x00,0x00,0
x84,0xC2,0xA2,0x92,0x8C,0x00},
//2
{0x00,0x00,0x44,0x92,0x92,0
x92,0x6C,0x00},
{0x00,0x00,
0x30,0x28,0x24,0xFE,0x20,0x00},
{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},
{0x00,0x00,0x7C,0x92,0x92,0
x92,0x64,0x00},
{0x00,0x00,
0x02,0xC2,0x32,0x0A,0x06,0x00},
{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},
{0x00,0x00,0x4C,0x92,0x92,0
x92,0x7C,0x00}
};
void main(void)
{
//int nCount=0;
char
cKey,cOldKey;
unsigned int
nScanCode,nKeyCode;
unsigned int nSpeed;
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral
Clocks
// This example function is
found in the DSP281x_SysCtrl.c file.
InitSysCtrl();
// Step 2. Initalize GPIO:
//
This
example
function
is
found
in
the
DSP281x_Gpio.c
file
and
//
illustrates how to set the GPIO to it's default
state.
// InitGpio();
// Skipped for this example
//
Step 3. Clear all interrupts and initialize PIE
vector table:
// Disable CPU interrupts
DINT;
//
Initialize the PIE control registers to their
default state.
// The default state is
all PIE interrupts disabled and flags
--
-
-
-
-
-
-
-
-
-
上一篇:19全国卷I 英语
下一篇:最新英语中19种修辞手法和例句