PIC BLDC三相电机研读总结及舵机测试框架

上传人:飞*** 文档编号:31691112 上传时间:2018-02-09 格式:DOC 页数:8 大小:417KB
返回 下载 相关 举报
PIC BLDC三相电机研读总结及舵机测试框架_第1页
第1页 / 共8页
PIC BLDC三相电机研读总结及舵机测试框架_第2页
第2页 / 共8页
PIC BLDC三相电机研读总结及舵机测试框架_第3页
第3页 / 共8页
PIC BLDC三相电机研读总结及舵机测试框架_第4页
第4页 / 共8页
PIC BLDC三相电机研读总结及舵机测试框架_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《PIC BLDC三相电机研读总结及舵机测试框架》由会员分享,可在线阅读,更多相关《PIC BLDC三相电机研读总结及舵机测试框架(8页珍藏版)》请在金锄头文库上搜索。

1、PIC BLDC 三相电机研读总结(james14888gmailcom)ADC 中断处理void _attribute_(_interrupt_,auto_psv) _ADC1Interrupt(void)uint16 u16MotorNeutralVoltage; uint16 u16MotorPhaseA;uint16 u16MotorPhaseB; uint16 u16MotorPhaseC;DesiredSpeed = ADC1BUF0; /POTu16MotorPhaseA = ADC1BUF3; /-V1u16MotorPhaseB = ADC1BUF2; /-V2u16Moto

2、rPhaseC = ADC1BUF1; /-V3u16MotorNeutralVoltage = (u16MotorPhaseA + u16MotorPhaseB + u16MotorPhaseC)/3;AD1CON1bits.DONE = 0;IFS0bits.AD1IF = 0;/* ADC SAMPLING & BMEF signals comparison */if(u16MotorPhaseA u16MotorNeutralVoltage) Comparator.PhaseAOutput = 1; else Comparator.PhaseAOutput = 0;if(u16Moto

3、rPhaseB u16MotorNeutralVoltage) Comparator.PhaseBOutput = 1; else Comparator.PhaseBOutput = 0;if(u16MotorPhaseC u16MotorNeutralVoltage) Comparator.PhaseCOutput = 1; else Comparator.PhaseCOutput = 0;u16ComparatorOutputs = (Comparator.PhaseCOutput 160) /u16CurrentPWMDutyCycle P1SECMPbits.SEVTCMP = u16

4、CurrentPWMDutyCycle1;else if(u16CurrentPWMDutyCycle76)/P1SECMPbits.SEVTCMP =48;P1SECMPbits.SEVTCMP = u16CurrentPWMDutyCycle3;elseP1SECMPbits.SEVTCMP = 0;ADC_bemf_filter = ADC_BEMF_FILTERADC_bemf_filter;if (ADC_bemf_filter&0b00000001)Commutate();Comparator.Commutation = Comparator.Commutation; /Commu

5、tation u16CommutationStatus = Comparator.Commutation;/Ramp-up period to detect the rotor positionif(Flags.RampUpBEMF) /P1DC1=P1DC2=P1DC3=u16CurrentPWMDutyCycle; /u16CurrentPWMDutyCycle if (+ PWMticks MAX_PWMticks) / MAX_PWMticks = 1024 Commutate();IFS3bits.PWM1IF = 0;PWM 中断处理函数_MPWM1Interrupt( ) 的核心

6、内容是处理换向。一是 PWM 中断计数到达 1024 个调用一次换向 Commutate(),或者是 ADC 输出中三个输出不平衡,又没有被滤波滤掉,这调用一次换向 Commutate()。PWM 中断的第二个任务就是控制 ADC 采样的时间, 当占空比比较大时,采样间隔比较大;但占空比比较小时,采样间隔比较小。其中:ADC_XOR8 = 0x0000,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0x0000CW_ADC_MASK8 = 0x0000,0x0002,0x0001,0x0004,0x0002,0x0001,0x0004,0x0000ADC_

7、BEMF_FILTER64= 0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,0x1E0x20,0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x01,0x01,0x01,0x36,0x01,0x3A,0x3C,0x3E,0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x01,0x01,0x01,0x16,0x01,0x1A,0x1C,0x1E,0x01,0x01,0x01,0x26,0x01,0x2A,0x2C,0x2E,0x01,0

8、x01,0x01,0x36,0x01,0x3A,0x3C,0x3E ;问题:用三个数组,变动下标,就可以实现滤波过滤,算法原理是什么?换向处理void Commutate(void)/ The code below is uses TMR3 to calculate the speed of the rotorif (ADCCommState = INDEX) / has the same position been sensed?if (u8PoleCounter+ = POLEPAIRS) / has one mech rev elasped? / if yes then read tim

