基于TMS320F28235的空间矢量算法研究

合集下载

基于TMS320F28335的无刷直流电机控制器设计

基于TMS320F28335的无刷直流电机控制器设计
制 作 的 电机 控制 器 能 正 常工 作 ,控 制 系统 响 应速 度 快 ,从 初始 转 速 升 到给 定 转速 只 需 不 到 1秒 的时 间 ,并
且 超调 量较 小 ,稳定 ห้องสมุดไป่ตู้较 好 ,证 明了 控制 器设 计 的正 确性和 合理 性 。 关键 词 :T MS 3 2 0 F 2 8 3 3 5;无 刷直 流 电机 ;P l D;控 制器
wa t c h . Mo r e o v e r , t h r o u g h wa t c h i n g a n d a n a l y z i n g t h e d i f e r e n c e s o f s p e e d v a r i a t i o n s a b o u t c l o s e d — l o o p c o n t r o l s y s t e m, we c a n k n o w t h a t t h e B L D C M c on t r o l l e r b a s e d o n d o u b l e c l o s e d l o o p c o n t r o l wh i c h wa s d e s i g n e d i n t h i s p a p e r c o u l d wo r k n o r ma l l y , a n d c o mp a r e d wi t h t h e o p e n l o o p c o n t r o l B L D CM c o n t r o l l e r i n t h e ma r k e t , t h e c on t r o l s y s t e m h a s t h e a d v a n t a g e s o f s ma l l o v e r s h o o t , g o o d s t a b i l i t y a n d f a s t r e s p o n s e wh i c h t o o k l e s s t h a n i s f r o m o r i g i n a l s p e e d t o t h e g i v e n r o t a t i n g s p e e d . T h a t p r o v e s t h e c o r r e c t n e s s a n d r a t i on a l i t y o f t h e c o n t r o l l e r d e s i g n . K e y wo r d s : T MS 3 2 0 F 2 8 3 3 5 : B r u s h l e s s D C mo t o r ; P I D : C o n t r o l l e r

基于TMS320F28335的SVPWM实现方法

基于TMS320F28335的SVPWM实现方法

基于TMS320F28335的SVPWM实现方法SVPWM/TMS320F28335/DSP/电机控制1引言随着电机控制理论的日趋成熟和微处理器的不断优化,脉宽调制(PWM)技术在变频器中得到了广泛的应用。

如今,PWM开关信号的控制方法最常见的有正弦脉宽调制(SPWM)和空间矢量脉宽调制(SVPWM)。

与SPWM方法相比,SVPWM方法具有电压谐波小,直流电压利用率高,电动机的动态响应快,减少电动机的转矩脉动,易于实现数字化等显著的优点,从而使SVPWM方法的实际应用愈来愈广泛[1,5]。

TMS320F28335数据信号处理器是TI公司最新推出的32位浮点DSP控制器,具有150MHz的高速处理能力,18路PWM输出,与TI前几代数字信号处理器相比,性能平均提高了50%,并可与定点C28x控制器软件兼容[2,3]。

其浮点运算单元,可以显著地提高控制系统的控制精度和处理器的运算速度,是目前控制领域最先进的处理器之一。

可以应用到参数辨识等需要大运算量的电机实时控制系统中。

以下介绍基于TMS320F28335的SVPWM基本原理和实现方法。

2 SVPWM的基本原理SVPWM是利用逆变器的功率开关器件的不同开关组合合成有效电压矢量来逼近基准圆[4.5]。

图1为三相电压源逆变器(VSI)的拓扑结构[2.3]。

图1三相电压型逆变器为便于分析理解,图1可以简化为图2所示。

图2三相电压型逆变器电路桥在图1中,V a、V b、V c是逆变器的输出相电压,Q1~Q6为6个功率开关晶体管,它们分别由a,a’,b,b’,c,c’个控制信号控制。

当逆变器上桥臂的一个功率开关晶体管开通状态(a或b 或c为1)时,下半桥臂的相对功率开关晶体管必须为关闭状态(a’或b’或c’为0);同理,当下桥臂开关晶体管为开通状态(a’或b’或c’为1)时上桥臂的相对功率开关晶体管必须为关闭状态(a或b或c为0)。

对于图1、图2所示的逆变器,其开关状态组合(c b a)有8种基本工作状态,即:000、001、010、011、100、101、110、111,其中除了000和111工作状态为无效状态,称为零矢量外,其余六种工作状态为有效状态,称为非零矢量。

基于DSP28335的永磁同步电机PI矢量控制系统设计

基于DSP28335的永磁同步电机PI矢量控制系统设计

文章编号:1007-9416(2021)11-0202-03
基于 DSP28335 的永磁同步电机 PI 矢量控制系统设计
中科芯集成电路有限公司 洪锋 冒国均 陈国真
基于DSP芯片TMS320F28335设计了永磁同步电机
矢量控制在交流电机的伺服控制系统中被广泛使用。
的矢量控制系统并采用PI(比例-积分)控制器实现闭环 控制,介绍了控制算法的软件实现流程和硬件电路设计。 硬件电路包括角度检测反馈电路、电流检测反馈电路和 驱动电路。通过电流环和速度环的阶跃响应实验,验证了 该控制系统的有效性。该PI矢量控制系统简单有效、易于
第39卷 第11期 第202319年 1卷1月
数字技术与应用 数D字ig技ita术l 与Te应ch用nologyw&
Vol.39 No.11 November 2021
中图分类号:TM341;TP273
文献标识码:A
DOI:10.19695/12-1369.2021.11.64
3.1 电流环 电流环PI控制器的比例增益和积分增益分别为0.25 和0.3。在实验中,d轴电流目标值为零,q轴电流目标值为 0.07(标幺值),电流环的阶跃响应如图4所示。由实验结果 可知,d轴和q轴的电流反馈值在目标值附近上下波动,验 证了电流环控制系统的有效性。反馈电流的稳态误差相 对较大,可通过逆变器的死区效应补偿进行改善。 3.2 速度环 速度环PI控制器的比例增益和积分增益分别为0.1和 0.02。速度环的阶跃响应如图5所示,反馈速度值在目标
机的性能。然而,复杂控制器的设计会导致算法
实现困难, 极大的限制了其在工程实践中的应
用。PI控制器结构简单,易于实现,在工业控制中
得到了广泛使用[5-6]。

基于TMS320F28335的信号处理电路设计

基于TMS320F28335的信号处理电路设计

基于 TMS320F28335的信号处理电路设计摘要:鉴于TMS320F206即将停产,需要寻求一款DSP对其进行替代,替换DSP后的信号处理电路需完成温度值、一路电气零位、三路加表惯性量、三路陀螺惯性量的采集以及惯性量的补偿计算和数据组帧发送的功能。

该信号处理电路基于浮点DSP TMS320F28335,该DSP的引用简化了惯性测量装置中的误差补偿计算,为单位类似的产品提供了一套可行方案。

TMS320F28335丰富的外设使得信号处理电路具有可再简化的潜力,其在惯性测量装置信号处理电路中的应用具有广阔前景。

通过系统试验,验证了系统软硬件设计的正确性高的应用推广价值。

关键词:DSP;信号处理电路;浮点1、前言现有技术方案主要为TMS320F206+异步串口SC28L202的方案,电路上电后完成外围电路的初始化,TMS320F206通过SC28L202相应的I/O完成AD7716的配置,AD7716初始化完成后每隔一个固定时间自动完成加表数据的采集并输出一个中断信号,所采数据存于FIFO中。

陀螺每隔一个固定时间将一帧数据存于SC28L202的FIFO中,当TMS320F206判到第四个AD7716中断来到后从相应的FIFO中取加表、陀螺数据,TMS320F206完成加表、陀螺数据温度补偿计算后组帧并向相应的接口发送数据。

本文以某信号处理电路设计为背景,为了解决TMS320F206即将停产的问题,电路架构由TMS320F206+异步串口SC28L202的方案升级为TMS320F28335+异步串口TL16C752CIPFB架构。

其中DSP为TI公司的TMS320F28335 [1],异步串口为TI公司的TL16C752CIPFB [2]。

2、某信号处理电路原理TMS320F206+异步串口SC28L202架构设计信号处理电路采用了TMS320F206+异步串口SC28L202架构。

信号处理电路主要由加速度计信号采集电路、陀螺信号采集电路、测温电路、数字信号处理及控制电路、外设输出接口电路组成。

基于TMS320F28335和增量式编码器的测速方法设计

基于TMS320F28335和增量式编码器的测速方法设计
域 ,无 法 正 常 测 速 。针 对 高 速 区 域 和 超 低 速 区域 ,分 别 提 } } {
速度计算公式为 :
‘ )
改进 的 T法 分区测速 策略 。
3. 1高速 区域测速 高 速区域 的测 速原理如 图 2所示 。随着转 速的升 高 ,编 码 器的两个 相邻输 脉冲间 隔时间对应 的高频 时钟 脉 冲数 量 m. 减少 ,造成测 速的绝对误 差和相对误 差都增大 。如果根 据 不同的转速 ,检 测编码器 k . 个连续输 } } j 脉 冲间隔时间 对应的 高频时钟脉 冲数量 : ,这样 就可 以减小 由于高频时钟 脉冲数 量 少引起的检测 误差 , 从而提高 T法在高速区域的测速精度 ,
T法 的优 点 ,拓 宽 了测 速 范 围 ,但 在 低 速 区域 测 速 延 时 过 长 ; 变 M/ T法 是 在 M/ ] r 法 基 础 上 的改 进 , 采 用 了 动 态 的检 测 时 间 ,
2传 统的 T 法测 速原理 及 误差分 析
传统 的 T法测速原理 如图 l 所示 。编码 器的线数 为 N, 在编 码器 的两个相邻输 出脉 冲间隔时间 内 ,计 取 已知 周期 为 的高频 时钟脉 冲数量 m ,并 以此来计算转速 。
大连 交通大学 丁志勇
摘 要 :针 对 交流 电机调速 系统 中的速度采 集精 度 问题 ,提 出了一种基 于 T MS 3 2 0 F 2 8 3 3 5 和增量式编码 器的 电机转速测量方法。在 分析传统 的 T法测速 原理基础上 ,提 出了改进的 T法分区测速 方法,该方法在 保证较
小测速延 时的 同时,能够在宽转速范 围内保持较 高的测速精度。设计 了基于 T MS 3 2 0 F 2 8 3 3 5的改进 T法分 区

