本帖最后由 十六十琉 于 2022-3-29 23:18 编辑

基于给出的工程模板,做无刷直流电机的模拟调试。
1、调试开始前,测量电机参数:
1.png
①用万用表两两测出线电阻分别为:1.4/1.5/1.6,取平均电阻1.5Ω,相电阻为0.75Ω;
②用数字电桥在1KHz下两两测出线电感为4.45/4.34/4.1mH,取平均电感4.297mH;相电感为2.15mH;
③用示波器测出两相间反电动势峰峰值为67.6V,周期约150ms--即频率6.67Hz,极对数为2,求得反电动势常数97.09;
2.png
④基于电机参数,设置额定转速为3000,速度基准取两倍即6000;
2、选择模拟调速模式:
3.png

转动旋钮,经过AD转换,可发现电机转速随VR1的模拟值大小发生变化,在keil51调试模式下,可读取ADCSpeed值变化区间:0x0018-0x7FF7,即00024-32758;
4.png
下限:
5.png
上限:
6.png

速度实际值ActualValue变化区间:0x000-0x3FFF;
下限:
7.png
上限:
8.png
转动VR1即可调速,此处便不展示了;
void main(void)
  • {
  •     uint16 PowerUpCnt = 0;
  •    
  •     /*********上电等待*********/
  •     for (PowerUpCnt = 0; PowerUpCnt < SystemPowerUpTime; PowerUpCnt++);
  •    
  •      /* ADC参考电压电压配置 */
  •     VREFConfigInit();
  •     /* Hardware & Software I0nitial */
  •     HardwareInit();
  •     SoftwareInit();   
  •     DebugSet();
  •     /* 总中断使能 */
  •     EA = 1;  
  •    
  •     while (1)
  •     {
  •         if(GP13==0){while(1){VSP=0x7FF6;if(GP42==0)break;}}
  •         if(GP42==0){while(1){VSP=0x1111;if(GP13==0)break;}}
  •                        
  • //        VSP:0x17-0x7FF6;
  •         /* -----Current calibration----- */
  •         GetCurrentOffset();
  •         /* -----Motor Control State----- */
  •         MC_Control();
  •         _nop_();
  •     }
  • }
  • 复制代码
    2.gif 1.gif

    3、本来想做FU6832L板与外部单片机的UART通信,实现由51单片机温度传感器通过串口改变VSP值,从而实现电机转速随温度变化,但手边的51单片机只有USB转TTL的模块芯片,干不了;想做模拟风扇多模式多档位调节,但是Speed_Mode不允许切换状态,定速模式也不允许更改数值,最后把VR1旋钮和滤波禁掉,采用赋值的方式进行按键切换,并加入中断模拟定时关闭(或降速)功能。
    but,遇见了一个问题,所以还没实现中断功能,找不到教程如何将P1_IE寄存器只配置为P1.3口的控制状态,函数如下:
    #include <MyProject.h>
  • #include "Delay.h"
  • void Int0init()
  • {
  • EX1=0;//中断2使能位
  • P1_IE=1;//使能
  • P1_IF=0;//标志位
  • ClrBit(P1_OE, P13);//配置P0.0等为可使用状态
  • //SetBit(P1_PU, P13);//输入使能,上拉
  • //
  • //        如何让P1.3开关控制P1_IF是目前没能解决的问题
  • //       
  • ClrBit(TCON,IT11);//下拉触发中断
  • SetBit(TCON,IT10);
  • }
  • void main()
  • {
  • uint16 PowerUpCnt = 0;
  •        
  •           SetBit(P4_OE, P44);//配置LED等为可使用状态
  •     SetBit(P4_PU, P44);
  •        
  •     Int0init();
  •     EX1=1;
  •     EA=1;
  •     for (PowerUpCnt = 0; PowerUpCnt < SystemPowerUpTime; PowerUpCnt++);
  •           
  •   while(1)
  • {
  •           switch(mode)
  •                         {
  •                         case(1):if(mode==1){VSP=0x7ff0;GP44=0;}break;
  •                         case(2):if(mode==2){VSP=0x2ff0;GP44=1;}break;
  •                         case(3):if(mode==3){VSP=0x0017;GP44=!GP44;Delay(2000);}break;
  •                         }
  • }
  • }
  • void INT1 interrupt 1
  •         {
  •         if(GP13==0)
  •         {
  •                 GP13=1;
  •           Delay(1000);
  •                 if(GP13==0)
  •                 {GP13=1;
  •                         mode++;
  •                         if(mode>=4)
  •                         {
  •                                 mode=1;
  •                         }
  •                         while(!GP13);
  •                 }
  •         }
  • }
  • 复制代码
    后边是发现一个问题不知道该如何解决,在keil调试模式下,点击运行即电机按照期望速度旋转,但点击红叉停止时,有概率出现飚速现象,即转速增高并稳定,且不受终止、退出调试等影响,只能断电。
    1477025200ba85595022d2d11297f607.gif
    最后,永磁同步电机卡路上了(青岛封校小20天了),一些功能也因为缺少器件做不出来,更主要的问题是,自己还有很多的东西要学,感觉还没摸索到这块板子的百分之一,继续干吧。