完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、内容
本期的学习主要是针对之前方波部分内容的一个查漏补缺和正弦波部分的一个前期准备。方波主要是学习了《无刷直流电机控制应用》一书的234-272页,对无刷直流电机控制的一个应用实例进行学习。正弦波部分主要是对FOC控制原理的学习。 二、知识点 1.六步换相函数,对于方波的有、无传感器无刷直流电机的换相原理,都是六步换相原理,其贯穿于电机控制的整个过程。三个绕组,根据单片机反馈的转子位置信息,有序的PWM信号,实现理想的控制效果,具体程序如下所示: void BLDC_SwitchStep(void) { if(ClockDir==0) { MotorA.Step= (MotorA.Step + 1) % 6; } else { MotorA.Step = (MotorA.Step + 6-1) % 6; } MotorA.PWMTicksPre=MotorA.PWMTicks; MotorA.FlagBEMF = 0; MotorA.PWMTicks = 0; //MotorA.Step=0; //6步法驱动 switch(MotorA.Step) { case 0://step1 TIM1-》CCR1=My_PWM; //A+ Delay1Us(); T1CH1NON(); T1CH2NOFF(); //B- Delay1Us(); TIM1-》CCR2=0; T1CH3NON(); //C TIM1-》CCR3=0; break; case1://step2 TIM1-》CCR1=My_PWM; //A+ Delay1Us(); T1CH1NON(); T1CH3NOFF(); //C- Delay1Us(); TIM1-》CCR3=0; T1CH2NON(); //B TIM1-》CCR2=0; break; case2://step3 TIM1-》CCR2=My_PWM;//B+ Delay1Us(); T1CH2NON(); T1CH3NOFF();//C- Delay1Us(); TIM1-》CCR3= 0; //12.5%占空比 T1CH1NON(); //A TIM1-》CCR1=0; break; case3://step4 TIM1-》CCR2=My_PWM;//B+ Delay1Us(); T1CH2NON(); T1CH1NOFF(); //A- Delay1Us(); TIM1-》CCR1=0; T1CH3NON(); //C TIM1-》CCR3=0; break; case4://step5 TIM1-》CCR3=My_PWM; //C+ Delay1Us(); T1CH3NON(); T1CH1NOFF(); //A- Delay1Us(); TIM1-》CCR1 = 0; // 37.5%占空比 T1CH2NON(); //B Delay1Us(); TIM1-》CCR2=0; break; case5://step6 TIM1-》CCR3=My_PWM; //C+ Delay1Us(); T1CH3NON(); T1CH2NOFF(); //B- Delay1Us(); TIM1-》CCR2=0; T1CH1NON(); //A TIM1-》CCR1=0; break; default:break; } } 2.过零点检测,对于无传感器的无刷直流电机控制来说,过零点检测是判断转子位置的依据,它的检测原理是根据反电动势法,当两个绕组通电时,检测未通电绕组的状态,当其位置过零点时,也就意味着需要换相,其具体的检测程序如下: unsigned long BEMF(void) { unsigned short VoltBEMF = 0; unsigned long dir = 0; if(ucMotorStep!=MotorA.Step) { ucMotorStep=MotorA.Step; ucMotorAD=0; } switch(MotorA.Step) { case 0:VoltBEMF[ucMotorAD] = ADCConvertedValue_2[2]; dir =1;//下降 break; case 1:VoltBEMF[ucMotorAD] = ADCConvertedValue_2[1]; break; case 2:VoltBEMF[ucMotorAD] = ADCConvertedValue_2[0]; dir =1; break; case 3:VoltBEMF[ucMotorAD] = ADCConvertedValue_2[2]; break; case 4:VoltBEMF[ucMotorAD] = ADCConvertedValue_2[1]; dir =1; break; case 5:VoltBEMF[ucMotorAD] = ADCConvertedValue_2[0]; break; default: break; } if(ucMotorAD《2) { ucMotorAD++; } else { //ucMotorAD=0; if(((dir == 1)&&(ClockDir==0))||((dir == 0)&&(ClockDir==1))) //下降,PWM-OFF检测BEMF,过零点标志是BEMF电压为0 if((VoltBEMF[0]》0)&&(VoltBEMF[1]==0)) { usOZTimeS++; return 1; } } else { if((VoltBEMF[0]==0)&&(VoltBEMF[1]》0)) { usOZTimeS++; return 1; } } VoltBEMF[0]=VoltBEMF[1]; VoltBEMF[1]=VoltBEMF[2]; return 0; } 三、总结 通过本期的学习,对方波部分有了更好的认识,对有传感器和无传感器的无刷直流电机的控制系统有了更深的印象。但通过对正弦波部分中部分原理的了解,感受到了正弦波部分的学习难度远高于方波,之后需要投入更大的时间和精力进去。 |
|
|
|
只有小组成员才能发言,加入小组>>
2480 浏览 0 评论
9376 浏览 4 评论
37077 浏览 19 评论
5079 浏览 0 评论
25117 浏览 34 评论
1682浏览 2评论
1938浏览 1评论
2398浏览 1评论
1705浏览 0评论
699浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 18:24 , Processed in 1.072030 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号