基于TMS320F28335的永磁同步电机伺服系统设计与实现的开题报告

基于TMS320F28335的永磁同步电机伺服系统设计与实现的开题报告

基于TMS320F28335的永磁同步电机伺服系统设计与实现的开题报告一、选题的背景和意义永磁同步电机具有高效率、高功率密度、响应快等优点,被广泛应用于工业、家电、交通等领域。

而永磁同步电机的精准控制则需要使用高性能的数字信号处理器和专业的控制算法。

本课题选用TMS320F28335数字信号处理器为处理核心,设计并实现一个永磁同步电机伺服系统,通过PID控制算法对永磁同步电机进行转速、电流控制,并验证控制效果,为永磁同步电机的应用提供有效的控制手段。

二、研究内容和方法1.系统硬件设计:设计基于TMS320F28335的永磁同步电机伺服系统的硬件电路,包括主控板、驱动板、电源等模块设计。

2.系统软件设计:采用C语言编程,配置DSP芯片的引脚、计时器、ADC、PWM等外设,编写PID控制算法对永磁同步电机进行控制。

3.系统测试:通过测试,验证系统的控制效果和稳定性,调整控制参数,优化控制算法。

三、预期结果通过本课题的设计和实现,达到以下预期目标:1.设计出基于TMS320F28335的永磁同步电机伺服系统硬件电路图和PCB布图。

2.成功实现TMS320F28335控制永磁同步电机的控制程序,实现永磁同步电机转速、电流的稳定控制。

3.验证控制效果和稳定性,评估控制算法的优劣,并调整参数,优化算法。

四、研究难点和解决方案1.永磁同步电机的控制算法研究:针对永磁同步电机在转速控制、电流控制等方面的特点,学习和研究PID控制算法和其他控制算法,根据系统实际情况选择合适的控制算法。

2.硬件电路设计:参考TMS320F28335的数据手册和千印网提供的设计资料,结合永磁同步电机驱动板的设计,绘制符合系统需求的电路图和PCB布图。

3.软件编程:掌握TMS320F28335的编程方法和程序设计,编写符合控制算法的程序,配置芯片的计时器、ADC、PWM等外设,实现对永磁同步电机的控制。

五、可行性分析1.技术可行性:TMS320F28335作为一款高性能数字信号处理器,具有强大的计算和处理能力,可以满足永磁同步电机的高精度控制需求。

基于TMS320F28335的数据采集系统设计

基于TMS320F28335的数据采集系统设计

6 通道 的D MA:外扩R C T 实时时 钟 ,支 持动 态P L L 调 节 ;支持5 个 外设 中断 的外设 中断扩 展控制 器PE. 8 I 管理 片上外设 和外 部引脚产 生的 中断请求 ;3 2 个3 位
定时 器 ,定时器0 用做一般 的定 时器 。定 时器0 与1 接
PE I 中断 ,定 时 器 1 N 1 ,定 时器2 于D PB O 接I T 3 用 S/IS
的片 上 实 时系 统 连接 到I T 4 N 1 ;符 合U B .标 准 的 S 20 高速 U B 口 ,最 高传输 速率 为4 0 /。 S接 8 Mbs 在使用 A C 换器 时 ,注意 输入 的模 拟信 号 电 D转
压要在0 3 ~ V的范 围内 ,否则容 易烧坏A C D 转换器 。
以达 到 高速传 输数 据 的 目的。
1 T 3 0 2 3 5 绍 MS 2 F 8 3 介
T 3 0 2 3 5 I 司新 近 推 出 的3 位 高 性 MS 2 F 8 3 是T 公 : 2 能 浮 点数 字 信 号 处 理 : 器,具 有 很 强 的信 号 处 理 及
控 制 功能 ,主要 特征 如下 :
从 传 感 器 检 测 到 的信 号 是 电 荷信 号 ,经 过 电
荷 放 大 器 转换 为 电 压信 号 。一 般 情 况 下 测 得 是 很
微 弱 的 信 号 并且 还 夹 杂很 强 的 电磁 干 扰 .所 以 在 进 入 采 集 系 统 之前 必须 进 行 信 号 的放 大 、滤 波 去
()高 性 能 的静  ̄i MO 技 术 ,其 指 令 周 期 为 1 C S 66 n ,主 频 达 到 1 0 . s 7 5 MHz ;采 用 低 功 耗 设 计 , 内

基于TMS320F28235的数字逆变电源设计

基于TMS320F28235的数字逆变电源设计
D OI :1 0 . 3 9 6 9 / j . i s s n . 1 0 0 1 - 8 9 7 2 . 2 0 1 3 . 0 9 . 0 4 7
基于TMS 3 2 0 F 2 8 2 3 5 的数字逆 变电源设计
史小利’王 岩 1 . 南车青 岛四方机车车辆股份 有限公 司技术 中心 ,山东青 岛 2 6 6 2 . 高速列 车系统集成 国 家工程实验室 ( 南方) ,山东青 岛 2 6 6 1 1
l +
/ 2
因式 2 所 得 结果 一 般 都 为小 数 ,实际 运 算 过程 中小 数部 分会 被舍 弃 ,所 以我 们将 其 数 值 作 一 次 放 大 ,以 保 留部 分 小 数 位 。在 此 ,我 们将 其 放 大 2 = 4 0 9 6 倍 ,所 以 式2 变 为
数 字控 制 的逆 变 电源 ,该设 计 可以 极 大地 降 低逆 变 电源的硬 件 复杂度 ,提 高使 用灵 活性 与可 靠 性 ,提 供 精 细 的 输 出 电压 及 频 率 调 节 ,并 可在 电压 输 出上 叠加 高 次谐 波含 量 ,
满 足 多种 电源 设计 需求 。
关键 词
摘 要
负载起 到 限流 作 用 。 逆 变 器 输 出 电压 的 采 样 为 差 分 采 样 模 式 ,电 感电流 采样 采 用 电流霍 尔 器件 。 电压 采样 系数 为0 . 0 1 ,则 采样 精度 为

介 绍一 种 基 于T I D S P 芯 片T M S 5 2 0 F 2 8 2 5 5 的 全
K D S+ K i
0. 0 7 3 V
引言
有 源逆 变是 变频 电源 、交流 稳压 电源 、 UP S( 不 间断 电源 )等 众多 种类 交流 电源 的 核 心构 成环 节 ,它 的设 计优 劣直 接决 定 了最 终 电源 的 品质优 劣 ,传 统的 有源 逆 变环 节一 般采 用 模拟 控制 ( 基准 正弦 信号 与 三角载 波 信 号调 制 出 P W M信 号 )的功 率 开 关变 换 单 元 构 成 ,外 围用 MC U等 实现 简 单 的程 控 。 随 着高 性能 D s P 控 制 器的 出现 ,使纯 数 字化 控制 的 逆变 单元 成 为可 能 ,这有 利于 提 高整 个 系统 的集 成化 水平 和控 制 功能 。

基于TMS320F28335的SVPWM实现方法

基于TMS320F28335的SVPWM实现方法

基于TMS320F28335的SVPWM实现方法SVPWM/TMS320F28335/DSP/电机控制1引言随着电机控制理论的日趋成熟和微处理器的不断优化,脉宽调制(PWM)技术在变频器中得到了广泛的应用。

如今,PWM开关信号的控制方法最常见的有正弦脉宽调制(SPWM)和空间矢量脉宽调制(SVPWM)。

与SPWM方法相比,SVPWM方法具有电压谐波小,直流电压利用率高,电动机的动态响应快,减少电动机的转矩脉动,易于实现数字化等显著的优点,从而使SVPWM方法的实际应用愈来愈广泛[1,5]。

TMS320F28335数据信号处理器是TI公司最新推出的32位浮点DSP控制器,具有150MHz的高速处理能力,18路PWM输出,与TI前几代数字信号处理器相比,性能平均提高了50%,并可与定点C28x控制器软件兼容[2,3]。

其浮点运算单元,可以显著地提高控制系统的控制精度和处理器的运算速度,是目前控制领域最先进的处理器之一。

可以应用到参数辨识等需要大运算量的电机实时控制系统中。

以下介绍基于TMS320F28335的SVPWM基本原理和实现方法。

2 SVPWM的基本原理SVPWM是利用逆变器的功率开关器件的不同开关组合合成有效电压矢量来逼近基准圆[4.5]。

图1为三相电压源逆变器(VSI)的拓扑结构[2.3]。

图1三相电压型逆变器为便于分析理解,图1可以简化为图2所示。

图2三相电压型逆变器电路桥在图1中,V a、V b、V c是逆变器的输出相电压,Q1~Q6为6个功率开关晶体管,它们分别由a,a’,b,b’,c,c’个控制信号控制。

当逆变器上桥臂的一个功率开关晶体管开通状态(a或b 或c为1)时,下半桥臂的相对功率开关晶体管必须为关闭状态(a’或b’或c’为0);同理,当下桥臂开关晶体管为开通状态(a’或b’或c’为1)时上桥臂的相对功率开关晶体管必须为关闭状态(a或b或c为0)。

对于图1、图2所示的逆变器,其开关状态组合(c b a)有8种基本工作状态,即:000、001、010、011、100、101、110、111,其中除了000和111工作状态为无效状态,称为零矢量外,其余六种工作状态为有效状态,称为非零矢量。

