Log in

View Full Version : Current Sensor


Joshua May
08-02-2004, 20:35
Does anyone have anything on programming the code for the current sensor. All I really need to know is what type of input the sensor is, what type of value it returns, and the range of the value (and perhaps that value's meaning)

WillyC
08-02-2004, 22:05
Does anyone have anything on programming the code for the current sensor. All I really need to know is what type of input the sensor is, what type of value it returns, and the range of the value (and perhaps that value's meaning)

Look here (www.usfirst.org/robotics/2004/specsheets.htm) at the current sensor document from the usfirst.org website.

Wire the sensor up to a PWM cable and plug it into one of the analog inputs on the FRC.

The current sensor gives an analog output voltage between 0 and 5 volts. The output voltage corresponds linearly to the current measured, with 0 volts = -75 amps, 2.5 volts = 0 amps, and 5 volts = 75 amps. Look at the graphs in the documentation I've attached for more info on the voltage vs. current characteristics. Use your program to read the analog voltage, then calculate the corresponding current using these characteristics (we just use a linear y = mx+b calculation).

If you need help getting your software to read the analog value, look at the 2004 Programming Reference Guide available here (www.innovationfirst.com/FIRSTRobotics/documentation.htm).

Hope this helps! Good luck, and let me know if you need any more help.

Joshua May
08-02-2004, 23:47
This should work, thank you!

Dale(294engr]
09-02-2004, 22:28
Look here (www.usfirst.org/robotics/2004/specsheets.htm) at the current sensor document from the usfirst.org website.

Wire the sensor up to a PWM cable and plug it into one of the analog inputs on the FRC.

The current sensor gives an analog output voltage between 0 and 5 volts. The output voltage corresponds linearly to the current measured, with 0 volts = -75 amps, 2.5 volts = 0 amps, and 5 volts = 75 amps. Look at the graphs in the documentation I've attached for more info on the voltage vs. current characteristics. Use your program to read the analog voltage, then calculate the corresponding current using these characteristics (we just use a linear y = mx+b calculation).

If you need help getting your software to read the analog value, look at the 2004 Programming Reference Guide available here (www.innovationfirst.com/FIRSTRobotics/documentation.htm).

Hope this helps! Good luck, and let me know if you need any more help.


ACS NOTE RANGE:
1Vout = -75A
2.5Vout = 0A
4Vout = 75A

(0V ~-100A, 5V ~+100A, not guaranteed linear)
see my replies posted elsewhere

UCMHSrobotics
11-02-2004, 16:40
I checked the programming guide, and I couldn't find anything on the current sensor. It would be great if someone could explain the programming to me or just give me some code for the current sensors. Thanks!

Joshua May
11-02-2004, 20:37
I checked the programming guide, and I couldn't find anything on the current sensor. It would be great if someone could explain the programming to me or just give me some code for the current sensors. Thanks!

I have written some code for the current sensor, but it doesn't do anything but display the sensor's data. You can put this in the final lines of user_routines_fast.c where your own code for every loop can be placed:



/* The formula comes from the equation of the line from the data by Willy C */
/* For this to work, the current sensors must be connected to Analog Inputs 1 and 2 */

#define Amps1 (rc_ana_in01 * 30) - 75
#define Amps2 (rc_ana_in02 * 30) - 75

printf("1st Sensor: %d\n", Amps1);
printf("2nd Sensor: %d\n", Amps2);

WillyC
12-02-2004, 10:48
I have written some code for the current sensor, but it doesn't do anything but display the sensor's data. You can put this in the final lines of user_routines_fast.c where your own code for every loop can be placed:



/* The formula comes from the equation of the line from the data by Willy C */
/* For this to work, the current sensors must be connected to Analog Inputs 1 and 2 */

#define Amps1 (rc_ana_in01 * 30) - 75
#define Amps2 (rc_ana_in02 * 30) - 75

printf("1st Sensor: %d\n", Amps1);
printf("2nd Sensor: %d\n", Amps2);



Be careful here guys. I made a mistake in my earlier post when I quoted the Volts vs. Amps characteristics of the current sensors, which Dale was nice enough to correct. Here are the correct values:

]

ACS NOTE RANGE:
1Vout = -75A
2.5Vout = 0A
4Vout = 75A



The characteristic is (almost perfectly) linear between -75 amps and 75 amps. Using this adjusted data you'd find that

I = 50 * V - 125

where I is the current and V is the voltage you measure on the analog input.

Also, in the code above, I think you want to use a Get_Analog_Value(rc_ana_01) in order to convert to an analog voltage. You also want to cast to an integer before printf'ing.

user_routines.h:



/* Current sensor data */
#define CURR_SLOPE 0.02 // Slope used in the current calculation
#define CURR_INTERCEPT 2.5 // Y intercept used for the current calculation
#define LEFT_CURR_SENS rc_ana_in01 // analog input 1; used to measure current on left motor
#define RIGHT_CURR_SENS rc_ana_in02 // analog input 2; used to measure current on right motor



user_routines.c/Default_Routine():



/* Calculate and display the current going to the two drive motors using analog readings */

printf("Left motor current = %d\n", (int) (Get_Analog_Value(LEFT_CURR_SENS) - CURR_INTERCEPT) / CURR_SLOPE);
printf("Right motor current = %d\n", (int) (Get_Analog_Value(RIGHT_CURR_SENS) - CURR_INTERCEPT) / CURR_SLOPE);