电子说
硬件方案--主板及驱动电路
类型 | 型号 | 封装 | 数量 |
电阻 | 10R | 0603*4 | 1 |
100R | 0805 | 1 | |
1K | 0603*4 | 7 | |
1K | 0805 | 3 | |
5.1K | 0805 | 13 | |
1M | 0805 | 1 | |
电容 | 12P | 0805 | 2 |
22P | 0805 | 2 | |
4.7UF | 1206 | 2 | |
16V1000UF | 电解 | 1 | |
LED | LED绿色 | 0805 | 25 |
LED红色 | 0805 | 1 | |
LED黄色 | 0805 | 1 | |
二极管 | 1N4148 | 玻璃管 | 2 |
1N5822 | 贴片 | 1 | |
晶振 | 32.768K | 2*6 | 1 |
8.000MHz | 49SMD | 1 | |
芯片 | 1117-3.3 | SOT223 | 1 |
IR21364S | SOP-28 | 1 | |
SWM190RBT6-50 | LQFP64 | 1 | |
其它 | 5.1K电位器 | 3362P | 2 |
控制器采用的是一颗国产M0芯片-SWM190RBT6-50,封装是LQFP64。电路包含AC转DC电路,直流电机是高压310V,然后通过SC1117DG转成低压15V,再由MP1482变成3.3V。电机的栅极驱动芯片是IR21364S来控制WVU三路之间的通断,上下臂是通过IGBT,RGS10B60KD1/D2PACK来开关。除此之外还包含一些光耦,LED的常用的电子元器件。
本方案缺失PCB源文件,但是不影响配套程序的相关阅读及学习,本方案的主要用于学习观测器,锁相环,PID算法,SVPWM无感FOC算法以及五段式与七段式调制。
软件方案
软件方案包含了工程文件,无需自己再搭建工程。用的IDE是MDK,小编给大家编译了一下,没有错误可以直接运行。包含龙伯格电机观测器,无感FOC算法,PID调节代码,整套报错信息,顺逆风启动算法,虽然是基于国产M0的代码,但是代码本身耦合性做的很好,完全可以移植到别的MCU平台上面去,同时也是非常适合对电机算法感兴趣的小伙伴认真阅读一番。以下贴一段龙伯格观测器的代码出来:
/******************************************************************************* * Function Name : Speed_PI * Description : It implements the PLL PI regulator. * Input : (B-emf alpha)*sin(theta),(B-emf beta)*cos(theta). * Output : None. * Return : Motor speed (dpp, digit-per-pwm). *******************************************************************************/ s16 Speed_PI(s16 hAlfa_Sin, s16 hBeta_Cos) { s32 wSpeed_PI_error, wOutput; s32 wSpeed_PI_proportional_term, wSpeed_PI_integral_term; wSpeed_PI_error = hBeta_Cos - hAlfa_Sin; #if 1 //???? if(wSpeed_PI_error > 50) wSpeed_PI_error = 50; else if(wSpeed_PI_error < -50) wSpeed_PI_error = -50; #endif wSpeed_PI_proportional_term = hSpeed_P_Gain * wSpeed_PI_error; // !!!p wSpeed_PI_integral_term = hSpeed_I_Gain * wSpeed_PI_error; // !!!i if ( (wSpeed_PI_integral_sum >= 0) && (wSpeed_PI_integral_term >= 0) && (Max_Speed_Out == FALSE) ) { if ((s32)(wSpeed_PI_integral_sum + wSpeed_PI_integral_term) < 0) { wSpeed_PI_integral_sum = S32_MAX; } else { wSpeed_PI_integral_sum += wSpeed_PI_integral_term; //integral } } else if ( (wSpeed_PI_integral_sum <= 0) && (wSpeed_PI_integral_term <= 0) && (Min_Speed_Out == FALSE) ) { if((s32)(wSpeed_PI_integral_sum + wSpeed_PI_integral_term) > 0) { wSpeed_PI_integral_sum = -S32_MAX; } else { wSpeed_PI_integral_sum += wSpeed_PI_integral_term; //integral } } else { wSpeed_PI_integral_sum += wSpeed_PI_integral_term; //integral } wOutput = (wSpeed_PI_proportional_term >> 14) + (wSpeed_PI_integral_sum >> 18); if (wOutput > wMotorMaxSpeed_dpp) { Max_Speed_Out = TRUE; wOutput = wMotorMaxSpeed_dpp; } else if (wOutput < (-wMotorMaxSpeed_dpp)) { Min_Speed_Out = TRUE; wOutput = -wMotorMaxSpeed_dpp; } else { Max_Speed_Out = FALSE; Min_Speed_Out = FALSE; } return ((s16)wOutput); }
全部0条评论
快来发表一下你的评论吧 !