Subversion Repositories HomeAutomation

Rev

Rev 2270 | Rev 2273 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 2270 Rev 2272
Line 19... Line 19...
19
        0x00,   //uint8_t TimeMsOrS;
19
        0x00,   //uint8_t TimeMsOrS;
20
        0x0000, //uint16_t Time;
20
        0x0000, //uint16_t Time;
21
        CAN_MODULE_TYPE_ACT_SOFTPWM,    //ActuatorModuleType
21
        CAN_MODULE_TYPE_ACT_SOFTPWM,    //ActuatorModuleType
22
        0x00,   //ActuatorModuleId
22
        0x00,   //ActuatorModuleId
23
        0x00,   //ActuatorId
23
        0x00,   //ActuatorId
24
        10, //SendPeriod
-
 
25
    },
24
    },
26
    0   // crc, must be a correct value, but this will also be handled by the EEPROM module or make scripts
25
    0   // crc, must be a correct value, but this will also be handled by the EEPROM module or make scripts
27
};
26
};
28
#endif
27
#endif
29
#define PID_ON 1
28
#define PID_ON 1
Line 36... Line 35...
36
//struct PID_DATA pidData;
35
//struct PID_DATA pidData;
37
//struct PIDv1_DEBUG_DATA pidDebugData;
36
//struct PIDv1_DEBUG_DATA pidDebugData;
38
 
37
 
39
uint8_t sensorModuleType, sensorModuleId,sensorId;
38
uint8_t sensorModuleType, sensorModuleId,sensorId;
40
uint8_t PID_Status;
39
uint8_t PID_Status;
41
uint8_t calculatePID_flag,sendPID_flag = 0;
40
uint8_t sendDebug_flag = 0;
42
uint16_t pwmValue=0;
41
uint16_t pwmValue=0;
43
float referenceValue, measurementValue, outputValue;
42
float referenceValue, measurementValue, outputValue;
44
 
43
 
45
void sendPID(void)
44
void sendPID(void)
46
{
45
{
Line 75... Line 74...
75
    txMsg.Data[6] = ((int16_t) (PID_GetITerm(&pid))>>8)&0xff;
74
    txMsg.Data[6] = ((int16_t) (PID_GetITerm(&pid))>>8)&0xff;
76
    txMsg.Data[7] = ((int16_t) (PID_GetITerm(&pid)))&0xff;
75
    txMsg.Data[7] = ((int16_t) (PID_GetITerm(&pid)))&0xff;
77
    while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
76
    while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
78
}
77
}
79
 
78
 
80
void sendPID_callback(uint8_t timer) {
-
 
81
  sendPID_flag=1;
-
 
82
}
-
 
83
 
-
 
