DSP的PWM电机控制程序代码分析.docx
- 文档编号:9894266
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:12
- 大小:130.20KB
DSP的PWM电机控制程序代码分析.docx
《DSP的PWM电机控制程序代码分析.docx》由会员分享,可在线阅读,更多相关《DSP的PWM电机控制程序代码分析.docx(12页珍藏版)》请在冰豆网上搜索。
DSP的PWM电机控制程序代码分析
中南大学
DSF原理及应用课程代码分析报告
报告题目:
DSP的PWM电机控制程序代码分析学院:
专业班级:
姓名:
学号:
0909082203
指导老师:
刘建成
1.基本原理
2.
、头文件和变量
数据存储空间(汇编源程序)声明(C源程序)分析
3.算法分析与流程图
4.总结
1.基本原理
1.每个240X器件都包含两个事件管理模块EVA和EVB,每个时间管理器模块包括通用定时器、比较单元、捕获单元,以及正交编码脉冲电路。
2.直流电机控制:
直流电动机是最早出现的电动机,也是最早能实现调速的电动机。
近年来,直流电动机的结构和控制方法都发生了很大的变化。
随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控型的开关功率元件进行脉宽调制(PWM)控制方式已成为绝对主流。
PWM调压调速原理:
其中,U为电枢端电压;I为电枢电流;R为电枢电路总电阻;为每级磁
通量;K为电动机结构参数。
所以直流电机的转速控制方法可分为两类:
对励磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。
其中励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动
态响应较差,所以这种控制方法用得很少。
现在,大多数应用场合都使用电枢控制法。
绝大多数电流电机采用开关驱动方法。
开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。
具体电路如下图。
up超1
6C1A
Lr:
DDU1D
MOTE
2.数据存储空间(汇编源程序)、头文件和变量
声明(C源程序)分析
在此程序中定义了如下变量(C源程序)
/^global.c*7
externuksiifledint$丹1佩训2問冊卩吋冋卿;
externunsignedintWDCB^IDKEV:
externURsijntdint[MRrIFI,PIIRirVS0t;
externunsizedintMCRA.HCRI.MCHC.PflDAIBl^PBDATDIH.rCMnil.KMnitPFDnOIH;
externunsignedint眦TRLMDCTRL?
川WONU邮EL刑邮FL叫邮WQ3附血Qh;
externunsizedintAlirOSEIJSRRESULT^RESULTI.RfSLLTS,RESULTSRESULT?
;
externunsigretiint耶HO®HTGR£RN删期帼乩冊顺R2MMGR1疋RHE恥⑷隔端
externunsizedint帥NCFM肪旧朋胆札倔肚酣脚血吐州肚;
PKternunsignedintCAHIDmjCnHtDSL^DNCTRLOfCANEMOfl.CAffiXBB^ANBXOCjCANBXOO;
PKterflunsignedintGAKIEIH.CRHIDlL.CAIETHLI.CANeXIR^RW^B^ftNBKIC^ANBMD;
externunsignedintCAHID2HICAHID2L,CAHCTRL2ICAH6X2AJCAHei!
2STCAHDX2CICANBX2D;
PKternunsignedint聽帕03儿蚀川蚀問1£即直理用欄%1:
噸监盼血11瞄眄蚀丽鹉片
externunsignedint即NID4H#RHM札.CRHCTRL*』朋BKUbCR蔺胡盼皿冊汕C,C側册呱;
externunsignedint渤ID5H#ANI瓯,MNCTRL几朋哪井問删唧,他删丸,朋册曲;
externunsigredint離ICCR靑tICTU,SUHE細釘SC】UIW0dl:
I(;TL2』mRXST.SCIRXENI.SCJRXBUF.SCHXIUF,SC1FRI;
蹴PMunsignediltSHCDHAJICNTJIPHJICON.T^CNT.IZPRJ^CDH.EUAlMRflJUAlMRBJUAIFHftJUAIFRB;
»ternunHqn凶int即TMNEJMNTJ斜PRJ3PRJ剜HQIONA/济陆MT饲陆柑IPIH,口时删上朋IFRA;
在此程序中定义如下数据空间(汇编程序)
:
ine.asn
c_inrnR_fi_tnti*c_int?
IMR,IFR~
SCSftllBSCSR2,jKJHnCR,KIH12CR
WDIDHTRpUDKE¥,_WDCR
憎M,」離朋.„MCHCa_PmTDIR._PB&ftWlR,_PCDftTDlRi_PEDflTDIRwjPFmi?
IRflDCTRL!
_ftDCTHL2tJlflXCOHU#_CHSELSEQ1t_CHSELSEQ2P_CHSELSEQ3._CHSELSEQ>iAIIVn^SFq^SRP_RES1IIIlp.RFSUL11fr_RFSlJLT?
」FSIULTR^RFSUIT9
CHIVDER,CAMER^CAIWcEllp[:
HHICR,CAWER2?
_CDNH:
CR1,_CAHESRf_CANESRCfiNCLC,UfiHlFH.UAHIHH.JJmMLRMNHaJUAHLAMliL
由于程序设置使用CAN总线传输电机转速数据,故在程序中开辟了CANIDxL和CANIDxH存
储CAN总线数据标识符ID的单元),CANCTRLx存储CAN总线控制寄存器位单元),CANBXnA/B/C/D(存储总线传输数据单元)。
在汇编程序中还将在程序中涉及的变量开辟空间
由于在程序中要用到中断,故在汇编程序中定义了中断向量地址表:
;建寺中断向量表
".vectors
.sect
RSVECT
B
cinto
INTI
B
PHANTOM
IHT2
B
cint2
IHT3
B
PHANTOM
INTH
B
PHANTOM
INTS
B
PHANT0H
INT6
B
PHANTON
;中断子向量入口定义
-text
PHrtHTOH:
KICK_DCGRET
.end
具体变量和块在存储器中的地址为:
******************************************************************************
TMS320C24xxCOFFLinkerVersion7.02
******************************************************************************
OUTPUTFILENAME:
ENTRYPOINTSYMBOL:
"_c_intO"address:
00008904
SECTIONALLOCATIONMAP
output
section
page
origin
length
attributes/
inputsections
.vectors0000080000000000e
00008000
0000000e
Define.obj(.vectors)
.text
00008860
00000149
00008860
00000006
Define.obj(.text)
00008866
00000000
global.obj(.text)
00008866
0000009e
Main.obj(.text)
00008904
00000027
rts2xx.lib:
boot.obj(.text)
0000892b
00000050
:
exit.obj(.text)
0000897b
0000002e
:
saverest.obj(.text)
.cinit
0000089a9
00000010
000089a9
00000009
Main.obj(.cinit)
000089b2
00000006
rts2xx.lib:
exit.obj(.cinit)
000089b8
00000001
--HOLE--[fill=0000]
.data
100000860
00000000
UNINITIALIZED
00000860
00000000
Define.obj(.data)
00000860
00000000
rts2xx.lib:
saverest.obj(.data)
00000860
00000000
:
exit.obj(.data)
00000860
00000000
:
boot.obj(.data)
00000860
00000000
Main.obj(.data)
00000860
00000000
global.obj(.data)
.bss
1
00000880
00000025
UNINITIALIZED
00000880
00000022
rts2xx.lib:
exit.obj(.bss)
000008a2
00000000
:
boot.obj(.bss)
000008a2
00000000
global.obj(.bss)
000008a2
00000000
rts2xx.lib:
saverest.obj(.bss)
000008a2
00000000
Define.obj(.bss)
000008a2
00000003
Main.obj(.bss)
.const
1
00000860
00000000
UNINITIALIZED
.switch
0
00008860
00000000
UNINITIALIZED
.stack
1
000008a5
000000a0
UNINITIALIZED
000008a5
00000000
rts2xx.lib:
boot.obj(.stack)
.system
1
00000860
00000000
UNINITIALIZED
3.算法分析与流程图
六、程序流程图
算法分析:
/*Main.c*/
/*PWM电机控制程序,正反转,默认设置的工作频率1kHz*/
#include"global.c"
voidSystemlnit();
voidPWM_lnit();
voidKickDog();
intnumled0=200;
unsignedintt0=0;
unsignedintXPWM=0;
main()
{
SystemInit();//系统初始化
//IOPB0-6设为IO口模式
//所有LED=0
//所有LED=1
MCRA=MCRA&0xC0FF;
PBDATDIR=0xFFC2;
PBDATDIR=PBDATDIR|0x003D;
XPWM=2400;//最大值2500
/*whenxpwm=0~900,逆时针方向旋转,值越小,转速越快
whenxpwm=1600~2500,顺时针方向旋转,值越大,转速越快
whenxpwm=900~1600,电机两端电压太低,基本上不足以起转*/
asm("CLRCINTM");
while
(1);
}
voidSystemInit()
{
asm("SETCINTM");/*关闭总中断*/
asm("CLRCSXM");/*禁止符号位扩展*/
asm("CLRCCNF");
/*B0块映射为on-chipDARAM*/
CLKOUT=40M*/
KickDog();
IFR=0xFFFF;
IMR=0x0002;
/*初始化看门狗*/
/*清除中断标志*/
/*打开中断2*/
voidPWM_Init()
MCRA=MCRA|0x00C0;
//PA6-PA7为PWM口
EVAIFRA=0xFFFF;
//清除中断标志
ACTRA=0x0006;
//PWM1,2低有效
DBTCONA=0x0530;
//使能死区定时器1,分频40M/16=2.5M,死区时间
5*0.4us=2us
T1PR=2500;
//定时器1周期值,定时0.4us*2500=1ms
CMPR1=XPWM;
//比较值
COMCONA=0xA600;
//比较控制寄存器
/*定时器1中断服务程序*/
T1CNT=0;
EVAIMRA=0x0080;
//定时器1周期中断使能
T1CON=0x144E;
//增模式,TPS系数40M/16=2.5M,T1使能,
voidc_int2()
{
if(PIVR!
=0x27)
{asm("CLRCINTM");
return;
}
T1CNT=0;
t0++;
numled0--;
if(numled0==0)
{
numled0=2000;
if((PBDATDIR&0x0001)==0x0001)
PBDATDIR=PBDATDIR&0xFFFE;//IOPB0=0;LED
else
PBDATDIR=PBDATDIR|0x0101;//IOPB0=1;LED
}
EVAIFRA=0x80;
asm("CLRCINTM");
}
voidKickDog()/*踢除看门狗*/
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}
4.总结
DSP是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效的传输与应用。
在利用
对其
DSP对电机进行PWM控制中,相对于模拟信号控制,DSP具有精确、灵活、抗干扰能力强、可靠性高、体积小、易于大规模集成等优点。
并且由于DSP具有强大的数据处理能力,PWM控制更能得心应手。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP PWM 电机 控制程序 代码 分析