9、er 3T3CONbits.TON = 0; / Stop TIMER3timer3value = TMR3;TMR3 = 0;timer3avg = (timer3avg + timer3value) 1);if(!Flags.RampUpBEMF)SpeedPILoopController();u8PoleCounter = 1;T3CONbits.TON = 1; / Start TIMER3 /CommutationADC_bemf_filter=0;if (+ADCCommState6)ADCCommState=1;if(Flags.Direction = CW) P1OVDCON

10、= CW_PWM_STATEADCCommState; elseP1OVDCON = CCW_PWM_STATEADCCommState;PWMticks=0;换向处理主要处理两件事情。一件是速度的 PI 算法反馈控制 SpeedPILoopController();另一件是产生三相控制信号。其中:1) TIMER3 用来计算电机转速。2) 数组CW_PWM_STATE8 = 0x0000,0x2001,0x2004,0x0204,0x0210,0x0810,0x0801,0x0000;和 PIC 的 PWM 硬件与本软件共同产生如下的控制信号(其中 PWM 脉冲为 20KHz):1 : I/

11、O 引脚由 PWM 发生器控制 1 : I/O 引脚被驱动为有效状态POVD0 : I/O 引脚由 POUT 寄存器控制 POUT 0 : I/O 引脚被驱动为无效状态POVD POUT3H 3H 2H 2L 1H 1L 3H 3L 2H 2L 1H 1L0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 1 0 00 0 0 0 1 0 0 0 0 1 0 00 0 0 0 1 0 0 1 0 0 0 00 0 1 0 0 0 0 1 0 0 0 00 0 1 0 0 0 0 0 0 0 0 10 0 0 0 0 0

12、 0 0 0 0 0 01 L2 L3 L2 1 0 2 4 个 P W M 脉冲2 1 0 2 4 个 P W M 脉冲2 1 0 2 4 个 P W M 脉冲2 1 0 2 4 个 P W M 脉冲2 1 0 2 4 个 P W M 1 H2 H3 H状态 1 状态 2状态 0 状态 3 状态 4 状态 5 状态 6 状态 1 状态 2 状态 3 状 . .PI 控制算法void SpeedPILoopController(void)/For the HURST motor the Timer3Avg values/TIMER3 counts = 9562 AT 7.5% dutycycl

13、e (P1DC1 = 109) /TIMER3 counts = 714 AT 100% dutycycle (P1DC1 = 1469)/RPSelectrical = 19-261Hz /RPMelctrical = 1179-15669RPM /Normalizing TIMER3 counts to electrical RPMActualSpeed = (SPEEDMULT/timer3avg)*60;/ADC POT RANGE 0-1024, 1024*16 = MAXSPEED in electrical RPM DesiredSpeed = DesiredSpeed 14);

14、 /Divided by 11 to normalize the PI output to PWM PDCx values u16DesiredPWMDutyCycle = u16DesiredPWMDutyCycle + (PILoopControllerOutput/11); / Max and Min PWM duty cycle limitsif (u16DesiredPWMDutyCycle MAX_DUTY_CYCLE)u16DesiredPWMDutyCycle = MAX_DUTY_CYCLE;SpeedIntegral = 0; P1DC1 = u16DesiredPWMDu

15、tyCycle;P1DC2 = u16DesiredPWMDutyCycle;P1DC3 = u16DesiredPWMDutyCycle;u16CurrentPWMDutyCycle = u16DesiredPWMDutyCycle;从代码可以看出,实例代码采用的是 PI 控制算法,而非完整的 PID 控制算法。问题:关于速度的计算,是利用 PWM 中断间隔和 TIMER3 计数实现。PWM 中断间隔是固定的,再假设三相电压是理想的,即不需要调整的状态下,TIMER3 计数的间隔是102462 个 PWM 周期,即每个 TIMER3 统计的值应该是相近的,而不管你的实际转速,这样,它是如何求出实际转速的,亦或代码的的实际转速是不正确的,亦或 TIMER3 的计数与 PWM 占空比有对应关系(如果有,好像是多此一举)?总结:PIC BLDC 三相电机实例代码是通过控制 PWM 生成器产生特定的 PWM 信号,驱动功率板产生三相电压(电源) ,从而控制三相电机。与我们目前需要做的正反转电机和舵机需要的时序完全不一样,它所采用的 PI 控制算法也不是我们将用的 PID 算法,它的软件对我们目前没有任何实际意义。我们唯一可用的是它的 PIC 控制板及其硬件功能,可以再其上面写我们的软件测试平台和测试代码。有部分遗憾的是他的 Data Memory 空间很小,我们一次只能编译进部分测

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号