Multiplexer lauffähig

Dependencies:   USBDevice mbed

Fork of Multiplexer-Test by H2M Teststand

Committer:
O_Shovah
Date:
Mon Sep 08 12:11:21 2014 +0000
Revision:
0:42c1addaf061
Child:
1:84c53305b6a5
Child:
8:fd403cfcaa0a
Test;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
O_Shovah 0:42c1addaf061 1 #include "mbed.h"
O_Shovah 0:42c1addaf061 2
O_Shovah 0:42c1addaf061 3 #include "USBSerial.h"
O_Shovah 0:42c1addaf061 4
O_Shovah 0:42c1addaf061 5 #include "EthernetInterface.h"
O_Shovah 0:42c1addaf061 6
O_Shovah 0:42c1addaf061 7 //Outputs
O_Shovah 0:42c1addaf061 8
O_Shovah 0:42c1addaf061 9 DigitalOut Multiplex_select_0 (p15);
O_Shovah 0:42c1addaf061 10 DigitalOut Multiplex_select_1 (p16);
O_Shovah 0:42c1addaf061 11 DigitalOut Myled (LED1);
O_Shovah 0:42c1addaf061 12
O_Shovah 0:42c1addaf061 13 PwmOut Bremsenstrom_MOSFET(p21);
O_Shovah 0:42c1addaf061 14 PwmOut Motroregler_PWM(p22);
O_Shovah 0:42c1addaf061 15
O_Shovah 0:42c1addaf061 16
O_Shovah 0:42c1addaf061 17 BusOut unused(p18);
O_Shovah 0:42c1addaf061 18
O_Shovah 0:42c1addaf061 19
O_Shovah 0:42c1addaf061 20 //Inputs
O_Shovah 0:42c1addaf061 21
O_Shovah 0:42c1addaf061 22 InterruptIn Drehzahl_lichtschranke(p14);
O_Shovah 0:42c1addaf061 23
O_Shovah 0:42c1addaf061 24 Timer Umlaufzeit;
O_Shovah 0:42c1addaf061 25 Ticker ticker_read_sensor;
O_Shovah 0:42c1addaf061 26
O_Shovah 0:42c1addaf061 27 AnalogIn Messkanal_0 (p19);
O_Shovah 0:42c1addaf061 28 AnalogIn Messkanal_1 (p20);
O_Shovah 0:42c1addaf061 29 AnalogIn DMS_0 (p17);
O_Shovah 0:42c1addaf061 30
O_Shovah 0:42c1addaf061 31
O_Shovah 0:42c1addaf061 32
O_Shovah 0:42c1addaf061 33 //Communication
O_Shovah 0:42c1addaf061 34
O_Shovah 0:42c1addaf061 35 Serial pc(USBTX, USBRX);
O_Shovah 0:42c1addaf061 36
O_Shovah 0:42c1addaf061 37 UDPSocket udp;
O_Shovah 0:42c1addaf061 38 Endpoint udp_dest;
O_Shovah 0:42c1addaf061 39
O_Shovah 0:42c1addaf061 40 float MOSFET_duty_cycle = 0;
O_Shovah 0:42c1addaf061 41
O_Shovah 0:42c1addaf061 42 volatile float Motorspannung, Bremsenspannung , Motorstrom, Aux,Bremsenstrom, Temperatur_0, Temperatur_1, Temperatur_2 ;
O_Shovah 0:42c1addaf061 43
O_Shovah 0:42c1addaf061 44 //int Motor_ratio = 0, curr_Motor_pwm_pulsewidth = 0,curr_MOSFET_pwm_pulsewidth = 0, Drehzahl = 0;
O_Shovah 0:42c1addaf061 45
O_Shovah 0:42c1addaf061 46 volatile int Drehzeit_counter = 0;
O_Shovah 0:42c1addaf061 47 #define DREHZEIT_SIZE 3
O_Shovah 0:42c1addaf061 48 volatile int Drehzeit[DREHZEIT_SIZE];
O_Shovah 0:42c1addaf061 49
O_Shovah 0:42c1addaf061 50
O_Shovah 0:42c1addaf061 51 /*
O_Shovah 0:42c1addaf061 52 int Read_sensors(void)
O_Shovah 0:42c1addaf061 53 {
O_Shovah 0:42c1addaf061 54
O_Shovah 0:42c1addaf061 55 int select_0 = 0, select_1 = 0, Messwert_0, Messwert_1,i = 0;
O_Shovah 0:42c1addaf061 56
O_Shovah 0:42c1addaf061 57 Multiplex_select_0 = 0, Multiplex_select_1 = 0;
O_Shovah 0:42c1addaf061 58
O_Shovah 0:42c1addaf061 59 //Selection of Multiplexer states
O_Shovah 0:42c1addaf061 60
O_Shovah 0:42c1addaf061 61
O_Shovah 0:42c1addaf061 62 // for(i=0; i<=3; i++)
O_Shovah 0:42c1addaf061 63
O_Shovah 0:42c1addaf061 64 while(i<4)
O_Shovah 0:42c1addaf061 65
O_Shovah 0:42c1addaf061 66 {
O_Shovah 0:42c1addaf061 67 select_0 = Multiplex_select_0;
O_Shovah 0:42c1addaf061 68 select_1 = Multiplex_select_1;
O_Shovah 0:42c1addaf061 69
O_Shovah 0:42c1addaf061 70 Messwert_0 = Messkanal_0.read_u16();
O_Shovah 0:42c1addaf061 71 Messwert_1 = Messkanal_1.read_u16();
O_Shovah 0:42c1addaf061 72
O_Shovah 0:42c1addaf061 73 switch(i) {
O_Shovah 0:42c1addaf061 74 case 0: {
O_Shovah 0:42c1addaf061 75 Temperatur_0 = Messwert_0;
O_Shovah 0:42c1addaf061 76 Motorspannung = Messwert_1 * 0.000515 - 0.05 ; //Gute Näherung von 2- ~23V. Dannach zu niedrig.Z-Diode
O_Shovah 0:42c1addaf061 77 pc.printf(" [%i,%i]; 0 %5.2f deg; 1 %5.2f V;", select_0, select_1, Temperatur_0, Motorspannung);
O_Shovah 0:42c1addaf061 78 break;
O_Shovah 0:42c1addaf061 79 }
O_Shovah 0:42c1addaf061 80
O_Shovah 0:42c1addaf061 81 case 1: {
O_Shovah 0:42c1addaf061 82 Temperatur_1 = Messwert_0;
O_Shovah 0:42c1addaf061 83 Motorstrom = Messwert_1 * 0.000396 - 4.15;
O_Shovah 0:42c1addaf061 84 pc.printf(" [%i,%i]; 0 %5.2f deg; 1 %5.2f A;", select_0, select_1, Temperatur_1, Motorstrom);
O_Shovah 0:42c1addaf061 85 break;
O_Shovah 0:42c1addaf061 86 }
O_Shovah 0:42c1addaf061 87
O_Shovah 0:42c1addaf061 88 case 2: {
O_Shovah 0:42c1addaf061 89 Temperatur_2 = Messwert_0;
O_Shovah 0:42c1addaf061 90 Bremsenspannung = Messwert_1 * 0.000515 - 0.05;//Gute Näherung von 2- ~23V. Dannach zu niedrig.Z-Diode
O_Shovah 0:42c1addaf061 91 pc.printf(" [%i,%i]; 0 %5.2f deg; 1 %5.2f V;", select_0, select_1, Temperatur_2, Bremsenspannung);
O_Shovah 0:42c1addaf061 92 break;
O_Shovah 0:42c1addaf061 93 }
O_Shovah 0:42c1addaf061 94
O_Shovah 0:42c1addaf061 95 case 3: {
O_Shovah 0:42c1addaf061 96 Aux = Messwert_0;
O_Shovah 0:42c1addaf061 97 Bremsenstrom = Messwert_1;// * 0.00032 - 15.8;
O_Shovah 0:42c1addaf061 98 pc.printf(" [%i,%i]; 0 %5.2f NA; 1 %5.2f A;", select_0, select_1, Aux, Bremsenstrom);
O_Shovah 0:42c1addaf061 99 break;
O_Shovah 0:42c1addaf061 100 }
O_Shovah 0:42c1addaf061 101
O_Shovah 0:42c1addaf061 102 default: {
O_Shovah 0:42c1addaf061 103 //i =0;
O_Shovah 0:42c1addaf061 104 pc.printf("\n\r");
O_Shovah 0:42c1addaf061 105 break;
O_Shovah 0:42c1addaf061 106 }
O_Shovah 0:42c1addaf061 107
O_Shovah 0:42c1addaf061 108
O_Shovah 0:42c1addaf061 109
O_Shovah 0:42c1addaf061 110 }
O_Shovah 0:42c1addaf061 111
O_Shovah 0:42c1addaf061 112 wait(0.001);
O_Shovah 0:42c1addaf061 113 i++;
O_Shovah 0:42c1addaf061 114 Multiplex_select_0 = i&0x01;
O_Shovah 0:42c1addaf061 115 Multiplex_select_1 = (i>>1)&0x01;
O_Shovah 0:42c1addaf061 116
O_Shovah 0:42c1addaf061 117 }
O_Shovah 0:42c1addaf061 118
O_Shovah 0:42c1addaf061 119 return 1;
O_Shovah 0:42c1addaf061 120 }
O_Shovah 0:42c1addaf061 121 */
O_Shovah 0:42c1addaf061 122
O_Shovah 0:42c1addaf061 123 void interr_read_sensors()
O_Shovah 0:42c1addaf061 124 {
O_Shovah 0:42c1addaf061 125
O_Shovah 0:42c1addaf061 126 int Messwert_0, Messwert_1,select_0 = 0, select_1 = 0;
O_Shovah 0:42c1addaf061 127
O_Shovah 0:42c1addaf061 128 Multiplex_select_0 = 0, Multiplex_select_1 = 0;
O_Shovah 0:42c1addaf061 129
O_Shovah 0:42c1addaf061 130 //Selection of Multiplexer states
O_Shovah 0:42c1addaf061 131
O_Shovah 0:42c1addaf061 132
O_Shovah 0:42c1addaf061 133 for (int i=0; i!=5; ++i)
O_Shovah 0:42c1addaf061 134
O_Shovah 0:42c1addaf061 135 {
O_Shovah 0:42c1addaf061 136 select_0 = Multiplex_select_0;
O_Shovah 0:42c1addaf061 137 select_1 = Multiplex_select_1;
O_Shovah 0:42c1addaf061 138
O_Shovah 0:42c1addaf061 139 Messwert_0 = Messkanal_0.read_u16();
O_Shovah 0:42c1addaf061 140 Messwert_1 = Messkanal_1.read_u16();
O_Shovah 0:42c1addaf061 141
O_Shovah 0:42c1addaf061 142 switch(i) {
O_Shovah 0:42c1addaf061 143 case 0: {
O_Shovah 0:42c1addaf061 144 Temperatur_0 = Messwert_0;
O_Shovah 0:42c1addaf061 145 Motorspannung = Messwert_1 * 0.000515 - 0.05 ; //Gute Näherung von 2- ~23V. Dannach zu niedrig.Z-Diode
O_Shovah 0:42c1addaf061 146
O_Shovah 0:42c1addaf061 147 break;
O_Shovah 0:42c1addaf061 148 }
O_Shovah 0:42c1addaf061 149
O_Shovah 0:42c1addaf061 150 case 1: {
O_Shovah 0:42c1addaf061 151 Temperatur_1 = Messwert_0;
O_Shovah 0:42c1addaf061 152 Motorstrom = Messwert_1 * 0.000396 - 4.15;
O_Shovah 0:42c1addaf061 153 break;
O_Shovah 0:42c1addaf061 154 }
O_Shovah 0:42c1addaf061 155
O_Shovah 0:42c1addaf061 156 case 2: {
O_Shovah 0:42c1addaf061 157 Temperatur_2 = Messwert_0;
O_Shovah 0:42c1addaf061 158 Bremsenspannung = Messwert_1 * 0.000515 - 0.05;//Gute Näherung von 2- ~23V. Dannach zu niedrig.Z-Diode
O_Shovah 0:42c1addaf061 159
O_Shovah 0:42c1addaf061 160 break;
O_Shovah 0:42c1addaf061 161 }
O_Shovah 0:42c1addaf061 162
O_Shovah 0:42c1addaf061 163 case 3: {
O_Shovah 0:42c1addaf061 164 Aux = Messwert_0;
O_Shovah 0:42c1addaf061 165 Bremsenstrom = Messwert_1;// * 0.00032 - 15.8;
O_Shovah 0:42c1addaf061 166
O_Shovah 0:42c1addaf061 167 break;
O_Shovah 0:42c1addaf061 168 }
O_Shovah 0:42c1addaf061 169
O_Shovah 0:42c1addaf061 170 default: {
O_Shovah 0:42c1addaf061 171 //i =0;
O_Shovah 0:42c1addaf061 172 break;
O_Shovah 0:42c1addaf061 173 }
O_Shovah 0:42c1addaf061 174
O_Shovah 0:42c1addaf061 175 }
O_Shovah 0:42c1addaf061 176
O_Shovah 0:42c1addaf061 177
O_Shovah 0:42c1addaf061 178 Multiplex_select_0 = i&0x01;
O_Shovah 0:42c1addaf061 179 Multiplex_select_1 = (i>>1)&0x01;
O_Shovah 0:42c1addaf061 180 wait(0.001);
O_Shovah 0:42c1addaf061 181 }
O_Shovah 0:42c1addaf061 182
O_Shovah 0:42c1addaf061 183 }
O_Shovah 0:42c1addaf061 184
O_Shovah 0:42c1addaf061 185
O_Shovah 0:42c1addaf061 186
O_Shovah 0:42c1addaf061 187 int rpm_control(float motor_n_cmd, float motor_n_cur)
O_Shovah 0:42c1addaf061 188 {
O_Shovah 0:42c1addaf061 189
O_Shovah 0:42c1addaf061 190 static int motor_pwm_cmd_last = 900;
O_Shovah 0:42c1addaf061 191 //static float motor_n_last = 0;
O_Shovah 0:42c1addaf061 192
O_Shovah 0:42c1addaf061 193 if (motor_n_cmd < 1.0) {
O_Shovah 0:42c1addaf061 194 Motroregler_PWM.pulsewidth_us(900);
O_Shovah 0:42c1addaf061 195 motor_pwm_cmd_last = 900;
O_Shovah 0:42c1addaf061 196 // motor_n_last = 0;
O_Shovah 0:42c1addaf061 197 return 1;
O_Shovah 0:42c1addaf061 198 }
O_Shovah 0:42c1addaf061 199
O_Shovah 0:42c1addaf061 200 float motor_n_dif = motor_n_cmd - motor_n_cur;
O_Shovah 0:42c1addaf061 201
O_Shovah 0:42c1addaf061 202 int motor_pwm_cmd = (int)(motor_pwm_cmd_last + motor_n_dif * 0.6 + 0.5); // round() ... works only for positive values
O_Shovah 0:42c1addaf061 203
O_Shovah 0:42c1addaf061 204 pc.printf("cmd: %7.2f, cur: %7.2f, dif: %7.2f, motor_pwm_cmd: %4d, motor_pwm_dif: %4d, DMS: %f\n\r",
O_Shovah 0:42c1addaf061 205 motor_n_cmd*60, motor_n_cur*60, motor_n_dif*60, motor_pwm_cmd, motor_pwm_cmd-motor_pwm_cmd_last, ((int)DMS_0.read_u16())/65536.0*3.3);
O_Shovah 0:42c1addaf061 206
O_Shovah 0:42c1addaf061 207 if (motor_pwm_cmd > 1900) motor_pwm_cmd = 1900;
O_Shovah 0:42c1addaf061 208 else if (motor_pwm_cmd < 1010) motor_pwm_cmd = 1005;
O_Shovah 0:42c1addaf061 209
O_Shovah 0:42c1addaf061 210 // Bremsenstrom_MOSFET.pulsewidth_us(curr_MOSFET_pwm_pulsewidth);
O_Shovah 0:42c1addaf061 211 Motroregler_PWM.pulsewidth_us(motor_pwm_cmd);
O_Shovah 0:42c1addaf061 212 motor_pwm_cmd_last = motor_pwm_cmd;
O_Shovah 0:42c1addaf061 213
O_Shovah 0:42c1addaf061 214 return 1;
O_Shovah 0:42c1addaf061 215
O_Shovah 0:42c1addaf061 216 }
O_Shovah 0:42c1addaf061 217
O_Shovah 0:42c1addaf061 218 int brk_mosfet_control(float mosfet_pwm_cmd, float mosfet_pwm_cur)
O_Shovah 0:42c1addaf061 219 {
O_Shovah 0:42c1addaf061 220
O_Shovah 0:42c1addaf061 221 static int mosfet_pwm_cmd_last = 0;
O_Shovah 0:42c1addaf061 222
O_Shovah 0:42c1addaf061 223
O_Shovah 0:42c1addaf061 224 if (mosfet_pwm_cmd < 1.0) {
O_Shovah 0:42c1addaf061 225 Motroregler_PWM.pulsewidth_us(00);
O_Shovah 0:42c1addaf061 226 motor_pwm_cmd_last = 900;
O_Shovah 0:42c1addaf061 227 // motor_n_last = 0;
O_Shovah 0:42c1addaf061 228 return 1;
O_Shovah 0:42c1addaf061 229 }
O_Shovah 0:42c1addaf061 230
O_Shovah 0:42c1addaf061 231 float motor_n_dif = motor_n_cmd - motor_n_cur;
O_Shovah 0:42c1addaf061 232
O_Shovah 0:42c1addaf061 233 int motor_pwm_cmd = (int)(motor_pwm_cmd_last + motor_n_dif * 0.6 + 0.5); // round() ... works only for positive values
O_Shovah 0:42c1addaf061 234
O_Shovah 0:42c1addaf061 235 pc.printf("cmd: %7.2f, cur: %7.2f, dif: %7.2f, motor_pwm_cmd: %4d, motor_pwm_dif: %4d, DMS: %f\n\r",
O_Shovah 0:42c1addaf061 236 motor_n_cmd*60, motor_n_cur*60, motor_n_dif*60, motor_pwm_cmd, motor_pwm_cmd-motor_pwm_cmd_last, ((int)DMS_0.read_u16())/65536.0*3.3);
O_Shovah 0:42c1addaf061 237
O_Shovah 0:42c1addaf061 238 if (motor_pwm_cmd > 1900) motor_pwm_cmd = 1900;
O_Shovah 0:42c1addaf061 239 else if (motor_pwm_cmd < 1010) motor_pwm_cmd = 1005;
O_Shovah 0:42c1addaf061 240
O_Shovah 0:42c1addaf061 241 // Bremsenstrom_MOSFET.pulsewidth_us(curr_MOSFET_pwm_pulsewidth);
O_Shovah 0:42c1addaf061 242 Motroregler_PWM.pulsewidth_us(motor_pwm_cmd);
O_Shovah 0:42c1addaf061 243 motor_pwm_cmd_last = motor_pwm_cmd;
O_Shovah 0:42c1addaf061 244
O_Shovah 0:42c1addaf061 245 return 1;
O_Shovah 0:42c1addaf061 246 }
O_Shovah 0:42c1addaf061 247
O_Shovah 0:42c1addaf061 248 void Motor_drehzahl()
O_Shovah 0:42c1addaf061 249 {
O_Shovah 0:42c1addaf061 250 static bool first_run = true;
O_Shovah 0:42c1addaf061 251 // Umlaufzeit.stop();
O_Shovah 0:42c1addaf061 252 int tmp = Umlaufzeit.read_us();
O_Shovah 0:42c1addaf061 253 if (first_run) { Umlaufzeit.start(); first_run = false; return; }
O_Shovah 0:42c1addaf061 254 if (tmp < 1000) return;
O_Shovah 0:42c1addaf061 255
O_Shovah 0:42c1addaf061 256 // Cache last 3 values for averaging
O_Shovah 0:42c1addaf061 257 Drehzeit[Drehzeit_counter % DREHZEIT_SIZE] = tmp;
O_Shovah 0:42c1addaf061 258 ++Drehzeit_counter;
O_Shovah 0:42c1addaf061 259 Umlaufzeit.reset();
O_Shovah 0:42c1addaf061 260 }
O_Shovah 0:42c1addaf061 261
O_Shovah 0:42c1addaf061 262 int main(void)
O_Shovah 0:42c1addaf061 263 {
O_Shovah 0:42c1addaf061 264 // Init networking
O_Shovah 0:42c1addaf061 265 EthernetInterface eth;
O_Shovah 0:42c1addaf061 266 int err = eth.init();
O_Shovah 0:42c1addaf061 267 if (err)
O_Shovah 0:42c1addaf061 268 pc.printf("eth.init() failed. (%d)\n\r", err);
O_Shovah 0:42c1addaf061 269 else
O_Shovah 0:42c1addaf061 270 pc.printf("eth.init() successful.\n\r");
O_Shovah 0:42c1addaf061 271 err = eth.connect();
O_Shovah 0:42c1addaf061 272 if (err)
O_Shovah 0:42c1addaf061 273 pc.printf("eth.connect() failed. (%d)\n\r", err);
O_Shovah 0:42c1addaf061 274 else
O_Shovah 0:42c1addaf061 275 pc.printf("eth.connect() successful.\n\r");
O_Shovah 0:42c1addaf061 276
O_Shovah 0:42c1addaf061 277 char *ip_address = eth.getIPAddress();
O_Shovah 0:42c1addaf061 278 pc.printf("IP-Address: %s\n\r", ip_address);
O_Shovah 0:42c1addaf061 279
O_Shovah 0:42c1addaf061 280 err = udp.init();
O_Shovah 0:42c1addaf061 281 if (err)
O_Shovah 0:42c1addaf061 282 pc.printf("udp.init() failed. (%d)\n\r", err);
O_Shovah 0:42c1addaf061 283 else
O_Shovah 0:42c1addaf061 284 pc.printf("udp.init() successful.\n\r");
O_Shovah 0:42c1addaf061 285
O_Shovah 0:42c1addaf061 286 err = udp_dest.set_address("192.168.0.183", 1234);
O_Shovah 0:42c1addaf061 287 if (err)
O_Shovah 0:42c1addaf061 288 pc.printf("udp_dest.set_address() failed. (%d)\n\r", err);
O_Shovah 0:42c1addaf061 289 else
O_Shovah 0:42c1addaf061 290 pc.printf("udp_dest.set_address() successful.\n\r");
O_Shovah 0:42c1addaf061 291
O_Shovah 0:42c1addaf061 292
O_Shovah 0:42c1addaf061 293 // Init PWM
O_Shovah 0:42c1addaf061 294 Bremsenstrom_MOSFET.period(0.020);
O_Shovah 0:42c1addaf061 295 Motroregler_PWM.period(0.020);
O_Shovah 0:42c1addaf061 296 Motroregler_PWM.pulsewidth_us(900);
O_Shovah 0:42c1addaf061 297
O_Shovah 0:42c1addaf061 298 wait(1.0);
O_Shovah 0:42c1addaf061 299
O_Shovah 0:42c1addaf061 300 Drehzahl_lichtschranke.fall(&Motor_drehzahl);
O_Shovah 0:42c1addaf061 301 ticker_read_sensor.attach(&interr_read_sensors, 1.0);
O_Shovah 0:42c1addaf061 302
O_Shovah 0:42c1addaf061 303 // Time counters
O_Shovah 0:42c1addaf061 304 Timer timer_print, timer_pwm;
O_Shovah 0:42c1addaf061 305 timer_print.start();
O_Shovah 0:42c1addaf061 306 timer_pwm.start();
O_Shovah 0:42c1addaf061 307
O_Shovah 0:42c1addaf061 308 float motor_rpm_cmd = 0;
O_Shovah 0:42c1addaf061 309 float motor_n_cur = 0;
O_Shovah 0:42c1addaf061 310
O_Shovah 0:42c1addaf061 311 pc.printf("Enter motor rpm to begin\n\r");
O_Shovah 0:42c1addaf061 312
O_Shovah 0:42c1addaf061 313 while(true) {
O_Shovah 0:42c1addaf061 314
O_Shovah 0:42c1addaf061 315
O_Shovah 0:42c1addaf061 316 if (pc.readable()) {
O_Shovah 0:42c1addaf061 317 pc.printf("\n\r Motor rpm\n\r");
O_Shovah 0:42c1addaf061 318 pc.scanf("%f",&motor_rpm_cmd);
O_Shovah 0:42c1addaf061 319 pc.printf("%f\n\r",motor_rpm_cmd);
O_Shovah 0:42c1addaf061 320
O_Shovah 0:42c1addaf061 321 }
O_Shovah 0:42c1addaf061 322
O_Shovah 0:42c1addaf061 323 // Calculate motor_n_cur by averaging
O_Shovah 0:42c1addaf061 324 int drehzeit_sum = 0;
O_Shovah 0:42c1addaf061 325 for (int i=0; i != DREHZEIT_SIZE; ++i)
O_Shovah 0:42c1addaf061 326 drehzeit_sum += Drehzeit[i];
O_Shovah 0:42c1addaf061 327
O_Shovah 0:42c1addaf061 328 motor_n_cur = (drehzeit_sum ? (1.0e6/drehzeit_sum)*DREHZEIT_SIZE : 0.0);
O_Shovah 0:42c1addaf061 329
O_Shovah 0:42c1addaf061 330
O_Shovah 0:42c1addaf061 331 // Set motor_n_cur to 0 if the interrupt wasn't called for a specified time
O_Shovah 0:42c1addaf061 332 if (Umlaufzeit.read_ms() > 200)
O_Shovah 0:42c1addaf061 333 motor_n_cur = 0.0;
O_Shovah 0:42c1addaf061 334
O_Shovah 0:42c1addaf061 335
O_Shovah 0:42c1addaf061 336 // Controller is only called every n ms
O_Shovah 0:42c1addaf061 337 if (timer_pwm.read_ms() > 500) {
O_Shovah 0:42c1addaf061 338 // pc.printf("drehzeit_sum: %d, motor_n_cur: %f\n\r", drehzeit_sum, motor_n_cur);
O_Shovah 0:42c1addaf061 339 // pc.printf("%d %d %d\n\r", Drehzeit[0], Drehzeit[1], Drehzeit[2]);
O_Shovah 0:42c1addaf061 340
O_Shovah 0:42c1addaf061 341 timer_pwm.reset();
O_Shovah 0:42c1addaf061 342 rpm_control(motor_rpm_cmd/60.0, motor_n_cur);
O_Shovah 0:42c1addaf061 343 }
O_Shovah 0:42c1addaf061 344
O_Shovah 0:42c1addaf061 345 // Myled = 0;
O_Shovah 0:42c1addaf061 346
O_Shovah 0:42c1addaf061 347 // wait (0.5);
O_Shovah 0:42c1addaf061 348
O_Shovah 0:42c1addaf061 349
O_Shovah 0:42c1addaf061 350
O_Shovah 0:42c1addaf061 351
O_Shovah 0:42c1addaf061 352 /*
O_Shovah 0:42c1addaf061 353 if (timer_print.read_ms() > 1000) {
O_Shovah 0:42c1addaf061 354 timer_print.reset();
O_Shovah 0:42c1addaf061 355
O_Shovah 0:42c1addaf061 356 pc.printf(" [%Temperatur0, Motorspannung]; 0 %5.2f deg; 1 %5.2f V;", Temperatur_0, Motorspannung);
O_Shovah 0:42c1addaf061 357 pc.printf(" [%Temperatur1, Motorstrom]; 0 %5.2f deg; 1 %5.2f A;", Temperatur_1, Motorstrom);
O_Shovah 0:42c1addaf061 358 pc.printf(" [%Temperatur0, Bremsenspannung]; 0 %5.2f deg; 1 %5.2f V;", Temperatur_2, Bremsenspannung);
O_Shovah 0:42c1addaf061 359 pc.printf(" [Aux, Bremsenstrom]; 0 %5.2f NA; 1 %5.2f A;", Aux, Bremsenstrom);
O_Shovah 0:42c1addaf061 360
O_Shovah 0:42c1addaf061 361 float drehzahl = (Drehzeit ? 1.0e6/Drehzeit : 0.0);
O_Shovah 0:42c1addaf061 362 pc.printf("\n\rCounter: %d, Drehzahl: %f rpm (%f Hz)\n\r\n\r", Drehzeit_counter, drehzahl*60, drehzahl);
O_Shovah 0:42c1addaf061 363
O_Shovah 0:42c1addaf061 364 char udb_buf[] = "123";
O_Shovah 0:42c1addaf061 365 err = udp.sendTo(udp_dest, udb_buf, sizeof(udb_buf));
O_Shovah 0:42c1addaf061 366 if (err == -1)
O_Shovah 0:42c1addaf061 367 pc.printf("udp.sendTo() failed. (%d)\n\r", err);
O_Shovah 0:42c1addaf061 368 }
O_Shovah 0:42c1addaf061 369 */
O_Shovah 0:42c1addaf061 370 }
O_Shovah 0:42c1addaf061 371 }