Skip to content

Commit

Permalink
update for pcb v2
Browse files Browse the repository at this point in the history
  • Loading branch information
bolandrm committed Jun 27, 2016
1 parent b7942f3 commit 58ed127
Show file tree
Hide file tree
Showing 13 changed files with 120 additions and 53 deletions.
39 changes: 39 additions & 0 deletions src/battery_monitor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#include "battery_monitor.h"

static bool buzzer_on = false;

float battery_monitor_pin_voltage = 0.0;
float battery_monitor_battery_voltage = 0.0;

void battery_monitor_init() {
pinMode(BATTERY_MONITOR_PIN, INPUT);

analogReference(INTERNAL);
analogReadResolution(12);
analogReadAveraging(32);
}

void battery_monitor_update() {
uint16_t pin_value = analogRead(BATTERY_MONITOR_PIN);

battery_monitor_pin_voltage = pin_value / BATTERY_MONITOR_PIN_DIVISOR * BATTERY_MONITOR_LOSS_FACTOR;
battery_monitor_battery_voltage = battery_monitor_pin_voltage / (BATTERY_R2_VAL / (BATTERY_R1_VAL + BATTERY_R2_VAL));

if (battery_monitor_battery_voltage < 9.0) { // no battery connected
noTone(BATTERY_ALERT_BUZZER_PIN);
buzzer_on = false;

} else if (battery_monitor_battery_voltage < 10.85) { // low voltage
if (buzzer_on) {
noTone(BATTERY_ALERT_BUZZER_PIN);
buzzer_on = false;
} else {
tone(BATTERY_ALERT_BUZZER_PIN, 400);
buzzer_on = true;
}

} else { // voltage good
noTone(BATTERY_ALERT_BUZZER_PIN);
buzzer_on = false;
}
}
19 changes: 19 additions & 0 deletions src/battery_monitor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#pragma once

#include "Arduino.h"

#define BATTERY_MONITOR_PIN A11
#define BATTERY_ALERT_BUZZER_PIN 25

#define BATTERY_R1_VAL 100000.0f
#define BATTERY_R2_VAL 10000.0f

#define BATTERY_MONITOR_READ_RESOLUTION 12
#define BATTERY_MONITOR_PIN_DIVISOR ((float) pow(2, BATTERY_MONITOR_READ_RESOLUTION))
#define BATTERY_MONITOR_LOSS_FACTOR 1.198f

void battery_monitor_init();
void battery_monitor_update();

extern float battery_monitor_pin_voltage;
extern float battery_monitor_battery_voltage;
5 changes: 5 additions & 0 deletions src/debugger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "motors.h"
#include "flight_controller.h"
#include "serial_commands.h"
#include "battery_monitor.h"

void text_debug();
uint32_t debug_timer = 0;
Expand Down Expand Up @@ -98,6 +99,10 @@ void text_debug() {

serial_printf("max accel: %8.3f", imu_accel_max_value());
serial_printlnf("\t max gyro: %8.3f", imu_gyro_max_value());

serial_printf("battery pin voltage: %8.3f", battery_monitor_pin_voltage);
serial_printlnf("\t battery voltage: %8.3f", battery_monitor_battery_voltage);

}