84
#ifdef act_PIDv1_SEND_DEBUG_TIMER
79
#ifdef act_PIDv1_SEND_DEBUG
85
void sendPID_debug_callback(uint8_t timer)
80
void sendDebug(void)
86
{
81
{
87
   
-
 
88
    StdCan_Msg_t txMsg;
82
    StdCan_Msg_t txMsg;
89
    StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); ///TODO: Change this to the actual class type
-
 
90
    StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
-
 
91
    txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_PID; ///TODO: Change this to the actual module type
-
 
92
    txMsg.Header.ModuleId = act_PIDv1_ID;
-
 
93
    txMsg.Header.Command = CAN_MODULE_CMD_PID_DEBUG;
-
 
94
    txMsg.Length = 8;
-
 
95
 
-
 
96
    txMsg.Data[0] = ((int16_t) (PID_GetPTerm(&pid))>>8)&0xff;
-
 
97
    txMsg.Data[1] = ((int16_t) (PID_GetPTerm(&pid)))&0xff;
-
 
98
    txMsg.Data[2] = ((int16_t) (PID_GetITerm(&pid))>>8)&0xff;
-
 
99
    txMsg.Data[3] = ((int16_t) (PID_GetITerm(&pid)))&0xff;
-
 
100
    txMsg.Data[4] = ((int16_t) (PID_GetDTerm(&pid))>>8)&0xff;
-
 
101
    txMsg.Data[5] = ((int16_t) (PID_GetDTerm(&pid)))&0xff;
-
 
102
    //txMsg.Data[6] = ((int16_t) (pidDebugData.Sum)>>8)&0xff;
-
 
103
    //txMsg.Data[7] = ((int16_t) (pidDebugData.Sum))&0xff;
-
 
104
    txMsg.Data[6] = 0;
-
 
105
    txMsg.Data[7] = 0;
-
 
106
    while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
-
 
107
   
-
 
108
    StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
83
    StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
109
    StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
84
    StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
110
    txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_PID;
85
    txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_PID;
111
    txMsg.Header.ModuleId = act_PIDv1_ID;
86
    txMsg.Header.ModuleId = act_PIDv1_ID;
112
    txMsg.Header.Command = CAN_MODULE_CMD_PID_P_I_TERM;
87
    txMsg.Header.Command = CAN_MODULE_CMD_PID_P_I_TERM;
Line 165... Line 140...
165
      eeprom_write_byte_crc(EEDATA.TimeMsOrS, DEFAULT_PIDv1_CALC_PERIOD_UNIT, WITHOUT_CRC);
140
      eeprom_write_byte_crc(EEDATA.TimeMsOrS, DEFAULT_PIDv1_CALC_PERIOD_UNIT, WITHOUT_CRC);
166
      eeprom_write_word_crc(EEDATA16.Time, DEFAULT_PIDv1_CALC_PERIOD, WITHOUT_CRC);
141
      eeprom_write_word_crc(EEDATA16.Time, DEFAULT_PIDv1_CALC_PERIOD, WITHOUT_CRC);
167
      eeprom_write_byte_crc(EEDATA.actuatorModuleType, PIDv1_PWM_ACTUATOR_MODULE_TYPE, WITHOUT_CRC);
142
      eeprom_write_byte_crc(EEDATA.actuatorModuleType, PIDv1_PWM_ACTUATOR_MODULE_TYPE, WITHOUT_CRC);
168
      eeprom_write_byte_crc(EEDATA.actuatorModuleId, PIDv1_PWM_ACTUATOR_MODULE_ID, WITHOUT_CRC);
143
      eeprom_write_byte_crc(EEDATA.actuatorModuleId, PIDv1_PWM_ACTUATOR_MODULE_ID, WITHOUT_CRC);
169
      eeprom_write_byte_crc(EEDATA.actuatorId, PIDv1_PWM_ACTUATOR, WITHOUT_CRC);
144
      eeprom_write_byte_crc(EEDATA.actuatorId, PIDv1_PWM_ACTUATOR, WITHOUT_CRC);
170
      eeprom_write_byte_crc(EEDATA.sendPeriod, 10, WITHOUT_CRC);
-
 
171
      EEDATA_UPDATE_CRC;
145
      EEDATA_UPDATE_CRC;
172
    }
146
    }
173
   
147
   
174
#else
148
#else
175
#error this driver needs EEPROM support 
149
#error this driver needs EEPROM support 
176
#endif
150
#endif
177
   
151
   
178
    referenceValue = (float) eeprom_read_dword(EEDATA32.referenceValue);
152
    referenceValue = (float) eeprom_read_dword(EEDATA32.referenceValue);
179
    sensorModuleType = eeprom_read_byte(EEDATA.sensorModuleType);
153
    sensorModuleType = eeprom_read_byte(EEDATA.sensorModuleType);
180
    sensorModuleId = eeprom_read_byte(EEDATA.sensorModuleId);
154
    sensorModuleId = eeprom_read_byte(EEDATA.sensorModuleId);
181
    sensorId = eeprom_read_byte(EEDATA.sensorId);
155
    sensorId = eeprom_read_byte(EEDATA.sensorId);
182
   
