Add CSC code to send ADC0/1 values via CAN bus (for vsupply monitoring), also rename

WHIRLY_ERRORCOUNTER message to WHIRLY_STATUS and send the vsupply values along with error counters
This commit is contained in:
Allen Ibara
2009-05-19 07:07:06 +00:00
parent 18cfa7399c
commit 98a8a67bda
8 changed files with 78 additions and 39 deletions
+5 -28
View File
@@ -53,15 +53,15 @@ csc.CFLAGS += -DLED -DTIME_LED=1
csc.CFLAGS += -DCSC_BOARD_ID=$(CSC_ID)
csc.CFLAGS += -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC((1./512.))' -DTIMER0_VIC_SLOT=1
csc.srcs += sys_time.c $(SRC_ARCH)/sys_time_hw.c $(SRC_ARCH)/armVIC.c
csc.srcs += $(SRC_ARCH)/uart_hw.c
csc.srcs += $(SRC_ARCH)/adc_hw.c
csc.CFLAGS += -DADC -DUSE_AD0 -DUSE_AD0_0 -DUSE_AD0_1
csc.CFLAGS += -DUSE_UART0 -DUART0_BAUD=B57600 -DUART0_VIC_SLOT=5
csc.CFLAGS += -DUSE_UART1 -DUART1_BAUD=B57600 -DUART1_VIC_SLOT=6
#csc.CFLAGS += -DUSE_UART1 -DUART1_BAUD=B57600 -DUART1_VIC_SLOT=6
#csc.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=PprzTransport \
# -DDOWNLINK_DEVICE=Uart0
#csc.srcs += downlink.c pprz_transport.c
@@ -81,6 +81,8 @@ csc.srcs += $(SRC_CSC)/csc_ap_link.c
csc.srcs += $(SRC_CSC)/csc_servos.c
csc.srcs += $(SRC_CSC)/csc_adc.c
csc.CFLAGS += -DTHROTTLE_LINK=Uart0 -DTHROTTLE_LED=3
csc.srcs += $(SRC_CSC)/csc_throttle.c
@@ -137,28 +139,3 @@ test_can1.CFLAGS += -DCAN1_VIC_SLOT=3 -DCAN1_ERR_VIC_SLOT=7
test_can1.srcs += $(SRC_CSC)/csc_can.c
test_can1.CFLAGS += -DCSC_BOARD_ID=0
#
# TEST CAN2
#
test_can2.ARCHDIR = $(ARCHI)
test_can2.ARCH = arm7tdmi
test_can2.TARGET = test_can2
test_can2.TARGETDIR = test_can2
test_can2.CFLAGS += -I$(SRC_CSC)
test_can2.CFLAGS += -DCONFIG=$(BOARD_CFG)
test_can2.srcs += $(SRC_CSC)/test_can2.c
test_can2.CFLAGS += -DLED
# -DTIME_LED=1
test_can2.CFLAGS += -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC((1./512.))' -DTIMER0_VIC_SLOT=1
test_can2.srcs += sys_time.c $(SRC_ARCH)/sys_time_hw.c $(SRC_ARCH)/armVIC.c
test_can2.CFLAGS += -DUSE_CAN2 -DCAN2_BTR=CANBitrate125k_2MHz
test_can2.CFLAGS += -DCAN2_VIC_SLOT=3 -DCAN2_ERR_VIC_SLOT=7
test_can2.srcs += $(SRC_CSC)/csc_can.c
test_can2.CFLAGS += -DCSC_BOARD_ID=0
+10 -5
View File
@@ -1038,10 +1038,6 @@
<field name="flap_2" type="int16"/>
<field name="xsens1_seq" type="uint16"/>
<field name="xsens2_seq" type="uint16"/>
<field name="csc1_loops" type="uint32"/>
<field name="csc1_msgs" type="uint32"/>
<field name="csc2_loops" type="uint32"/>
<field name="csc2_msgs" type="uint32"/>
</message>
<message name="WHIRLY_ESTIMATOR" id="182">
@@ -1068,13 +1064,22 @@
<field name="fault2" type="uint16"/>
</message>
<message name="WHIRLY_ERRORCOUNTER" id="184">
<message name="WHIRLY_STATUS" id="184">
<field name="whirly_timestamp" type="float"/>
<field name="xsens1_error_ck" type="uint32"/>
<field name="xsens2_error_ck" type="uint32"/>
<field name="xsens1_error_mid" type="uint32"/>
<field name="xsens2_error_mid" type="uint32"/>
<field name="xsens1_error_seq" type="uint32"/>
<field name="xsens2_error_seq" type="uint32"/>
<field name="csc1_loops" type="uint32"/>
<field name="csc1_msgs" type="uint32"/>
<field name="csc2_loops" type="uint32"/>
<field name="csc2_msgs" type="uint32"/>
<field name="busvolts0_0" type="float"/>
<field name="busvolts0_1" type="float"/>
<field name="busvolts1_0" type="float"/>
<field name="busvolts1_1" type="float"/>
</message>
<message name="WHIRLY_IMU" id="185">
+5 -5
View File
@@ -8,7 +8,7 @@
<mode name="default">
<message name="DL_VALUE" period="0.25"/>
<message name="WHIRLY_MOTORCONTROL" period="0.25"/>
<message name="WHIRLY_ERRORCOUNTER" period="0.25"/>
<message name="WHIRLY_STATUS" period="0.25"/>
<message name="ALIVE" period="2.1"/>
<message name="WHIRLY_CONTROL" period="0.01"/>
<message name="WHIRLY_IMU" period="0.001"/>
@@ -20,7 +20,7 @@
<mode name="raw_sensors">
<message name="DL_VALUE" period="0.5"/>
<message name="WHIRLY_MOTORCONTROL" period="0.33"/>
<message name="WHIRLY_ERRORCOUNTER" period="0.33"/>
<message name="WHIRLY_STATUS" period="0.33"/>
<message name="WHIRLY_IMU_RAW" period="0.01"/>
<message name="ALIVE" period="2.1"/>
</mode>
@@ -28,7 +28,7 @@
<mode name="scaled_sensors">
<message name="DL_VALUE" period="0.5"/>
<message name="WHIRLY_MOTORCONTROL" period="0.33"/>
<message name="WHIRLY_ERRORCOUNTER" period="0.33"/>
<message name="WHIRLY_STATUS" period="0.33"/>
<message name="WHIRLY_IMU" period="0.01"/>
<message name="ALIVE" period="2.1"/>
</mode>
@@ -36,7 +36,7 @@
<mode name="ahrs">
<message name="DL_VALUE" period="0.5"/>
<message name="WHIRLY_MOTORCONTROL" period="0.25"/>
<message name="WHIRLY_ERRORCOUNTER" period="0.33"/>
<message name="WHIRLY_STATUS" period="0.33"/>
<message name="ALIVE" period="2.1"/>
<message name="WHIRLY_ESTIMATOR" period=" .01"/>
<message name="WHIRLY_CONTROL" period="0.01"/>
@@ -45,7 +45,7 @@
<mode name="setup_commands">
<message name="DL_VALUE" period="0.5"/>
<message name="WHIRLY_MOTORCONTROL" period="0.33"/>
<message name="WHIRLY_ERRORCOUNTER" period="0.33"/>
<message name="WHIRLY_STATUS" period="0.33"/>
<message name="ALIVE" period="2.1"/>
<message name="ACTUATORS" period="0.25"/>
<message name="COMMANDS" period="0.25"/>
+30
View File
@@ -0,0 +1,30 @@
#include "csc_adc.h"
#include "csc_ap_link.h"
#include "LPC21xx.h"
#include "led.h"
#include "adc.h"
struct adc_buf adc0;
struct adc_buf adc1;
#define ADC_VDIV 5.7
#define ADC_VOLT 3.28
#define ADC_FACTOR 1024.0 * ADC_VOLT * ADC_VDIV
#define ADC_AV_NB 8
void csc_adc_init(void)
{
adc_init();
adc_buf_channel(0, &adc0, ADC_AV_NB);
adc_buf_channel(1, &adc1, ADC_AV_NB);
}
void csc_adc_periodic(void)
{
float v1 = adc0.sum / adc0.av_nb_sample / ADC_FACTOR;
float v2 = adc1.sum / adc1.av_nb_sample / ADC_FACTOR;
csc_ap_link_send_adc(v1, v2);
}
+10
View File
@@ -0,0 +1,10 @@
#ifndef CSC_ADC_H
#define CSC_ADC_H
#include <inttypes.h>
void csc_adc_init(void);
void csc_adc_periodic(void);
#endif /* CSC_ADC_H */
+10
View File
@@ -8,6 +8,16 @@ int32_t csc_ap_link_error_cnt;
static void (* servo_msg_cb)(struct CscServoCmd *);
static void (* motor_msg_cb)(struct CscMotorMsg *);
void csc_ap_link_send_adc(float adc1, float adc2)
{
struct CscADCMsg msg;
msg.ADCVolts1 = adc1;
msg.ADCVolts2 = adc2;
csc_ap_send_msg(CSC_BOARD_ADCVOLTS_ID, &msg, sizeof(msg));
}
void csc_ap_link_send_status(uint32_t loops, uint32_t msgs)
{
+1
View File
@@ -12,6 +12,7 @@ extern int32_t csc_ap_link_error_cnt;
void csc_ap_link_init(void);
void csc_ap_send_msg(uint8_t msg_id, const uint8_t *buf, uint8_t len);
void csc_ap_link_send_status(uint32_t loops, uint32_t msgs);
void csc_ap_link_send_adc(float adc1, float adc2);
void csc_ap_link_set_servo_cmd_cb(void (* cb)(struct CscServoCmd *cmd));
void csc_ap_link_set_motor_cmd_cb(void (* cb)(struct CscMotorMsg *msg));
+7 -1
View File
@@ -37,6 +37,7 @@
#include "csc_servos.h"
#include "csc_throttle.h"
#include "csc_adc.h"
#include "csc_can.h"
#include "csc_ap_link.h"
@@ -44,7 +45,7 @@ static inline void on_servo_cmd(struct CscServoCmd *cmd);
static inline void on_motor_cmd(struct CscMotorMsg *msg);
#define SERVO_TIMEOUT (SYS_TICS_OF_SEC(0.1) / PERIODIC_TASK_PERIOD)
#define CSC_STATUS_TIMEOUT (SYS_TICS_OF_SEC(0.2) / PERIODIC_TASK_PERIOD)
#define CSC_STATUS_TIMEOUT (SYS_TICS_OF_SEC(0.25) / PERIODIC_TASK_PERIOD)
static uint32_t servo_cmd_timeout = 0;
static uint32_t can_msg_count = 0;
@@ -75,6 +76,8 @@ STATIC_INLINE void csc_main_init( void ) {
csc_ap_link_set_servo_cmd_cb(on_servo_cmd);
csc_ap_link_set_motor_cmd_cb(on_motor_cmd);
csc_adc_init();
csc_servos_init();
csc_throttle_init();
int_enable();
@@ -96,6 +99,9 @@ STATIC_INLINE void csc_main_periodic( void ) {
if ((++csc_loops % CSC_STATUS_TIMEOUT) == 0) {
csc_ap_link_send_status(csc_loops, can_msg_count);
}
if ((++csc_loops % CSC_STATUS_TIMEOUT) == 0) {
csc_adc_periodic();
}
}