void debugger_print() {
Expand Down
4 changes: 2 additions & 2 deletions src/debugger.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

#define DEBUG true
#define DEBUG_RATE_MILLIS 500
#define RED_LED_PIN 8
#define GREEN_LED_PIN 7
#define RED_LED_PIN 31
#define GREEN_LED_PIN 30

void debugger_print();
void debugger_leds();
Expand Down
2 changes: 1 addition & 1 deletion src/flight_controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#define ARMED 1
#define UNARMED 0

#define ANGLE_SAFETY_STOP true
#define ANGLE_SAFETY_STOP false
#define SAFE_ANGLE 60.0

void fc_init();
Expand Down
34 changes: 17 additions & 17 deletions src/i2c_helpers.cpp
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
#include <i2c_t3.h>
#include "i2c_helpers.h"

void i2c1_begin() {
Wire1.begin(I2C_MASTER, 0x00, I2C_PINS_29_30, I2C_PULLUP_EXT, I2C_RATE_800);
void i2c_begin() {
Wire.begin(I2C_MASTER, 0x00, I2C_PINS_18_19, I2C_PULLUP_INT, I2C_RATE_800);
}

void i2c1_update_register(uint16_t device_address, uint8_t data_address, uint8_t data_value) {
Wire1.beginTransmission(device_address);
Wire1.write(data_address);
Wire1.write(data_value);
Wire1.endTransmission();
void i2c_update_register(uint16_t device_address, uint8_t data_address, uint8_t data_value) {
Wire.beginTransmission(device_address);
Wire.write(data_address);
Wire.write(data_value);
Wire.endTransmission();
}

void i2c1_send_byte(uint16_t device_address, uint8_t data_value) {
Wire1.beginTransmission(device_address);
Wire1.write(data_value);
Wire1.endTransmission();
void i2c_send_byte(uint16_t device_address, uint8_t data_value) {
Wire.beginTransmission(device_address);
Wire.write(data_value);
Wire.endTransmission();
}

uint8_t i2c1_read_byte(uint16_t device_address) {
Wire1.requestFrom(device_address, 1);
return Wire1.read();
uint8_t i2c_read_byte(uint16_t device_address) {
Wire.requestFrom(device_address, 1);
return Wire.read();
}

uint16_t i2c1_read_word(uint16_t device_address) {
Wire1.requestFrom(device_address, 2);
return (Wire1.read() << 8) | Wire1.read();
uint16_t i2c_read_word(uint16_t device_address) {
Wire.requestFrom(device_address, 2);
return (Wire.read() << 8) | Wire.read();
}
10 changes: 5 additions & 5 deletions src/i2c_helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

#include <Arduino.h>

void i2c1_begin();
void i2c1_update_register(uint16_t device_address, uint8_t data_address, uint8_t data_value);
void i2c1_send_byte(uint16_t device_address, uint8_t data_value);
uint8_t i2c1_read_byte(uint16_t device_address);
uint16_t i2c1_read_word(uint16_t device_address);
void i2c_begin();
void i2c_update_register(uint16_t device_address, uint8_t data_address, uint8_t data_value);
void i2c_send_byte(uint16_t device_address, uint8_t data_value);
uint8_t i2c_read_byte(uint16_t device_address);
uint16_t i2c_read_word(uint16_t device_address);
12 changes: 6 additions & 6 deletions src/imu.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
#include "types.h"
#include "mpu9250.h"

#define GYRO_X_OFFSET (32.22)
#define GYRO_Y_OFFSET (29.647)
#define GYRO_Z_OFFSET (-34.29)
#define GYRO_X_OFFSET (-24.17)
#define GYRO_Y_OFFSET (-24.95)
#define GYRO_Z_OFFSET (8.44)

#define ACCEL_X_OFFSET (-200.575)
#define ACCEL_Y_OFFSET (-174.646)
#define ACCEL_Z_OFFSET (32.383)
#define ACCEL_X_OFFSET (-76.91)
#define ACCEL_Y_OFFSET (201.88)
#define ACCEL_Z_OFFSET (-88.793)

#define GYRO_PART 0.994
#define ACC_PART (1.0 - GYRO_PART)
Expand Down
6 changes: 5 additions & 1 deletion src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@
#include "serial_commands.h"
#include "config.h"
#include "watchdog.h"
#include "battery_monitor.h"

#include "utils.h"

void setup() {
serial_begin(BAUD2DIV2(SERIAL_PORT_SPEED));
serial2_begin(BAUD2DIV2(SERIAL_PORT_SPEED));
i2c1_begin();
i2c_begin();
config_init();
imu_init();
rc_init();
fc_init();
debugger_leds_init();
battery_monitor_init();
watchdog_enable();
}

Expand All @@ -42,6 +45,7 @@ void loop() {
if (schedule(TASK_2HZ)) {
debugger_leds();
debugger_print();
battery_monitor_update();
}

schedule_end();
Expand Down
22 changes: 11 additions & 11 deletions src/mpu9250.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
static bool data_ready = false;

static void mpu9250_write_reg(uint16_t addr, uint8_t data) {
i2c1_update_register(MPU_I2C_ADDRESS, addr, data);
i2c_update_register(MPU_I2C_ADDRESS, addr, data);
delay(1);
}

static uint8_t mpu9250_read_byte(uint16_t addr) {
i2c1_send_byte(MPU_I2C_ADDRESS, addr);
return i2c1_read_byte(MPU_I2C_ADDRESS);
i2c_send_byte(MPU_I2C_ADDRESS, addr);
return i2c_read_byte(MPU_I2C_ADDRESS);
}

static uint16_t mpu9250_read_word(uint16_t addr) {
i2c1_send_byte(MPU_I2C_ADDRESS, addr);
return i2c1_read_word(MPU_I2C_ADDRESS);
i2c_send_byte(MPU_I2C_ADDRESS, addr);
return i2c_read_word(MPU_I2C_ADDRESS);
}

static int mpu9250_test_connection() {
Expand All @@ -29,19 +29,19 @@ void mpu9250_read_gyro(axis_int32_t *gyro_rates) {
int16_t gyro_y = mpu9250_read_word(MPUREG_GYRO_YOUT_H);
int16_t gyro_z = mpu9250_read_word(MPUREG_GYRO_ZOUT_H);

gyro_rates->x = gyro_x;
gyro_rates->y = -1 * gyro_y;
gyro_rates->z = gyro_z;
gyro_rates->x = gyro_y;
gyro_rates->y = -1 * gyro_x;
gyro_rates->z = -1 * gyro_z;
}

void mpu9250_read_accel(axis_int32_t *accel_raws) {
int16_t accel_x = mpu9250_read_word(MPUREG_ACCEL_XOUT_H);
int16_t accel_y = mpu9250_read_word(MPUREG_ACCEL_YOUT_H);
int16_t accel_z = mpu9250_read_word(MPUREG_ACCEL_ZOUT_H);

accel_raws->x = accel_x;
accel_raws->y = -1 * accel_y;
accel_raws->z = -1 * accel_z;
accel_raws->x = accel_y;
accel_raws->y = -1 * accel_x;
accel_raws->z = accel_z;
}

void calibrate_gyro() {
Expand Down
2 changes: 1 addition & 1 deletion src/mpu9250.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include "types.h"
#include "imu.h"

#define MPU_DATA_READY_INTERRUPT_PIN 31
#define MPU_DATA_READY_INTERRUPT_PIN 17
#define MPU_WHOAMI_IDENTIFIER 0x71

#define MPU_I2C_ADDRESS 0x68
Expand Down
6 changes: 3 additions & 3 deletions src/remote_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
#define RC_CH1_INPUT 2
#define RC_CH2_INPUT 3
#define RC_CH3_INPUT 4
#define RC_CH4_INPUT 5
#define RC_CH5_INPUT 17
#define RC_CH6_INPUT 14
#define RC_CH4_INPUT 27
#define RC_CH5_INPUT 26
#define RC_CH6_INPUT 24

void rc_init();
void rc_read_values();
Expand Down
12 changes: 6 additions & 6 deletions src/serial_commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,18 @@ static uint16_t data_received_length;
static uint8_t data_buffer[200];

int generic_serial_available() {
return usb_serial_available();
//return serial2_available();
//return usb_serial_available();
return serial_available();
}

int generic_serial_getchar() {
return usb_serial_getchar();
//return serial2_getchar();
//return usb_serial_getchar();
return serial_getchar();
}

void generic_serial_putchar(uint32_t c) {
usb_serial_putchar(c);
//serial2_putchar(c);
//usb_serial_putchar(c);
serial_putchar(c);
}

void serial_commands_process() {
Expand Down

0 comments on commit 58ed127

Please sign in to comment.