torque sensor thing

Dependencies:   mbed

Committer:
adimmit
Date:
Tue Jul 20 19:36:33 2021 +0000
Revision:
2:ab65342daec8
Parent:
1:6b03278584b2
latest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adimmit 0:f4f2a7b3364c 1 #include "mbed.h"
adimmit 0:f4f2a7b3364c 2 #include "math_ops.h"
adimmit 0:f4f2a7b3364c 3
adimmit 2:ab65342daec8 4 #define MIN -5.0f
adimmit 2:ab65342daec8 5 #define MAX 5.0f
adimmit 0:f4f2a7b3364c 6
adimmit 0:f4f2a7b3364c 7 /*
adimmit 0:f4f2a7b3364c 8 This basic example just shows how to read the ADC internal channels raw values.
adimmit 0:f4f2a7b3364c 9 Please look in the corresponding device reference manual for a complete
adimmit 0:f4f2a7b3364c 10 description of how to make a temperature sensor, VBat or Vref measurement.
adimmit 0:f4f2a7b3364c 11 */
adimmit 0:f4f2a7b3364c 12
adimmit 0:f4f2a7b3364c 13 //setup SERIAL
adimmit 0:f4f2a7b3364c 14 Serial pc(PA_2, PA_3);
adimmit 0:f4f2a7b3364c 15
adimmit 2:ab65342daec8 16 //setup analog inputs
adimmit 2:ab65342daec8 17 AnalogIn torque_sense(PC_0);
adimmit 2:ab65342daec8 18 float SENSE_CONV_FACTOR = 10.0; //-10v to 10v --> -100Nm to 100Nm
adimmit 2:ab65342daec8 19 float SYSTEM_VOLTAGE = 3.3; //volts
adimmit 0:f4f2a7b3364c 20
adimmit 2:ab65342daec8 21 //moving average filter
adimmit 2:ab65342daec8 22 #define M_POINTS 2
adimmit 2:ab65342daec8 23 float points[M_POINTS] = {0.0, 0.0};
adimmit 1:6b03278584b2 24
adimmit 0:f4f2a7b3364c 25 //setup CAN
adimmit 0:f4f2a7b3364c 26 CAN can(PA_11, PA_12, 1000000); // CAN Rx pin name, CAN Tx pin name
adimmit 1:6b03278584b2 27 CANMessage tauMsg;
adimmit 0:f4f2a7b3364c 28 int ledState;
adimmit 0:f4f2a7b3364c 29 Ticker sendCAN;
adimmit 0:f4f2a7b3364c 30 int counter = 0;
adimmit 0:f4f2a7b3364c 31 volatile bool msgAvailable = false;
adimmit 0:f4f2a7b3364c 32 Ticker loop;
adimmit 0:f4f2a7b3364c 33
adimmit 2:ab65342daec8 34 float MOVING_AVERAGE(float new_point) {
adimmit 2:ab65342daec8 35 //first let's update the object points and calculate the SUM
adimmit 2:ab65342daec8 36 float SUM = 0.0;
adimmit 2:ab65342daec8 37 int i;
adimmit 2:ab65342daec8 38 for ( i = 0; i < M_POINTS-1; i = i + 1) {
adimmit 2:ab65342daec8 39 points[i] = points[i+1];
adimmit 2:ab65342daec8 40 SUM = SUM + points[i];
adimmit 2:ab65342daec8 41 }
adimmit 2:ab65342daec8 42 points[M_POINTS-1] = new_point;
adimmit 2:ab65342daec8 43 SUM = SUM + new_point;
adimmit 2:ab65342daec8 44 return SUM / float(M_POINTS);
adimmit 2:ab65342daec8 45 }
adimmit 2:ab65342daec8 46
adimmit 1:6b03278584b2 47 void pack_cmd(CANMessage * msg, float f1){
adimmit 0:f4f2a7b3364c 48 /// convert floats to unsigned ints ///
adimmit 0:f4f2a7b3364c 49 uint16_t f1_int = float_to_uint(f1, MIN, MAX, 16);
adimmit 0:f4f2a7b3364c 50 msg->data[0] = f1_int>>8;
adimmit 0:f4f2a7b3364c 51 msg->data[1] = f1_int&0xFF;
adimmit 0:f4f2a7b3364c 52 }
adimmit 0:f4f2a7b3364c 53
adimmit 0:f4f2a7b3364c 54 int main()
adimmit 0:f4f2a7b3364c 55 {
adimmit 0:f4f2a7b3364c 56 wait(1);
adimmit 0:f4f2a7b3364c 57 pc.baud(115200);
adimmit 0:f4f2a7b3364c 58 wait(.01);
adimmit 1:6b03278584b2 59 pc.printf("\n\r\n\r Biomimetics Torque Sense Board\n\r\n\r");
adimmit 0:f4f2a7b3364c 60 wait(.01);
adimmit 0:f4f2a7b3364c 61
adimmit 1:6b03278584b2 62 tauMsg.len = 2; //transmit 4 bytes
adimmit 2:ab65342daec8 63 tauMsg.id = 0x1; //higher priority
adimmit 0:f4f2a7b3364c 64
adimmit 0:f4f2a7b3364c 65 while(1){
adimmit 2:ab65342daec8 66 //wait(0.0003); //MAKE SURE IT's 1-3k rate, higher we will fill the CAN buffer
adimmit 2:ab65342daec8 67 float v_tau = torque_sense.read()*SYSTEM_VOLTAGE; //PUBLISH
adimmit 2:ab65342daec8 68 float tau = v_tau;
adimmit 0:f4f2a7b3364c 69
adimmit 2:ab65342daec8 70 //calc the moving average
adimmit 2:ab65342daec8 71 //tau = MOVING_AVERAGE(tau);
adimmit 0:f4f2a7b3364c 72
adimmit 2:ab65342daec8 73 //pc.printf("%f\n", tau);
adimmit 0:f4f2a7b3364c 74
adimmit 2:ab65342daec8 75 //now we have to publish the float to the CAN BUS
adimmit 2:ab65342daec8 76 pack_cmd(&tauMsg, tau);
adimmit 1:6b03278584b2 77 can.write(tauMsg);
adimmit 0:f4f2a7b3364c 78 wait(.00002);
adimmit 0:f4f2a7b3364c 79 }
adimmit 0:f4f2a7b3364c 80 }