完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-14 10:34 编辑
各位好: 我使用ti的TMS320F28377DZWT控制4路BLDC同时转动并计算每路电机的速度(BLDC电机的永磁转子为2对磁极)控制,控制程序采用开环方式。 第1路电机,使用ePWM1~3做控制换相、eCAP1~3中断做电机HALL信号捕捉,电机速度使用eCAP的Time-Stamp功能计算; 第2路电机,使用ePWM4~6做控制换相、eCAP4~6中断做电机HALL信号捕捉,电机速度使用eCAP的Time-Stamp功能计算; 第3路电机,使用ePWM7~9做控制换相、xINT2中断做电机HALL信号捕捉(原电机的3路HALL信号经CPLD变成1路信号),电机速度使用CPUTimer0功能计算; 第4路电机,使用ePWM10~12做控制换相、xINT3~5中断做电机HALL信号捕捉,电机速度使用CPUTimer1功能计算; eCAP 配置如下(eCAP1~6配置方法相同此处以eCAP1为例): ECap1Regs.ECEINT.all = 0x0000; // Disable all capture __interrupts ECap1Regs.ECCLR.all = 0xFFFF; // Clear all CAP __interrupt flags ECap1Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped // Configure peripheral registers ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0; // 1:One-shot 0:continuous ECap1Regs.ECCTL2.bit.STOP_WRAP = 3; // Stop at 4 events ECap1Regs.ECCTL1.bit.CAP1POL = 1; // Falling edge ECap1Regs.ECCTL1.bit.CAP2POL = 0; // Rising edge ECap1Regs.ECCTL1.bit.CAP3POL = 1; // Falling edge ECap1Regs.ECCTL1.bit.CAP4POL = 0; // Rising edge ECap1Regs.ECCTL1.bit.CTRRST1 = 1; // Difference operation ECap1Regs.ECCTL1.bit.CTRRST2 = 1; // Difference operation ECap1Regs.ECCTL1.bit.CTRRST3 = 1; // Difference operation ECap1Regs.ECCTL1.bit.CTRRST4 = 1; // Difference operation ECap1Regs.ECCTL2.bit.SYNCI_EN = 1; // Enable sync in ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; // Pass through ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable capture units ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // Start Counter ECap1Regs.ECCTL2.bit.REARM = 1; // arm one-shot ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads ECap1Regs.ECEINT.bit.CEVT1 = 1; // 2 events = __interrupt ECap1Regs.ECEINT.bit.CEVT2 = 1; // 4 events = __interrupt ECap1Regs.ECEINT.bit.CEVT3 = 1; // 2 events = __interrupt ECap1Regs.ECEINT.bit.CEVT4 = 1; // 4 events = __interrupt xINT配置如下: // Initialize xINT2 XintRegs.XINT2CR.bit.ENABLE=1;//enable xint2 XintRegs.XINT2CR.bit.POLARITY=3;// Interrupt is selected as positive or negative edge triggered // Initialize xINT3 XintRegs.XINT3CR.bit.ENABLE=1;//enable xint3 XintRegs.XINT3CR.bit.POLARITY=3;// Interrupt is selected as positive or negative edge triggered // Initialize xINT4 XintRegs.XINT4CR.bit.ENABLE=1;//enable xint4 XintRegs.XINT4CR.bit.POLARITY=3;// Interrupt is selected as positive or negative edge triggered // Initialize xINT5 XintRegs.XINT5CR.bit.ENABLE=1;//enable xint5 XintRegs.XINT5CR.bit.POLARITY=3;// Interrupt is selected as positive or negative edge triggered eCAP ISR程序如下(电机1与电机2的速度计算方法相同): Period = ECap1Regs.CAP1 + ECap1Regs.CAP2 + ECap1Regs.CAP3 + ECap1Regs.CAP4; BldcA_Speed = 12000000000 / Period ; //caculate speed ECap1Regs.ECCLR.all = 0xFFFF; //Clear eCap event flag ECap2Regs.ECCLR.all = 0xFFFF; //Clear eCap event flag ECap3Regs.ECCLR.all = 0xFFFF; //Clear eCap event flag motor_sensor(Direction,BLDCA); // Acknowledge this interrupt to receive more interrupts from group 4 PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; xINT ISR程序如下(电机3与电机4的速度计算方法相同): BldcC_trigger_count++; if(BldcC_trigger_count == 12) [ BldcC_trigger_count = 0; Period = 200000000 - (Uint32)CpuTimer0Regs.TIM.all; BldcC_Speed = 12000000000 / Period; //caculate speed CpuTimer0Regs.TCR.bit.TRB = 1; ] motor_sensor(Direction,BLDCC); // Acknowledge this interrupt to receive more interrupts from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 开始测试: 采用CPU1进行控制未使用CPU2。 当单路电机运行时,电机运行平顺,工作正常,速度计算准确。 当4路电机同时运行时,电机运行平顺,工作正常,使用CPUTimer0~1功能计算的速度值准确,使用eCAP的Time-Stamp功能计算的速度值出现无规则跳变。 之后经过测试发现,如果第3路电机无HALL信号(即不产生xINT2中断),第1、2、4路电机运行平顺,工作正常,速度计算准确。Time-Stamp的数值变化不大(可忽略)。 当第3路电机产生连续的HALL信号(转动)时,例如:Time-Stamp的ECap1Regs.CAP1值会变小但无序(时大时小),因此导致速度值计算错误,结果是正常速度值1倍多到几倍之间变化。 xINT3~5中断则不影响eCAP的Time-Stamp功能。 已知中断优先级为xINT2 > eCAP1~6 > xINT3~5 采用CPU1与CPU2同时进行控制。 CPU1控制电机1、2、4(CPU2PIE中的xINT2不使能,仅通过XBar将中断信号配置到input5中,配置方法如下) InputXbarRegs.INPUT5SELECT = 109; CPU2控制电机3(CPU2PIE中的xINT2使能) 运行CPU1端程序,电机运行平顺,工作正常,速度计算准确。 再运行CPU2端程序,电机运行平顺,工作正常,使用CPU2.Timer0功能计算的速度值准确,使用eCAP的Time-Stamp功能计算的速度值出现无规则跳变。 单核控制与双核控制,问题都存在。请问当xINT2产生中断时,对eCAP的Time-Stamp有什么影响?为什么会出现这些(以上)影响?如何避免这样的问题? |
|
相关推荐
3个回答
|
|
请TI的技术大神们有点建议?
|
|
|
|
XINT2可以作为ECAP的同步信号,看你在软件上也使能了同步功能,可能是这个原因导致的 |
|
|
|
感谢,问题确实是出在这里。 |
|
|
|
只有小组成员才能发言,加入小组>>
TMS320F28377D:新做了以377d为芯片的板子,上电后芯片复位引脚出现方波请问如何解决?
1897 浏览 0 评论
TPS55340通电后输入端保险丝烧断,芯片输入和GND之间短路
3647 浏览 4 评论
5031 浏览 0 评论
请问如何用DM368对RGB格式的图片数据进行编码生成JPEG格式图片?
1734 浏览 1 评论
9372 浏览 8 评论
CC3100BOOST使用CC3200lunchXL进行烧录
669浏览 2评论
714浏览 1评论
TMS320F28034: 利用C2prog通过SCI给TMS320F28034烧录程序,出现错误提示:Bootloading... failed (invalid echo)!
675浏览 1评论
求DLPC350 Programmer’s Guide User's Guide 中文版说明书
1197浏览 1评论
1771浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 12:29 , Processed in 0.493063 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号