电机控制的DSP程序设计及CAN基础知识姓名:叶振锋时间:2009年3月26日公司:上海电驱动有限公司主要内容概述DSP芯片简介电机控制系统结构图电机控制系统程序需求分析电机控制系统动态结构图电机控制系统程序流程图电机控制系统程序设计子程序模块设计说明软件设计与调试注意事项CAN基础知识概述1.电机控制技术的实现方案(1).传统模拟控制(2).微控制器(MCU)控制(3).数字信号处理器(DSP)控制概述2.DSP实现的PMSM控制系统结构图电流、转矩、速度关系PMSMClark变换-电流PI调节位置信号处理Park变换电流PI调节Park逆变换aibiSiSiIPM模块SVPWMDCVSdrefVSqrefVrefSVrefSVSqrefiSdrefi-TorqSetDby转速计算nSdiSqi概述3.DSP实现的电机控制系统特点(1).DSP的高速计算能力,可以完成复杂的信号处理和控制算法,提高采样频率,控制电力电子外围设备,在此基础上可实现电机的高性能控制。(2).电机控制专用DSP丰富的外围功能模块,为电机控制带来了许多的便利。如PWM模块,可产生高分辨率的PWM波形,灵活的产生方式可减小EMI和噪音问题,多路PWM输出可以进行多电机控制。(3).丰富的第三方软硬件资源和开发工具可大大简化系统开发过程概述4.DSP技术在电机控制的应用情况常用交流电机控制系统有如下几种:(1).异步电机(2).电励磁同步电机隐极同步机;凸极同步机(3).永磁电机永磁无刷直流电动机;永磁同步电动机(4).其他特种电机开关磁阻电机;步进电机概述5.主要相关技术发展情况(1).半导体功率器件小型化、智能化、高频化、高效化。(2).数字信号处理器DSP外围功能、数据处理能力、存储器容量等发展迅速,为电机控制系统的高性能化、智能化提供了基础。(3).电机控制理论电机控制策略、状态观测器、滤波器、自适应控制、无传感器控制、PWM调制方法、死区补偿等技术的应用大大提高了电机控制系统的性能和可靠性。概述6.电机控制理论-控制策略的发展张博士的讲座中已做了非常详细的说明了。概述7.先修课程模拟电路数字电路微机原理单片机自动控制原理电力电子器件电机拖动DSP芯片简介1.TMS320LF2407A的特征CMOS技术,3.3V供电,最快指令周期25ns,最大主频40MHZ。和TMS320系列DSP代码兼容。片内程序存储器32KFlash、544字的双口RAM、2K字的单口RAM两个事件管理模块EVA、EVB可扩展的外部存储器:192K字看门狗定时器模块(WDT)10位A/D转换器最小转换时间500ns控制器局域网络(CAN)2.0B模块。串行通信接口(SCI)16位串行外设接口模块(SPI)基于锁相环的时钟发生器40个I/O口5个外部中断DSP芯片简介2.DSP的性能DSP性能公式:CPU时间=CPI×IC/时钟频率三个参数反映了与体系结构相关的三种技术。(1).时钟频率反映了DSP实现技术、生产工艺和计算机组织。(2).CPI是指令时钟数,反映了DSP实现技术、计算机指令集的结构和计算机组织。(3).IC是程序执行过程中所处理的指令数,反映了DSP指令集的结构和编译术。从目前情况来看,提高某一个参数指标,不会明显地影响其它两个指标。这对于综合运用各种技术改进计算机系统的性能是非常有益的。电机控制系统结构框图PMSM旋转变码器IPMTMS320LF2407A电流检测温度检测电压检测PCA82C250直流电源系统电源HCPL060光隔SPI接口有源晶振HCPL060SN65176B485通讯接口CAN总线通讯接口本电机控制系统采用单DSP系统的架构,结构框图如下图所示。控制系统程序需求分析1.控制对象及输入输出量1.1.控制对象永磁电机1.2.输入量直流母线电流、直流母线电压、A相电流、C相电流、电机温度、逆变器温度、电机转子位置信号1.3.输出量六路PWM信号、故障信号2.资源需求I/O口、AD采样端口、芯片存储器容量等等电机控制系统程序需求分析3.时钟频率晶振、系统时钟、外围时钟、PWM频率等4.AD采样精度分析结合硬件进行分析5.通信说明通信方式、通信目的。还包含波特率、数据格式等其它说明电机控制系统结构图电流、转矩、速度关系PMSMClark变换-电流PI调节位置信号处理Park变换电流PI调节Park逆变换aibiSiSiIPM模块SVPWMDCVSdrefVSqrefVrefSVrefSVSqrefiSdrefi-TorqSetDby转速计算nSdiSqi电机控制系统程序流程图主程序开始系统初始化子程序SysInitSub()启动故障清除子程序StartErrClearSub()程序变量初始化子程序VariableInitSub()SPI模块初始化子程序SpiInitSub()SCI模块初始化子程序SciInitSub()CAN模块初始化子程序CanInitSub()旋变复位子程序RevolveResetSub()开总中断INTM=020ms时间Time20msFby=1NYYNN故障复位信号标志ErrResetFby=0YYNCAN接收子程序CanRxdSub()CAN发送子程序一CanTxdOneSub()SCI发送子程序SciTxdSub()Sci接收子程序SciRxdSub()100ms时间Time100msFby=11s时间Time1sFby=1故障信号复位子程序ErrResetSub()CAN发送子程序三CanTxdThreeSub()CAN发送子程序二CanTxdTwoSub()SCI发送数据计算子程序SciTxdDataComputeSub()DC电源故障检查子程序DcErrCheckSub()高压短路故障检查子程序HvShortCircuitCheckSub()转矩设定值MotorTorqSetDby=01.主程序流程图电机控制系统程序流程图AD中断子程序开始电机运行使能MotorRunEnableFby=1NY禁止中断INTM=1;保护现场;清除中断标志;AD采样数据读取子程序AdSampleReadSub()系统计时子程序SysTimeCntSub()DC电源检测子程序DcPowerCheckSub()旋变信号读取子程序RevolveSignalReadSub()模块故障检测子程序IpmErrCheckSub()电机转速计算子程序MotorSpeedCalculateSub()正弦余弦值计算子程序SinCosCalculateSub()Clark变换子程序ClarkSub()Park变换子程序ParkSub()系统信号反馈子程序SysSignalFeedbackSub()RevolveSignalReadSub()SinCosCalculateSub()Park逆变换子程序ParkInvertSub()SVPWM子程序SvpwmSub()系统运行故障SysRunErrFby=1AD中断子程序结束转矩设定值MotorTorqSetDby=0NY转速MotorSpeedDby3000MotorSpeedDby2500且SpeedFby=1SpeedFby=0SpeedFby=1SpeedFby=0NYNYYN转矩设定值减半MotorTorqSetDby/2封锁PWM输出信号,但故障标志不清除.封锁PWM输出信号,但故障标志不清除.系统故障保护子程序SysErrProtectSub()系统故障保护子程序SysErrProtectSub()NYd,q轴电流计算子程序IdIqCalculateSub()d,q轴电流调节子程序IdIqRegulateSub()系统运行故障SysRunErrFby=1YN恢复现场;开中断INTM=0;2.AD中断程序流程图电机控制系统程序设计1.程序设计开始的一些约定1.1.电动车电机控制系统程序文件组成头文件、CMD文件、表文件、ASM程序文件等等1.2.程序名及变量名命名程序名及变量名命名采用通俗易懂的英文组合进行命名。(1).常量命名常量命名最后加Cnst,例如:UdcMaxCnst过压常量值SpeedOverCnst超速常量值(2).标志量命名标志量命名最后加Fby,例如:PowerOffFby断电标志FaultFby故障标志电机控制系统程序设计(3).变量命名命名最后加Dby,例如:SpeedSetDby转速给定变量MotorRunStatusDby电机运行状态变量(4).函数命名函数命名最后加Sub,例如:SpeedComputeSub速度计算程序命名ADCIntSub中断程序命名DSPInitSub芯片初始化命名1.3.程序注释电机控制系统程序名称、公司名称、书写时间、作者、版本号、原代码关键注释。如果程序要更改必须要写明更改原因、时间、作者等。电机控制系统程序设计本电机控制系统软件采用模块化、自顶向下、逐步细化的结构化程序设计方法。2.系统初始化程序设计(1).系统时钟设置、系统外设时钟设置、配置RAM块、设置数据页指针、AD中断模式、IO模式、等待状态设置、PWM模块设置、CAN模块设置、定时器模块设置程序。(2).系统程序变量初始化程序。(3).AD采样偏移量读取及处理程序。(4).系统程序延时程序。(5).获取电机转子的初始位置程序。电机控制系统程序设计3.CAN通信程序设计3.1.CAN通信协议确认(1).标准帧、扩展帧确认。(2).通信周期确认。(3).通信波特率确认。(4).数据格式确认,英特格式还是摩托罗拉数据格式。电机控制系统程序设计3.2.CAN初始化程序设计工作方式的设置、接收滤波方式的设置、接收屏蔽寄存器和接收代码寄存器的设置、波特率参数的设置和中断允许寄存器的设置等。CanInitSub对模式进行设置,进入复位模式设置时钟分频寄存器,同时选择PeliCAN模式,关闭时钟输出设置中断使能寄存器IER,禁止CAN中断源产生中断设置接收屏蔽寄存器设置接收代码寄存器(根据具体情况进行设置)总线定时寄存器设置(用于设置CAN通讯速率)设置输出控制寄存器,选择正常输出模式设置接收缓存器起始地址寄存器(相对值,一般为0)设置发送错误计数器,清零设置MODE寄存器,选择单过虑模式,并设置为工作状态设置允许中断寄存器,开放中断Return电机控制系统程序设计3.3.CAN通信发送程序设计在发送部分软件设计中,如果根据状态寄存器的发送状态标志来判断是否可以发送数据,那么当CAN总线出现断路,然后又正常,这时即便进行软件初始化,数据也无法正常发送,原因是该状态标志位无法通过软件进行初始化来进行复位,因此在软件设计时可以不考虑该状态标志位。允许发送吗?YNCanTxdSub设置发送帧格式和发送数据长度(扩展帧和8字节数据长度)正在接收吗?NY发送缓冲区是否锁定?NY设置发送标识码数据送发送缓冲区启动发送Return电机控制系统程序设计总线开启否?YNCanRxdSubNY有数据溢出吗?NY接收首字节读取并保存接收缓冲区数据Return读取中断寄存器接收缓冲区有有效报文吗?是远程帧吗?置发送允许标志释放缓冲区释放仲裁丢失捕捉寄存器和错误捕捉寄存器YN清数据溢出,释放数据缓冲区读中断寄存器设置MODE寄存器,进入复位模式调用报警程序3.4.CAN通信接收程序设计CAN通讯接收部分软件设计主要有两种方式,一种是通过查询方式来接收数据,另外一种是通过中断方式来接收数据,后一种方法对于实时性要求比较高的场合应用较多。电机控制系统程序设计3.5.CAN程序设计的难点(1).根据CAN外设时钟、通信波特率计算BTR0、BTR1寄存器值。(2).当CAN通信故障时如何来恢复通信。(3).多数据帧时如何完成程序设计(4个发送数据帧,8个接收数据帧)。(4).CAN网络时钟同步。电机控制系统程序设计4.AD中断程序设计主要完成系统的功能程序。(1).AD采样数据读取及处理子程序(2).系统计时子程序(3).旋变信号读取子程序(4)