毕业论文_基于TMS320F2812的永磁同步电动机SVPWM空间矢量控制算法实现的源代码(终稿)

毕业论文_基于TMS320F2812的永磁同步电动机SVPWM空间矢量控制算法实现的源代码(终稿)

/*====================================================================== ========System Name: PMSM34File Name: PMSM3_4.CDescription: Primary system file for the Real Implementation of Position ControlBased Sensored Field Orientation Control for a Three Phase Permanent-Magnet Synchronous Motor (PMSM) using QEP sensorOriginator: Digital control systems Group - Texas InstrumentsNote: In this software, the default inverter is supposed to be DMC550 board.====================================================================== ===============History:-------------------------------------------------------------------------------------04-15-2005 Version 3.20: Support both F280x and F281x targets04-25-2005 Version 3.21: Move EINT and ERTM down to ensure that all initializationis completed before interrupts are allowed.====================================================================== =========== */// Include header files used in the main function#include "target.h"#include "DSP281x_Device.h"#include "IQmathLib.h"#include "pmsm3_4.h"#include "parameter.h"#include "build.h"#include <math.h>// Prototype statements for functions found within this file.interrupt void MainISR(void);interrupt void QepISR(void);interrupt void PDPINTAISR(void);// Global variables used in this systemfloat32 VdTesting = 0; // Vd testing (pu)float32 VqTesting = 0.25; // Vq testing (pu)float32 IdRef = 0; // Id reference (pu)float32 IqRef = 0.2; // Iq reference (pu)float32 SpeedRef = 0.1; // Speed reference (pu)float32 PositionRef = 0.5; // Position reference (Mechanical rotor Anglele (pu) float32 T = 0.001/ISR_FREQUENCY; // Samping period (sec), see parameter.hUint16 IsrTicker = 0;Uint16 BackTicker = 0;volatile Uint16 EnableFlag = FALSE;Uint16 LockRotorFlag = FALSE;Uint16 SpeedLoopPrescaler = 10; // Speed loop prescalerUint16 SpeedLoopCount = 1; // Speed loop counter// Instance a few transform objectsCLARKE clarke1 = CLARKE_DEFAULTS;PARK park1 = PARK_DEFAULTS;IPARK ipark1 = IPARK_DEFAULTS;// Instance PID regulators to regulate the d and q synchronous axis currents,// speed and positionPIDREG3 pid1_id = PIDREG3_DEFAULTS;PIDREG3 pid1_iq = PIDREG3_DEFAULTS;PIDREG3 pid1_pos = PIDREG3_DEFAULTS;PIDREG3 pid1_spd = PIDREG3_DEFAULTS;// Instance a PWM driver instancePWMGEN pwm1 = PWMGEN_DEFAULTS;// Instance a Space Vector PWM modulator. This modulator generates a, b and c// phases based on the d and q stationery reference frame inputsSVGENDQ svgen_dq1 = SVGENDQ_DEFAULTS;// Instance a QEP interface driverQEP qep1 = QEP_DEFAULTS;// Instance a speed calculator based on QEPSPEED_MEAS_QEP speed1 = SPEED_MEAS_QEP_DEFAULTS;// Instance a ramp controller to smoothly ramp the frequencyRMPCNTL rc1 = RMPCNTL_DEFAULTS;// Instance a ramp generator to simulate an AngleleRAMPGEN rg1 = RAMPGEN_DEFAULTS;// Create an instance of the current/dc-bus voltage measurement driverILEG2DCBUSMEAS ilg2_vdc1 = ILEG2DCBUSMEAS_DEFAULTS;void main(void){// ******************************************// Initialization code for DSP_TARGET = F2812// ******************************************// Initialize System Control registers, PLL, WatchDog, Clocks to default state: // This function is found in the DSP281x_SysCtrl.c file.InitSysCtrl();// HISPCP prescale register settings, normally it will be set to default values EALLOW; // This is needed to write to EALLOW protected registers SysCtrlRegs.HISPCP.all = 0x0000; // SYSCLKOUT/1EDIS; // This is needed to disable write to EALLOW protected registers// Disable and clear all CPU interrupts:DINT;IER = 0x0000;IFR = 0x0000;// Initialize Pie Control Registers To Default State:// This function is found in the DSP281x_PieCtrl.c file.InitPieCtrl();// Initialize the PIE Vector Table To a Known State:// This function is found in DSP281x_PieVect.c.// This function populates the PIE vector table with pointers// to the shell ISR functions found in DSP281x_DefaultIsr.c.InitPieVectTable();//Initialize GPIO;MUX为0,表示IO;MUX为1表示外围;//DIR为0,表示输入;DIR为1表示输出EALLOW;GpioMuxRegs.GPAMUX.all=0X073F;GpioMuxRegs.GPADIR.all=0XC0C0;GpioMuxRegs.GPBMUX.all=0X0000;GpioMuxRegs.GPBDIR.all=0X0000;GpioMuxRegs.GPDMUX.bit.T1CTRIP_PDPA_GPIOD0=1; //功能PDPINTA GpioMuxRegs.GPDMUX.bit.T2CTRIP_SOCA_GPIOD1=0; // INPUTGpioMuxRegs.GPDDIR.bit.GPIOD1=0;GpioMuxRegs.GPDMUX.bit.T3CTRIP_PDPB_GPIOD5=0;GpioMuxRegs.GPDDIR.bit.GPIOD5=0;GpioMuxRegs.GPDMUX.bit.T4CTRIP_SOCB_GPIOD6=0;GpioMuxRegs.GPDDIR.bit.GPIOD6=0;GpioMuxRegs.GPEMUX.bit.XINT1_XBIO_GPIOE0=0;GpioMuxRegs.GPEMUX.bit.XINT2_ADCSOC_GPIOE1=0;GpioMuxRegs.GPEMUX.bit.XNMI_XINT13_GPIOE2=0;GpioMuxRegs.GPEDIR.bit.GPIOE0=0;GpioMuxRegs.GPEDIR.bit.GPIOE1=0;GpioMuxRegs.GPEDIR.bit.GPIOE2=0;GpioMuxRegs.GPFMUX.all=0X4037;GpioMuxRegs.GPFDIR.all=0X01C8;GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4=0;GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5=0;GpioMuxRegs.GPGDIR.bit.GPIOG4=1;GpioMuxRegs.GPGDIR.bit.GPIOG5=1;EDIS;// User specific functions, Reassign vectors (optional), Enable Interrupts:// Initialize EV A Timer 1:// Setup Timer 1 Registers (EV A)EvaRegs.GPTCONA.all = 0;// Waiting for enable flag setwhile (EnableFlag==FALSE){BackTicker++;}// Enable Underflow interrupt bits for GP timer 1EvaRegs.EVAIMRA.bit.T1UFINT = 1;EvaRegs.EVAIFRA.bit.T1UFINT = 1;// Enable CAP3 interrupt bits for GP timer 2EvaRegs.EVAIMRC.bit.CAP3INT = 1;EvaRegs.EVAIFRC.bit.CAP3INT = 1;// Reassign ISRs.// Reassign the PIE vector for T1UFINT and CAP3INT to point to a different// ISR then the shell routine found in DSP281x_DefaultIsr.c.// This is done if the user does not want to use the shell ISR routine// but instead wants to use their own ISR.EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.T1UFINT = &MainISR;PieVectTable.CAPINT3 = &QepISR;PieVectTable.PDPINTA = &PDPINTAISR;EDIS; // This is needed to disable write to EALLOW protected registers// Enable PIE group 2 interrupt 6 for T1UFINTPieCtrlRegs.PIEIER2.all = M_INT6;// Enable PIE group 3 interrupt 7 for CAP3INTPieCtrlRegs.PIEIER3.all = M_INT7;// Enable PIE group 1 interrupt 1 for PDPINTAPieCtrlRegs.PIEIER1.all = M_INT1;// Enable CPU INT2 for T1UFINT and INT3 for CAP3INT:IER |= (M_INT2 | M_INT3 | M_INT1);// Initialize PWM modulepwm1.PeriodMax = SYSTEM_FREQUENCY*1000000*T/2; // Perscaler X1 (T1), ISR period = T x 1pwm1.init(&pwm1);// Initialize QEP moduleqep1.LineEncoder = 2000;qep1.MechScaler = _IQ30(0.25/qep1.LineEncoder);qep1.PolePairs = P/2;qep1.CalibratedAngle = -1250;qep1.init(&qep1);// Initialize the Speed module for QEP based speed calculationspeed1.K1 = _IQ21(1/(BASE_FREQ*T));speed1.K2 = _IQ(1/(1+T*2*PI*30)); // Low-pass cut-off frequencyspeed1.K3 = _IQ(1)-speed1.K2;speed1.BaseRpm = 120*(BASE_FREQ/P);// Initialize ADC module// Note for DMC550:// - At 24 dc-bus volt, the ADC input for measured Vdc_bus range is 24*1/(24.9+1) = 0.927 volt // - Then, Vdc_bus gain = 3.0/0.927 = 3.2375 (or 0x675C in Q13)ilg2_vdc1.VdcMeasGain = 0x675C;ilg2_vdc1.ChSelect = 0x0610;ilg2_vdc1.init(&ilg2_vdc1);// Initialize the RAMPGEN modulerg1.StepAngleMax = _IQ(BASE_FREQ*T);// Initialize the RAMPGEN modulerc1.RampDelayMax = 5;// Initialize the PID_REG3 module for Idpid1_id.Kp = _IQ(0.1);pid1_id.Ki = _IQ(T/0.02);pid1_id.Kd = _IQ(0/T);pid1_id.Kc = _IQ(0.5);pid1_id.OutMax = _IQ(0.30);pid1_id.OutMin = _IQ(-0.30);// Initialize the PID_REG3 module for Iqpid1_iq.Kp = _IQ(0.1);pid1_iq.Ki = _IQ(T/0.02);pid1_iq.Kd = _IQ(0/T);pid1_iq.Kc = _IQ(0.5);pid1_iq.OutMax = _IQ(0.95);pid1_iq.OutMin = _IQ(-0.95);// Initialize the PID_REG3 module for speed controlpid1_spd.Kp = _IQ(1);pid1_spd.Ki = _IQ(T*SpeedLoopPrescaler/0.3);pid1_spd.Kd = _IQ(0/(T*SpeedLoopPrescaler));pid1_spd.Kc = _IQ(0.2);pid1_spd.OutMax = _IQ(1);pid1_spd.OutMin = _IQ(-1);// Initialize the PID_REG3 module for position controlpid1_pos.Kp = _IQ(28.2);pid1_pos.Ki = _IQ(0); // Integral term is not usedpid1_pos.Kd = _IQ(0); // Derivative term is not usedpid1_pos.Kc = _IQ(0);pid1_pos.OutMax = _IQ(1);pid1_pos.OutMin = _IQ(-1);// Enable global Interrupts and higher priority real-time debug events:EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM// IDLE loop. Just sit and loop forever:for(;;) BackTicker++;}interrupt void MainISR(void){// Verifying the ISRIsrTicker++;// ***************** LEVEL1 *****************#if (BUILDLEVEL==LEVEL1)// ------------------------------------------------------------------------------// Connect inputs of the RMP module and call the Ramp control// calculation function.// ------------------------------------------------------------------------------rc1.TargetValue = _IQ(SpeedRef);rc1.calc(&rc1);// ------------------------------------------------------------------------------// Connect inputs of the RAMP GEN module and call the Ramp generator// calculation function.// ------------------------------------------------------------------------------rg1.Freq = rc1.SetpointValue;rg1.calc(&rg1);// ------------------------------------------------------------------------------// Connect inputs of the INV_PARK module and call the inverse park transformation // calculation function.// ------------------------------------------------------------------------------ipark1.Ds = _IQ(VdTesting);ipark1.Qs = _IQ(VqTesting);ipark1.Angle = rg1.Out;ipark1.calc(&ipark1);// ------------------------------------------------------------------------------// Connect inputs of the SVGEN_DQ module and call the space-vector gen.// calculation function.// ------------------------------------------------------------------------------svgen_dq1.Ualpha = ipark1.Alpha;svgen_dq1.Ubeta = ipark1.Beta;svgen_dq1.calc(&svgen_dq1);// ------------------------------------------------------------------------------// Connect inputs of the PWM_DRV module and call the PWM signal generation // update function.// ------------------------------------------------------------------------------pwm1.MfuncC1 = (int16)_IQtoIQ15(svgen_dq1.Ta); // MfuncC1 is in Q15pwm1.MfuncC2 = (int16)_IQtoIQ15(svgen_dq1.Tb); // MfuncC2 is in Q15pwm1.MfuncC3 = (int16)_IQtoIQ15(svgen_dq1.Tc); // MfuncC3 is in Q15pwm1.update(&pwm1);#endif // (BUILDLEVEL==LEVEL1)// ***************** LEVEL2 *****************#if (BUILDLEVEL==LEVEL2)// ------------------------------------------------------------------------------// Connect inputs of the RMP module and call the Ramp control// calculation function.// ------------------------------------------------------------------------------rc1.TargetValue = _IQ(SpeedRef);rc1.calc(&rc1);// ------------------------------------------------------------------------------// Connect inputs of the RAMP GEN module and call the Ramp generator// calculation function.// ------------------------------------------------------------------------------rg1.Freq = rc1.SetpointValue;rg1.calc(&rg1);// ------------------------------------------------------------------------------// Call the ILEG2_VDC read function.// ------------------------------------------------------------------------------ilg2_vdc1.read(&ilg2_vdc1);// ------------------------------------------------------------------------------// Connect inputs of the CLARKE module and call the clarke transformation// calculation function.// ------------------------------------------------------------------------------clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);clarke1.Bs = _IQ15toIQ((int32)ilg2_vdc1.ImeasB);clarke1.calc(&clarke1);// ------------------------------------------------------------------------------// Connect inputs of the PARK module and call the park transformation// calculation function.// ------------------------------------------------------------------------------park1.Alpha = clarke1.Alpha;park1.Beta = clarke1.Beta;park1.Angle = rg1.Out;park1.calc(&park1);// ------------------------------------------------------------------------------// Connect inputs of the INV_PARK module and call the inverse park transformation // calculation function.// ------------------------------------------------------------------------------ipark1.Ds = _IQ(VdTesting);ipark1.Qs = _IQ(VqTesting);ipark1.Angle = rg1.Out;ipark1.calc(&ipark1);// ------------------------------------------------------------------------------// Connect inputs of the SVGEN_DQ module and call the space-vector gen.// calculation function.// ------------------------------------------------------------------------------svgen_dq1.Ualpha = ipark1.Alpha;svgen_dq1.Ubeta = ipark1.Beta;svgen_dq1.calc(&svgen_dq1);// ------------------------------------------------------------------------------// Connect inputs of the PWM_DRV module and call the PWM signal generation// update function.// ------------------------------------------------------------------------------pwm1.MfuncC1 = (int16)_IQtoIQ15(svgen_dq1.Ta); // MfuncC1 is in Q15pwm1.MfuncC2 = (int16)_IQtoIQ15(svgen_dq1.Tb); // MfuncC2 is in Q15pwm1.MfuncC3 = (int16)_IQtoIQ15(svgen_dq1.Tc); // MfuncC3 is in Q15pwm1.update(&pwm1);#endif // (BUILDLEVEL==LEVEL2)// ***************** LEVEL3 *****************#if (BUILDLEVEL==LEVEL3)// ------------------------------------------------------------------------------// Connect inputs of the RMP module and call the Ramp control// calculation function.// ------------------------------------------------------------------------------ rc1.TargetValue = _IQ(SpeedRef);rc1.calc(&rc1);// ------------------------------------------------------------------------------// Connect inputs of the RAMP GEN module and call the Ramp generator // calculation function.// ------------------------------------------------------------------------------ rg1.Freq = rc1.SetpointValue;rg1.calc(&rg1);// ------------------------------------------------------------------------------// Call the ILEG2_VDC read function.// ------------------------------------------------------------------------------ ilg2_vdc1.read(&ilg2_vdc1);// ------------------------------------------------------------------------------// Connect inputs of the CLARKE module and call the clarke transformation // calculation function.// ------------------------------------------------------------------------------ clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);clarke1.Bs = _IQ15toIQ((int32)ilg2_vdc1.ImeasB);clarke1.calc(&clarke1);// ------------------------------------------------------------------------------// Connect inputs of the PARK module and call the park transformation// calculation function.// ------------------------------------------------------------------------------ park1.Alpha = clarke1.Alpha;park1.Beta = clarke1.Beta;park1.Angle = rg1.Out;park1.calc(&park1);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID IQ controller // calculation function.// ------------------------------------------------------------------------------ pid1_iq.Ref = _IQ(IqRef);pid1_iq.Fdb = park1.Qs;pid1_iq.calc(&pid1_iq);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID ID controller// calculation function.// ------------------------------------------------------------------------------pid1_id.Ref = _IQ(IdRef);pid1_id.Fdb = park1.Ds;pid1_id.calc(&pid1_id);// ------------------------------------------------------------------------------// Connect inputs of the INV_PARK module and call the inverse park transformation // calculation function.// ------------------------------------------------------------------------------ipark1.Ds = pid1_id.Out;ipark1.Qs = pid1_iq.Out;ipark1.Angle = rg1.Out;ipark1.calc(&ipark1);// ------------------------------------------------------------------------------// Connect inputs of the SVGEN_DQ module and call the space-vector gen.// calculation function.// ------------------------------------------------------------------------------svgen_dq1.Ualpha = ipark1.Alpha;svgen_dq1.Ubeta = ipark1.Beta;svgen_dq1.calc(&svgen_dq1);// ------------------------------------------------------------------------------// Connect inputs of the PWM_DRV module and call the PWM signal generation// update function.// ------------------------------------------------------------------------------pwm1.MfuncC1 = (int16)_IQtoIQ15(svgen_dq1.Ta); // MfuncC1 is in Q15pwm1.MfuncC2 = (int16)_IQtoIQ15(svgen_dq1.Tb); // MfuncC2 is in Q15pwm1.MfuncC3 = (int16)_IQtoIQ15(svgen_dq1.Tc); // MfuncC3 is in Q15pwm1.update(&pwm1);#endif // (BUILDLEVEL==LEVEL3)// ***************** LEVEL4 *****************#if (BUILDLEVEL==LEVEL4)// ------------------------------------------------------------------------------// Connect inputs of the RMP module and call the Ramp control// calculation function.// ------------------------------------------------------------------------------rc1.TargetValue = _IQ(SpeedRef);rc1.calc(&rc1);// ------------------------------------------------------------------------------// Connect inputs of the RAMP GEN module and call the Ramp generator// calculation function.// ------------------------------------------------------------------------------rg1.Freq = rc1.SetpointValue;rg1.calc(&rg1);// ------------------------------------------------------------------------------// Call the ILEG2_VDC read function.// ------------------------------------------------------------------------------ilg2_vdc1.read(&ilg2_vdc1);// ------------------------------------------------------------------------------// Connect inputs of the CLARKE module and call the clarke transformation// calculation function.// ------------------------------------------------------------------------------clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);clarke1.Bs = _IQ15toIQ((int32)ilg2_vdc1.ImeasB);clarke1.calc(&clarke1);//-------------------------------------------------------------------------------------// Checking LockRotorFlag=FALSE for spinning mode, LockRotorFlag=TRUE for locked rotor mode//-------------------------------------------------------------------------------------if(LockRotorFlag==TRUE) // locked rotor mode if LockRotorFlag = 1{// ------------------------------------------------------------------------------// Connect inputs of the PARK module and call the park transformation// calculation function.// ------------------------------------------------------------------------------park1.Alpha = clarke1.Alpha;park1.Beta = clarke1.Beta;park1.Angle = 0;park1.calc(&park1);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID IQ controller// calculation function.// ------------------------------------------------------------------------------pid1_iq.Ref = _IQ(IqRef);pid1_iq.Fdb = park1.Qs;pid1_iq.calc(&pid1_iq);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID ID controller// calculation function.// ------------------------------------------------------------------------------pid1_id.Ref = _IQ(IdRef);pid1_id.Fdb = park1.Ds;pid1_id.calc(&pid1_id);// ------------------------------------------------------------------------------// Connect inputs of the INV_PARK module and call the inverse park transformation // calculation function.// ------------------------------------------------------------------------------ipark1.Ds = pid1_id.Out;ipark1.Qs = pid1_iq.Out;ipark1.Angle = 0;ipark1.calc(&ipark1);} // End: LockRotorFlag==TRUEelse if(LockRotorFlag==FALSE) // spinning mode if LockRotorFlag = 0{// ------------------------------------------------------------------------------// Connect inputs of the PARK module and call the park transformation// calculation function.// ------------------------------------------------------------------------------park1.Alpha = clarke1.Alpha;park1.Beta = clarke1.Beta;park1.Angle = rg1.Out;park1.calc(&park1);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID IQ controller// calculation function.// ------------------------------------------------------------------------------pid1_iq.Ref = _IQ(IqRef);pid1_iq.Fdb = park1.Qs;pid1_iq.calc(&pid1_iq);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID ID controller// calculation function.// ------------------------------------------------------------------------------pid1_id.Ref = _IQ(IdRef);pid1_id.Fdb = park1.Ds;pid1_id.calc(&pid1_id);// ------------------------------------------------------------------------------// Connect inputs of the INV_PARK module and call the inverse park transformation // calculation function.// ------------------------------------------------------------------------------ipark1.Ds = pid1_id.Out;ipark1.Qs = pid1_iq.Out;ipark1.Angle = rg1.Out;ipark1.calc(&ipark1);} // End: LockRotorFlag==FALSE// ------------------------------------------------------------------------------// Connect inputs of the SVGEN_DQ module and call the space-vector gen.// calculation function.// ------------------------------------------------------------------------------svgen_dq1.Ualpha = ipark1.Alpha;svgen_dq1.Ubeta = ipark1.Beta;svgen_dq1.calc(&svgen_dq1);// ------------------------------------------------------------------------------// Connect inputs of the PWM_DRV module and call the PWM signal generation// update function.// ------------------------------------------------------------------------------pwm1.MfuncC1 = (int16)_IQtoIQ15(svgen_dq1.Ta); // MfuncC1 is in Q15pwm1.MfuncC2 = (int16)_IQtoIQ15(svgen_dq1.Tb); // MfuncC2 is in Q15pwm1.MfuncC3 = (int16)_IQtoIQ15(svgen_dq1.Tc); // MfuncC3 is in Q15pwm1.update(&pwm1);// ------------------------------------------------------------------------------// Call the QEP_DRV calculation function.// ------------------------------------------------------------------------------qep1.calc(&qep1);// ------------------------------------------------------------------------------// Connect inputs of the SPEED_FR module and call the speed calculation function // ------------------------------------------------------------------------------speed1.ElecTheta = _IQ15toIQ((int32)qep1.ElecTheta);speed1.DirectionQep = (int32)(qep1.DirectionQep);speed1.calc(&speed1);#endif // (BUILDLEVEL==LEVEL4)// ***************** LEVEL5 *****************#if (BUILDLEVEL==LEVEL5)// ------------------------------------------------------------------------------// Call the ILEG2_VDC read function.// ------------------------------------------------------------------------------ilg2_vdc1.read(&ilg2_vdc1);// ------------------------------------------------------------------------------// Connect inputs of the CLARKE module and call the clarke transformation// calculation function.// ------------------------------------------------------------------------------clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);clarke1.Bs = _IQ15toIQ((int32)ilg2_vdc1.ImeasB);clarke1.calc(&clarke1);// ------------------------------------------------------------------------------// Connect inputs of the PARK module and call the park transformation// calculation function.// ------------------------------------------------------------------------------park1.Alpha = clarke1.Alpha;park1.Beta = clarke1.Beta;park1.Angle = speed1.ElecTheta;park1.calc(&park1);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID speed controller// calculation function.// ------------------------------------------------------------------------------if (SpeedLoopCount==SpeedLoopPrescaler){pid1_spd.Ref = _IQ(SpeedRef);pid1_spd.Fdb = speed1.Speed;pid1_spd.calc(&pid1_spd);SpeedLoopCount=1;else SpeedLoopCount++;// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID IQ controller// calculation function.// ------------------------------------------------------------------------------pid1_iq.Ref = pid1_spd.Out;pid1_iq.Fdb = park1.Qs;pid1_iq.calc(&pid1_iq);// ------------------------------------------------------------------------------// Connect inputs of the PID_REG3 module and call the PID ID controller// calculation function.// ------------------------------------------------------------------------------pid1_id.Ref = _IQ(IdRef);pid1_id.Fdb = park1.Ds;pid1_id.calc(&pid1_id);// ------------------------------------------------------------------------------// Connect inputs of the INV_PARK module and call the inverse park transformation // calculation function.// ------------------------------------------------------------------------------ipark1.Ds = pid1_id.Out;ipark1.Qs = pid1_iq.Out;ipark1.Angle = speed1.ElecTheta;ipark1.calc(&ipark1);// ------------------------------------------------------------------------------// Connect inputs of the SVGEN_DQ module and call the space-vector gen.// calculation function.// ------------------------------------------------------------------------------svgen_dq1.Ualpha = ipark1.Alpha;svgen_dq1.Ubeta = ipark1.Beta;svgen_dq1.calc(&svgen_dq1);// ------------------------------------------------------------------------------// Connect inputs of the PWM_DRV module and call the PWM signal generation// update function.// ------------------------------------------------------------------------------pwm1.MfuncC1 = (int16)_IQtoIQ15(svgen_dq1.Ta); // MfuncC1 is in Q15pwm1.MfuncC2 = (int16)_IQtoIQ15(svgen_dq1.Tb); // MfuncC2 is in Q15pwm1.MfuncC3 = (int16)_IQtoIQ15(svgen_dq1.Tc); // MfuncC3 is in Q15pwm1.update(&pwm1);// ------------------------------------------------------------------------------// Call the QEP calculation function// ------------------------------------------------------------------------------qep1.calc(&qep1);// ------------------------------------------------------------------------------// Connect inputs of the SPEED_FR module and call the speed calculation function // ------------------------------------------------------------------------------speed1.ElecTheta = _IQ15toIQ((int32)qep1.ElecTheta);speed1.DirectionQep = (int32)(qep1.DirectionQep);speed1.calc(&speed1);#endif // (BUILDLEVEL==LEVEL5)// ***************** LEVEL6 *****************#if (BUILDLEVEL==LEVEL6)// ------------------------------------------------------------------------------// Specify the initial position reference when DC-bus voltage is less than 25%// ------------------------------------------------------------------------------if (_IQ15toIQ((int32)ilg2_vdc1.VdcMeas) < _IQ(0.25))PositionRef = _IQtoF(_IQ15toIQ((int32)qep1.MechTheta));// ------------------------------------------------------------------------------// Connect inputs of the RMP_CNTL module and call the Ramp control// calculation function.// ------------------------------------------------------------------------------rc1.TargetValue = _IQ(PositionRef);rc1.calc(&rc1);// ------------------------------------------------------------------------------// Call the ILEG2_VDC read function.// ------------------------------------------------------------------------------ilg2_vdc1.read(&ilg2_vdc1);// ------------------------------------------------------------------------------// Connect inputs of the CLARKE module and call the clarke transformation// calculation function.// ------------------------------------------------------------------------------clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);clarke1.Bs = _IQ15toIQ((int32)ilg2_vdc1.ImeasB);clarke1.calc(&clarke1);。

