2014 sift / Mbed 2 deprecated TVDctrller2017_brdRev1_PandA

Dependencies:   mbed

Fork of TVDctrller2017_brdRev1_ver6 by 2014 sift

Committer:
sift
Date:
Mon Jul 03 12:03:34 2017 +0000
Revision:
28:47e9531a3a9d
Parent:
27:37a8b4f6d28d
Child:
29:a51cb2cf22ae
?????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sift 0:276c1dab2d62 1 #include "mbed.h"
sift 0:276c1dab2d62 2 #include "TVDCTRL.h"
sift 2:9d69f27a3d3b 3 #include "Steering.h"
sift 0:276c1dab2d62 4 #include "MCP4922.h"
sift 25:c21d35c7f0de 5 #include "Global.h"
sift 0:276c1dab2d62 6
sift 2:9d69f27a3d3b 7 Serial pc(USBTX, USBRX); // tx, rx
sift 2:9d69f27a3d3b 8
sift 0:276c1dab2d62 9 ////////////////////////////////////////
sift 0:276c1dab2d62 10 //IO宣言
sift 0:276c1dab2d62 11 SPI spi(p5,p6,p7);
sift 24:1de0291bc5eb 12 MCP4922 mcp(p5,p7,p8); // MOSI, SCLK, CS
sift 24:1de0291bc5eb 13 DigitalOut ioExpCs(p9);
sift 24:1de0291bc5eb 14 DigitalOut indicatorLed(p10);
sift 24:1de0291bc5eb 15 DigitalOut shutDown(p11);
sift 24:1de0291bc5eb 16 DigitalOut brakeSignal(p12);
sift 25:c21d35c7f0de 17 DigitalIn sdState(p13);
sift 24:1de0291bc5eb 18 DigitalIn RTDSW(p14);
sift 24:1de0291bc5eb 19 AnalogIn apsS(p15); //"S"econdary
sift 24:1de0291bc5eb 20 AnalogIn apsP(p16); //"P"rimary
sift 0:276c1dab2d62 21 AnalogIn brake(p17);
sift 19:571a4d00b89c 22 AnalogOut STR2AN(p18);
sift 24:1de0291bc5eb 23 DigitalIn SLCTSW[3] = {p19, p20, p21};
sift 24:1de0291bc5eb 24 InterruptIn rightMotorPulse(p22);
sift 24:1de0291bc5eb 25 InterruptIn leftMotorPulse(p23);
sift 24:1de0291bc5eb 26 InterruptIn rightTirePulse1(p24);
sift 24:1de0291bc5eb 27 InterruptIn rightTirePulse2(p25);
sift 24:1de0291bc5eb 28 InterruptIn leftTirePulse1(p26);
sift 24:1de0291bc5eb 29 InterruptIn leftTirePulse2(p27);
sift 24:1de0291bc5eb 30 DigitalOut WDT(p28);
sift 19:571a4d00b89c 31 CAN can(p30, p29);
sift 27:37a8b4f6d28d 32 DigitalOut LED[] = {LED1, LED2, LED3, LED4};
sift 0:276c1dab2d62 33
sift 27:37a8b4f6d28d 34 Timer timer;
sift 0:276c1dab2d62 35
sift 0:276c1dab2d62 36 #define indicateSystem(x) (indicatorLed.write(x))
sift 0:276c1dab2d62 37 #define shutdownSystem(void) (shutDown.write(0))
sift 0:276c1dab2d62 38 #define bootSystem(void) (shutDown.write(1))
sift 0:276c1dab2d62 39 #define isPressedRTD(void) (!RTDSW.read())
sift 0:276c1dab2d62 40 #define isShutdownSystem(void) (SDState.read())
sift 0:276c1dab2d62 41
sift 27:37a8b4f6d28d 42 //++++++++++++++++++++++++++
sift 28:47e9531a3a9d 43 //CAN ID
sift 28:47e9531a3a9d 44 #define CANID_BRAKE 0xF1
sift 28:47e9531a3a9d 45 #define CANID_REQTRQ 0xF2
sift 28:47e9531a3a9d 46 #define CANID_MOTORTRQ 0xF3
sift 28:47e9531a3a9d 47 #define CANID_STEERING 0xF4
sift 28:47e9531a3a9d 48 #define CANID_WHEELSPEED 0xF5
sift 28:47e9531a3a9d 49 #define CANID_MOTORSPEED 0xF6
sift 28:47e9531a3a9d 50 #define CANID_VEHICLESPEED 0xF7
sift 28:47e9531a3a9d 51 //++++++++++++++++++++++++++
sift 28:47e9531a3a9d 52
sift 28:47e9531a3a9d 53 //++++++++++++++++++++++++++
sift 27:37a8b4f6d28d 54 //CANデータのバイト数
sift 28:47e9531a3a9d 55 #define CANDATANUM_BRAKE 1
sift 28:47e9531a3a9d 56 #define CANDATANUM_REQTRQ 4
sift 28:47e9531a3a9d 57 #define CANDATANUM_MOTORTRQ 8
sift 28:47e9531a3a9d 58 #define CANDATANUM_STEERING 1
sift 28:47e9531a3a9d 59 #define CANDATANUM_WHEELSPEED 4
sift 28:47e9531a3a9d 60 #define CANDATANUM_MOTORSPEED 4
sift 28:47e9531a3a9d 61 #define CANDATANUM_VEHICLESPEED 2
sift 27:37a8b4f6d28d 62 //++++++++++++++++++++++++++
sift 2:9d69f27a3d3b 63
sift 28:47e9531a3a9d 64 void writeCanBuff(int data, char* buff, int byteNum)
sift 28:47e9531a3a9d 65 {
sift 28:47e9531a3a9d 66 for(int i=0; i<byteNum; i++) {
sift 28:47e9531a3a9d 67 buff[i] = 0xff & (data >> (i*8));
sift 28:47e9531a3a9d 68 }
sift 28:47e9531a3a9d 69 }
sift 28:47e9531a3a9d 70
sift 27:37a8b4f6d28d 71 void init(void)
sift 0:276c1dab2d62 72 {
sift 0:276c1dab2d62 73 indicatorLed = 0;
sift 0:276c1dab2d62 74 shutDown = 0;
sift 25:c21d35c7f0de 75 brakeSignal = 0;
sift 0:276c1dab2d62 76 LED[0] = LED[1] = LED[2] = LED[3] = 0;
sift 0:276c1dab2d62 77
sift 25:c21d35c7f0de 78 sdState.mode(PullNone);
sift 25:c21d35c7f0de 79 RTDSW.mode(PullNone);
sift 25:c21d35c7f0de 80 SLCTSW[0].mode(PullNone);
sift 25:c21d35c7f0de 81 SLCTSW[1].mode(PullNone);
sift 25:c21d35c7f0de 82 SLCTSW[2].mode(PullNone);
sift 26:331e77bb479b 83
sift 25:c21d35c7f0de 84 rightMotorPulse.mode(PullNone);
sift 25:c21d35c7f0de 85 leftMotorPulse.mode(PullNone);
sift 25:c21d35c7f0de 86 rightTirePulse1.mode(PullNone);
sift 25:c21d35c7f0de 87 rightTirePulse2.mode(PullNone);
sift 25:c21d35c7f0de 88 leftTirePulse1.mode(PullNone);
sift 25:c21d35c7f0de 89 leftTirePulse2.mode(PullNone);
sift 26:331e77bb479b 90
sift 27:37a8b4f6d28d 91 can.frequency(500000); //500kHz
sift 27:37a8b4f6d28d 92
sift 2:9d69f27a3d3b 93 indicateSystem(1);
sift 2:9d69f27a3d3b 94 bootSystem();
sift 0:276c1dab2d62 95 }
sift 0:276c1dab2d62 96
sift 1:4d86ec2fe4b1 97 int main(void)
sift 0:276c1dab2d62 98 {
sift 28:47e9531a3a9d 99 char canBrake[CANDATANUM_BRAKE]= {0};
sift 28:47e9531a3a9d 100 char canRequestTorque[CANDATANUM_REQTRQ]= {0};
sift 28:47e9531a3a9d 101 char canMotorTorque[CANDATANUM_MOTORTRQ]= {0};
sift 28:47e9531a3a9d 102 char canSteer[CANDATANUM_STEERING]= {0};
sift 28:47e9531a3a9d 103 char canMotorSpeed[CANDATANUM_MOTORSPEED]= {0};
sift 28:47e9531a3a9d 104 char canWheelSpeed[CANDATANUM_WHEELSPEED]= {0};
sift 28:47e9531a3a9d 105 char canVehicleSpeed[CANDATANUM_VEHICLESPEED]= {0};
sift 26:331e77bb479b 106
sift 25:c21d35c7f0de 107 wait(1);
sift 6:26fa8c78500e 108
sift 25:c21d35c7f0de 109 pc.baud(115200);
sift 26:331e77bb479b 110 printf("\033[2J"); //teratermの画面クリア
sift 25:c21d35c7f0de 111 printf("\033[1;1H"); //teratermの画面クリア
sift 25:c21d35c7f0de 112 printf("\r\nVersion:TVDctrller2017_brdRev1...start!!!!!\r\n");
sift 1:4d86ec2fe4b1 113
sift 27:37a8b4f6d28d 114 init(); //IOポート初期化
sift 0:276c1dab2d62 115
sift 1:4d86ec2fe4b1 116 initTVD();
sift 1:4d86ec2fe4b1 117
sift 2:9d69f27a3d3b 118 initSteering();
sift 2:9d69f27a3d3b 119
sift 2:9d69f27a3d3b 120 timer.start();
sift 12:ae291fa7239c 121
sift 2:9d69f27a3d3b 122 float time;
sift 2:9d69f27a3d3b 123
sift 12:ae291fa7239c 124 struct errCounter_t eCounter= {0,0,0,0,0,0,0,0};
sift 26:331e77bb479b 125
sift 26:331e77bb479b 126 wait(1);
sift 26:331e77bb479b 127
sift 1:4d86ec2fe4b1 128 while(1) {
sift 14:7cc98e159c6e 129 //getCurrentErrCount(&eCounter);
sift 26:331e77bb479b 130
sift 2:9d69f27a3d3b 131 timer.reset();
sift 1:4d86ec2fe4b1 132
sift 26:331e77bb479b 133 driveTVD(0, isPressedRTD());
sift 6:26fa8c78500e 134
sift 3:821e2f07a260 135 //printf("%f\n\r", 45.0/0xFFFF * calcRequestTorque());
sift 6:26fa8c78500e 136
sift 28:47e9531a3a9d 137 writeCanBuff(isBrakeOn(), canBrake, CANDATANUM_BRAKE);
sift 28:47e9531a3a9d 138 writeCanBuff(calcRequestTorque(), canRequestTorque, CANDATANUM_REQTRQ);
sift 28:47e9531a3a9d 139 writeCanBuff(getMotorTorque(RIGHT) + (getMotorTorque(LEFT) << 16), canMotorTorque, CANDATANUM_MOTORTRQ);
sift 28:47e9531a3a9d 140 writeCanBuff(getSteerAngle(), canSteer, CANDATANUM_STEERING);
sift 28:47e9531a3a9d 141 writeCanBuff(getRPS(RIGHT, 0) + (getRPS(LEFT, 0)<<16), canMotorSpeed, CANDATANUM_MOTORSPEED);
sift 28:47e9531a3a9d 142 writeCanBuff(getRPS(RIGHT, 1) + (getRPS(LEFT, 1)<<16), canWheelSpeed, CANDATANUM_WHEELSPEED);
sift 28:47e9531a3a9d 143 writeCanBuff(getVelocity() / 0.1f, canVehicleSpeed, CANDATANUM_VEHICLESPEED);
sift 27:37a8b4f6d28d 144
sift 28:47e9531a3a9d 145 //can.write(CANMessage(CANID_BRAKE, canBrake, CANDATANUM_BRAKE));
sift 28:47e9531a3a9d 146 can.write(CANMessage(CANID_REQTRQ, canRequestTorque, CANDATANUM_REQTRQ));
sift 28:47e9531a3a9d 147 can.write(CANMessage(CANID_MOTORTRQ, canMotorTorque, CANDATANUM_MOTORTRQ));
sift 28:47e9531a3a9d 148 can.write(CANMessage(CANID_STEERING, canSteer, CANDATANUM_STEERING));
sift 28:47e9531a3a9d 149 can.write(CANMessage(CANID_WHEELSPEED, canMotorSpeed, CANDATANUM_MOTORSPEED));
sift 28:47e9531a3a9d 150 can.write(CANMessage(CANID_MOTORSPEED, canWheelSpeed, CANDATANUM_WHEELSPEED));
sift 28:47e9531a3a9d 151 can.write(CANMessage(CANID_VEHICLESPEED, canVehicleSpeed, CANDATANUM_VEHICLESPEED));
sift 27:37a8b4f6d28d 152
sift 2:9d69f27a3d3b 153 //printf("%1.6f\r\n", time);
sift 12:ae291fa7239c 154 //printf("%d\r\n", eCounter.brakeOverRide);
sift 2:9d69f27a3d3b 155 time = timer.read();
sift 25:c21d35c7f0de 156 while(timer.read_ms() < CONTROL_CYCLE_MS); //制御周期管理 関数内処理時間より短い時間の制御周期の設定は禁止
sift 26:331e77bb479b 157
sift 13:6dc51981f391 158 //printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t\r\n", eCounter.apsUnderVolt, eCounter.apsExceedVolt, eCounter.apsErrorTolerance, eCounter.apsStick, eCounter.brakeUnderVolt, eCounter.brakeExceedVolt, eCounter.brakeFuzzyVolt, eCounter.brakeOverRide);
sift 25:c21d35c7f0de 159 //printf("apsP:%1.2f, apsS:%1.2f, brake:%1.2f\r", 3.3f/65535 * getRawSensor(APS_PRIMARY), 3.3f/65535 * getRawSensor(APS_SECONDARY), 3.3f/65535 * getRawSensor(BRAKE));
sift 0:276c1dab2d62 160 }
sift 2:9d69f27a3d3b 161 }