From bbedc613ca7b8f42e35df5b3f9450e449cde2735 Mon Sep 17 00:00:00 2001 From: James Talbert <jtalbert@iastate.edu> Date: Fri, 26 Oct 2018 16:23:34 -0500 Subject: [PATCH] The quad seems close to working (maybe). It takes off mostly straight, but doesn't stay stable. It's hard to say if this is beacuse of tuning issues, or a setup problem. --- .../real_quad/src/hw_impl_zybo.h | 51 ++++++++++++ .../real_quad/src/hw_impl_zybo_imu.c | 20 ++--- .../real_quad/src/hw_impl_zybo_motor.c | 8 +- .../system_bsp/.cproject | 4 +- .../ps7_cortexa9_0/include/xparameters.h | 80 +++++++++---------- .../libsrc/gpio_v4_3/src/xgpio_g.c | 32 ++++---- .../system_bsp/system.mss | 8 +- 7 files changed, 123 insertions(+), 80 deletions(-) diff --git a/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo.h b/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo.h index 8f439cdf1..08b654cfb 100644 --- a/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo.h +++ b/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo.h @@ -26,6 +26,57 @@ #define MAX_UART_BUFFER_SIZE 2048 +#define QUAD_NUM 1 + +#if QUAD_NUM==0 +#define IMU_ACCX_SIGN 1 +#define IMU_ACCY_SIGN 1 +#define IMU_ACCZ_SIGN 1 + +#define IMU_GYRX_SIGN 1 +#define IMU_GYRY_SIGN 1 +#define IMU_GYRZ_SIGN 1 + +#define MOTOR_FRONTLEFT_BASEADDR XPAR_PWM_SIGNAL_OUT_3_S_AXI_BASEADDR +#define MOTOR_FRONTRIGHT_BASEADDR XPAR_PWM_SIGNAL_OUT_1_S_AXI_BASEADDR +#define MOTOR_BACKLEFT_BASEADDR XPAR_PWM_SIGNAL_OUT_2_S_AXI_BASEADDR +#define MOTOR_BACKRIGHT_BASEADDR XPAR_PWM_SIGNAL_OUT_0_S_AXI_BASEADDR + +#define ACCEL_X_BIAS 0.023f +#define ACCEL_Y_BIAS 0.009f +#define ACCEL_Z_BIAS 0.0686f + +#define GYRO_X_BIAS 0.005f +#define GYRO_Y_BIAS -0.014f +#define GYRO_Z_BIAS 0.0534//0.0541f + +#endif + +#if QUAD_NUM==1 + +#define IMU_ACCX_SIGN -1 +#define IMU_ACCY_SIGN -1 +#define IMU_ACCZ_SIGN 1 + +#define IMU_GYRX_SIGN -1 +#define IMU_GYRY_SIGN 1 +#define IMU_GYRZ_SIGN 1 + +#define MOTOR_FRONTLEFT_BASEADDR XPAR_PWM_SIGNAL_OUT_0_S_AXI_BASEADDR +#define MOTOR_FRONTRIGHT_BASEADDR XPAR_PWM_SIGNAL_OUT_2_S_AXI_BASEADDR +#define MOTOR_BACKLEFT_BASEADDR XPAR_PWM_SIGNAL_OUT_3_S_AXI_BASEADDR +#define MOTOR_BACKRIGHT_BASEADDR XPAR_PWM_SIGNAL_OUT_1_S_AXI_BASEADDR + +#define ACCEL_X_BIAS 0.023f +#define ACCEL_Y_BIAS -0.104f +#define ACCEL_Z_BIAS 0.0686f + +#define GYRO_X_BIAS -0.001f +#define GYRO_Y_BIAS 0.014f +#define GYRO_Z_BIAS -0.033//0.0541f + +#endif + struct ZyboI2CState { XIicPs *inst; int busId; diff --git a/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_imu.c b/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_imu.c index 31b68f49d..2b5abff25 100644 --- a/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_imu.c +++ b/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_imu.c @@ -44,14 +44,6 @@ // Sensitivity gain is based off MPU9150 datasheet (pg. 11) #define GYRO_SENS 16.4 -#define GYRO_X_BIAS 0.005f -#define GYRO_Y_BIAS -0.014f -#define GYRO_Z_BIAS 0.0534//0.0541f - -#define ACCEL_X_BIAS 0.023f -#define ACCEL_Y_BIAS 0.009f -#define ACCEL_Z_BIAS 0.0686f - int mpu9150_write(struct I2CDriver *i2c, u8 register_addr, u8 data); int mpu9150_read(struct I2CDriver *i2c, u8* recv_buffer, u8 register_addr, int size); @@ -147,9 +139,9 @@ int zybo_imu_read(struct IMUDriver *self, gam_t *gam) { raw_accel_z = sensor_data[ACC_Z_H] << 8 | sensor_data[ACC_Z_L]; // put in G's - gam->accel_x = (raw_accel_x / 4096.0) + ACCEL_X_BIAS; // 4,096 is the gain per LSB of the measurement reading based on a configuration range of +-8g - gam->accel_y = (raw_accel_y / 4096.0) + ACCEL_Y_BIAS; - gam->accel_z = (raw_accel_z / 4096.0) + ACCEL_Z_BIAS; + gam->accel_x = IMU_ACCX_SIGN * (raw_accel_x / 4096.0) + ACCEL_X_BIAS; // 4,096 is the gain per LSB of the measurement reading based on a configuration range of +-8g + gam->accel_y = IMU_ACCY_SIGN * (raw_accel_y / 4096.0) + ACCEL_Y_BIAS; + gam->accel_z = IMU_ACCZ_SIGN * (raw_accel_z / 4096.0) + ACCEL_Z_BIAS; //Convert gyro data to rate (we're only using the most 12 significant bits) gyro_x = (sensor_data[GYR_X_H] << 8) | (sensor_data[GYR_X_L]); //* G_GAIN; @@ -158,9 +150,9 @@ int zybo_imu_read(struct IMUDriver *self, gam_t *gam) { //Get the number of degrees //javey: converted to radians to following SI units - gam->gyro_xVel_p = ((gyro_x / GYRO_SENS) * DEG_TO_RAD) + GYRO_X_BIAS; - gam->gyro_yVel_q = ((gyro_y / GYRO_SENS) * DEG_TO_RAD) + GYRO_Y_BIAS; - gam->gyro_zVel_r = ((gyro_z / GYRO_SENS) * DEG_TO_RAD) + GYRO_Z_BIAS; + gam->gyro_xVel_p = IMU_GYRX_SIGN * ((gyro_x / GYRO_SENS) * DEG_TO_RAD) + GYRO_X_BIAS; + gam->gyro_yVel_q = IMU_GYRX_SIGN * ((gyro_y / GYRO_SENS) * DEG_TO_RAD) + GYRO_Y_BIAS; + gam->gyro_zVel_r = IMU_GYRX_SIGN * ((gyro_z / GYRO_SENS) * DEG_TO_RAD) + GYRO_Z_BIAS; // Magnometer mpu9150_read_mag(self, gam); diff --git a/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_motor.c b/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_motor.c index 8e8e27ab7..869bb7973 100644 --- a/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_motor.c +++ b/quad/xsdk_workspace_vivado/real_quad/src/hw_impl_zybo_motor.c @@ -20,10 +20,10 @@ int zybo_motor_reset(struct MotorDriver *self) { } struct MotorDriverState *state = self->state; - state->outputs[0] = (int *) XPAR_PWM_SIGNAL_OUT_0_S_AXI_BASEADDR; - state->outputs[1] = (int *) XPAR_PWM_SIGNAL_OUT_1_S_AXI_BASEADDR; - state->outputs[2] = (int *) XPAR_PWM_SIGNAL_OUT_2_S_AXI_BASEADDR; - state->outputs[3] = (int *) XPAR_PWM_SIGNAL_OUT_3_S_AXI_BASEADDR; + state->outputs[0] = (int *) MOTOR_BACKRIGHT_BASEADDR; + state->outputs[1] = (int *) MOTOR_FRONTRIGHT_BASEADDR; + state->outputs[2] = (int *) MOTOR_BACKLEFT_BASEADDR; + state->outputs[3] = (int *) MOTOR_FRONTLEFT_BASEADDR; // Set period width of PWM pulse *(state->outputs[0]) = PERIOD_WIDTH; diff --git a/quad/xsdk_workspace_vivado/system_bsp/.cproject b/quad/xsdk_workspace_vivado/system_bsp/.cproject index 86a0aeef4..6bfbc95be 100644 --- a/quad/xsdk_workspace_vivado/system_bsp/.cproject +++ b/quad/xsdk_workspace_vivado/system_bsp/.cproject @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage"> <storageModule moduleId="org.eclipse.cdt.core.settings"> - <cconfiguration id="org.eclipse.cdt.core.default.config.1135924200"> - <storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="org.eclipse.cdt.core.default.config.1135924200" moduleId="org.eclipse.cdt.core.settings" name="Configuration"> + <cconfiguration id="org.eclipse.cdt.core.default.config.1532584570"> + <storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="org.eclipse.cdt.core.default.config.1532584570" moduleId="org.eclipse.cdt.core.settings" name="Configuration"> <externalSettings/> <extensions/> </storageModule> diff --git a/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/include/xparameters.h b/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/include/xparameters.h index 50527d62c..f1700485e 100644 --- a/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/include/xparameters.h +++ b/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/include/xparameters.h @@ -222,65 +222,65 @@ /* Definitions for driver GPIO */ #define XPAR_XGPIO_NUM_INSTANCES 4 -/* Definitions for peripheral AXI_GPIO_0 */ -#define XPAR_AXI_GPIO_0_BASEADDR 0x41200000 -#define XPAR_AXI_GPIO_0_HIGHADDR 0x4120FFFF -#define XPAR_AXI_GPIO_0_DEVICE_ID 0 -#define XPAR_AXI_GPIO_0_INTERRUPT_PRESENT 0 -#define XPAR_AXI_GPIO_0_IS_DUAL 0 +/* Definitions for peripheral AXI_GPIO_3 */ +#define XPAR_AXI_GPIO_3_BASEADDR 0x41230000 +#define XPAR_AXI_GPIO_3_HIGHADDR 0x4123FFFF +#define XPAR_AXI_GPIO_3_DEVICE_ID 0 +#define XPAR_AXI_GPIO_3_INTERRUPT_PRESENT 0 +#define XPAR_AXI_GPIO_3_IS_DUAL 0 -/* Definitions for peripheral AXI_GPIO_1 */ -#define XPAR_AXI_GPIO_1_BASEADDR 0x41210000 -#define XPAR_AXI_GPIO_1_HIGHADDR 0x4121FFFF -#define XPAR_AXI_GPIO_1_DEVICE_ID 1 -#define XPAR_AXI_GPIO_1_INTERRUPT_PRESENT 0 -#define XPAR_AXI_GPIO_1_IS_DUAL 0 +/* Definitions for peripheral AXI_GPIO_BTNS */ +#define XPAR_AXI_GPIO_BTNS_BASEADDR 0x41220000 +#define XPAR_AXI_GPIO_BTNS_HIGHADDR 0x4122FFFF +#define XPAR_AXI_GPIO_BTNS_DEVICE_ID 1 +#define XPAR_AXI_GPIO_BTNS_INTERRUPT_PRESENT 0 +#define XPAR_AXI_GPIO_BTNS_IS_DUAL 0 -/* Definitions for peripheral AXI_GPIO_2 */ -#define XPAR_AXI_GPIO_2_BASEADDR 0x41220000 -#define XPAR_AXI_GPIO_2_HIGHADDR 0x4122FFFF -#define XPAR_AXI_GPIO_2_DEVICE_ID 2 -#define XPAR_AXI_GPIO_2_INTERRUPT_PRESENT 0 -#define XPAR_AXI_GPIO_2_IS_DUAL 0 +/* Definitions for peripheral AXI_GPIO_LEDS */ +#define XPAR_AXI_GPIO_LEDS_BASEADDR 0x41210000 +#define XPAR_AXI_GPIO_LEDS_HIGHADDR 0x4121FFFF +#define XPAR_AXI_GPIO_LEDS_DEVICE_ID 2 +#define XPAR_AXI_GPIO_LEDS_INTERRUPT_PRESENT 0 +#define XPAR_AXI_GPIO_LEDS_IS_DUAL 0 -/* Definitions for peripheral AXI_GPIO_3 */ -#define XPAR_AXI_GPIO_3_BASEADDR 0x41230000 -#define XPAR_AXI_GPIO_3_HIGHADDR 0x4123FFFF -#define XPAR_AXI_GPIO_3_DEVICE_ID 3 -#define XPAR_AXI_GPIO_3_INTERRUPT_PRESENT 0 -#define XPAR_AXI_GPIO_3_IS_DUAL 0 +/* Definitions for peripheral AXI_GPIO_SWS */ +#define XPAR_AXI_GPIO_SWS_BASEADDR 0x41200000 +#define XPAR_AXI_GPIO_SWS_HIGHADDR 0x4120FFFF +#define XPAR_AXI_GPIO_SWS_DEVICE_ID 3 +#define XPAR_AXI_GPIO_SWS_INTERRUPT_PRESENT 0 +#define XPAR_AXI_GPIO_SWS_IS_DUAL 0 /******************************************************************/ -/* Canonical definitions for peripheral AXI_GPIO_0 */ -#define XPAR_GPIO_0_BASEADDR 0x41200000 -#define XPAR_GPIO_0_HIGHADDR 0x4120FFFF -#define XPAR_GPIO_0_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID +/* Canonical definitions for peripheral AXI_GPIO_3 */ +#define XPAR_GPIO_0_BASEADDR 0x41230000 +#define XPAR_GPIO_0_HIGHADDR 0x4123FFFF +#define XPAR_GPIO_0_DEVICE_ID XPAR_AXI_GPIO_3_DEVICE_ID #define XPAR_GPIO_0_INTERRUPT_PRESENT 0 #define XPAR_GPIO_0_IS_DUAL 0 -/* Canonical definitions for peripheral AXI_GPIO_1 */ -#define XPAR_GPIO_1_BASEADDR 0x41210000 -#define XPAR_GPIO_1_HIGHADDR 0x4121FFFF -#define XPAR_GPIO_1_DEVICE_ID XPAR_AXI_GPIO_1_DEVICE_ID +/* Canonical definitions for peripheral AXI_GPIO_BTNS */ +#define XPAR_GPIO_1_BASEADDR 0x41220000 +#define XPAR_GPIO_1_HIGHADDR 0x4122FFFF +#define XPAR_GPIO_1_DEVICE_ID XPAR_AXI_GPIO_BTNS_DEVICE_ID #define XPAR_GPIO_1_INTERRUPT_PRESENT 0 #define XPAR_GPIO_1_IS_DUAL 0 -/* Canonical definitions for peripheral AXI_GPIO_2 */ -#define XPAR_GPIO_2_BASEADDR 0x41220000 -#define XPAR_GPIO_2_HIGHADDR 0x4122FFFF -#define XPAR_GPIO_2_DEVICE_ID XPAR_AXI_GPIO_2_DEVICE_ID +/* Canonical definitions for peripheral AXI_GPIO_LEDS */ +#define XPAR_GPIO_2_BASEADDR 0x41210000 +#define XPAR_GPIO_2_HIGHADDR 0x4121FFFF +#define XPAR_GPIO_2_DEVICE_ID XPAR_AXI_GPIO_LEDS_DEVICE_ID #define XPAR_GPIO_2_INTERRUPT_PRESENT 0 #define XPAR_GPIO_2_IS_DUAL 0 -/* Canonical definitions for peripheral AXI_GPIO_3 */ -#define XPAR_GPIO_3_BASEADDR 0x41230000 -#define XPAR_GPIO_3_HIGHADDR 0x4123FFFF -#define XPAR_GPIO_3_DEVICE_ID XPAR_AXI_GPIO_3_DEVICE_ID +/* Canonical definitions for peripheral AXI_GPIO_SWS */ +#define XPAR_GPIO_3_BASEADDR 0x41200000 +#define XPAR_GPIO_3_HIGHADDR 0x4120FFFF +#define XPAR_GPIO_3_DEVICE_ID XPAR_AXI_GPIO_SWS_DEVICE_ID #define XPAR_GPIO_3_INTERRUPT_PRESENT 0 #define XPAR_GPIO_3_IS_DUAL 0 diff --git a/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/libsrc/gpio_v4_3/src/xgpio_g.c b/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/libsrc/gpio_v4_3/src/xgpio_g.c index 57aa942dc..0afd3205d 100644 --- a/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/libsrc/gpio_v4_3/src/xgpio_g.c +++ b/quad/xsdk_workspace_vivado/system_bsp/ps7_cortexa9_0/libsrc/gpio_v4_3/src/xgpio_g.c @@ -47,28 +47,28 @@ XGpio_Config XGpio_ConfigTable[XPAR_XGPIO_NUM_INSTANCES] = { { - XPAR_AXI_GPIO_0_DEVICE_ID, - XPAR_AXI_GPIO_0_BASEADDR, - XPAR_AXI_GPIO_0_INTERRUPT_PRESENT, - XPAR_AXI_GPIO_0_IS_DUAL + XPAR_AXI_GPIO_3_DEVICE_ID, + XPAR_AXI_GPIO_3_BASEADDR, + XPAR_AXI_GPIO_3_INTERRUPT_PRESENT, + XPAR_AXI_GPIO_3_IS_DUAL }, { - XPAR_AXI_GPIO_1_DEVICE_ID, - XPAR_AXI_GPIO_1_BASEADDR, - XPAR_AXI_GPIO_1_INTERRUPT_PRESENT, - XPAR_AXI_GPIO_1_IS_DUAL + XPAR_AXI_GPIO_BTNS_DEVICE_ID, + XPAR_AXI_GPIO_BTNS_BASEADDR, + XPAR_AXI_GPIO_BTNS_INTERRUPT_PRESENT, + XPAR_AXI_GPIO_BTNS_IS_DUAL }, { - XPAR_AXI_GPIO_2_DEVICE_ID, - XPAR_AXI_GPIO_2_BASEADDR, - XPAR_AXI_GPIO_2_INTERRUPT_PRESENT, - XPAR_AXI_GPIO_2_IS_DUAL + XPAR_AXI_GPIO_LEDS_DEVICE_ID, + XPAR_AXI_GPIO_LEDS_BASEADDR, + XPAR_AXI_GPIO_LEDS_INTERRUPT_PRESENT, + XPAR_AXI_GPIO_LEDS_IS_DUAL }, { - XPAR_AXI_GPIO_3_DEVICE_ID, - XPAR_AXI_GPIO_3_BASEADDR, - XPAR_AXI_GPIO_3_INTERRUPT_PRESENT, - XPAR_AXI_GPIO_3_IS_DUAL + XPAR_AXI_GPIO_SWS_DEVICE_ID, + XPAR_AXI_GPIO_SWS_BASEADDR, + XPAR_AXI_GPIO_SWS_INTERRUPT_PRESENT, + XPAR_AXI_GPIO_SWS_IS_DUAL } }; diff --git a/quad/xsdk_workspace_vivado/system_bsp/system.mss b/quad/xsdk_workspace_vivado/system_bsp/system.mss index c0e89a892..76803d91a 100644 --- a/quad/xsdk_workspace_vivado/system_bsp/system.mss +++ b/quad/xsdk_workspace_vivado/system_bsp/system.mss @@ -21,25 +21,25 @@ END BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 4.3 - PARAMETER HW_INSTANCE = axi_gpio_0 + PARAMETER HW_INSTANCE = axi_gpio_3 END BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 4.3 - PARAMETER HW_INSTANCE = axi_gpio_1 + PARAMETER HW_INSTANCE = axi_gpio_btns END BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 4.3 - PARAMETER HW_INSTANCE = axi_gpio_2 + PARAMETER HW_INSTANCE = axi_gpio_leds END BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 4.3 - PARAMETER HW_INSTANCE = axi_gpio_3 + PARAMETER HW_INSTANCE = axi_gpio_sws END BEGIN DRIVER -- GitLab