tms320f28335中文数据手册介绍

tms320f28335中文数据手册介绍
Literature Number: ZHCS889M June 2007 – Revised August 2012
TMS320F28335, TMS320F28334, TMS320F28332 TMS320F28235, TMS320F28234, TMS320F28232007 – REVISED AUGUST 2012
内容
1 TMS320F2833x,TMS320F2823x DSC .................................................................................. 10 1.1 特性 ......................................................................................................................... 10 1.2 开始使用 .................................................................................................................... 11
6441dma概述644232位cpu定时器0cpu定时器1cpu定时器26643增强型pwm模块6844高分辨率pwmhrpwm7245增强型cap模块7346增强型qep模块7547模数转换器adc模块77471如果adc未被使用adc连接20072012texasinstrumentsincorporatedtms320f28335tms320f28334tms320f28332tms320f28235tms320f28234tms320f28232wwwticomcnzhcs889mjune2007revisedaugust2012472adc寄存器82473adc校准8348多通道缓冲串行端口mcbsp模块8349增强型控制器局域网ecan模块ecana和ecanb86410串行通信接口sci模块sciascibscic91411串行外设接口spi模块spia95412部集成电路i2c98413gpiomux99414外部接口xintf10851器件和开发支持工具命名规则10852文档支持11053社区资源11661最大绝对额定值11662建议的运行条件11763电气特性11764118641减少流耗120642121643散热设计考虑12265在没有针对dsp的信号缓冲的情况下仿真器连接12366时序参数符号安排124661定时参数的通用注释124662测试负载电路124663器件时钟表12567时钟要求和特性12668电源排序127681电源管理和监控电路解决方案12869通用输入输出gpio131691gpio131692gpio132693针对输入信号的采样窗口宽度133694低功耗模式唤醒时序134610增强型控制外设1386101增强型脉宽调制器epwm时序1386102触发区输入时序1386103高分辨率pwm时序1396104增强型捕捉ecap时序1396105增强型正交编码器脉冲eqep时序1406106adc转换开始时序141611外部中断时序141612i2c电气特性和时序142613串行外设接口spi模块1426131主模式时序1426132spi受控模式时序147614外部接口xintf时序1516141useready1516142同步模式useready1readymode01526143异步模式useready1readymode11536144xintf信号与xclko

