没有合适的资源?快使用搜索试试~ 我知道了~
首页dsp控制的svpwm完整程序
dsp控制的svpwm完整程序
5星 · 超过95%的资源 需积分: 48 233 下载量 76 浏览量
更新于2023-03-16
评论 19
收藏 424KB DOC 举报
近年来,在高性能全数字控制的电气传动系统中,作为电力电子逆变技术的关键,pwm技术从最初追求电压波形正弦,到电流波形正弦,再到磁通的正弦,取得了突飞猛进的发展[1]。在众多正弦脉宽调制技术中,空间电压矢量pwm(或称svpwm)是一种优化的pwm技术,能明显减小逆变器输出电流的谐波成分及电机的谐波损耗,降低脉动转矩,且其控制简单,数字化实现方便,电压利用率高,已有取代传统spwm的趋势。本文对空间电压矢量pwm的原理进行了深入分析,重点推导了每一扇区开关矢量的导通时间,并在ti公司生产的dsp上实现三相逆变器的控制,证明了分析的正确和可行性。
资源详情
资源评论
资源推荐
头文件
UserParms.h
C 文件
ACIM.c
Encoder.c
InitCurModel.c
UserParms.h
//#define TORQUE_MODE
#define DIAGNOSTICS
//**************** 振荡器 ************************************
#define dFoscExt 7372800 // 外部晶振或时钟频率 (Hz)
#define dPLL 8 // PLL 比率
#define dLoopTimeInSec 0.00005 // PWM 周期 - 100 uS, 10Khz PWM
#define dDeadTimeSec 0.000002 // 以秒为单位的死区时间
// Derived
#define dFosc (dFoscExt*dPLL) // 时钟频率 ( Hz)
#define dFcy (dFosc/4) // 指令频率 ( Hz)
#define dTcy (1.0/dFcy) // 指令周期 (s)
#define dDeadTime (int)(dDeadTimeSec*dFcy) // 以 dTcys 为单位的死区时间
#define dLoopInTcy (dLoopTimeInSec/dTcy) // 以 Tcy 为单位的基本循环周期
#define dDispLoopTime 0.100 // 显示和按钮状态查询循环
//**************** 电机参数 ********************************
#define diPoles 1 // 极对数
#define diCntsPerRev 2000 // 每转的编码器线数
#define diNomRPM 3600 // 电机铭牌上的转速( RPM)
#define dfRotorTmConst 0.078 // 以秒为单位的转子时间常数,来自电机制造商
//**************** 测量 *************************************
#define diIrpPerCalc 30 // 每次速度计算的 PWM 循环次数
//************** PI 系数 ************************************
#define dDqKp 0x2000 // 4.0 (NKo = 4)
#define dDqKi 0x0100; // 0.125
#define dDqKc 0x0100; // 0.125
#define dDqOutMax 0x5A82; // 0.707 设定该值以避免饱和
#define dQqKp 0x2000; // 4.0 (NKo = 4)
#define dQqKi 0x0100; // 0.125
#define dQqKc 0x0100; // 0.125
#define dQqOutMax 0x5A82; // 0.707 设定该值以避免饱和
#define dQrefqKp 0x4000 // 8.0 (NKo = 4)
#define dQrefqKi 0x0800 // 1.0
#define dQrefqKc 0x0800 // 1.0
#define dQrefqOutMax 0x3FFF // 0.4999 设定该值以避免饱和
//************** ADC 换算 ************************************
// 标定常数 :由校准或硬件设计确定。
#define dqK 0x3FFF; // 等于 0.4999
#define dqKa 0x3FFF; // 等于 0.4999
#define dqKb 0x3FFF; // 等于 0.4999
//************** 弱磁 ****************************************
// 在恒转矩范围内的磁通给定值。
// 根据经验确定、给出额定压 /频比
#define dqK1 3750; //
ACIM.c
/**********************************************************************
**
* 作者 : John Theys/Dave Ross *
**
* 文件名 : ACIM.c *
* 日期 : 10/31/03 *
* 文件版本 : 3.00 *
**
* 使用工具 : MPLAB -> 6.43 *
* 编译器 -> 1.20.00 *
**
* 链接文件 : p30f6010.gld *
**
**
***********************************************************************
*10/31/03 2.00 发布电机运行正常,但仍有些遗留的小问题
*
*12/19/03 2.01 完成结构,为所有用户定义变量创建 UserParms.h。
*
*02/12/043.00-从项目中去除了不需要的文件。
* -将 iRPM 改为 int 以纠正浮点计算问题。
* -CalcVel() 和转速控制环仅在 iIrpPerCalc 指定的数个循环周期后执行
*
*-增加了 iDispLoopCount 变量以安排显示和按钮子程序的执行时间
* -trig.s 文件改为使用程序空间来存储正弦数据。
*-增加了 DiagnosticsOutput()函数,该函数使用输出比较通道来输出控
* 制变量信息。
*-增加了 TORQUE_MODE 定义以忽略转速控制环。
*-关闭 curmodel.s 文件中的 SATDW 位。自动饱和功能阻止转差角计算正确
* 翻转返回。
************************************************************************
*代码说明
*
*该文件给出了使用 dsPIC30F 实现的三相交流感应电机矢量控制实例。
*采用空间矢量调制作为控制策略。
***********************************************************************/
/*************************** 全局定义 ***********************/
#define INITIALIZE
#include "Motor.h"
#include "Parms.h"
#include "Encoder.h"
#include "SVGen.h"
#include "ReadADC.h"
#include "MeasCurr.h"
#include "CurModel.h"
#include "FdWeak.h"
#include "Control.h"
#include "PI.h"
#include "Park.h"
#include "OpenLoop.h"
#include "LCD.h"
#include "bin2dec.h"
#include "UserParms.h"
/*********************** 全局定义结束 ********************/
unsigned short uWork;
short iCntsPerRev;
short iDeltaPos;
union {
struct
{
unsigned DoLoop:1;
unsigned OpenLoop:1;
unsigned RunMotor:1;
unsigned Btn1Pressed:1;
unsigned Btn2Pressed:1;
unsigned Btn3Pressed:1;
unsigned Btn4Pressed:1;
unsigned ChangeMode:1;
unsigned ChangeSpeed:1;
unsigned :7;
}bit;
WORD Word;
} uGF; // 通用标志
tPIParm PIParmQ;
tPIParm PIParmQref;
tPIParm PIParmD;
tReadADCParm ReadADCParm;
int iRPM;
WORD iMaxLoopCnt;
WORD iLoopCnt;
WORD iDispLoopCnt;
/**********************************************************************/
void __attribute__((__interrupt__)) _ADCInterrupt(void);
void SetupBoard( void );
bool SetupParm(void);
void DoControl( void );
void Dis_RPM( BYTE bChrPosC, BYTE bChrPosR );
void DiagnosticsOutput(void);
/******************** 主函数开头 *************************/
int main ( void )
{
SetupPorts();
InitLCD();
while(1)
{
uGF.Word = 0; // 清除标志
// 初始化模式
uGF.bit.OpenLoop = 1; // 以开环模式起动
// 初始化 LED
pinLED1 = 0;
pinLED2 = !uGF.bit.OpenLoop;
pinLED3 = 0;
pinLED4 = 0;
// 初始化控制板
SetupBoard();
剩余63页未读,继续阅读
正刚009
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论8