ediff iitb / Mbed 2 deprecated HIL_FMEA_oursteering

Dependencies:   mbed

Committer:
ediff_iitbracing
Date:
Wed Mar 06 13:58:03 2013 +0000
Revision:
1:fec1d091fa34
Parent:
0:30ff725706d2
Child:
2:eb4101b574bc
06-03-2013, 19:29 BackUp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ediff_iitbracing 0:30ff725706d2 1 #include "fmea.h"
ediff_iitbracing 0:30ff725706d2 2
ediff_iitbracing 0:30ff725706d2 3 //FMEA - Failure Mode Error Analysis codes.
ediff_iitbracing 0:30ff725706d2 4 //Checks involve the following sensors:
ediff_iitbracing 0:30ff725706d2 5 //LEFT THROTTLE, RIGHT THROTTLE,
ediff_iitbracing 0:30ff725706d2 6 //STEERING 1 (CAN Steering Sensor), STEERING 2 (Rotary Potentiometer),
ediff_iitbracing 0:30ff725706d2 7 //LEFT WHEEL RPM and RIGHT WHEEL RPM.
ediff_iitbracing 0:30ff725706d2 8
ediff_iitbracing 0:30ff725706d2 9 //FMEA parameters
ediff_iitbracing 0:30ff725706d2 10 const float steering_diff_limit = 7;
ediff_iitbracing 1:fec1d091fa34 11 const float throttle_diff_limit = 0.4;
ediff_iitbracing 0:30ff725706d2 12 int fmea_recheck_iteration = 3;
ediff_iitbracing 0:30ff725706d2 13 float fmea_recheck_time = 0.3;
ediff_iitbracing 0:30ff725706d2 14
ediff_iitbracing 0:30ff725706d2 15 //FMEA counters/trackers
ediff_iitbracing 0:30ff725706d2 16 int flag_steering_comparison = 0;
ediff_iitbracing 0:30ff725706d2 17 int flag_throttle_comparison = 0;
ediff_iitbracing 0:30ff725706d2 18 int flag_steering2_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 19 int flag_rpm_Left_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 20 int flag_rpm_Right_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 21 int flag_throttle_Left_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 22 int flag_throttle_Right_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 23
ediff_iitbracing 0:30ff725706d2 24 //FMEA Flags
ediff_iitbracing 0:30ff725706d2 25 bool flag_use_openloop = false;
ediff_iitbracing 0:30ff725706d2 26 bool flag_use_steering = false;
ediff_iitbracing 0:30ff725706d2 27 bool flag_steering_use = false;
ediff_iitbracing 0:30ff725706d2 28
ediff_iitbracing 0:30ff725706d2 29 //Ticker for each FMEA function.
ediff_iitbracing 0:30ff725706d2 30 Ticker for_rpm_Left_pulldown_fmea;
ediff_iitbracing 0:30ff725706d2 31 Ticker for_rpm_Right_pulldown_fmea;
ediff_iitbracing 0:30ff725706d2 32 Ticker for_throttle_Left_pulldown_fmea;
ediff_iitbracing 0:30ff725706d2 33 Ticker for_throttle_Right_pulldown_fmea;
ediff_iitbracing 0:30ff725706d2 34 Ticker for_steering2_pulldown_fmea;
ediff_iitbracing 1:fec1d091fa34 35 Ticker for_steering_comparison_fmea;
ediff_iitbracing 0:30ff725706d2 36
ediff_iitbracing 0:30ff725706d2 37 //Left RPM sensor fails. Sensor output is pulled down to zero.
ediff_iitbracing 0:30ff725706d2 38 void rpm_Left_pulldown_fmea()
ediff_iitbracing 0:30ff725706d2 39 {
ediff_iitbracing 0:30ff725706d2 40 for_rpm_Left_pulldown_fmea.detach();
ediff_iitbracing 0:30ff725706d2 41 if (rpm_Left <= dead_rpm)
ediff_iitbracing 0:30ff725706d2 42 {
ediff_iitbracing 0:30ff725706d2 43 flag_rpm_Left_pulldown++;
ediff_iitbracing 0:30ff725706d2 44 if (flag_rpm_Left_pulldown >= fmea_recheck_iteration)
ediff_iitbracing 0:30ff725706d2 45 {
ediff_iitbracing 0:30ff725706d2 46 flag_use_openloop = true;
ediff_iitbracing 0:30ff725706d2 47 return;
ediff_iitbracing 0:30ff725706d2 48 }
ediff_iitbracing 0:30ff725706d2 49 for_rpm_Left_pulldown_fmea.attach(&rpm_Left_pulldown_fmea,fmea_recheck_time);
ediff_iitbracing 0:30ff725706d2 50 }
ediff_iitbracing 0:30ff725706d2 51 else
ediff_iitbracing 0:30ff725706d2 52 {
ediff_iitbracing 0:30ff725706d2 53 flag_rpm_Left_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 54 }
ediff_iitbracing 0:30ff725706d2 55 }
ediff_iitbracing 0:30ff725706d2 56
ediff_iitbracing 0:30ff725706d2 57 //Right RPM sensor fails. Sensor output is pulled down to zero.
ediff_iitbracing 0:30ff725706d2 58 void rpm_Right_pulldown_fmea()
ediff_iitbracing 0:30ff725706d2 59 {
ediff_iitbracing 0:30ff725706d2 60 for_rpm_Right_pulldown_fmea.detach();
ediff_iitbracing 0:30ff725706d2 61 if (rpm_Right <= dead_rpm)
ediff_iitbracing 0:30ff725706d2 62 {
ediff_iitbracing 0:30ff725706d2 63 flag_rpm_Right_pulldown++;
ediff_iitbracing 0:30ff725706d2 64 if (flag_rpm_Right_pulldown >= fmea_recheck_iteration)
ediff_iitbracing 0:30ff725706d2 65 {
ediff_iitbracing 0:30ff725706d2 66 flag_use_openloop = true;
ediff_iitbracing 0:30ff725706d2 67 return;
ediff_iitbracing 0:30ff725706d2 68 }
ediff_iitbracing 0:30ff725706d2 69 for_rpm_Right_pulldown_fmea.attach(&rpm_Right_pulldown_fmea,fmea_recheck_time);
ediff_iitbracing 0:30ff725706d2 70 }
ediff_iitbracing 0:30ff725706d2 71 else
ediff_iitbracing 0:30ff725706d2 72 {
ediff_iitbracing 0:30ff725706d2 73 flag_rpm_Right_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 74 }
ediff_iitbracing 0:30ff725706d2 75 }
ediff_iitbracing 0:30ff725706d2 76
ediff_iitbracing 0:30ff725706d2 77 //Left Throttle sensor fails. Sensor output is pulled down to zero.
ediff_iitbracing 0:30ff725706d2 78 void throttle_Left_pulldown_fmea()
ediff_iitbracing 0:30ff725706d2 79 {
ediff_iitbracing 0:30ff725706d2 80 for_throttle_Left_pulldown_fmea.detach();
ediff_iitbracing 0:30ff725706d2 81 if (throttle_Left < 0.1)
ediff_iitbracing 0:30ff725706d2 82 {
ediff_iitbracing 0:30ff725706d2 83 flag_throttle_Left_pulldown++;
ediff_iitbracing 0:30ff725706d2 84 if (flag_throttle_Left_pulldown >= fmea_recheck_iteration)
ediff_iitbracing 0:30ff725706d2 85 {
ediff_iitbracing 0:30ff725706d2 86 shutdown = true;
ediff_iitbracing 0:30ff725706d2 87 return;
ediff_iitbracing 0:30ff725706d2 88 }
ediff_iitbracing 0:30ff725706d2 89 for_throttle_Left_pulldown_fmea.attach(&rpm_Left_pulldown_fmea,fmea_recheck_time);
ediff_iitbracing 0:30ff725706d2 90 }
ediff_iitbracing 0:30ff725706d2 91 else
ediff_iitbracing 0:30ff725706d2 92 {
ediff_iitbracing 0:30ff725706d2 93 flag_throttle_Left_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 94 }
ediff_iitbracing 0:30ff725706d2 95 }
ediff_iitbracing 0:30ff725706d2 96
ediff_iitbracing 0:30ff725706d2 97 //Right Throttle sensor fails. Sensor output is pulled down to zero.
ediff_iitbracing 0:30ff725706d2 98 void throttle_Right_pulldown_fmea()
ediff_iitbracing 0:30ff725706d2 99 {
ediff_iitbracing 0:30ff725706d2 100 for_throttle_Right_pulldown_fmea.detach();
ediff_iitbracing 0:30ff725706d2 101 if (throttle_Right < 0.1)
ediff_iitbracing 0:30ff725706d2 102 {
ediff_iitbracing 0:30ff725706d2 103 flag_throttle_Right_pulldown++;
ediff_iitbracing 0:30ff725706d2 104 if (flag_throttle_Right_pulldown >= fmea_recheck_iteration)
ediff_iitbracing 0:30ff725706d2 105 {
ediff_iitbracing 0:30ff725706d2 106 shutdown = true;
ediff_iitbracing 0:30ff725706d2 107 return;
ediff_iitbracing 0:30ff725706d2 108 }
ediff_iitbracing 0:30ff725706d2 109 for_throttle_Right_pulldown_fmea.attach(&rpm_Right_pulldown_fmea,fmea_recheck_time);
ediff_iitbracing 0:30ff725706d2 110 }
ediff_iitbracing 0:30ff725706d2 111 else
ediff_iitbracing 0:30ff725706d2 112 {
ediff_iitbracing 0:30ff725706d2 113 flag_throttle_Right_pulldown = 0;
ediff_iitbracing 0:30ff725706d2 114 }
ediff_iitbracing 0:30ff725706d2 115 }
ediff_iitbracing 0:30ff725706d2 116
ediff_iitbracing 0:30ff725706d2 117 //Steering Sensor 2 (Potentiometer) fails. Sensor output is pulled down to zero.
ediff_iitbracing 0:30ff725706d2 118 void steering2_pulldown_fmea()
ediff_iitbracing 0:30ff725706d2 119 {
ediff_iitbracing 0:30ff725706d2 120 for_steering2_pulldown_fmea.detach();
ediff_iitbracing 0:30ff725706d2 121 if (steering2 < 0.1)
ediff_iitbracing 0:30ff725706d2 122 {
ediff_iitbracing 0:30ff725706d2 123 flag_steering2_pulldown++;
ediff_iitbracing 0:30ff725706d2 124 if (flag_steering2_pulldown >= fmea_recheck_iteration)
ediff_iitbracing 0:30ff725706d2 125 {
ediff_iitbracing 0:30ff725706d2 126 flag_use_steering = true;
ediff_iitbracing 0:30ff725706d2 127 return;
ediff_iitbracing 0:30ff725706d2 128 }
ediff_iitbracing 0:30ff725706d2 129 for_steering2_pulldown_fmea.attach(&steering2_pulldown_fmea,fmea_recheck_time);
ediff_iitbracing 0:30ff725706d2 130 }
ediff_iitbracing 0:30ff725706d2 131 else
ediff_iitbracing 0:30ff725706d2 132 {
ediff_iitbracing 0:30ff725706d2 133 shutdown = true;
ediff_iitbracing 0:30ff725706d2 134 }
ediff_iitbracing 0:30ff725706d2 135 }
ediff_iitbracing 0:30ff725706d2 136
ediff_iitbracing 0:30ff725706d2 137 //Check for consistency of the two differently obtained steering values.
ediff_iitbracing 0:30ff725706d2 138 void steering_comparison_fmea()
ediff_iitbracing 0:30ff725706d2 139 {
ediff_iitbracing 0:30ff725706d2 140 if (!flag_use_steering)
ediff_iitbracing 0:30ff725706d2 141 {
ediff_iitbracing 1:fec1d091fa34 142 for_steering_comparison_fmea.detach();
ediff_iitbracing 0:30ff725706d2 143 if (abs(steering2-steering) > steering_diff_limit)
ediff_iitbracing 0:30ff725706d2 144 {
ediff_iitbracing 0:30ff725706d2 145 flag_steering_comparison++;
ediff_iitbracing 0:30ff725706d2 146 if (flag_steering_comparison >= fmea_recheck_iteration)
ediff_iitbracing 0:30ff725706d2 147 {
ediff_iitbracing 0:30ff725706d2 148 steering2_pulldown_fmea();
ediff_iitbracing 1:fec1d091fa34 149 return;
ediff_iitbracing 0:30ff725706d2 150 }
ediff_iitbracing 1:fec1d091fa34 151 for_steering_comparison_fmea.attach(&steering_comparison_fmea,fmea_recheck_time);
ediff_iitbracing 0:30ff725706d2 152 }
ediff_iitbracing 0:30ff725706d2 153 else
ediff_iitbracing 0:30ff725706d2 154 {
ediff_iitbracing 0:30ff725706d2 155 flag_steering_comparison = 0;
ediff_iitbracing 0:30ff725706d2 156 }
ediff_iitbracing 0:30ff725706d2 157 }
ediff_iitbracing 0:30ff725706d2 158 }
ediff_iitbracing 0:30ff725706d2 159
ediff_iitbracing 0:30ff725706d2 160 //Check for consistency of the two differently obtained throttle values.
ediff_iitbracing 0:30ff725706d2 161 void throttle_comparison_fmea()
ediff_iitbracing 0:30ff725706d2 162 {
ediff_iitbracing 0:30ff725706d2 163 if (abs(throttle2-throttle) > throttle_diff_limit)
ediff_iitbracing 0:30ff725706d2 164 {
ediff_iitbracing 0:30ff725706d2 165 shutdown = true;
ediff_iitbracing 0:30ff725706d2 166 }
ediff_iitbracing 0:30ff725706d2 167 }