TMS320F28335调用DSP函数库实现复数的FFT的方法

TMS320F28335调用DSP函数库实现复数的FFT的方法

TMS320F28335调⽤DSP函数库实现复数的FFT的⽅法在数字信号处理中,FFT变换是经常使⽤到的,在DSP中⾃⼰编写的FFT变换函数通常会存在计算效率太慢的问题,有时需要调⽤DSP函数库⾃带的变换函数。

但是,DSP在对FFT运算效率优化的同时,对于函数的调⽤⽅式也就有了⽐较多的要求,下⾯结合⾃⼰的调试经验做⼀下简单的介绍。

1、准备⼯作DSP的数字信号处理的⼀系列函数都在C28x_FPU_Lib.lib库中,因此,⾸先需要在CCS的⼯程⽂件中连接此库:在⼯程设置中C2000 Linker——file search path中添加该库和路径。

并在主程序中包含下⾯头⽂件:#include"FPU.h"。

2、结构体介绍FFT函数的输⼊为⼀个结构体,该结构体的定义⽅式如下:typedef struct{ float32 *InPtr;float32 *OutPtr;float32 *CoefPtr;float32 *CurrentInPtr;float32 *CurrentOutPtr;Uint16 Stages;Uint16 FFTSize;} CFFT_F32_STRUCT;其中InPtr为输⼊数组指针,假设你的CFFT的采样点1024个点,那么你的输⼊数组为inputdata[2*FFTSize],长度为2048是因为输⼊数据为复数,实部和虚部需要分开进⾏存储的,所以输⼊数组的长度为2*FFTSize.其中实部和虚部的存储⽅式为inputdata[0]存储你第⼀点的实部,inputdata[1]存储第⼀点的虚部,接着依次向下inputdata[2]存储第⼆个点的实部,inputdata[3]第⼆个点的虚部。

