-
DSP
电机控制系统驱动程序的设计
摘要:设计了一种
DSP
电机控制系统,开发了电机控
制可视化界面。建立计算机(上位机)与
p>
DSP
(下位机)之
间的串口通信机制,既
而完成对电机运行的复杂控制。着重
分析
DSP
电机驱动程序的结构和相关代码,
理清程序设计的
思路
,供相关研究人员借鉴。
关键词:
DSP
直流电机
串口通信
程序设计
中图分类号:
TP29
文献标识码:
A
文章编号:
1007-9416
(
2014
)
12-0147-03
Abstract
:
A kind
of DSP motor control system was designed
and one motor control visual interface
was developed in the
paper. The serial
communication mechanism between PC of
host and DSP of client is established
to finish complicated
controls of DC
motor. Focus on the analysis of structures and
related codes of DSP motor drive
program is expected to clear
program
design ideas for relevant science researches.
Key
Words
:
DSP
;
DC motor
;
serial
communication
;
program design
目前,
利用
DSP
实现对电动机运行的控制已经成为电机
拖动领域流行且成
熟的方案。
通过
DSP
可以实施对多类
型电
机的多形式的运动控制,其中最突出的是对电机宽域且平滑
的调速,依据电机与
DSP
类型的不同,具有诸多实用的方案<
/p>
[1
,
2]
。关
于直流电机的调速,理论上可以采取三种方式:
改变电枢电压,改变电枢回路电阻,调节
励磁磁通,但是由
于其它两种方法缺陷明显,目前主要采用改变电枢电压的方
法:通过调节
DSP
输出的
PWM
波形的占空比,调控输入到
电机电枢绕组的电压有效值
,既而实现电机速度在较宽的范
围内平滑改变
[3]
。
本文介绍一种基于
DSP TMS3
20F2812
的电机控制系统。
利用
Visual Studio 2010
(
VS2010
)开发电机控制界面,构建
了计算机
(上位机
)
与
DSP
(下位机)
之间串口的通信机制,
实现对电机运动的控制。
着力讨
论以
DSP
为信息交换枢纽的
电机驱动
程序的设计。
1
控制系统开发
首先,利用集成了
.net Framework
4.0
的
Visual Studio
2010 Windows
应用程序开发平台,采用
C#
语言开发出电机
控制界面,
< br>用以实现如开停、
增
/
减速、<
/p>
运行状态查询等可视
化电机控制功能,如图
1
所示;其次,构建上位机与下位机
之间的串口通信机制,由
上位机
PC
把相应的控制命令传递
给下
位机
DSP
,执行电机控制的操作命令;最后,由
DSP
构
成电机控制系统的信息交换枢纽,一方面传
递上位机下达的
控制命令给电动机,另一方面把电动机运行状态的相关信息
反馈给上位机,实现对电机运行状态的实时监控。
该控制系统整体为主从式计算机结
构如图
2
所示,其中
PC
为上位机,
DSP
为下位机,两者之间通过串口
p>
RS232C
协
议交换数据。硬件电路连接
如图
3
所示,包括计算机、
DSP
p>
开发板、仿真器、电机驱动电路板、直流电动机和一些电路
连接线。
2
驱动程序设计
CCS
3.3
是一个集成版的
DSP
应用程序
开发环境,
基本涵
盖了
TI
公司所有型号的
DSP
,与其它版本相比体积稍大
,但
是代码优化效率较高,调试方便,是目前用的最多的
DSP
程
序开发平台。
该电机控制系统利用<
/p>
C
语言基于
CCS3.3
软件平
台开发
DSP
的电机驱
动程序,
建立电机控制策略实施的纽带。
DSP
的驱动程序主要包括:各个外设的初始化函数、主
函数与输入中
断函数。其中初始化函数完成相应外设的初始
化定义,如系统、输入
/
输出引脚、串行通信接口、事件管理
器等;主函数完成相
关变量、宏及功能函数的定义,最后形
成一个死循环,等待
CP
U
对电机控制命令中断请求的响应,
完成对电机运动的调节;中
断函数为电机各种控制命令在
DSP
电机驱动程序中的入口,利
用事件响应机制去完成对电
机行为的控制。程序整体采用模块化结构,通过调用一个个<
/p>
功能子函数来实现对电机的不同控制,逻辑清晰,便于实现
系统功
能的扩展。
驱动程序的设计思路如图
4
所示,
首先需要完成
DSP
及
相应功能外设的初始化,即准备好去执行电机的控制命令,
然后等待串口的电机控制命令的输入,即形成一个死循环。
当串口有电机操作指令输入
时,随即发生中断事件,调用中
断函数,执行相应的电机操作指令,包括电机的起
/
停、正
/
反转、加
/
减速、状态查询等;在指令完成后,返回死循环进
入待命状态,等待下一个电机操作指令,周而复始。
2.1
主函数
首先引用相关的头文件,定义相应的宏、变量与功能函
数,然后在主函数中完成相关变量、函数及外设功能的初始
化,
最后形成一个死循环,
等待串口输入对
CPU
的中断请求,
既而完成电机行为的相关控制指令。以下程序代码
的省略部
分,均为
DSP
程序的一些固
定的功能语句,如中断的使能、
外设功能的设定等,为了节省篇幅,不再一一列出,可以
参
阅文献
[4]
。
//
头文件,宏、变量、功能函数定义等
……;
void main
(
void
)
{
InitSysCtrl
()
;
//
初始化系统函数
//C
PU
中断,
PIE
寄存器、外设初始化
[4]
……;
InitGpio
()
;
//
初始化
Gpio
口
InitEv
()
;
for
(
i =
0
;
i <
4
;
i++
)
/
/
初始化数
组变量
{
Sci_VarRx[i] = 0
;
//
存储电机控制指令
}
i = 0
;
//
初始化
M1_Flag=0
;
M2_Flag=0
;
//
电机起始为停止状态
//
电机控制界面显示波特率初值
sen
dMsg
(
UD
)
;
sendMsg
(
UD
)
;
//
定时
器
T3
和
T1
计数使能
E=1
;
E=1
;
/*
使能
SCI
中断,
开
CPU
中断,
使能全局与实时中断
[
4]*/
……;
for
(;
;
)
{ }
}
2.2
功能函数
该电机控制系统实现了控制
2
台(易于扩展到多台)直
流电机的起
/
停、正
/
反转、加
/
减速、状态查询等行为,由于
程序采用模块化结构,每一个控制
功能都对应特定的功能函
数,且每一个功能函数的结构类似,皆为先判断指令对象,
p>
然后再依据不同的指令代码执行对应的动作。因此在此仅列
出加速功
能函数的代码,其中省略部分为对两台以上电机的
相同操作,不再重复。其它功能函数以
此类推。
void
M_Inc
(
unsigned int
num
)
//
加速函数
{
if<
/p>
(
(
num==1
)
&
(
M1_Flag
!
=0
)
)
//
电机
M1
{
//
占空比增加
2%
1=1+375
;
if<
/p>
(
1>=0x41EB
)
{
//
最大占空比值为
90%
1=0x41EB
;
}
}
else if
(
(
< br>num==2
)
&
(
M2_Flag
!
=0
)
)
//
其它电机
{
……;
//
相同控制代码
}
}
2.3
系统初始化函数
-
-
-
-
-
-
-
-
-
上一篇:第五章信息化战争教案
下一篇:ADC模块采样校正技术2016-1-22要点