Shohei Kamiguchi / Mbed 2 deprecated Iwatobi_Power_Modulebn

Dependencies:   mbed

Committer:
kintoki231
Date:
Sun Nov 15 14:00:03 2020 +0000
Revision:
0:b44e107ade58
Child:
1:4a358f08c963
first commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kintoki231 0:b44e107ade58 1
kintoki231 0:b44e107ade58 2 #include "mbed.h"
kintoki231 0:b44e107ade58 3
kintoki231 0:b44e107ade58 4 //#define USB_DEBUG
kintoki231 0:b44e107ade58 5 #define SIMPLE_USE
kintoki231 0:b44e107ade58 6 const int kModuleID = 1;
kintoki231 0:b44e107ade58 7
kintoki231 0:b44e107ade58 8 int sluster_up = 0;
kintoki231 0:b44e107ade58 9
kintoki231 0:b44e107ade58 10 float battery_voltage;
kintoki231 0:b44e107ade58 11 float motor_current;
kintoki231 0:b44e107ade58 12 int sluster_power;
kintoki231 0:b44e107ade58 13 int pump_power;
kintoki231 0:b44e107ade58 14
kintoki231 0:b44e107ade58 15 const float k_vbat_offset[] = {
kintoki231 0:b44e107ade58 16 1.4f,
kintoki231 0:b44e107ade58 17 0.6f
kintoki231 0:b44e107ade58 18 };
kintoki231 0:b44e107ade58 19 const float k_Im_offset[] = {
kintoki231 0:b44e107ade58 20 0.0f,
kintoki231 0:b44e107ade58 21 0.0f
kintoki231 0:b44e107ade58 22 };
kintoki231 0:b44e107ade58 23
kintoki231 0:b44e107ade58 24 DigitalOut led[] = {
kintoki231 0:b44e107ade58 25 DigitalOut(PA_4),
kintoki231 0:b44e107ade58 26 DigitalOut(PA_5),
kintoki231 0:b44e107ade58 27 DigitalOut(PA_6),
kintoki231 0:b44e107ade58 28 };
kintoki231 0:b44e107ade58 29 DigitalOut user[] = {
kintoki231 0:b44e107ade58 30 DigitalOut(PB_1),
kintoki231 0:b44e107ade58 31 DigitalOut(PF_0),
kintoki231 0:b44e107ade58 32 DigitalOut(PF_1),
kintoki231 0:b44e107ade58 33 };
kintoki231 0:b44e107ade58 34 DigitalOut xbee_nreset(PB_5);
kintoki231 0:b44e107ade58 35 AnalogIn raw_battery_voltage(PA_1);
kintoki231 0:b44e107ade58 36 AnalogIn raw_motor_shunt_voltage(PA_0);
kintoki231 0:b44e107ade58 37 //DigitalOut sluster(PA_8);
kintoki231 0:b44e107ade58 38 //DigitalOut pump(PA_11);
kintoki231 0:b44e107ade58 39 DigitalOut pump(PA_8);
kintoki231 0:b44e107ade58 40 DigitalOut sluster(PA_11); //修正
kintoki231 0:b44e107ade58 41 #ifndef USE_DEBUG
kintoki231 0:b44e107ade58 42 Serial xbee(PA_9, PA_10);
kintoki231 0:b44e107ade58 43 #else
kintoki231 0:b44e107ade58 44 Serial xbee(USBTX, USBRX);
kintoki231 0:b44e107ade58 45 #endif
kintoki231 0:b44e107ade58 46
kintoki231 0:b44e107ade58 47 Ticker pwm;
kintoki231 0:b44e107ade58 48
kintoki231 0:b44e107ade58 49 void myPWM(void)
kintoki231 0:b44e107ade58 50 {
kintoki231 0:b44e107ade58 51 static int t = 0;
kintoki231 0:b44e107ade58 52 if(t == 100){
kintoki231 0:b44e107ade58 53 sluster = 0;
kintoki231 0:b44e107ade58 54 pump = 0;
kintoki231 0:b44e107ade58 55 t = 0;
kintoki231 0:b44e107ade58 56 return;
kintoki231 0:b44e107ade58 57 }
kintoki231 0:b44e107ade58 58 if(t == 100-sluster_power)
kintoki231 0:b44e107ade58 59 sluster = 1;
kintoki231 0:b44e107ade58 60 if(t == 100-pump_power)
kintoki231 0:b44e107ade58 61 pump = 1;
kintoki231 0:b44e107ade58 62 t++;
kintoki231 0:b44e107ade58 63 }
kintoki231 0:b44e107ade58 64
kintoki231 0:b44e107ade58 65 void SerialReceive(void)
kintoki231 0:b44e107ade58 66 {
kintoki231 0:b44e107ade58 67 char message = xbee.getc();
kintoki231 0:b44e107ade58 68 while(xbee.readable()) // bufferを綺麗に
kintoki231 0:b44e107ade58 69 xbee.getc();
kintoki231 0:b44e107ade58 70
kintoki231 0:b44e107ade58 71 switch (message) {
kintoki231 0:b44e107ade58 72 case 'a':
kintoki231 0:b44e107ade58 73 sluster_up = 35;
kintoki231 0:b44e107ade58 74 break;
kintoki231 0:b44e107ade58 75 case 'u':
kintoki231 0:b44e107ade58 76 sluster_power += 5;
kintoki231 0:b44e107ade58 77 break;
kintoki231 0:b44e107ade58 78 case 'd':
kintoki231 0:b44e107ade58 79 sluster_power -= 5;
kintoki231 0:b44e107ade58 80 break;
kintoki231 0:b44e107ade58 81 case '+':
kintoki231 0:b44e107ade58 82 pump_power += 5;
kintoki231 0:b44e107ade58 83 break;
kintoki231 0:b44e107ade58 84 case '-':
kintoki231 0:b44e107ade58 85 pump_power -= 5;
kintoki231 0:b44e107ade58 86 break;
kintoki231 0:b44e107ade58 87 default :
kintoki231 0:b44e107ade58 88 sluster_power = 0;
kintoki231 0:b44e107ade58 89 pump_power = 0;
kintoki231 0:b44e107ade58 90 sluster_up = 0;
kintoki231 0:b44e107ade58 91 break;
kintoki231 0:b44e107ade58 92 }
kintoki231 0:b44e107ade58 93
kintoki231 0:b44e107ade58 94 if (sluster_power > 95){
kintoki231 0:b44e107ade58 95 sluster_power = 95;
kintoki231 0:b44e107ade58 96 } else if (sluster_power < 0) {
kintoki231 0:b44e107ade58 97 sluster_power = 0;
kintoki231 0:b44e107ade58 98 }
kintoki231 0:b44e107ade58 99
kintoki231 0:b44e107ade58 100 if (pump_power > 95){
kintoki231 0:b44e107ade58 101 pump_power = 95;
kintoki231 0:b44e107ade58 102 } else if (pump_power < 0) {
kintoki231 0:b44e107ade58 103 pump_power = 0;
kintoki231 0:b44e107ade58 104 }
kintoki231 0:b44e107ade58 105 led[2] =~ led[2];
kintoki231 0:b44e107ade58 106 }
kintoki231 0:b44e107ade58 107
kintoki231 0:b44e107ade58 108 int main()
kintoki231 0:b44e107ade58 109 {
kintoki231 0:b44e107ade58 110 // Initialization
kintoki231 0:b44e107ade58 111 pump_power = 0;
kintoki231 0:b44e107ade58 112 sluster_power = 0;
kintoki231 0:b44e107ade58 113 pwm.attach_us(myPWM, 100); // original PWM function
kintoki231 0:b44e107ade58 114 //sluster.period_ms(1);
kintoki231 0:b44e107ade58 115 //pump.period_ms(1);
kintoki231 0:b44e107ade58 116 xbee_nreset = 1; // xBee nreset
kintoki231 0:b44e107ade58 117 xbee.baud(9600);
kintoki231 0:b44e107ade58 118 xbee.attach(SerialReceive,Serial::RxIrq);
kintoki231 0:b44e107ade58 119
kintoki231 0:b44e107ade58 120 // start motion
kintoki231 0:b44e107ade58 121 wait(1);
kintoki231 0:b44e107ade58 122 #ifdef USB_DEBUG
kintoki231 0:b44e107ade58 123 xbee.printf("2020 Project Iwatobi, PowerModule ID : %02d\n", kModuleID);
kintoki231 0:b44e107ade58 124 #else
kintoki231 0:b44e107ade58 125 xbee.printf("PM : %02d\n", kModuleID);
kintoki231 0:b44e107ade58 126 #endif
kintoki231 0:b44e107ade58 127 wait(1);
kintoki231 0:b44e107ade58 128 led[0] = 1;
kintoki231 0:b44e107ade58 129
kintoki231 0:b44e107ade58 130
kintoki231 0:b44e107ade58 131 while(1) {
kintoki231 0:b44e107ade58 132 //sluster.write(0.01*sluster_power);
kintoki231 0:b44e107ade58 133 //pump.write(0.01*pump_power);
kintoki231 0:b44e107ade58 134 if ((sluster_up > 0)&&(sluster_up > sluster_power)){
kintoki231 0:b44e107ade58 135 sluster_power+=20;
kintoki231 0:b44e107ade58 136 }
kintoki231 0:b44e107ade58 137 battery_voltage = k_vbat_offset[kModuleID] + raw_battery_voltage.read() * 33.0f; // 10.0 * 3.3
kintoki231 0:b44e107ade58 138 motor_current = k_Im_offset[kModuleID] + raw_motor_shunt_voltage * 33.0f; // 10.0 * 3.3
kintoki231 0:b44e107ade58 139 led[1] =~ led[1];
kintoki231 0:b44e107ade58 140 #ifndef SIMPLE_USE
kintoki231 0:b44e107ade58 141 #ifdef USB_DEBUG
kintoki231 0:b44e107ade58 142 xbee.printf("p1 : %03d, p2 : %03d\n", sluster_power, pump_power);
kintoki231 0:b44e107ade58 143 xbee.printf("Vbat : %2.1f [V], Im : %2.1f [A]\n", battery_voltage, motor_current);
kintoki231 0:b44e107ade58 144 #else
kintoki231 0:b44e107ade58 145 xbee.printf("%03d, %03d, %2.1f, %2.1f\n", sluster_power, pump_power, battery_voltage, motor_current);
kintoki231 0:b44e107ade58 146 #endif
kintoki231 0:b44e107ade58 147 #else
kintoki231 0:b44e107ade58 148 xbee.printf("PM : %02d\n", kModuleID);
kintoki231 0:b44e107ade58 149 #endif
kintoki231 0:b44e107ade58 150 wait(0.5);
kintoki231 0:b44e107ade58 151 }
kintoki231 0:b44e107ade58 152 }