OutPtr为指向输出数组的指针,输出数组的⼤⼩也为2*FFTSize,存储⽅式同样的outputdata[0]。

CoefPtr,为指向转化因⼦数组的指针,长度为FFTSize,决定傅⾥叶转化因⼦的只有傅⾥叶变换的阶数。

基于TMS320F28335实现矢量空间解耦的六相空间矢量脉宽调制

基于TMS320F28335实现矢量空间解耦的六相空间矢量脉宽调制
a trepae em nn— ge sn hoo s o r ( T MS ) T e xe met r u s so e ht h l he—hs pr aet man t y crnu m t o D P M . h epr na e h hw d ta e i l s t
T 3 0 2 3 5,wh c s s d a h o t lc i ,w s s i b e t mp e n h o l x p o e s o e trs a e MS 2 F 8 3 i h Wa u e s t e c nr h p o a u t l o i l me tt e c mp e r c s fv co p c a d c u l g c nr lfrt e mut h s c i e d ie . T e o to a eo ms s t fe h e ur me t o h T e o p i o t o h l p a e ma h n r s n o i v h u c me w v fr ai id t e rq ie n s ft e D — s P M rv .T eh r n c c re tw u d b e u e . MS d i e h a mo i u r n o l e r d c d
迫 札 再才 制 应 闭 21 3 7 望 01 8( ) ,
研究 与设计 E c MA
基 于 T 3 0 2 3 5实 现 矢 量 空 间解 耦 的 MS 2 F 8 3 六 相 空 间矢 量 脉 宽 调 制 木
陈 琳 , 封 华, 潘海鸿, 黄海明, 黄炳琼 ( 西大 学 机械 工程 学院 , 西 南 宁 5 0 0 广 广 3 0 4)
CHEN n, FENG a, Li Hu Ⅳ Ha — o g, HUANG i ih n Ha 一 , HU ANG Bi g— in n qo g

基于TMS320F28335的小型导航计算机系统设计

基于TMS320F28335的小型导航计算机系统设计

基于TMS320F28335的小型导航计算机系统设计
刘明
【期刊名称】《测控技术》
【年(卷),期】2009(028)012
【摘要】设计了一种基于新型浮点DSP--TMS320F28335的小型导航计算机取代以往基于双处理器结构的同类系统,完成6路模拟量和3路数字量实时采集的同时,实现低成本大容量的非易失数据存储,其浮点运算能力满足导航算法需求,双CAN 总线接口可接驳多种上位机,通过片内高速数据交换通道还可扩展高性能DSP阵列.跑车试验表明,该设计用更小的体积和功耗实现了低成本导航计算机系统.
【总页数】4页(P36-39)
【作者】刘明
【作者单位】西北工业大学,航海学院,陕西,西安,710072
【正文语种】中文
【中图分类】U666.125
【相关文献】
1.基于视觉导航的小型搬运机器人控制系统设计 [J], 李春光;张宁;徐宜璠;吕赟程
2.基于SoPC的微小型组合导航系统设计 [J], 王晓莹
3.基于3G-ASCX的小型飞行器异常导航信号检测系统设计 [J], 崔建平
4.基于FPGA的微小型导航计算机数据采集系统设计 [J], 李海洋;刘建业;赵伟
5.基于ARM的小型化SINS/GNSS组合导航系统设计 [J], 陈沣;李小博;卢宝锋;王新龙;陈文海
因版权原因,仅展示原文概要,查看原文内容请购买。

基于TMS320F28335实现矢量空间解耦的六相空间矢量脉宽调制

基于TMS320F28335实现矢量空间解耦的六相空间矢量脉宽调制

基于TMS320F28335实现矢量空间解耦的六相空间矢量脉宽调制陈琳;封华;潘海鸿;黄海明;黄炳琼【摘要】提出用数字信号处理器芯片TMS320F28335作为功率驱动器主控芯片,实现矢量空间解耦的六相空间矢量脉宽调制控制方法.以双Y相移30°六相永磁同步电机为研究对象,推导出实现矢量空间解耦控制过程中12个扇区内ePWM硬件模块控制规律.试验结果表明,用TMS320F28335作为主控芯片,易于实现复杂的矢量空间解耦的多相电机驱动控制,且输出的多路PWM波形、滤波后的相电压波形和线电压波形符合双Y相移30°的永磁同步电机驱动要求,有效抑制电压谐波空间的5、7次谐波,达到抑制谐波电流的目的.%A chip of DSP TMS32OF28335 was proposed as a power driver control chip to realize the vector space decomposition control of 6-phase space vector pulse width modulation (SVPWM). A control law of ePWM hardware module was derived within 12 sectors considering the features of ePWM hardware, when the research object was a dual three-phase permanent-magnet synchronous motor ( DTPMSM ). The experimental results showed that the TMS320F28335, which was used as the control chip; was suitable to implement the complex process of vector space decoupling control for the multiphase machine drives. The outcome waveforms satisfied the requirements of the DTPMSM drive. The harmonic current would be reduced.【期刊名称】《电机与控制应用》【年(卷),期】2011(038)007【总页数】7页(P7-12,21)【关键词】多相电机;矢量空间解耦;空间矢量脉宽调制;低压大功率驱动【作者】陈琳;封华;潘海鸿;黄海明;黄炳琼【作者单位】广西大学机械工程学院,广西南宁530004;广西大学机械工程学院,广西南宁530004;广西大学机械工程学院,广西南宁530004;广西大学机械工程学院,广西南宁530004;广西大学机械工程学院,广西南宁530004【正文语种】中文【中图分类】TM301.20 引言多相电机系统与传统三相电机系统相比,具有运行可靠性高、转矩脉动小、电机效率高、易实现低压大功率输出等优点[1-3],在大功率驱动领域有着广阔的应用前景。

基于TMS320F28335的永磁同步电机矢量控制器设计

基于TMS320F28335的永磁同步电机矢量控制器设计

基于TMS320F28335的永磁同步电机矢量控制器设计严勤;李永聪【摘要】为了提高电动汽车用永磁同步电机控制性能,设计了一款以浮点型TMS320F28335数字信号处理器(DSP)为控制核心的数字化矢量控制器.与采用TMS320LF2407、TMS320F2812等传统定点型DSP为控制核心的永磁同步电机控制器相比,其具有编程简单、运算速度快、片内A/D精度高等优势.文章详细介绍了IGBT模块、温度模块以及各信号采集与调理电路等硬件部分的设计;软件部分,以C语言和汇编语言混合编程,基于TI公司提供的开发系统编写了电机控制程序.该控制器与传统的以定点型DSP芯片为控制核心的驱动控制器相比,提高了运算速度和控制精度,且易于编程,保护功能完善.【期刊名称】《贵州电力技术》【年(卷),期】2018(021)006【总页数】7页(P63-69)【关键词】永磁同步电机;矢量控制;控制器;TMS320F28335【作者】严勤;李永聪【作者单位】贵阳职业技术学院,贵州贵阳550081;贵州大学机械工程学院,贵州贵阳550025【正文语种】中文【中图分类】U271永磁同步电动机(PMSM)因其优良的性能在电动汽车牵引电机上被广泛应用[1-2],文章以电动汽车用内置式永磁同步电动机为对象,研究设计了电动汽车用永磁同步电动机的驱动控制器。

在分析PMSM矢量控制理论与方法的基础上,设计了驱动控制器硬件电路,以及控制逻辑和程序等软件部分。