-
 
-
 
156
    uint32_t data_P = eeprom_read_dword(EEDATA32.K_P);
-
 
157
    uint32_t data_I = eeprom_read_dword(EEDATA32.K_I);
-
 
158
    uint32_t data_D = eeprom_read_dword(EEDATA32.K_D);
-
 
159
    float data_P_f = *((float*)((&data_P)));
-
 
160
    float data_I_f = *((float*)((&data_I)));
-
 
161
    float data_D_f = *((float*)(&data_D));
183
    PID_init(&pid, &measurementValue, &outputValue, &referenceValue, (float) eeprom_read_dword(EEDATA32.K_P), (float) eeprom_read_dword(EEDATA32.K_I), (float) eeprom_read_dword(EEDATA32.K_D), PID_Direction_Direct);
162
    PID_init(&pid, &measurementValue, &outputValue, &referenceValue, data_P_f, data_I_f, data_D_f, PID_Direction_Direct);
184
 
163
 
185
    if (eeprom_read_byte(EEDATA.TimeMsOrS) == CAN_MODULE_ENUM_PID_CONFIG_PARAMETER_TIMEUNIT_S) {
164
    if (eeprom_read_byte(EEDATA.TimeMsOrS) == CAN_MODULE_ENUM_PID_CONFIG_PARAMETER_TIMEUNIT_S) {
186
        PID_SetSampleTime(&pid, (uint32_t)(eeprom_read_word(EEDATA16.Time))*1000);
165
        PID_SetSampleTime(&pid, (uint32_t)(eeprom_read_word(EEDATA16.Time))*1000);
-
 
166
 
187
    } else {
167
    } else {
188
        PID_SetSampleTime(&pid, (uint32_t)(eeprom_read_word(EEDATA16.Time)));
168
        PID_SetSampleTime(&pid, (uint32_t)(eeprom_read_word(EEDATA16.Time)));
189
    }
169
    }
190
 
170
 
191
    outputValue = DEFAULT_PWM_VALUE;
171
    outputValue = DEFAULT_PWM_VALUE;
192
 
172
 
193
    PID_SetMode(&pid, PID_Mode_Automatic);
173
    PID_SetMode(&pid, PID_Mode_Automatic);
194
   
-
 
195
    Timer_SetTimeout(act_PIDv1_SEND_TIMER, eeprom_read_byte(EEDATA.sendPeriod)*1000, TimerTypeFreeRunning, &sendPID_callback);
-
 
196
    #ifdef act_PIDv1_SEND_DEBUG_TIMER
-
 
197
      Timer_SetTimeout(act_PIDv1_SEND_DEBUG_TIMER, PIDv1_SEND_DEBUG_PERIOD, TimerTypeFreeRunning, &sendPID_debug_callback);
-
 
198
    #endif
-
 
199
}
174
}
200
 
175
 
201
void act_PIDv1_Process(void)
176
void act_PIDv1_Process(void)
202
{
177
{
203
    PID_Compute(&pid);
178
    uint8_t newValueCalculated = PID_Compute(&pid);
204
   
179
   
205
    if (sendPID_flag) {
180
    if (newValueCalculated) {
206
        sendPID();
181
        sendPID();
-
 
182
    #ifdef act_PIDv1_SEND_DEBUG
207
        sendPID_flag= 0;
183
        sendDebug_flag= 1;
-
 
184
        return;
208
    }
185
    }
-
 
186
    if (sendDebug_flag) {
-
 
187
        sendDebug_flag = 0;
-
 
188
        sendDebug();
-
 
189
    }
-
 
190
    #else
-
 
191
    }
-
 
192
    #endif
209
}
193
}
210
 
194
 
