基于TMS320F2812的无刷直流电机控制
基于TMS320F2812的电动机控制故障检测模块的设计研究
检测模 块 系统具 有 强大的数据 处理能 力、 据统 计和 分析 能 力 , 数 同时 又具 有 良好 的 稳 定性 , 而使 该模 块 具 从
有极 大的扩展 性和 实用性 。
关键 词 : MS 2 F 8 2 控 制 ; 障 ; 块 ; 计研Leabharlann 究 T 30 2 1 ; 故 模 设
中图分 类号 : P2 3 T 7 文献 标 志码 : A
tc biiy w ih is f a u e . ia l t t e t r s t Ke r y wo ds: TM S32 0F281 Co r , 2, ntol Fau t M odu e, sgn a e e r h l, l De i nd r s a c
T 30 2 1 M¥ 2 F 8 2是 一 款 高 速 的 信 号 处 理 芯 片 , 其 上集 成 了丰 富 的电 动机 控 制 模 块 , 括 : W M 电 包 P 路 、 获单 元 和正交 编 码脉 冲 QE 捕 P电路 j 独 特 的 , 硬 件设 计使 其 适合 数字 信 号 的处理 , 其对 F T等 尤 F 算 法在 运算 时 间上 优 势 更 为 明显 , 故 障信 号 处 理 是 系统 的理 想 选 择 , 用 F 8 2这 种 优 势 , 们 通 过 利 21 我
基于 T 3021 MS2F 82的电动机控制故障检 测模块的设计研 究
马 鸣鹤
( 宁 装 备 制 造 职 业 技 术 学 院 , 宁 沈 阳 10 6 ) 辽 辽 1 1 1
摘 要 : MS 2 F 8 2应 用范围广 阔, T 30 2 1 在信 号 处理模 块 的应 用 中占有重要 地 位 , 过研 究 , 通 对其 在故 障
试 验设 计 , 开发 了一 种 具 有 电 动机 控 制 功 能 的检 测
基于TMS320F2812的无刷直流电机伺服系统设计
T 30 2 X 内核 的定 点 数 字 信 号处 理 器 。F82 MS2 C X 2 1
数字 信号处 理器 的运算精度 达 3 2位 ,主频 高达 10M z 5 H ,内部集成 了 18k 2 B的 F s l h存储器 ,4 a k B的引导 R M,数学运算表,2k O B的 O P R M T O
0 引 言
无刷直 流电机具 有调 速 性能好 、控 制方 法灵 活 多变 、效率高 、寿命 长 、起 动 转 矩 大、过 载 能力 强 等优点 。无刷直流电机采用专用芯片。本系统选 J 用 T 30 21 MS2F82处 理 器 构 建 控 制 平 台,充 分 利 用 D P的片 内资 源 ,以简 洁 可靠 的硬 件结 构 实现 了电 S
T 30 2 1 MS2 F82数字信 号处 理器 是基于
…… 予 j
医
1 × K 中央处理单元 6 2 18 k 麓
—。一:—!— 1l ——同 ——f 1 , ‘— ——— 鐾 — I 堡 — L !— 。 ’ —— — . I 自 — — 十 I 。
Abta t h t t yo rm t uo ai ajsv I ot lsp t ow r eligteh h src :T es a g f aa ee a t t dut ePD cnr u r adt rain i - re p r m c i oi f o z h g
王 澍 ,林
( 北 工 业 大 学 ,西 安 西
辉
707 ) 102
摘
要 :介绍 了基 于 T S2 F 82数 字信 号 处理 器 、采 用 新 型 PD参 数 自整 定分 段 控 制 的方 法 M 30 21 I
10 TMS320F2812的永磁无刷直流电动机控制
第10章无刷直流电动机例无刷直流电动机控制软件软件模块和相关参数采用TMS320F2812数字信号处理器实现无刷直流电动机控制的主程序。
/* ================================================================== 系统名称:无刷直流电动机控制(DSP281x)文件名称:BLDC3_1.C功能描述:采用霍尔传感器实现三相无刷直流电动机的控制================================================================== */// 主函数使用的头文件#include "target.h"#include "DSP281x_Device.h"#include "IQmathLib.h"#include "bldc3_1.h"#include "parameter.h"#include "build.h"#include <math.h>// 函数声明interrupt void MainISR(void);// 系统使用的全局变量float32 SpeedRef = 0.20; // 速度参考(pu)float32 T = 0.001/ISR_FREQUENCY; // 采样周期,见文件parameter.hUint32 VirtualTimer = 0;Uint16 ILoopFlag = FALSE;Uint16 SpeedLoopFlag = FALSE;int16 DFuncDesired = 0x1A00; // 期望的占空比(Q15)_iq CurrentSet = _IQ(0.0031);Uint16 IsrTicker = 0;Uint16 BackTicker = 0;int16 DlogCh1 = 0;int16 DlogCh2 = 0;int16 DlogCh3 = 0;int16 DlogCh4 = 0;volatile Uint16 EnableFlag = FALSE;// 采用PID控制器调节无刷直流电动机的电流和速度PIDREG3 pid1_idc = PIDREG3_DEFAULTS;PIDREG3 pid1_spd = PIDREG3_DEFAULTS;// 定义并初始化PWM驱动PWMGEN pwm1 = PWMGEN_DEFAULTS;// 定义并初始化ADC驱动ADCVALS adc1 = ADCVALS_DEFAULTS;// 定义并初始化霍尔传感器HALL3驱动HALL3 hall1 = HALL3_DEFAULTS;// 定义斜波控制器平滑斜坡信号RMPCNTL rc1 = RMPCNTL_DEFAULTS;// RAMP2模块初始化RMP2 rmp2 = RMP2_DEFAULTS;// MOD6CNT 模块初始化MOD6CNT mod1 = MOD6CNT_DEFAULTS;// SPEED_PR模块初始化SPEED_MEAS_CAP speed1 = SPEED_MEAS_CAP_DEFAULTS;// 创建并初始化DA TALOG模块DLOG_4CH dlog = DLOG_4CH_DEFAULTS;void main(void){// ******************************************// 初始化x281x处理器代码// ******************************************// 初始化系统控制寄存器,锁相环,看门狗,时钟等模块:// InitSysCtrl()函数在DSP281x_SysCtrl.c文件中定义InitSysCtrl();// HISPCP预定标寄存器设置,一般情况下设置为默认值EALLOW; // 解除寄存器保护SysCtrlRegs.HISPCP.all = 0x0000; // SYSCLKOUT/1EDIS; // 禁止对受保护寄存器进行写操作// 禁止并清除所有CPU中断:DINT;IER = 0x0000;IFR = 0x0000;// 初始化外设中断扩展单元控制寄存器为默认状态:// InitPieCtrl()函数在DSP281x_PieCtrl.c中定义InitPieCtrl();// 初始化PIE矢量表为已知状态InitPieVectTable();// 用户专用函数,重新分配中断向量,使能中断:// 使能EV A 定时器1/2:// 配置定时器1/2寄存器(EV A)EvaRegs.GPTCONA.all = 0;// 设置通用定时器2的周期EvaRegs.T2PR = SYSTEM_FREQUENCY*1000000*T;// 清除定时器2的计数器/比较寄存器EvaRegs.T2CNT = 0x0000;EvaRegs.T2CMPR = 0x0000;// 等待使能标志置位while (EnableFlag==FALSE){BackTicker++;}// 使能通用定时器2的周期中断EvaRegs.EV AIMRB.bit.T2PINT = 1;EvaRegs.EV AIFRB.bit.T2PINT = 1;// 配置定时器:递增计数,x1,内部时钟,禁止比较操作,使用自己的周期EvaRegs.T2CON.all = 0x9040;// 重新分配中断EALLOW; // 解除寄存器保护PieVectTable.T2PINT = &MainISR;EDIS; // 禁止对受保护寄存器进行写操作// 为T2PINT 使能PIE的组3的中断1PieCtrlRegs.PIEIER3.all = M_INT1;// 为T2PINT 使能CPU INT3IER |= M_INT3;// 初始化PWM模块pwm1.PeriodMax= (SYSTEM_FREQUENCY/PWM_FREQUENCY)*1000;//不对称PWM pwm1.DutyFunc = DFuncDesired; // DutyFunc = Q15 pwm1.init(&pwm1);// 初始化DA TALOG模块dlog.iptr1 = &DlogCh1;dlog.iptr2 = &DlogCh2;dlog.iptr3 = &DlogCh3;dlog.iptr4 = &DlogCh4;dlog.trig_value = 0x01;dlog.size = 0x400;dlog.prescalar = 1;dlog.init(&dlog);// 初始化ADC模块adc1.ChSelect = 0x6543;adc1.init(&adc1);// 初始化时能驱动模块drv1.init(&drv1);// 初始化SPEED_PR模块(150 MHz,N = 1 event period/rev)speed1.InputSelect = 0;speed1.BaseRpm = 120*(BASE_FREQ/P);speed1.SpeedScaler = (Uint32)(ISR_FREQUENCY/(1*BASE_FREQ*0.001));// 初始化RMPCNTL模块rc1.RampDelayMax = 20;rc1.RampLowLimit = _IQ(0);rc1.RampHighLimit = _IQ(1);// 初始化霍尔传感器模块hall1.DebounceAmount = 5;hall1.Revolutions = -10;hall1.init(&hall1);// 初始化RMP2模块rmp2.Out = (int32)DFuncDesired;rmp2.Ramp2Delay = 0x00000050;rmp2.Ramp2Max = 0x00007FFF;rmp2.Ramp2Min = 0x0000000F;// 初始化PID_REG3模块,直流母线电流调节pid1_idc.Kp = _IQ(1);pid1_idc.Ki = _IQ(T/0.003);pid1_idc.Kd = _IQ(0/T);pid1_idc.Kc = _IQ(0.2);pid1_idc.OutMax = _IQ(0.99);pid1_idc.OutMin = _IQ(0);// 初始化PID_REG3模块,速度调节pid1_spd.Kp = _IQ(1);pid1_spd.Ki = _IQ(T/0.1);pid1_spd.Kd = _IQ(0/T);pid1_spd.Kc = _IQ(0.2);pid1_spd.OutMax = _IQ(0.99);pid1_spd.OutMin = _IQ(0);// 使能全局中断和更高优先级的适时调试中断EINT; // 使能全局中断INTMERTM; // 使能全局适时调试中断DBGM// 循环for(;;) BackTicker++;}interrupt void MainISR(void){// 验证ISRIsrTicker++;// ***************** LEVEL1 *****************#if (BUILDLEVEL==LEVEL1)// ------------------------------------------------------------------------------ // 调用ADC04U_DRV读取函数// ------------------------------------------------------------------------------ adc1.read(&adc1);// ------------------------------------------------------------------------------ // 连接HALL模块并调用传感器检测函数// ------------------------------------------------------------------------------ hall1.HallMapPointer = (int16)mod1.Counter;hall1.read(&hall1);// ------------------------------------------------------------------------------ // 连接输入到MOD6模块,调用Modulo 6计数器计数函数// ------------------------------------------------------------------------------ mod1.TrigInput =(int32)hall1.CmtnTrigHall;mod1.Counter = (int32)hall1.HallMapPointer;mod1.calc(&mod1);// ------------------------------------------------------------------------------// 连接RMP2模块,调用Ramp控制计算函数// ------------------------------------------------------------------------------ rmp2.DesiredInput = (int32)DFuncDesired;rmp2.calc(&rmp2);// ------------------------------------------------------------------------------// 连接PWM_DRV模块,调用PWM信号产生函数// ------------------------------------------------------------------------------ pwm1.CmtnPointer = (int16)mod1.Counter;pwm1.DutyFunc = (int16)rmp2.Out;pwm1.update(&pwm1);// ------------------------------------------------------------------------------// 连接SPEED_PR模块,调用速度计算函数// ------------------------------------------------------------------------------ if ((mod1.Counter == 5)&(hall1.CmtnTrigHall == 0x7FFF)) { speed1.TimeStamp = VirtualTimer;speed1.calc(speed1);}// ------------------------------------------------------------------------------// 连接数据记录模块DA TALOG,以便系统调试时观察变量// ------------------------------------------------------------------------------ DlogCh1 = (int16)mod1.Counter;DlogCh2 = hall1.HallGpioAccepted;DlogCh3 = (int16)mod1.TrigInput;DlogCh4 = hall1.CmtnTrigHall;// ------------------------------------------------------------------------------// 连接输入到EN_DRV模块,调用时能/禁止PWM信号刷新函数// ------------------------------------------------------------------------------ drv1.EnableFlag = EnableFlag;drv1.update(&drv1);#endif // (BUILDLEVEL==LEVEL1)// ***************** LEVEL2 *****************#if (BUILDLEVEL==LEVEL2)// ------------------------------------------------------------------------------// 调用ADC04U_DRV 读取函数// ------------------------------------------------------------------------------adc1.read(&adc1);// ------------------------------------------------------------------------------// 连接HALL模块并调用传感器检测函数// ------------------------------------------------------------------------------hall1.HallMapPointer = (int16)mod1.Counter;hall1.read(&hall1);// ------------------------------------------------------------------------------// 连接MOD6模块,调用Modulo 6计数计算函数// ------------------------------------------------------------------------------mod1.TrigInput =(int32)hall1.CmtnTrigHall;mod1.Counter = (int32)hall1.HallMapPointer;mod1.calc(&mod1);// ------------------------------------------------------------------------------// 连接RMP2模块,调用斜坡控制计算函数// ------------------------------------------------------------------------------rmp2.DesiredInput = (int32)DFuncDesired;rmp2.calc(&rmp2);// ------------------------------------------------------------------------------// 连接PID_REG3模块,调用PID控制器计算函数// ------------------------------------------------------------------------------pid1_idc.Ref = CurrentSet;pid1_idc.Fdb = _IQ15toIQ(adc1.Ch4Out);pid1_idc.calc(&pid1_idc);// ------------------------------------------------------------------------------// 连接PWM_DRV模块,调用PWM信号产生函数// ------------------------------------------------------------------------------// 固定占空比和Idc duty-cycle控制展开空比切换if (ILoopFlag == FALSE)pwm1.DutyFunc = (int16)rmp2.Out; // 固定占空比elsepwm1.DutyFunc = (int16)_IQtoIQ15(pid1_idc.Out); // Idc duty-cycle控制占空比pwm1.CmtnPointer = (int16)mod1.Counter;pwm1.update(&pwm1);// ------------------------------------------------------------------------------// 连接SPEED_PR模块,调用速度调节函数// ------------------------------------------------------------------------------ if ((mod1.Counter == 5)&(hall1.CmtnTrigHall == 0x7FFF)) { speed1.TimeStamp = VirtualTimer;speed1.calc(speed1);}// ------------------------------------------------------------------------------// 连接数据记录模块DA TALOG// ------------------------------------------------------------------------------ DlogCh1 = (int16)mod1.Counter;DlogCh2 = (int16)mod1.TrigInput;DlogCh3 = (int16)_IQtoIQ15(pid1_idc.Ref);DlogCh4 = (int16)_IQtoIQ15(pid1_idc.Fdb);// ------------------------------------------------------------------------------// 连接输入到EN_DRV模块,调用时能/禁止PWM信号刷新函数// ------------------------------------------------------------------------------ drv1.EnableFlag = EnableFlag;drv1.update(&drv1);#endif // (BUILDLEVEL==LEVEL2)// ***************** LEVEL3 *****************#if (BUILDLEVEL==LEVEL3)// ------------------------------------------------------------------------------// 调用ADC04U_DRV 读取函数// ------------------------------------------------------------------------------ adc1.read(&adc1);// ------------------------------------------------------------------------------// 连接RMP模块,调用斜坡控制计算函数// ------------------------------------------------------------------------------ rc1.TargetValue = _IQ(SpeedRef);rc1.calc(&rc1);// ------------------------------------------------------------------------------// 连接HALL模块并调用传感器检测函数// ------------------------------------------------------------------------------ hall1.HallMapPointer = (int16)mod1.Counter;hall1.read(&hall1);// ------------------------------------------------------------------------------// 连接MOD6模块,调用Modulo 6计数计算函数// ------------------------------------------------------------------------------mod1.TrigInput =(int32)hall1.CmtnTrigHall;mod1.Counter = (int32)hall1.HallMapPointer;mod1.calc(&mod1);// ------------------------------------------------------------------------------// 连接RMP2模块,调用斜坡控制计算函数// ------------------------------------------------------------------------------rmp2.DesiredInput = (int32)DFuncDesired;rmp2.calc(&rmp2);// ------------------------------------------------------------------------------// 连接PID_REG3模块,调用PID控制器计算函数// ------------------------------------------------------------------------------pid1_spd.Ref = rc1.SetpointValue;pid1_spd.Fdb = speed1.Speed;pid1_spd.calc(&pid1_spd);// ------------------------------------------------------------------------------// 一旦电动机速度达到期望值,使闭环速度标志位置位// ------------------------------------------------------------------------------if (rc1.EqualFlag == 0x7FFFFFFF) {SpeedLoopFlag = TRUE;rc1.RampDelayMax = 300;}// ------------------------------------------------------------------------------// 连接PWM_DRV模块,调用PWM信号产生函数// ------------------------------------------------------------------------------// 固定占空比和由速度计算的占空比之间切换if (SpeedLoopFlag == FALSE)pwm1.DutyFunc = (int16)rmp2.Out; // 固定占空比elsepwm1.DutyFunc = (int16)_IQtoIQ15(pid1_spd.Out); // 速度控制占空比pwm1.CmtnPointer = (int16)mod1.Counter;pwm1.update(&pwm1);// ------------------------------------------------------------------------------// 连接SPEED_P模块,计算速度调用函数// ------------------------------------------------------------------------------if ((mod1.Counter == 5)&(hall1.CmtnTrigHall == 0x7FFF)) {speed1.TimeStamp = VirtualTimer;speed1.calc(speed1);}// ------------------------------------------------------------------------------// 连接到数据记录模块,DATALOG// ------------------------------------------------------------------------------DlogCh1 = (int16)mod1.Counter;DlogCh2 = (int16)mod1.TrigInput;DlogCh3 = (int16)_IQtoIQ15(pid1_spd.Ref);DlogCh4 = (int16)_IQtoIQ15(pid1_spd.Fdb);// ------------------------------------------------------------------------------// 连接EN_DRV模块,调用使能/禁止PWM 信号函数// ------------------------------------------------------------------------------drv1.EnableFlag = EnableFlag;drv1.update(&drv1);#endif // (BUILDLEVEL==LEVEL3)// ------------------------------------------------------------------------------// 虚拟定时器递增计数// ------------------------------------------------------------------------------VirtualTimer++;VirtualTimer &= 0x00007FFF;// ------------------------------------------------------------------------------// 调用数据记录函数DA TALOG// ------------------------------------------------------------------------------dlog.update(&dlog);// 根据定时器时能其他需要中断EvaRegs.EV AIMRB.bit.T2PINT = 1;// 为保证系统可靠安全工作,使用一个屏蔽写到EV AIFRB寄存器EvaRegs.EV AIFRB.all = BIT0;// 响应中断,以便处理器能够从PIE的中断组3上接收更多的中断PieCtrlRegs.PIEACK.all |= PIEACK_GROUP3;}11。
基于TMS320F2812的永磁直线电机伺服控制研究
第3 1 卷第 1 期
2 01 4年 1月
机
电
工
程
Vo 1 . 3l No. 1
J o u r n a l o f Me c h a n i c a l& E l e c t i r c a l E n g i n e e r i n电机 ; T M S 3 2 0 F 2 8 1 2 ; 伺服控制 ; 增 量式光栅 ; 前馈补偿 ; 跟踪误 差
中 图分 类 号 : T H 3 9 ; T M 3 5 9 . 4 文献标志码 : A 文章编号 : 1 0 0 1— 4 5 5 1 ( 2 0 1 4 ) 0 1 — 0 0 7 6— 0 5
基于TMS320F2812的永磁同步直线电机伺服控制系统设计
Z ENG un, ZENG e n n,W U Yix a g H J YH — a —in
( a ut o tmain,Gu n d n iest f e h oo yGu n z o F c l fAuo t y o a g o gUnv ri o c n lg a gh u,Gu n d n 0 6,Chn ) y T a g o g5 0 1 0 ia
p o e t o o n t lpo ii n tsi g i c u ae,h ve g o y a i e f r a c n o r lp e ii n. r v he r tr i ii sto e tn s a c r t a a o d d n m c p ro m n e a d c nto r c so
第 3期 21 0 2年 3月
组 合 机 床 与 自 动 化 加 工 技 术
M o l a hi o du ar M c ne To l& Aut m atc M a f c u i g Te hn que o i nu a t r n c i
NO. 3 M ar .20 2 1
Pe m a e a ne ne r Sy hr o o o e v nt o y t m e i n Ba e n TM S3 0F2 2 r n ntM g t Li a nc on us M t r S r o Co r lS s e D sg s d o 2 81
c o e - o e v o t o y t m e i n i i h d・ x s c r n f s a o s s tt e z r n t e r t r fu - l s d-o p s r o c n r ls s e d s g n wh c ・ i ure to t t r i e o b e o i h o o l x- l a
基于TI2812DSP的无刷直流电动机控制软件设计
三江学院本科毕业设计(论文)题目基于TI2812 DSP的无刷直流电动机控制软件设计电气与自动化工程学院院电气工程及其自动化专业学号B05071006学生邢小强指导教师熊田忠起讫日期2009年2月23日至2009年5月25日设计地点L422摘要无刷直流电机既具有直流电机结构简单、运行可靠、维护方便等一系列优点,还具备交流电机运行效率高、无励磁损耗及调速性能好等诸多优点,现已广泛应用于工业控制的各个领域。
本文在对无刷直流电动机调速系统的发展及应用综述的基础上,介绍了采用DSP芯片对无刷直流电动机进行换向与转速控制的微机控制系统。
文中给出了系统的总体设计方案,分析了无刷直流电机的工作原理、控制电路、驱动电路,提出了软件控制无刷电机的策略。
阐述了软件框架的基本结构以及各个模块的具体设计方法。
文中还对DSP芯片(TMS320F2812)进行了一些介绍。
最后运用实际的硬件平台以及上位机软件(LabVIEW)对无刷直流电动机进行监控,证明了该系统工作良好,达到了预期目标。
关键词:无刷直流电动机,DSP芯片,软件控制AbstractBrushless DC motor with a DC motor is simple in structure, reliable operation, easy maintenance, such as a series of advantages, also has high efficiency AC motor run, no excitation loss and good speed, and many other advantages, has been widely used in various industrial controlfield.This article in the brushless DC motor speed control system overview of the development and application on the basis of the paper introduces the DSP chip on the exchange of brushless DC motor and speed control to the Microputer Control System. In this paper, the overall design of the system program, analysis of the brushless DC motor working principle, control circuit, driver circuit, a software strategy for brushless motor control. Framework set out the basic structure of software modules, as well as the specific design methods. The article also DSP Core (TMS320F2812) to introduce a number.Finally, the use of the actual hardware platform, as well as PC software (LabVIEW) for brushless DC motor control, show that the system is good, reaching the target.Keywords: brushless DC motor, DSP chips, Control Software目录第一章绪论- 1 -1.1 无刷直流电动机的发展现状- 1 -1.2 DSP与无刷直流电动机的联系- 2 -1.3 本文研究的容- 3 -第二章无刷电动机的结构及工作原理- 3 -2.1无刷直流电动机的结构- 3 -2.2无刷直流电动机的工作原理- 4 -第三章电机控制中的DSP的特点和选择- 6 -3.1 TMS320F2812的简介- 6 -3.2电机控制中的DSP的特点- 8 -3.3 DSP软件设计特点- 10 -3.3.1 DSP开发环境CCS2000- 10 -3.3.2 C语言与汇编语言的分析比较- 10 - 第四章电机控制中的DSP软件设计- 11 -4.1 各模块的程序及说明- 11 -4.1.1系统时钟的初始化模块- 11 -4.1.2 事件管理器EV的初始化模块- 12 -4.1.3 串行通讯SCI的初始化模块- 15 -4.1.4 输入捕捉(CAP)中断- 16 -4.1.5定时器T1- 19 -4.1.6 DSP与上位串口通信协议- 19 -4.2 DSP程序的总体框架- 21 -第五章结论及展望- 21 -5.1 结论- 21 -5.2 展望- 22 -参考文献- 22 -致- 23 -第一章绪论1.1 无刷直流电动机的发展现状直流电动机具有很多优点,如优秀的线性机械特性、宽的调速围、大的起动转矩、简单的控制电路等,长期以来一直广泛地应用在各种驱动装置和伺服系统中。
基于DSPTMS320F2812和DS18B20的温度测量系统设计
基于DSP TMS320F2812和DS18B20的温度测量系统设计摘要:本文介绍了一种基于TI公司DSP TMS320F2812 的高精度温度测量系统的设计。
该系统采用TMS320F2812为微处理器,配合高精度DS18B20数字温度传感器和外部扩展的模数转换器采集温度数据,并经过滤波算法处理控制输出,能够得到比较精确的温度值。
主要介绍了系统的结构、工作原理、软硬件的设计,并对系统设计的特点进行了详细的说明。
关键词: TMS320F2812;DS18B20;温度测量;模数转换1 概述温度在航空、航天领域中是个重要的物理量,由于温度变化对设备可能产生影响,包括降低系统的成像质量,影响分辨率,因此,在这些系统中对温度的实时采集测量十分重要。
以传统的单片机为核心的温度测量控制系统,由于受到处理器自身硬件资源和速度的限制,硬件电路设计复杂,数据实时处理能力差,温度测量时间长。
而随着计算机技术尤其是招超大规模集成电路技术的发展,具有更强处理能力的DSP芯片,以其运算速度快、实时性强、功耗低、抗干扰能力强等特点,越来越多地被应用。
采用了DS18B20数字温度传感器、外部扩展ADC模数转换器,使用内部集成外设功能的DSP TMS320F2812 微处理器作为整个系统的核心控制单元,简化了硬件电路设计;在温度采集控制软件上采用“通道滤波”温度采集控制算法,使得温度采集具有速度快、精度高的特点。
2 系统方案设计温度测量系统设计以DSP TMS320F2812为中央处理器为核心,采用DS18B20型号数字温度传感器为温度传感器,使用AD7892型号的ADC模数转换器进行A/D 转换,并将采集结果代入温度曲线方程计算出当前温度值,并且将温度值通过通信系统发送到上位机。
高精度温度测量控制系统由两大部分组成,第1部分为以DSP TMS320F2812为核心处理器的数据采集及处理部分,主要由产品温度环境、温度传感器、ADC模数转换器、DSP TMS320F2812、电源构成;第2部分由温度采集处理软件构成,完成对DSP采集到的数据进行分析、处理等任务。
基于TMS320F2812的无刷双馈电机控制器的设计与实现
组 , 电机 定 子 绕 组 极 对 数 为 P 而 的用 作 控 制 绕 组 ;
另 外 一种无 刷 双 馈 电机 是 单 电机 结 构 , 种 结 构 把 这
J N nqa g WU Q n —u ,S N H n — i JA G B I G We —i , igx n U o gf , I N o A n e
( col f l tcl nier ga dA t a o ,Taj nvr t, i j 00 2 hn ) S ho o e r a E g ei n uo t n i i U i sy Ta i 3 0 7 ,C ia E ci n n m i nn ei nn
第2 7卷
第 4期
天
津
理
工
大
学
学
报
Vo _ l27 No. 4 Aug 2 1 . 01
2 1 年 8月 01
J oURNAL 0F ANJ N TI I UNⅣ E I RS TY OF TECHNoLOGY
文章编号 :6 30 5 2 1 )4 0 3 — 5 17 —9 X(0 1 0 -0 2 0
基 于 T 30 2 1 MS 2 F 8 2的无 刷 双 馈 电机控 制 器 的设 计 与 实现
姜文 强, 吴庆 勋 , 孙红 飞 , 蒋 波
( 天津大学 电气 与 动化工程学院 ,天津 3 0 7 ) 0 0 2
摘 要 : 联 无刷 双馈 电机 以 其 无 电刷 所 带 来 的 系统 稳 定 性 的 提 高和 可 实现 变速 恒频 发 电 等优 点 , 逐 渐 成 为 大 功 级 而
近 年来 , 源 的 稀缺 和生 态 环 境 的 日益恶 化 让 无 资 污染 、 再生 、 持续发 展 的 能源成 为 世 界 各 国研 究 可 可 人员 关 注和 开发 、 利用 的重 点 , 双馈 电机 作 为 大功 率 风 力发 电 的未来 发展 趋势 也 因此 而得 到 了科研 人 员
基于TMS320F2812汽车动力控制系统的实现
电子点火系统和排放控制系统 。现在的电控 喷油 系统 己经实现
目前 国内企业与电喷系统 生产有关 的主要有两家 :一家是 了空燃 比闭环控制。采用空燃 比闭环控 制是基于降低废气有害 发动机运行时 , 混合气 在理论空燃 比附近一个很 上海的某汽车电子有 限公 司, 这是国内十几家企业联合起来 , 与 排放物考虑的。 窄 的范 围 内可 以实现 H C N x通过化学 作用转 化为 H 0 C、O、 O 2.
很 策权 , 所使用的电子产 品也 多由外方配套商提供 , 作为核心部分 业 都是借助 于博世 的技术支撑市场 , 难说 是中国的自主品牌。 的发 动机集 中控制系统尤其如此。 纵观发动机 电喷技术 , 中国市 发 动机 自动综合控制 系统技术 的国产化 已经刻不容缓 。 场几乎被博世 、 德尔福 、 西门子威迪 欧及 日本 电装这些厂商所垄
制。
参 考文 献
1张利平. 液压传 动系统及设计 【 】 M. : 北京 化学工业出版社 , 0 2 5 0 2范逸之.i a B s 与 R 2 2串行通讯控制【 】 Vs l ac u i S3 M. : 北京 中国青年出版
社 ,0 3 20
4 结束语
本 系统在原有液压实验台的基础上 ,采用先进 的数据采集 3周军 . 电气控制及 P CM . 京 : L [] 北 机械工业出版社 ,04 20
维普资讯
一
9 4一
窦 鹏 : 于 T 3 0 2 1 车动 力控 制 系统 的 实现 基 MS 2 F 8 2汽
机综合 控制 系统 的组成框图。
第 6期
C 2和 N , 而可以将有害排放 物减少 9 %以上 。 0 2从 8 其工作原理是 : 通过不断检测两状 态氧传感器( 氧传感器反
TMS320F2812在电机控制系统的应用
TMS320F2812在电机控制系统的应用1 引言在电机控制领域,TI公司推出2000系列电机控制DSP。
TMS320F2812属于最新高端产品,适合工业控制、机床控制等高精度应用。
目前2000系列芯片在电气传动中的应用以TMS320LF240x为主,应用TMS320F(C)28x的比较少。
但28x比24x系列的DSP具有更完备的外围控制接口和更丰富的电机控制外设电路,更高的主频,指令执行时间仅为6.67ns,流水线采样最高速率60ns,12位A/D转换通道16个,PWM输出通道12个。
资源足够同时控制两台三相电机,使控制系统价格大大降低而体积缩小、可靠性提高,可在高度集成的环境中实现高性能电机控制。
电机控制系统基本结构见图1,本文阐述基于TMS320F2812的DSP电机控制系统设计中的重点。
图1 电机控制系统结构原理图2 引导加载ROM引导加载是指器件复位时执行一段引导程序,一般用于从端口(异步串口、I/O口或HPI 主机接口)将EPROM/FLASH等非易失性存储器中加载程序到高速RAM 中。
2.1 TMS320 812的启动模式TMS320F2812提供了几种不同的启动模式,四个通用I/O引脚用于确定选择何种启动模式,如表1所示。
2.2 SCI SPI启动加载器通过SPI同步传输和SCI异步传输实现FLASHROM引导加载。
硬件电路见图2,JP15为SPI或SCI引导加载器选择,1—2时选择SPI,2—3时选择SCI;JP4是SPI数据传输路径的选择,位于1—2时,连接至外部扩展接口J6或串行ROM,位于2—3时连接至J5仿真数据传输接口。
图2 SCI SPI启动加载器3 A/D转换模块TMS320F2812电机控制芯片内部集成了16路12位A/D转换模块,模拟量信号采样输入范围是0~ 3.3V,16路A/D通道分为两组,AD0~AD7为一组,AD8~AD15为一组。
每组都有一个专门输入端。
基于TMS320F2812的逆变电源控制器的设计与研究
Байду номын сангаас
制器的硬件和软件设计 , 并对仿真结果进行分析总结。结果表明, 该 逆 变 电源 能 够 得 到 稳 定 的 正 弦 波 输 出
Z H AN G Q i a n ’ ,H U A N G X i a o - l i n , Y A N G Y o n g — l i ’ ( 1 . Wu h a n U n i v e r s i t y o fS c i e n c e a n d T e c h n o l o g y, Wu h a n 4 3 0 0 8 1 , C h i n a ; 2 . Hu b e i U n i v e r s i t y f o A u t o mo t i v e T e c h n o  ̄ y, g S h i y a n 4 4 2 0 0 0 ,C h i n a )
在 电 力 电 子 技 术 的 应 用 及 各 种 电源 系统 中 , 逆 变 电 源 技 术 均处 于 核心 地 位 l l - 2 1 。逆 变 电源 是 一 种 采 用 开 关 方 式 的 电能
变换 装 置 , 它从 交 流 或 直 流 输 入 获 得 稳 压 、 稳 频的交流输 出。 近年来 。 现代 逆变 电源越 来越 趋 向于高 频化 , 高 性能 , 模 块 化, 数字化和智能化 。 文 中 研 制 的 逆 变 电源 控 制 系统 以 T MS 3 2 0 F 2 8 1 2作 为 控 制核心 , 它 是一种支持 实时仿真 的 3 2位 微 控 制 器 [ 3 1 , 内 部 具 有 U A R T、 S C I 总 线 、 S P I 总线 、 P WM、 定 时器 、 A D C 、 C A N总 线
基于TMS320F2812的通用伺服电机控制系统的设计与实现
Sci ence and Techn Ogy OI Con suli g Her l tn ad
工 程 技 术
基于 T 3 0 2 MS 2 F 8 1 2的通用伺服 电机控制系统的设计与实现
李想 ( 中国电子科技集 团公 司第 5 研 究所 河北石家庄 4
1引言
目前 ,随 着 电 力 电子 技 术 ,微 电子 技 术 , 代控制理论 的发展 , 现 交流伺 服系统逐渐 成 为工业 伺服 系统 的主流 ,但在一 些特 定的 领域 内直 流伺服 系统 仍 占据着 主要地 位 。本 系统利用 T 3 0 2 l 实现 了直流 /交流伺 MS 2 F 8 2 服控制 系统的设计 。T 3 0 2 l 是 T 公 MS 2 F 8 2 I 司设计 的面 向工 业控制 领域 的数 字信号 处理 器, 适用于卫星天 线伺服系统 、工业控制、机 床控 制等高精度应用 。T 3 0 2 1 的最 高 M¥ 2 F 8 2 运行 频率可达 l 0 , 内有 l 8 r 5M 片 2 K wo d的 F A H程序 存储器 , 8 r L S l K wo d的数据 /程 序R AM。 包括 两个 8 通道或一 个 l 通 道的 l 6 2 位 A/ D转 换 器。两 个 串行 通讯接 口( C ) S I, 控制 器局 域 网络 ( CAN) 线 , 个独 立 的 总 两 SP V wM 发 生器 ;具有复 合 I E l4 . 标 准 E E 19 1 的在线仿真 接 K。采 用该 D P可 使本系统的 I S 硬 件 结 构 简单 ,控 制 精 度 高 ,实 时 性 强 。
一
_ -( 2 _ s x i - n O
电压 方程可表 示为
U = R i +缸 d+e o
基于TMS320F2812的多功能控制系统的实现
O 引 言
自从 2 0世 纪 7 0年 代 末 8 0年 代初 DS P芯 片 诞 生 以 来 ,它 得 到 了飞 速 的 发展 ,D P芯片 已经 在 信 号处 理 、 S 通信 、电动 机控 制等 诸 多领域 得 到 了广泛 的应 用 。T 公 I 司 最 新 推 出 的 T 302 1 MS 2 F 8 2数 字信 号 处 理器 是 目前 控
摘
要 :提 出 了一 种 以 TM S2 F 8 2微 处理 器 为 核 心 ,利 用 串行 通 信 接 口接 收 数 据 ,然 后 通 过 T S 2 F 8 2 30 21 M 30 2 1 对 数 据 进 行 分 析 、 处 理 、 提 取 和 存 储 , 实 现 对 步 进 电 机 与 直 流 电机 的 控 制 , 并 且 提 供 了软 件 程 序
设 计 流程 方 法 。经 观察 ,实验 得 到 的 结果 准 确 ,整 个设 备 运行 稳 定 可靠 ,同 时具备 了很 高 的 实时
性 。
关 键 词 :DS ; 串 口 ;TM S2 F 8 2; 电机 控 制 P 30 21
中图 分类 号 :T 3 P9
文献 标 识码 :A d i 03 6 /. s.0 2 6 7 .0 1 50 3 o: .9 9j sn10 - 6 32 1 . . 1 i 0 4
A b t a t i st ei ar tsho t ein a mudf ci a o r ls se ae n DS TM S 2 2 2 w hc r d td b orc - sr c :Th h ssn rae w o d sg l un t on lc nto ytm b s d o P 3 0F 81 ih p o uce y TIf on
基于TMS320F2812的无传感器无刷直流电机控制器设计
度以及较强的运算能力 ,可以实现无刷 电机高精
度 、高效 率 的全数 字化 控制 。
机 的控制 ,有些采用单片机加专用控制芯片来控 制 ,虽降低 了控制 的复 杂性 和控制系统 的成本 , 但单片机的指令功能不强 ,数据转换速度慢 ,尤
其 是 对 于 无位 置 传 感 器 的无 刷 电机 ,还 需 检 测 电
s t r uc t u r e . I t h a s b e c u p r o v e d r e l i a b l e o p e r a t i o n o f t h e c o n t r o l l e r . T h e s y s t e m h a s b r o a d a p p l i c a t i o n p r o s p e c t s .
用T MS 3 2 0 F 2 8 1 2 处 理 器 为 中心 ,搭 建 了无 刷 电机 的双 闭环 ( 电流 、速度 ) 数字 化控 制平 台。
收稿 日 期 :2 0 1 2 —1 2 — 2 6
摘要 :提供 了一种 基于T M S 3 2 0 F 2 8 1 2 芯片的无传感器无刷直流电机控制器 ,设计 了转速 、电流双闭环数字化控制平 台,实现 了
无传 感器的无刷直流 电机 的平稳运行 。同时详 细地介 绍了该 系统的硬件 、软件构成。试验证明 ,该控制器运行稳定可靠 。该系 统具 有广泛的应用前景。 关键 词 :D S P ;无刷直流 电机 ;P WM;双闭环 中图分类号 :T P 3 3 2 文献标识码 :A 文章编号 :1 0 0 9—9 4 9 2( 2 0 1 3 ) 0 6—0 0 3 5—0 5
工业 自
D OI : 1 0 . 3 9 6 9/ j . i s s n . 1 0 0 9 - 9 4 9 2 . 2 0 1 3 . 0 6 . 0 1 0
基于TMS320F2812DSP的开关磁阻电机直接数字控制系统设计
eag le i w an@ 163. co m。
4期
王伟炳等 : 基于 TM S320F2812DSP 的开关磁阻电机直接数字控制系统设计
51
阈值 U c 时, 开通 SCR, 主电路电流从 SCR 流过。
2 SRD 软件系统设计
2 1 系统框图 基于 TM S320F2812 DSP 的 SR 电机控制 系统中 CAP模块输入转子位置信号; PG 端口读入系统控制 命令 , 如设定正反转命令、转速、开通角、关断角, 显示等命令; A /D 模块对相绕组电流检测, 其输出 信号送至功率驱动保护中断 PDP I NT, 当过流时封锁 P WM 输出, 以进行限流保护; SP I 模块输出系统运 行状 态, 如显示 设定的 转速、当 前转速、开通 角、 关断角; PWM 模 块输出 IGBT 栅 极驱动 控制信 号, 本实验中选用 PWM 1~ P WM 6接口控制信号。 2 2 开通角、 关断角调节 定时器 T 4 比较中断用于运行时开通角、关断角 动作控制 , 具体控制如图 4所示。
[ 4]
徐艳平 , 曾光 , 孙向东 . 永磁同步 电机的直接转 矩控制的研究 [ J] . 电力电子技术 , 2003 ( 6) : 15 - 17 .
[ 5]
李建超 , 安群涛, 赵克 , 等 . 一种基于 SVPWM 的永磁同步电动机 直接转矩控制系统仿 真实验研究 [ J]. 微电 机, 2008 , 41 ( 4 ): 9 - 11 .
[ 1]
1 SRD 硬件系统设计
SRD 主电路功率变换器拓扑结构采用不对称半 桥结构, 主开关器件选用绝缘栅晶体管 ( IGBT )、位 置及速度检测选用光电开关进行检测, 并以数字测 速法 T /M 法进行速度测量。 1 1 SRD 功率变换器拓扑结构 功率变换器不对称半桥如图 1 所示 ( 一相绕组 ), 图中电阻 R v 、晶闸管 SCR 构成主电路限流保护辅助 电路。当开关 K 闭合瞬间交流电源加至整流器两端, 输出直流电压 Ud 瞬间达到最大, 电容 C 呈直通状态, 电容电流非常大。 R v、 SCR 保护辅助电路作用为: 当 电容 C 电压低于一定阈值 U c 时, 关断 SCR, 限流电 阻接入主电路起到限流作用; 当电容 C 电压高于一定
基于TMS320F2812无刷直流电机控制系统设计
中 图分 类 号 : M3 , P 7 T 3T 23
文献标识码 : A
文 章 编 号 :0 6 6 7 ( 0 8 1 — 0 7 0 10 — 9 7 2 0 )1 0 l— 3
电路 以及 保 护 电路 设 计 : 出相 应 的 硬 件 电路 。该 系统 采 用 三 环 控 制 。其 中 , 置 环 采 用 P 调 节 器 ; 度 环 采 用 参 数 给 位 【 速 自整 定模 糊 PD控 制 ; I 电流 环 采 用 电流 滞 环 控 制 。该 设 计 方 案 电路 简单 , 靠 性 强 , 有 较 高的 应 用价 值 。同 时 , 可 具 实验 结果 也 验 证 了 该 方 法 的 有 效性
adaF z I ot l r i e —dut gprm tr i ao t ntesedotropa dac r n ytrs O — n uz PD cnr l t slajsn aa ees s dpe i p e ue l n u e t s ei CD y oe w h f i d h o h e s t l r s dpe ec r n inropT i ds npoet aeat io s l crut t n lbly n iha — r l o t i t ur tn e o .h ei rjc hv at f i e i i、r gr i it a dah p oe ia dnh e l s g r mp c s o e a i g
《 国外 电子元器 件}08年 第 1 期 20 1
测 控 与 仪 器 仪 表
基于TMS320F2812的智能电动执行器控制系统设计
3 h n zo n tueo c arnc n ie r g Ch n z o 1 14, hn ) .C a gh u Isi t fMe h to isE gn ei , a gh u2 3 6 C ia t n
并给 出 了软件 设计 方 法 , 出 了直流 无刷 电机 速度 调 节和 阀 门4  ̄ * 独 立控 制 的策 略 。初 步 实验 结 提 AK , I
果表 明 : 所提 出的控 制 策略 能 够使 阀 门平稳 、 靠的运行 , 可 实现 了阀 门位置 的精 确控 制 。
关键 词 :MS 2 F 8 2 速度 调 节 ; 置控 制 T 30 2 1 ; 位 中图分类 号 :P 7 . 文献 标 识码 : T23 1 A 文章 编 号 :0 0—8 2 (0 0 1 0 5 0 10 8 9 2 1 )0— 0 5— 4
vd d. e h r wa ec r uto o to y tm sd sg e nd t e s f r e i n a r a h i ie . e c n r l i e Th a d r ic i fc n r ls se i e i n d a h o wa e d sg pp o c sgv n On o to t sr t g b u h p e fb us ls t ra d t o iin o av o to n e e d n l sp s d. e r - tae y a o tt e s e d o r h e sDC moo n hep sto fv l ec n r li d p n e ty i o e Th e
高性能DSP芯片TMS320F2812在电机控制器中的应用
常丰 富 ,可 大 大 简 化 外 围 电路 设 计 。 其 主要 资源 和性 能指标 如下 : ()它是 C 0 0 1 2 0 系列 中性 能 最 高 的
()2 x L 4 系列 D P 有更 完 备的 外 C 8  ̄2 x S具
8 2 电 子 元 嚣 件 焘 用 2 0 . w wC i E Dnt 0 6 w .hn C . 8 a e
T 3 0 F 4 x 为 主 , 介 绍 应 用 MS 2 L 2 0 T 3 0 ()2 x 比 较 少 。T 3 0 M¥ 2 F C 8 的 M¥ 2 F
电 机 控 制 系 统 结 构 原 理 围 及 各 组 成 部 分 的简 单 介 绍
电机 控 制 系统 的结 构 原 理 图如 图
的主要 性 能及体 系结构 ,讨论 了电机控 制 器的 引导加 载RoM 、A D转换 单 元 、传 感 器接 口 、C L P D等 外设 电路 的技 术 关键 。说 明 了T 3 0 2 1 在 MS 2 F 82
电机 直接转 矩控 制 系统 中的应 用方 法。
关 键 词 : 电 机 ;控 制 器 ;T S 2 F 82 片 ;DS M 302 1芯 P
图 1 电 机 控 制 系 统 结构 原 理 图
维普资讯
维普资讯
AP PLI CATI NS o
中。
应 用
主 电路 及 光 电 编 码 转 速 检 测 电 路 、
◇ 与传 感器 的接 口
()霍 尔位 置 传 感 器 1
D P 要两 到 三 个AD 道 对 传感 心 的 直 接 转 矩 控 制 系 统 ,本 系 统 结 构 母 板 上 ,控制 箱 从外 界 引入 电源对 母 S需 信 器 电 流进 行 采集 获得 三 个相 电流 。霍 简 单 可 靠 、控 制 精 度 高 、 动 态 响 应 板 上 的 各 个 电 路 板 供 电 同 时 各 个 电 尔 电流 传 感 器 采 集 的是 模 拟 量 信 号 , 快 ,是 高效 的交流 调 速控 制 系统 。其 路 板 上 的相关 信 号 可 以通过 母 板从 控 所示 。 需 要 注 意 的 是 要 防 止 相 电 流 过 高 造 成 方框 图如 图3 对 D P 冲击 损 坏 。我 们 的做 法 是 双 S的 重 保护 ,即信 号经 过RC 滤波 后连 接 至
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于TMS320F2812的无刷直流电机控制以前一个项目里有一部分是使用2812控制无刷直流电机,这里分享一下软硬件设计和程序代码:1.无刷直流电机的结构和换相原理无刷直流电机的本体在结构上与永磁同步电动机相似,但没有笼型绕组和其他启动装置。
其转子采用永磁材料制成,而定子上有多相电枢绕组,绕组相数分为两相、三相、四相和五相,但应用最多的是三相和四相。
各相绕组分别与外部的电力电子开关电路中相应的功率开关器件连接,位置传感器的跟踪转子与电动机转轴相连接。
当定子绕组的某一相通电时,该相电流与转子永久磁钢的磁极所产生的磁场相互作用产生转矩,驱动转子旋转,再由位置传感器将转子位置变换成电信号去控制电力电子开关电路,从而使定子各相绕组按一定次序导通,定子相电流随转子位置的变化而按一定的次序换相,这就是直流无刷电动机的换流原理。
由于电力电子开关电路的导通次序是与转子转角同步的,因而起到了机械换相器的换相作用。
基于TMS320F2812的无刷直流电机控制系统结构图如图1所示。
图1中,直流电源通过开关电路相电动机定子绕组供电,位置传感器采用了霍尔传感器,可不断检测转子当前位置,DSP控制器根据当前位置信息来判断哪一相绕组被接通,进而控制开关管的导通与截止,实现电机的换相。
直流无刷电动机控制系统结构图1 图2 电子换相器的工作原理图图图2给出了一个三相无刷直流电机电子换相原理图。
图中符号H1、H2和H3表示三个霍尔位置传感器,它们输出电平信号。
当电机的转子运行到x-u平面的正半周(图中虚线标出的区间),则H1传感器输出高电平。
同理,当电机的转子分别运行到y-v和z-w,平面的正半周(图中虚线标出的区间),则对应的H2和H3分别输出高电平。
由图可见,H1、H2和H3输出高电平的区间是互有重叠的,如果将H1、H2和H3的输出电平组合成一个向量[H1 H2 H3],则可以得到6种有效组合:[001]、[010]、[011]、[100]、[110]和[101],每种组合覆盖整个圆周的1/6(即60°)。
控制器根据这六个状态组合来决定开关电路的哪一相被接通以维持电机的运行,当状态发生变化时,就必须进行相位的切换。
对于电机的三相绕组,A、B和C,采用ANC表示直流母线电压施加到A-C绕组之间;CNA则表示直流母线电压施加到C-A绕组之间,其他类似。
注意ANC电流从A→C,而CAN电流从C→A,作为直流电机,绕组电流相反意味着受力是相反的,会导致电机反向转动。
图3给出了6种状态组合下对应的通电绕组的情况,例如在状态[001]通电绕组是ANB。
如果电机正转,则下一个组合状态为[101],故应将通电绕组切换为ANC;同理,如果电机反转,则下一个组合状态为[101],故通电绕组应该切换为CNB,以次类推。
表1给出了电机正向旋转时,转子位置传感器输出的状态组合[H1 H2 H3] 给出了电机反转时的情况。
2与下一个导通绕组之间的对应关系。
表.表2 无刷直流电机反转相序表2.三相无刷直流电机的DSP控制图3给出了本设计中采用的基于TMS320F2812A和三相全桥开关电路构成的无刷直流电机控制器的原理图。
在无刷直流电机内部空间间隔120°分布的三个霍尔传感器H1、H2和H3的输出信号经整形隔离电路后分别与TMS320F2812时间管理器EV A的三个捕获引脚CAP1/IOPA3,CAP2/IOPA4和CAP3/IOPA5相连,当[H1 H2 H3]状态组合发生变化的时候,将触发捕获单元的中断,在中断服务程序内,DSP读取当前[H1 H2 H3]的状态,根据表1和表2内列出的导通相顺序对全桥电路进行控制,从而实现换相。
例如,当[H1 H2 H3]被读取的当前状态为101时,在正转的情况下,应该选择下一个导通相为BNC。
这就意味着在图3中,要控制开关V4、V5导通,这样直流母线电压就施加到B-C绕组之间(直流电流从B绕组流向C绕组);如果控制反转,则应该选择下一个导通相为ANB,这需要控制V2和V3导通。
图3中三相全桥主电路采用3片IR公司的MOSFET器件TRF7317来构成,TRF7317内部有两个MOSFET的开关,一个NMOS和一个PMOS,其中NMOS 用于构成桥臂的下管,而PMOS则用于构成桥臂的上管,由于是12V的电机控制系统,这种配置使得驱动电路比较简单。
三相全桥电路每个桥路的上下两个开关是不能同时导通的,否则会引起直通短路。
MOSFET的开关控制通过DSP的EV A单元的输出PWM1-PWM6来实现,图3中给出了PWM1和PWM2同时发出高电平脉冲导致经过几级逻辑转换变成互相反相的控制脉冲V1和V2,由于V1控制NMOS,而V2控制PMOS,故两管都会导通引起直通短路。
总之,PWM1-PWM6独立控制三相全桥的6个MOSFET,并且高电平控制导通,而低电平控制截止,为了防止直流短路,不允许出现同一个桥臂上下两管的控制脉冲同时为高电平的情况。
3.PWM信号实现电机调速的原理无刷直流电机的转速控制是通过控制施加到三相绕组上的直流电压的大小来实现的,为了实现转速的变化,就需要通过三相全桥开关电路产生可变的直流电压,这将通过脉宽调制原理(PWM)来实现。
PWM信号是一系列周期固定、脉宽可变的脉冲电压,这些脉冲信号的平均值的大小取决于其占空比,这个固定周期称为PWM的载波周期。
将PWM脉冲信号施加到三相全桥电路,其输出电压作用于一个惯性设备(如一个LC滤波器或者电机等),则控制作用只取决于平均电压的大小(惯性设备于是,信号的占空比来控制的。
PWM而此平均电压正是由,类似于一个低通滤波器).不断修改PWM信号的脉冲宽度即可控制平均电压的大小,进而不断控制直流电机的转速。
在直流无刷电动机控制中,两个功率器件(上级和下级)被串联放在一个功率转换支路中,为了避免击穿失效,两个器件的打开周期必须不能重叠,这样就经常需要一对非重叠的PWM输出来正确地开关这两个器件。
在一个三极管的关断和另一个三极管导通之间插入一段死区,这段时间延迟允许一个三极管在别的三极管导通之前完全关断。
这个所需的延迟时间由功率三极管的开关特性和特定应用中的负载特性来决定的。
4.软件设计软件采用模块化设计,主要有以下5个模块组成:换相及转向控制模块、转速控制模块、转速测量模块、键盘控制模块和液晶显示模块。
实现了无刷直流电机的闭环PID控制,主程序流程图如图4所示。
控制主程序流程图4 闭环PID图4.1换相及转向控制相控制是通过不断检测无刷直流电机的转子位置,然后按照预先安排的相序表动态控制三相全桥开关的导通及关断,从而使电机能够连续运行。
转向控制则通过更换相序表来实现。
程序设计步骤如下:配置系统时钟和外设时钟,初始化中断向量表和中断控制寄存器。
)1(.(2)配置GPIOA的多路转换器寄存器GPAMUX,使PWM1~PWM6作为PWM 控制引脚,CAP1~CAP3作为捕获单元输入引脚。
(3)初始化EV A的通用定时器T1,设置PWM载波周期(通过T1PR)和初始占空比(通过比较寄存器CMP1、CMP2、CMP3设置初始占空比为50%),设置比较控制寄存器COMCONA使能全比较操作,但暂不启动定时器T1。
(4)配置CAP1~CAP3的捕获中断为上下沿跳变触发方式。
(5)检测CAP1~CAP3引脚的当前状态,判断当前电机转子的空间位置,根据转向要求选择合适的初始控制相序并据此配置ACTRA寄存器,然后启动定时器T1并开放中断。
(6)主程序进入等待状态。
(7)创建捕获中断的中断服务程序,在中断服务程序中实时检测当前电机转子的空间位置,然后根据转向要求和预先安排的相序表选择合适的开关控制时序,并动态控制ACTRA寄存器,使得电机能够连续运行。
流程图如图5所示:换相及转向控制流程图5 图转速测量4.2.转速的测量可以通过在标准的定时时间间隔内对换相控制的次数进行统计来实现。
由于所用的电机转一圈换相6次,故设置定时器T2定时0.1s,在此定时时间内换相次数记为N,则转速即为100N/min。
流程图如下图6示:6 转速测量程序流程图图4.3键盘控制与液晶显示键盘程序流程图图7键盘则用于设定给定转速。
其程序流程图如图7所示。
液晶显示主要分为两部分:说明文字的显示及参数值的显示。
无论是文字还是参数值的显示,都需要生成16进制代码,利用字模软件zimo221生成,取字模时选择“纵向取模,字节倒序”。
然后调用相关函数即可将其显示出来。
程序设计步骤如下所示:(1)进行初始化,清屏(2)显示“转速:”(3)实时显示参数值(转速、占空比)流程图如下图8所示:8 液晶显示流程图图5.硬件设备本设计采用的主要设备包括:(1)12W无刷直流电动机FL57BLS005-12V;(2)MOTOR-E背板,该背板包括驱动无刷直流电机的三相全桥开关电路、霍尔传感器输出信号的整形和隔离电路以及来自TMS320F2812的6个PWM控制信号(PWM1~PWM6)的隔离和驱动电路;(3)TMS320F2812开发板;(4)LPS-305型可调线型稳压电源,调试过程调节此电源输出+12V,输出限流值1.5A,用于为无刷直流电机供电。
由于在调试中会频繁出现短路情况,故采用带输出限流保护的电源,以限制短路时过流引起MOSFET损坏的问题。
6.总结本设计以TMS320F2812 DSP芯片为核心,来实现对无刷直流电机的PID控制,可以控制电机自动加减速,自动换向,测量转速值并实时显示在液晶屏上。
.本系统采用CCS编程,利用PWM信号实现电机调速,开关主电路同一相上下桥臂PWM波形如图9所示。
图9 同一相上下桥臂PWM波形图调试中遇到了不少问题,主要如下:(1)电机不能自行启动,需要用手拨一下才能转起来。
解决办法:增大初始占空比,但不能过大,否则会导致过流。
(2)如何实时显示转速值?解决办法:将0~9十个数字的字模放入一个10维的数组,分别求出测得转速值的各位上的数字并分别调用显示函数,将各位数字分别显示出来,即可实现转速的实时显示。
(3)实时检测到的电机转速精度不够,只显示到了百位。
解决办法:这是由于T1的计时周期设为了0.1s,更改了CPU时钟周期,同时更改了与定时器时钟有关的寄存器以后,可显示到个位。
.附:源程序代码#include DSP281x_Device.h // DSP281x Headerfile Include File#include DSP281x_Examples.h // DSP281x Examples Include Fileinterrupt void CAPINT_ISR(void);interrupt void T2_ISR(void);void InitEv(void);void HallDrv(void);Uint16 hall_status=0x0000;Uint16 hall;Uint16 direction; //电动机转动方向指示,0为正转,1为反转Uint16 direc; //拨码开关1,位置在上为0,在下为1Uint32 counter=0; //换相数Uint32 speed=0; //实际速度int16 givespeed=0; //给定速度int32 Espeed=0; //速度差值Uint16 null,keycode,key;int16 Duty;Uint16 watchduty=0; //占空比float Kp=0; //PID参数float Ki=0;float Kd=0;float Last=0; //传递上次变量float LLast=0; //传递上上次变量float PidResult=0;#define DIPS (*((unsigned int *)0xc0001)) //定义拨码开关寄存器地址和类型#define CTRKEY (*((unsigned int *)0x108001)) //定义键盘数据回读寄存器地址#define Period 0x0753 //载波周期main(){InitSysCtrl(); //初始化DSP运行时钟InitPieCtrl(); //初始化pie寄存器DINT; //关总中断IER=0x0000; //禁止所有的中断IFR=0x0000; //清除所有的CPU级中断请求标志InitPieVectTable(); //初始化PIE中断向量表InitEv(); //初始化EV A模块EALLOW;PieVectTable.CAPINT1=&CAPINT_ISR; //将捕获单元的中断服务程序入口地址填写到PIE向量表中PieVectTable.CAPINT2=&CAPINT_ISR;PieVectTable.CAPINT3=&CAPINT_ISR;PieVectTable.T2PINT=&T2_ISR; //将T2的中断服务程序入口地址填写到PIE向量表中EDIS;EvaRegs.EVAIFRC.all=0xFFFF; // EVA 中断标志复位EvaRegs.EVAIFRB.all=0xFFFF;EvaRegs.EVAIMRC.all=0x0007; // 使能CAP1,2,3双沿中断(换向) ,外设级EvaRegs.EVAIMRB.all=0x0001; // 使能T2周期匹配中断,外设级//使能PIE中组3的第1,5,6,7个中断PieCtrlRegs.PIEIER3.bit.INTx5=1; //CAPINT1PieCtrlRegs.PIEIER3.bit.INTx6=1; //CAPINT2PieCtrlRegs.PIEIER3.bit.INTx7=1; //CAPINT3. . .PieCtrlRegs.PIEIER3.bit.INTx1=1; //T2PINTdirec=DIPS;direction=direc&0x0001;HallDrv();Kp= ;Ki= ;Kd= ; //初始化PID参数givespeed=3000;IER|=M_INT3; //使能EVA对应的CPU级中断请求INT3EINT; //使能全局中断ERTM;EvaRegs.T1CON.bit.TENABLE=1; //启动定时器T1EvaRegs.T2CON.bit.TENABLE=1; //启动定时器T2PieCtrlRegs.PIEACK.all=PIEACK_GROUP3; //允许CPU对PIE中断请求进行响应Lcd_Init(); //LCD初始化LcdClear(); //LCD清屏LcdWrite(); //LCD写入//等待中断while(1){keycode=CTRKEY; //读键盘码null=CTRLCDCR; //清键码锁存器key=keycode&0x00FF;switch(key){case 1: givespeed++; break; //键盘按键1按下,则给定转速增加1r/mincase 2: givespeed--; break; //键盘按键2按下,则给定转速减小1r/mincase 3: givespeed+=10; break; //键盘按键3按下,则给定转速增加10r/mincase 4: givespeed-=10; break; //键盘按键4按下,则给定转速减小10r/mincase 5: givespeed+=100; break; //键盘按键5按下,则给定转速增加100r/mincase 6: givespeed-=100; break; //键盘按键6按下,则给定转速减小100r/mincase 7: givespeed+=1000; break; //键盘按键7按下,则给定转速增加1000r/mincase 8: givespeed-=1000; break; //键盘按键8按下,则给定转速减小1000r/mindefault: break;}if(givespeed<0){givespeed=0;}if(givespeed>=10000){givespeed=9999;}PutValue(72,17,givespeed); //显示给定速度PutValue(72,33,speed); //显示实际速度watchduty=(Uint16)((1-(float)Duty/Period)*100);PutValue(72,49,watchduty); //显示占空比}}void InitEv(void){EALLOW;GpioMuxRegs.GPAMUX.all=0xFFFF; //设定EVA的引脚为外设EDIS;EvaRegs.T1CON.all=0x0804; //连续增/减计数模式,暂不启动定时器T1的运行EvaRegs.T1PR=0x0753; //设置T1定时器的周期寄存器值EvaRegs.T1CNT=0x0000; //清零T1定时器的计数寄存器EvaRegs.ACTRA.all=0x0000; //PWM1~PWM6强制低,在换向程序中再更改EvaRegs.ACTRA.all=0x0000; // pwm1~pwm6 强制低; 在换向程序中需再更改//EvaRegs.DBTCONA.all=0x0170; //死区设为1个CPU时钟周期. . .CONA.all=0xA6E0; //使能全比较单元,在周期和下溢时重载EvaRegs.CMPR1=0x0521; //初始占空比30%EvaRegs.CMPR2=0x0521; //初始占空比30%EvaRegs.CMPR3=0x0521; //初始占空比30%EvaRegs.CAPCONA.all=0x36FC; //选定时器1,使能CAP1,2,3,检测两个边沿EvaRegs.CAPFIFOA.all=0x0000; //清空FIFOEvaRegs.T2CON.all=0x1704; //连续增计数模式,暂不启动定时器T2EvaRegs.T2PR=0xE4E2; //每100ms中断一次EvaRegs.T2CNT=0x0000;}void HallDrv(void){hall=GpioDataRegs.GPADAT.all;hall_status=hall&0x0700; //检测CAP1~CAP3引脚的当前状态if(direction==0) //正转换向switch(hall_status){case 0x0500: EvaRegs.ACTRA.all=0x0038; break; // PWM2/PWM3 101→ANBcase 0x0100: EvaRegs.ACTRA.all=0x0830; break; // PWM6/PWM3 001→ANCcase 0x0300: EvaRegs.ACTRA.all=0x0803; break; // PWM6/PWM1 011→CNAcase 0x0200: EvaRegs.ACTRA.all=0x0083; break; // PWM4/PWM1 010→CNBcase 0x0600: EvaRegs.ACTRA.all=0x0380; break; // PWM4/PWM5 110→BNCcase 0x0400: EvaRegs.ACTRA.all=0x0308; break; // PWM2/PWM5 100→ANCdefault: break;}else //反转换向switch(hall_status){case 0x0100: EvaRegs.ACTRA.all=0x0380; break; // PWM4/PWM5 001→ANCcase 0x0500: EvaRegs.ACTRA.all=0x0083; break; // PWM4/PWM1 101→BNCcase 0x0400: EvaRegs.ACTRA.all=0x0803; break; // PWM6/PWM1 100→BNAcase 0x0600: EvaRegs.ACTRA.all=0x0830; break; // PWM6/PWM3 110→CNAcase 0x0200: EvaRegs.ACTRA.all=0x0038; break; // PWM2/PWM3 010→CNBcase 0x0300: EvaRegs.ACTRA.all=0x0308; break; // PWM2/PWM5 011→ANBdefault: break;}}interrupt void CAPINT_ISR(void){direc=DIPS;direction=direc&0x0001;HallDrv();if(counter>1000) {counter=0;}else counter++; //对中断次数累加,得到换相数以计算转速EvaRegs.EVAIFRC.all=0xFFFF; //EVA中断标志复位PieCtrlRegs.PIEACK.all=PIEACK_GROUP3; //允许CPU对下次PIE中断请求进行响应}interrupt void T2_ISR(void){speed=100*counter; //计算实际转速值:counter/6×600Espeed=givespeed/100-counter; //速度差值PidResult=Kp*(Espeed-Last)+Ki*Espeed+Kd*(Espeed-2*Last+LLast); //增量式PID计算LLast=Last;. . .Last=Espeed;Duty-=PidResult;if(Duty<0) Duty=0; //幅度限制else if(Duty>Period) Duty=Period;EvaRegs.CMPR1=EvaRegs.CMPR2=EvaRegs.CMPR3=Duty; //根据PID结果更新比较值counter=0; //将换相数清零EvaRegs.EVAIFRB.all=0xFFFF; // EVA 中断标志复位PieCtrlRegs.PIEACK.all=PIEACK_GROUP3; //允许CPU对下次PIE中断请求进行响应return;}. . .。