该控制器以浮点型DSPTMS320F28335芯片为核心,与传统定点型DSP相比,能够执行更复杂的浮点运算,A/D转换精度更高和速度更快,且具有性能稳定、集成度好的优点。

1 总体方案设计此次设计的PMSM驱动控制器的硬件系统主要由两部分组成,即主控制板部分和驱动板部分。

在此系统中,主控制板是核心部分,它主要实现三相电流的信号采集,主电路电压信号采集,位置信号采集,温度信号采集,数据处理,控制系统的输出,通过CAN总线接口电路对外通信等功能。

基于DSP28335的七相感应电机矢量控制

基于DSP28335的七相感应电机矢量控制

基于D SP28335的七相感应电机矢量控制郭冀岭,肖建,邱忠才,罗鹏(西南交通大学电气工程学院,四川成都610031)摘要:七相感应电机因其缺相运行具有代表性近来受到关注。

采用空间解耦模型,对其基波子空间dq分量采用基于转子磁场定向矢量控制方法实现转矩和磁链解耦控制,鉴于其谐波子空间会产生谐波电流,采用了消除谐波的七相载波型UV M 调制方法,该法追加谐波子空间电压为零的约束条件并通过闭环控制得以保证,算法通用性强,开关损耗小,且能够有效消除定子谐波电流。

在计算机仿真基础上,以DSP芯片TM S320F28335为控制核心构建的七相感应电机变频调速系统,实验结果验证了控制方法的正确性和有效性。

关键词:七相感应电机;矢量控制;统一电压调制;消除谐波Vector Control of Seven-Phase Induction Motor Based on DSP28335GUO J i-li n g, X IA O J ian,Q I U Zhon g-cai,L UO Pe n g(College of Electrical Engineering,S outhwest Jiaotong University,C hengdu S ichuan610031,C hina)Abst r act:Th e seven-ph ase adjustable speed drive system h a s dra wn mo re a tten ti on for its typical o pen-ph ase faul t o perati on i n recen t years.B ased on th e mo del o f7-ph ase i n ducti on moto r, th e d-q fundam ental spatial c ompon en t were c ontro lled usi n g vec to r c ontro l strategy to c ontro l th e fl ux a n d to rque o f I M. Ho wever th e h a rmon ic c ompon ents o f currents were generated by th e h a rmon ic c ompon en t i n th e3rd a n d5th h a rmon ic subspace. Co m bi n ed wi th voltages i n h a rmon ic subspaces set to be zero,a no vel PWM, 7-ph ase UVM wi th h a rmon ic curren t elimi n ati on wa s pro po sed.B ased on th e simulati on a n alysis,experim en t results verified th e c ontro l strategy on th e7-ph ase I M adjust-speed platform wi th DSP c o re TM S320F28335.Ke y word s:seven-ph ase i n ducti on moto r;vec to r c ontro l;UVM; h a rmon ic elimi n ati on引言与传统三相电机调速系统相比,多相电机调速系统可用低压功率器件实现大功率,可以减小转矩脉动,可以采用相冗余提高驱动系统可靠性。

基于TMS320F28035的永磁同步电机矢量控制系统研究

基于TMS320F28035的永磁同步电机矢量控制系统研究

基于TMS320F28035的永磁同步电机矢量控制系统研究赵森;李迪;王世勇【摘要】基于实现永磁同步电机伺服系统矢量控制,得到良好的系统动态响应的目的,采用以TMS320F28035为控制核心的全数字DSP速度控制方案,通过硬、软件设计、参数整定以及波形图分析,实验结果表明,该系统电流跟踪性能提升10%,稳态精度提升15%.【期刊名称】《电子设计工程》【年(卷),期】2014(022)024【总页数】4页(P120-123)【关键词】永磁同步电机;TMS320F28035;矢量控制系统;速度控制【作者】赵森;李迪;王世勇【作者单位】华南理工大学机械与汽车工程学院,广东广州510640;华南理工大学机械与汽车工程学院,广东广州510640;华南理工大学机械与汽车工程学院,广东广州510640【正文语种】中文【中图分类】TN492永磁同步电动机(PMSM)具有体积小、重量轻、结构多样、可靠性高等优点。

在数控机床、工业机器人等自动化领域得到了广泛的应用。

数字化交流伺服调速系统采用的是目前非常流行的矢量控制算法,即电压空间矢量脉宽调制[1](SVPWM)。

SVPWM的主要思想是:以三相对称正弦波电压供电时三相对称电动机定子理想磁链圆为参考标准,以三相逆变器不同开关模式作适当的切换,从而形成脉宽调制(PWM)波,以所形成的实际磁链矢量来追踪其准确磁链圆[2]。

由于矢量控制算法对采集PMSM转子的电流、电压等参数的实时性要求很高,且计算量大,一般的微处理器很难达到要求。

因此,文中采用TI公司C2000系列高压数字电机开发套件,利用其DSP芯片TMS320F28035高速数据处理能力,使得整个电机控制系统具有控制精度高,实时性强的特点。

1 系统结构针对永磁同步电机高阶、多变量、非线性、强耦合的控制特点,如何有效解耦进而实现直流电机般的转矩控制方式,一直以来都是主要的研究热点。

永磁同步电机的转子机械位置和磁通位置的一致性,决定了其实现矢量控制方面的优越性。

空间矢量优化算法控制的异步电机变频调速器

空间矢量优化算法控制的异步电机变频调速器

空间矢量优化算法控制的异步电机变频调速器
王勇;王梨英
【期刊名称】《电子世界》
【年(卷),期】2018(0)5
【摘要】本文以TMS320F28035芯片为控制核心,设计了一款异步电机变频调速器.通过输出三相PWM波控制智能功率模块IPM驱动三相异步电机.使用空间矢量SVPWM算法,并对其进行优化,采用检测反电势的方法,创新性的减少了光电编码器,同时开创性的研发了自动根据运行环境调节的自适应变频算法,可以使设备在各种复杂的环境下进行工作,产品具有很好的实用性,应用前景良好.
【总页数】2页(P120-121)
【作者】王勇;王梨英
【作者单位】湖南铁道职业技术学院;中车株洲电力机车有限公
【正文语种】中文
【相关文献】
1.电网不对称条件下异步电机空间电压矢量的直接转矩控制策略研究 [J], 徐进
2.异步电机空间矢量直接转矩控制的仿真研究 [J], 张瑞;高赟
3.一种改进的空间矢量调制的异步电机直接转矩控制系统 [J], 穆飚;李鸿彪;曼苏乐
4.三相异步电机空间矢量脉宽调制矢量控制系统仿真 [J], 张志刚;陈颖
5.基于空间矢量脉冲宽度调制的异步电机直接转矩控制系统 [J], 金爱娟;徐峥鹏;王居正;田晓雯;鲍思源;陶伟涵
因版权原因,仅展示原文概要,查看原文内容请购买。

基于TMS320F28335的SVPWM信号发生器

基于TMS320F28335的SVPWM信号发生器

基于TMS320F28335的SVPWM信号发生器
王霞;朱景伟;刁亮
【期刊名称】《电子科技》
【年(卷),期】2013(026)012
【摘要】电压空间矢量脉宽调制能提高直流侧电压利用率,其应用范围已跨越变频调速系统,进入各个领域.文中在分析SVPWM原理的基础上,结合三相H桥逆变电路的特点,介绍了TMS320F28335的SVPWM信号发生器设计,并实现了逆变桥一相断路情况下的SVPWM波.通过硬软件结合,在DSP实验平台上进行了调试和实验观察,给出实验结果波形.实验证明,基于DSP的SVPWM信号发生器具有实现简单方便、易于数字化的特点,能更好地满足功率器件对驱动信号的不同要求,便于实现容错控制.
【总页数】4页(P30-33)
【作者】王霞;朱景伟;刁亮
【作者单位】大连海事大学轮机工程学院,辽宁大连116026;大连海事大学轮机工程学院,辽宁大连116026;大连海事大学轮机工程学院,辽宁大连116026
【正文语种】中文
【中图分类】TN911.72;TM464
【相关文献】
1.基于LabVIEW的SVPWM信号发生器设计 [J], 仲兆准;钟胜奎;沈峰;张运诗;谢光伟
2.基于TMS320F28335的SVPWM实现方法 [J], 任先文;王坤;张俊丰;余志飞
3.基于TMS320F28335的五段式和七段式SVPWM实现方法 [J], 郭寅远;李建伟;刘刚;孙健;
4.基于TMS320F28335的SVPWM永磁同步电机伺服系统的应用 [J], 吕海立;张鹏超;熊超;杜枭雄;陈鑫
5.基于TMS320F28335的SVPWM永磁同步电机伺服系统的应用 [J], 吕海立;张鹏超;熊超;杜枭雄;陈鑫;;;;;
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于TMS320F28335的空间矢量脉宽调制研究黄家晗(同济大学电信学院上海 200092)摘要:通过分析空间矢量脉宽调制的原理,运用数学的方法计算出在不同的扇区需要的脉宽,同时也给出了如何判断当前扇区的方法。

由于该原理简单,无需进行三角函数计算,因此编程简洁,能够有效降低了系统运行时间。

利用这些原理通过TMS320F28335上的增强型脉冲宽度调制器产生3 组互补对称的脉宽调制信号来控制永磁同步电机,同时使用死区控制子模块和错误控制子模块保证了系统运行的可靠性和安全性。

