基于给出的工程模板,做无刷直流电机的模拟调试。
1、调试开始前,测量电机参数:
①用万用表两两测出线电阻分别为: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;
④基于电机参数,设置额定转速为3000,速度基准取两倍即6000;
2、选择模拟调速模式:
转动旋钮,经过AD转换,可发现电机转速随VR1的模拟值大小发生变化,在keil51调试模式下,可读取ADCSpeed值变化区间:0x0018-0x7FF7,即00024-32758;
下限:
上限:
速度实际值ActualValue变化区间:0x000-0x3FFF;
下限:上限:
转动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_(); } }
复制代码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); } } }
复制代码最后,永磁同步电机卡路上了(青岛封校小20天了),一些功能也因为缺少器件做不出来,更主要的问题是,自己还有很多的东西要学,感觉还没摸索到这块板子的百分之一,继续干吧。