211
void act_PIDv1_HandleMessage(StdCan_Msg_t *rxMsg)
195
void act_PIDv1_HandleMessage(StdCan_Msg_t *rxMsg)
212
{
196
{
213
    FloatType data2;
197
    FloatType data2;
214
    uint8_t *ptr;
198
    uint8_t *ptr;
215
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
199
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
216
            StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
200
            StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
217
            rxMsg->Header.ModuleType == CAN_MODULE_TYPE_ACT_PID &&
201
            rxMsg->Header.ModuleType == CAN_MODULE_TYPE_ACT_PID &&
218
            rxMsg->Header.ModuleId == act_PIDv1_ID)
202
            rxMsg->Header.ModuleId == act_PIDv1_ID)
219
    {
203
    {
220
        switch (rxMsg->Header.Command)
204
        switch (rxMsg->Header.Command)
221
        {
205
        {
222
        case CAN_MODULE_CMD_PHYSICAL_TEMPERATURE_CELSIUS:
206
        case CAN_MODULE_CMD_PHYSICAL_TEMPERATURE_CELSIUS:
223
            if (rxMsg->Data[0]==0)  //sensor id shall be zero
207
            if (rxMsg->Data[0]==0)  //sensor id shall be zero
224
            {
208
            {
225
                printf("New setpoint with: %X %X\n",rxMsg->Data[1],rxMsg->Data[2]);
209
                //printf("New setpoint with: %X %X\n",rxMsg->Data[1],rxMsg->Data[2]);
226
 
210
 
227
                if (rxMsg->Length == 3)
211
                if (rxMsg->Length == 3)
228
                {
212
                {
229
                    if (0x80 == rxMsg->Data[1] && 0x00 == rxMsg->Data[2]) //512 degrees
213
                    if (0x80 == rxMsg->Data[1] && 0x00 == rxMsg->Data[2]) //512 degrees
230
                    {
214
                    {
Line 234... Line 218...
234
                    else
218
                    else
235
                    {
219
                    {
236
                        //pid_Reset_Integrator(&pidData);
220
                        //pid_Reset_Integrator(&pidData);
237
                        referenceValue = (((float)((rxMsg->Data[1]<<8) + rxMsg->Data[2]))/64);
221
                        referenceValue = (((float)((rxMsg->Data[1]<<8) + rxMsg->Data[2]))/64);
238
                        eeprom_write_dword_crc(EEDATA32.referenceValue, referenceValue, WITH_CRC);
222
                        eeprom_write_dword_crc(EEDATA32.referenceValue, referenceValue, WITH_CRC);
239
                    }
223
                    }
240
                }
224
                }
241
                rxMsg->Data[1] = (uint8_t)0x00ff & (((uint32_t)(referenceValue*64))>>8);
225
                rxMsg->Data[1] = (uint8_t)0x00ff & (((uint32_t)(referenceValue*64))>>8);
242
                rxMsg->Data[2] = (uint8_t)0x00ff & ((uint32_t)referenceValue*64);
226
                rxMsg->Data[2] = (uint8_t)0x00ff & ((uint32_t)referenceValue*64);
243
                StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
227
                StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
244
                rxMsg->Length = 3;
228
                rxMsg->Length = 3;
245
                while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
229
                while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
246
            }
230
            }
247
        break;
231
        break;
248
        case CAN_MODULE_CMD_PID_CONFIG_SENSOR:
232
        case CAN_MODULE_CMD_PID_CONFIG_SENSOR:
249
            if (rxMsg->Length == 3)
233
            if (rxMsg->Length == 3)
250
            {
234
            {
251
                eeprom_write_byte_crc(EEDATA.sensorModuleType, rxMsg->Data[0] , WITHOUT_CRC);
235
                eeprom_write_byte_crc(EEDATA.sensorModuleType, rxMsg->Data[0] , WITHOUT_CRC);
252
                eeprom_write_byte_crc(EEDATA.sensorModuleId, rxMsg->Data[1] , WITHOUT_CRC);
236
                eeprom_write_byte_crc(EEDATA.sensorModuleId, rxMsg->Data[1] , WITHOUT_CRC);
Line 256... Line 240...
256
                sensorId = eeprom_read_byte(EEDATA.sensorId);
240
                sensorId = eeprom_read_byte(EEDATA.sensorId);
257
            }
241
            }
258
            rxMsg->Data[0] = eeprom_read_byte(EEDATA.sensorModuleType);
242
            rxMsg->Data[0] = eeprom_read_byte(EEDATA.sensorModuleType);
259
            rxMsg->Data[1] = eeprom_read_byte(EEDATA.sensorModuleId);
243
            rxMsg->Data[1] = eeprom_read_byte(EEDATA.sensorModuleId);
260
            rxMsg->Data[2] = eeprom_read_byte(EEDATA.sensorId);
244
            rxMsg->Data[2] = eeprom_read_byte(EEDATA.sensorId);
261
            StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
245
            StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
262
            rxMsg->Length = 3;
246
            rxMsg->Length = 3;
263
            while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
247
            while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
264
        break;
248
        break;
265
        case CAN_MODULE_CMD_PID_CONFIG_ACTUATOR:
249
        case CAN_MODULE_CMD_PID_CONFIG_ACTUATOR:
266
            if (rxMsg->Length == 3)
250
            if (rxMsg->Length == 3)
267
            {
251
            {
268
                eeprom_write_byte_crc(EEDATA.actuatorModuleType, rxMsg->Data[0] , WITHOUT_CRC);
252
                eeprom_write_byte_crc(EEDATA.actuatorModuleType, rxMsg->Data[0] , WITHOUT_CRC);
269
                eeprom_write_byte_crc(EEDATA.actuatorModuleId, rxMsg->Data[1] , WITHOUT_CRC);
253
                eeprom_write_byte_crc(EEDATA.actuatorModuleId, rxMsg->Data[1] , WITHOUT_CRC);
270
                eeprom_write_byte_crc(EEDATA.actuatorId, rxMsg->Data[2] , WITH_CRC);
254
                eeprom_write_byte_crc(EEDATA.actuatorId, rxMsg->Data[2] , WITH_CRC);
271
            }
255
            }
272
            rxMsg->Data[0] = eeprom_read_byte(EEDATA.actuatorModuleType);
256
            rxMsg->Data[0] = eeprom_read_byte(EEDATA.actuatorModuleType);
273
            rxMsg->Data[1] = eeprom_read_byte(EEDATA.actuatorModuleId);
257
            rxMsg->Data[1] = eeprom_read_byte(EEDATA.actuatorModuleId);
274
            rxMsg->Data[2] = eeprom_read_byte(EEDATA.actuatorId);
258
            rxMsg->Data[2] = eeprom_read_byte(EEDATA.actuatorId);
275
            StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
259
            StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
276
            rxMsg->Length = 3;
260
            rxMsg->Length = 3;
277
            while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
-
 
278
        break;
-
 
279
        case CAN_MODULE_CMD_GLOBAL_REPORT_INTERVAL:
-
 
280
            if (rxMsg->Length == 1) {
-
 
281
                if (65 <= rxMsg->Data[0])
-
 
282
                    rxMsg->Data[0]=65;
-
 
283
                if (0 == rxMsg->Data[0])
-
 
284
                    rxMsg->Data[0]=1;
-
 
285
                eeprom_write_byte_crc(EEDATA.sendPeriod, rxMsg->Data[0], WITH_CRC);
-
 
286
                Timer_SetTimeout(act_PIDv1_SEND_TIMER, rxMsg->Data[0]*1000, TimerTypeFreeRunning, &sendPID_callback);
-
 
287
                StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
-
 
288
                while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
-
 
289
            }
-
 
290
        break;
-
 
291
 
-
 
292
        case CAN_MODULE_CMD_PID_CONFIG_PARAMETER:
-
 
293
            if (rxMsg->Length == 8)
-
 
294
            {
-
 
295
                eeprom_write_dword_crc(EEDATA32.K_P, (((float)((rxMsg->Data[0]<<8) + rxMsg->Data[1]))/64), WITHOUT_CRC);
-
 
296
                eeprom_write_dword_crc(EEDATA32.K_I, (((float)((rxMsg->Data[2]<<8) + rxMsg->Data[3]))/64), WITHOUT_CRC);
-
 
297
                eeprom_write_dword_crc(EEDATA32.K_D, (((float)((rxMsg->Data[4]<<8) + rxMsg->Data[5]))/64), WITHOUT_CRC);
-
 
298
                eeprom_write_byte_crc(EEDATA.TimeMsOrS, ((rxMsg->Data[6]&0x80)>>7), WITHOUT_CRC);
-
 
299
                eeprom_write_word_crc(EEDATA16.Time, (uint16_t)rxMsg->Data[7]+((rxMsg->Data[6]&0x7f)<<8), WITH_CRC);
-
 
300
                if (eeprom_read_byte(EEDATA.TimeMsOrS) == 0) {
-
 
301
                    //Timer_SetTimeout(act_PIDv1_TIMER, 1000, TimerTypeFreeRunning, &calculatePID_callback);
-
 
302
                } else {
-
 
303
                    //Timer_SetTimeout(act_PIDv1_TIMER, eeprom_read_word(EEDATA16.Time), TimerTypeFreeRunning, &calculatePID_callback);
-
 
304
                }
-
 
305
                PID_SetTunings(&pid, (float) eeprom_read_dword(EEDATA32.K_P), (float) eeprom_read_dword(EEDATA32.K_I), (float) eeprom_read_dword(EEDATA32.K_D));
-
 
306
                PID_Status = PID_ON;
-
 
307
                pwmValue = DEFAULT_PWM_VALUE;
-
 
308
            }
-
 
309
            rxMsg->Data[0] = ((int16_t) (PID_GetKp(&pid))>>8)&0xff;
-
 
310
            rxMsg->Data[1] = ((int16_t) (PID_GetKp(&pid)))&0xff;
-
 
311
            rxMsg->Data[2] = ((int16_t) (PID_GetKi(&pid))>>8)&0xff;
-
 
312
            rxMsg->Data[3] = ((int16_t) (PID_GetKi(&pid)))&0xff;
-
 
313
            rxMsg->Data[4] = ((int16_t) (PID_GetKd(&pid))>>8)&0xff;
-
 
314
            rxMsg->Data[5] = ((int16_t) (PID_GetKd(&pid)))&0xff;
-
 
315
            rxMsg->Data[6] = (0x7f&(eeprom_read_word(EEDATA16.Time)>>8));
-
 
316
            rxMsg->Data[7] = (0xff&(eeprom_read_word(EEDATA16.Time)));
-
 
317
            rxMsg->Data[6] |= (0x80&(eeprom_read_byte(EEDATA.TimeMsOrS))<<7);
-
 
318
            StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER);
-
 
319
            rxMsg->Length = 8;
-
 
320
            while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
261
            while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
321
        break;
262
        break;
322
       
263
       
323
        case CAN_MODULE_CMD_PID_CONFIG_PARAMETER_D_T:
264
        case CAN_MODULE_CMD_PID_CONFIG_PARAMETER_D_T:
324
            if (rxMsg->Length == 8)
265
            if (rxMsg->Length == 8)
325
            {
266
            {
-
 
267
                uint32_t* data_32;
326
                float *data = (float*)&rxMsg->Data[0];
268
                float* data = (float*)&rxMsg->Data[0];
327
               
269
                data_32 = (uint32_t*)data;
328
                eeprom_write_dword_crc(EEDATA32.K_D, *data, WITHOUT_CRC);
270
                eeprom_write_dword_crc(EEDATA32.K_D, *data_32, WITHOUT_CRC);               
329
                eeprom_write_byte_crc(EEDATA.TimeMsOrS, ((rxMsg->Data[6]&0x80)>>7), WITHOUT_CRC);
271
                eeprom_write_byte_crc(EEDATA.TimeMsOrS, ((rxMsg->Data[6]&0x80)>>7), WITHOUT_CRC);
330
                eeprom_write_word_crc(EEDATA16.Time, (uint16_t)rxMsg->Data[7]+((rxMsg->Data[6]&0x7f)<<8), WITH_CRC);
272
                eeprom_write_word_crc(EEDATA16.Time, (uint16_t)rxMsg->Data[7]+((rxMsg->Data[6]&0x7f)<<8), WITH_CRC);
331
                PID_SetTunings(&pid, PID_GetKp(&pid), PID_GetKi(&pid), (float) eeprom_read_dword(EEDATA32.K_D));
273
                PID_SetTunings(&pid, PID_GetKp(&pid), PID_GetKi(&pid), *data);
-
 
274
                if (eeprom_read_byte(EEDATA.TimeMsOrS) == CAN_MODULE_ENUM_PID_CONFIG_PARAMETER_TIMEUNIT_S) {
-
 
275
                    PID_SetSampleTime(&pid, (uint32_t)(eeprom_read_word(EEDATA16.Time))*1000);
-
 
276
 
-
 
277
                } else {
-
 
278
                    PID_SetSampleTime(&pid, (uint32_t)(eeprom_read_word(EEDATA16.Time)));
-
 
279
                }
332
                PID_Status = PID_ON;
280
                PID_Status = PID_ON;
333
                pwmValue = DEFAULT_PWM_VALUE;
281
                pwmValue = DEFAULT_PWM_VALUE;
334
            }
282
            }
335
            data2 = PID_GetKd(&pid);
283
            data2 = PID_GetKd(&pid);
336
            ptr = (uint8_t*)&data2;
284
            ptr = (uint8_t*)&data2;
Line 349... Line 297...
349
            while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
297
            while (StdCan_Put(rxMsg) != StdCan_Ret_OK);
350
        break;
298
        break;
351
        case CAN_MODULE_CMD_PID_CONFIG_PARAMETER_P_I:
299
        case CAN_MODULE_CMD_PID_CONFIG_PARAMETER_P_I:
352
            if (rxMsg->Length == 8)
300
            if (rxMsg->Length == 8)
353
            {
301
            {
-
 
302
                uint32_t* data_32;
354
                float *data = (float*)&rxMsg->Data[0];
303
                float* data = (float*)&rxMsg->Data[0];
-
 
304
                data_32 = (uint32_t*)data;
-
 
305
                eeprom_write_dword_crc(EEDATA32.K_P, *data_32, WITHOUT_CRC);
-
 
306
                //data = (float*)&rxMsg->Data[4];
-
 
307
                float* data1 = (float*)&rxMsg->Data[4];
-
 
308
                data_32 = (uint32_t*)data1;
-
 
309
                eeprom_write_dword_crc(EEDATA32.K_I, *data_32, WITH_CRC);
355
               
310
               
356
                eeprom_write_dword_crc(EEDATA32.K_P, *data, WITHOUT_CRC);
311
                PID_SetTunings(&pid, *data, *data1, PID_GetKd(&pid));
357
                data = (float*)&rxMsg->Data[4];
-
 
358
                eeprom_write_dword_crc(EEDATA32.K_I, *data, WITH_CRC);
-
 
359
               
-
 
360
                PID_SetTunings(&pid, (float) eeprom_read_dword(EEDATA32.K_P), (float) eeprom_read_dword(EEDATA32.K_I), PID_GetKd(&pid));
-
 
361
                PID_Status = PID_ON;
312
                PID_Status = PID_ON;
362
                pwmValue = DEFAULT_PWM_VALUE;
313
                pwmValue = DEFAULT_PWM_VALUE;
363
            }
314
            }
364
            data2 = PID_GetKp(&pid);
315
            data2 = PID_GetKp(&pid);
365
            ptr = (uint8_t*)&data2;
316
            ptr = (uint8_t*)&data2;