关键字:伺服;空间矢量脉宽调制;永磁同步电机;数字信号处理器中图分类号:TM341 文献标识码:AResearch of SVPWM Based on TMS320F28335Huang Jia-han(college of electronic and information engineering, Tongji University,Shanghai,200092,China) Abstract: Based on the principle of SVPWM, introduces a method of permanent magnet synchronous motor rotary inertia identification. This method only needs real-time acquisition of the feedback torque and acceleration then we can achieve inertia identification. The method is simple, fast and identification accuracy. Suitable for real-time inertia identification, it has valuable for practical application. In addition, the article also introduces the measurement of the load torque it is important in the inertia identification but no real-time.Keyword: servo; SVPWM; PMSM; DSP1 引言空间矢量脉宽调制[1](SVPWM)是近年发展的一种比较新颖的控制方法,是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波[2],能够使输出电流波形尽可能接近于理想的正弦波形,在交流感应和永磁同步电机电机驱动上面有广泛的应用。

空间矢量脉宽调制(SVPWM)技术与正弦脉宽调制[3](SPWM)相比较,绕组电流波形的谐波成分小,使得电机转矩脉动降低,旋转磁场更逼近圆形,而且使直流母线电压的利用率有了很大提高,且更易于实现数字化。

TMS320F28335 DSP是美国德州仪器(Texas Instruments, TI)公司新推出的一款浮点型数字信号处理器。

它在已有的DSP平台上增加了浮点运算内核,既保持了原有DSP芯片的优点,又能够执行复杂的浮点运算,可以节省代码执行时间和存储空间,具有精度高、成本低、功耗小、外设集成度高,数据及程序存储量大和AD转换更精确快速等优点,是更加优秀的嵌入式工业应用软件[4]。

2空间矢量脉宽调调制原理逆变器三相桥臂如图1所示,从图中可以看出6个功率管总共有8种开关状态,这些组合以及由此产生线与线之间的输出和相电压跟直流母线电压V DC之间的关系如表1所示。

表(1)通过Clarke 变换[5] 。

将基于3 轴、2 维的定子静止坐标系的各物理量变换到2 轴的定子静止坐标系中,其转换方程式为:V S α= V ANV S β= (2V BN + V AN )/3用矩阵来表示上述方程,亦可写为:11122230AN S BN S CN V V V V V αβ⎛⎫--⎪⎡⎤⎪⎡⎤⎢⎥= ⎪⎢⎥⎢⎥⎣⎦⎢⎥⎣⎦ ⎝ 由于事实上开关状态只有8个组合,依照晶体管指令信号(c,b,a )的状态V S α和V S β在2轴的定子静止坐标系中也只有有限的值。

V S α和V S β的这些值在与其对应的相电压(V ,V ,V )瞬时值列在表(2)中。

表(2)在表(2)中所列的值被叫做符合适当晶体管指令信号(c,b,a )在(α,β)坐标系中的基本空间矢量。

表(2)中最后一列是空间矢量对应的(c,b,a )信号。

比如(c,b,a )= 001表示空间矢量是U 0。

通过开关组合定义的8个空间矢量见图(2)所示。

图(2)基本空间矢量2.计算持续时间我们把定子参考电压矢量的投影设为U out ,空间矢量脉宽调制技术的目标是通过给定一个近似的定子参考电压矢量Uout 然后调节符合空间矢量位置的开关组合达到控制的目的。

参考电压矢量U out 是通过在(α,β)坐标系中的α和β来体现的。

图(3)是参考电压矢量,(α,β)坐标系以及空间矢量U 0和U 60。

同时也给出了(α,β)坐标系与空间矢量U 0和U 60的关系。

SV β∑表示β在空间矢量U 0和U60中的总和,SV α∑表示β在空间矢量U和U 60中的总和。

因此:0233s DC DC s DC V V V V V βα⎧==⎪⎪⎨⎪=+=⎪⎩∑∑图(3)参考电压矢量投影图(3)的例子中参考电压矢量U out 是在包含U 0和U 60的扇区中。

此时U out 可以由U 0和U 60来表示,因此我们可以写为:13031060out T T T T T T U U U T T=++⎧⎪⎨=+⎪⎩ 在这里1T 和3T 是U 0和U 60在周期T 内各自持续的时间。

0T 是空矢量的持续时间。

这些持续时间能够通过下面的式子计算出来:36031060sin(60)cos(60)beta alfa T U U TT T U U U T T⎧=⎪⎪⎨⎪=+⎪⎩ (1) 从图(3)和表(2)中明显可以看出所有的空间矢量数值均为2V DC /3。

此时标准的相电压(线与中性点)的电压为V DC20U =60U =21)中计算出持续时间为:)12alfa beta T T U =-3beta T TU =在这里,alfa U 和beta U 同样表示在(α,β)标准坐标系中U out 和最大相电压(V DC的关系。

其他剩余的时间为零矢量0T 。

作为总的周期T 的一部分,其持续时间可以有下式给出:)1112alfa beta T t U T ==- 32beta Tt U T==以类似的方式可以得出,当U out 所在扇区包含U 60和U 120时可以知道60U =120U =2由此可以计算持续时间为:()2112alfa beta T t U T ==+)3122alfa beta T t U T ==+其中2T 为U 120在周期T 内的持续时间。

现在定义三个变量X 、Y 和Z 用下面方程来表示:beta X U =)12alfa betaY U=+()12alfa betaZ U=+当U out所在扇区包含U0和U60时,t1=-Z,t2=X。

当U out所在扇区包含U60和U120时,t1=Z,t2=Y。

同理,当U out在其他空间矢量包含的扇区时可以计算出t1和t2。

不同扇区t1和t2与X、表(3)3.判断扇区为了知道处于哪个扇区,需要根据Clarke逆变换把alfaU和betaU转换为三个平衡的相位1refV、2refV和3refV:12322ref betabeta alfarefbeta alfarefV UU UVU UV⎧=⎪⎪-+⎪=⎨⎪⎪--=⎪⎩(2)因此在(α,β)标准坐标系中的参考电压为:()()123sincoscoscos120cos120alfabetarefrefrefU tU tV tV tV tωωωωω⎧=⎪⎪=⎪⎪=⎨⎪=-⎪⎪=+⎪⎩(3)根据式(2)(3)通过下面的方式可以取得扇区信息:当1refV>0时a=1,否则的话a=0;当2refV>0时b=1,否则的话b=0;当3refV>0时c=1,否则的话c=0;此时的扇区为:4⨯c + 2⨯b + a。

例如,在图(2)中,a=1时的向量为U300、U0和U60。

这些向量的相位分别为ωt=300 、ωt=0 和ωt=60 。

因此V>0此时a=0。

1ref4 SVPWM在DSP上的实现在SVPWM算法的软件上实现上,基本思路是通过上述计算得到的不同扇区对应的持续时间加载给计数比较寄存器(CMP)来实现不同脉宽的PWM。

具体实现中需要根据不同的晶振频率来设置时间基准周期寄存器(TBPRD),计数器模式(CTRMODE)为递增递减计数模式,主计数比较A(CMPA)和B(CMPB)加载模式为时间基准计数器等于零时加载。

当满足条件时,就可在 DSP 的 6 个PWM 输出引脚得到具有所需占空比的 3 组互补对称的 PWM 信号。

另外重要的一点是要设置死区时间,死区是指在小输入情况下系统增益很小或者为0的情况[6]。

由于TMS320F28335有专门的死区控制子模块,因此我们只需要设置死区控制输出模式为对于ePWMxA输出的上升沿延迟和ePWMxB下降沿延迟完全使能,极性选择控制为主高互补(AHC)模式,上升沿和下降沿延迟时间一般设定为3um。

最后为了保护功率开关元件利用DSP的错误控制子模块来保证出错时关闭PWM,在错误区允许中断寄存器(TZEINT)中启用中断的产生,并使用HWI管理器来配置硬件中断的ISR(中断服务函数)[7]。

5 结束语本文介绍了着重介绍了空间矢量脉宽调制的原理,以及利用此原理来计算持续时间,并且通过Clarke逆变换经过一系列计算来判断此时所处的扇区。

由此可以实现在TMS320F28335上产生3 组互补对称的 PWM 信号来控制永磁同步电机。

该原理简单,无需进行三角函数计算,编程简洁,有效降低了系统运行时间。

作者简介:黄家晗,1984,男,汉族,浙江省宁波市,硕士研究生。

主要研究方向:伺服控制技术。

参考文献【1】陈国呈. PWM逆变技术及应用[M]. 北京:中国电力出版社,2007Chen Guo-cheng.PWM inverter technology and Application[M]. Beijing:China Electric Power Press,2007.【2】寇宝泉,程树康. 交流伺服电机及其控制[M].北京:机械工业出版社,2008.6.Kou Bao-quan,Chen Shu-kang.AC servo motor and control[M]. Beijing:China Machine Press,2008.6 【3】郭庆鼎,孙宜标,王丽梅. 现代永磁电动机交流伺服系统[M].北京:中国电力出版社,2006.Guo Qing-ding,Sun Yi-biao,Wang Li-mei. Modern PMSM servo system[M]. Beijing:China Electric Power Press,2006.【4】刘陵顺,高艳丽,张树团. TMS320F28335 DSP原理与开发编程[M].北京:北京航空航天大学出版社,2011.12.Liu Ling-shun,Gao Yan-li,Zhang Shu-tuan.TMS320F28335 DSP principle and programming development [M]. Beijing:Beihang University press,2011.12【5】石燕宏金元浩闫士杰.Clarke 和 Park 变换在 DSP 上的实现[J].基础自动化.2000年4月第7卷第2期.S hi Yan-hong,Jin Yuan-hao,Yan Shi-jie. Implementation of Clarke and Park Transforms on DSP[J]. Basic Automation.2000.4.Vol.7 No.2【6】埃里斯.控制系统设计指南[M].北京:电子工业出版社,2006.9.Ellis,G.Control System Design Guide[M]. Beijing: Publishing House of electronicsindustry,2006.9.【7】德克萨斯仪器公司. TI DSP/BIOS 用户手册与驱动开发[M].北京:清华大学出版社,2007.Texas Instruments Incorporated. TMS320 DSP/BIOS User’s Guide[M].Beijing: Tsinghua University press,2007.。

相关文档
最新文档