00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Sensorless.h"
00020 #include "Filters10KHz.h"
00021
00022 volatile struct SensorlessConfiguration sensorlessConf;
00023
00024
00025 volatile data h_erp;
00026 volatile data delta_erp;
00027 volatile data error_erp;
00028
00029
00030
00031
00032
00033
00034 _iq BO_HPF,A1_HPF;
00035
00036
00037
00038
00039
00040 volatile struct sqddata vs_e_c;
00041 volatile struct qddata iqds_e_puls;
00042 volatile struct qddata iqds_s_hpf_puls;
00043 volatile struct qddata iqds_s_hpf_hpf_puls;
00044 volatile struct qddata iqds_ce;
00045 volatile struct qddata iqds_ce_lpf;
00046 volatile struct qddata iqds_e_lpf_hb;
00047 volatile struct qddata iqds_nce;
00048 volatile struct qddata iqds_nce_lpf;
00049 volatile struct qddata iqds_e_lpf_lb;
00050 volatile struct qddata iqds_e_lpf;
00051 volatile struct qddata iqds_e_lpf_ca;
00052 volatile struct qddata iqds_e_lpf_ca_lpf;
00053 volatile data theta_hat_error;
00054 volatile data wr_hat_pulsC;
00055 _iq Kp_Puls,Ki_Puls;
00056 volatile _iq iqds_e_lpf_q;
00057
00058
00059
00060
00061
00062
00063 void FillCarrierTable(_iq* carrierTable, const Uint16 carrierPoints,
00064 const Uint16 synchoCycles)
00065 {
00066 Uint16 carrierIndx;
00067 _iq carrierAngleInc;
00068 sensorlessConf.carrierDataTable = carrierTable;
00069 carrierAngleInc=_IQdiv(TWOPI,_IQ(carrierPoints));
00070 for(carrierIndx=0; carrierIndx<carrierPoints; carrierIndx++)
00071 sensorlessConf.carrierDataTable[carrierIndx]=
00072 _IQmpy(_IQ(carrierIndx),carrierAngleInc);
00073 sensorlessConf.carrierIndx = 0;
00074 sensorlessConf.carrierPoints = carrierPoints;
00075 sensorlessConf.carrierSynchro = carrierPoints*synchoCycles;
00076 }
00077
00078
00079
00080 void InitPLL(_iq dTDiv2, _iq saliencyOrder, _iq BO_LPF, _iq A1_LPF)
00081 {
00082
00083
00084 sensorlessConf.BO_LPF = BO_LPF;
00085 sensorlessConf.A1_LPF = A1_LPF;
00086 sensorlessConf.dTDiv2 = dTDiv2;
00087 sensorlessConf.saliencyOrder = saliencyOrder;
00088 INIT_DATA(h_erp);
00089 INIT_DATA(delta_erp);
00090 INIT_DATA(error_erp);
00091
00092 }
00093
00094
00095
00096 void InitPulsatingCarrierDemodulator(_iq dTDiv2, _iq BO_LPF, _iq A1_LPF,
00097 _iq BO_HPF, _iq A1_HPF)
00098 {
00099 sensorlessConf.dTDiv2 = dTDiv2;
00100 sensorlessConf.BO_LPF = BO_LPF;
00101 sensorlessConf.A1_LPF = A1_LPF;
00102 sensorlessConf.BO_HPF = BO_HPF;
00103 sensorlessConf.A1_HPF = A1_HPF;
00104 Kp_Puls=_IQmpy(TWOPI,_IQ(200));
00105 Ki_Puls=_IQ(2);
00106 INIT_QDDATA(iqds_s_hpf_puls);
00107 INIT_QDDATA(iqds_s_hpf_hpf_puls);
00108 INIT_QDDATA(iqds_e_puls);
00109 INIT_QDDATA(iqds_ce);
00110 INIT_QDDATA(iqds_ce_lpf);
00111 INIT_QDDATA(iqds_e_lpf_hb);
00112 INIT_QDDATA(iqds_nce);
00113 INIT_QDDATA(iqds_nce_lpf);
00114 INIT_QDDATA(iqds_e_lpf_lb);
00115 INIT_QDDATA(iqds_e_lpf);
00116 INIT_QDDATA(iqds_e_lpf_ca);
00117 INIT_QDDATA(iqds_e_lpf_ca_lpf);
00118 INIT_DATA(theta_hat_error);
00119 INIT_DATA(wr_hat_pulsC);
00120 }
00121
00122
00123
00124
00125
00126