From: Pierre C. <Ba...@us...> - 2012-10-26 20:40:37
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 29443c43d4f4f00011fa3e0b3c8e07dbae034732 (commit) via 035f9d52b1b2e95562b0af441e542e2fa91ff38c (commit) via d3646d8988b275d635808e856f27a8169fcbe5b1 (commit) via 645a18abb1e663350086d537520888245e5644c2 (commit) via e700577fe24962963fb1943e57d404269ab76fa9 (commit) via 78af501cf61256d87e4fa09b6a5205b8397082fb (commit) via 666e0dc488f66ed5318fd5e841be1a537ee45560 (commit) via 82f57164333960d5b04bbc124c86a6daf344355b (commit) via 46c0ef8dfeb43e00ed50d72edad767ee4cf54cab (commit) via 53bf72d4ef903e5d87c698b52be0f39860f89d06 (commit) via 3d59652b59b7621cb9f011073ce7e1f923b8410e (commit) via bdeff879b8ed42276763573967dc7ed28dd50ce9 (commit) via 96d08ed82366e7c0b2599bd7035675e0cec7ed4e (commit) via bf9296f621e8ab25375fe4bdfa8a23197ddb9cb4 (commit) via 7a344e7ce89be0492587d0cba6bc32509456ed4f (commit) via ae0e0bc5d8cce9c4fe7b38773f5d99ee45ed2e7d (commit) via d2e02e09948f8e2f38183d4aea5441fb42092115 (commit) via 864db7bdf520c38dcf04dfb809e53b7a474e4cea (commit) via 2147180a73cd3e00b5eb7e35a9b2decb614bb0ff (commit) via 88d667e7e67cd64256ef567631bf788a32a2db1a (commit) via 2ee981deaba2c5a24d2b9d64f52f7554440d5832 (commit) via cce7084f6572f1a73bc8f9c1e2815f063525041a (commit) via 4ee8b067e5a5f92c38c96a8f069a9f02dc088ee3 (commit) via 000b1c651d916fbe7fe4de92c47f9d535f294a0e (commit) via 05a4ea204296802b2d8235f2519ebc7020d9372c (commit) via 650368da1ad2db0410ddcc397c2c31a06ca33674 (commit) via 0ad19a68def0b2fabafeb0e5e15ee1e6177590bc (commit) via 3ae218d6a175f384974252c5dd2eaa928fa13f6c (commit) via 7b0cf7382c5779a9a3048bbc185785181a8aa151 (commit) via 4bbe513d86ee6fd90bd17203354ad4f773955a44 (commit) via b302c56062cbf220bba5ed93b8289976ada3926e (commit) via 658408babb5310adde2136f174db84e380b51772 (commit) via dc78cd457b1b62d932798cd8274bf57f770daea2 (commit) via 0b246ee805ed4f163fb9579213451fce33aa51f4 (commit) via ed691e2747ff70813a0282e24ae45bc528a4e6de (commit) via 1f2f8c16bfb4dae9311823a60b86495466c59bab (commit) via 97bb881fbf21d84c503a1614299dd9a0a86b7e26 (commit) via c3258de737a58cc28457ba3dfdff35d6d269a203 (commit) via a66b5b7a6574372066c3bda8ae352262192cd19c (commit) via 6a43241bc8a4cfb99751ff0200319d03b0acfaf6 (commit) via 4efddb34ffcc7c46f83c34fde0ba3d02b7f3c6cd (commit) via f021f7d3fc24b091b5707b5ebf6c8268ee2f41d7 (commit) via 6c07178363e06313500119b9f5544e1c88567baa (commit) via 928d72ced8991fb8738d19e159eec18edf867fdd (commit) via a00e289b2347abcce9a6513603322e341ae9e785 (commit) via 0a079cd8bf2574072c85ff858e5974a202cd38b3 (commit) via af11ff63690880602b4351c6a630d1f0d3260433 (commit) via 2aea2c681aeb19aca037ee85a6f97a1b30070d64 (commit) via e99b9813d3aed62947cb5a371b6e8c96527e9368 (commit) via 89f78177ab4494c17be6d21c8c8ed4d6ce365ada (commit) via 69133de534b5a299380fd905600970fd3c82a365 (commit) via c1c21ceb36150b0970fdc2323679fcfe8dbc494e (commit) via 41ef32f16fb0f5bd7afe33b46dc9620b1fe48de9 (commit) from 39d27a4038f8f91b6469513e63ba3ccb4da8d3e8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 29443c43d4f4f00011fa3e0b3c8e07dbae034732 Author: chicco <cha...@cr...> Date: Sat May 19 23:26:21 2012 +0200 [calibration] add a calibration action to the vm commit 035f9d52b1b2e95562b0af441e542e2fa91ff38c Author: Jérémie Dimino <je...@di...> Date: Sat May 19 12:06:37 2012 +0200 Add krobot_collision commit d3646d8988b275d635808e856f27a8169fcbe5b1 Author: Jérémie Dimino <je...@di...> Date: Sat May 19 11:57:49 2012 +0200 add robot.motors_moving in krobot-vm commit 645a18abb1e663350086d537520888245e5644c2 Author: Jérémie Dimino <je...@di...> Date: Sat May 19 05:20:29 2012 +0200 Try to do random stuff commit e700577fe24962963fb1943e57d404269ab76fa9 Author: Jérémie Dimino <je...@di...> Date: Fri May 18 20:53:10 2012 +0200 Display collisions commit 78af501cf61256d87e4fa09b6a5205b8397082fb Author: Jérémie Dimino <je...@di...> Date: Fri May 18 19:24:38 2012 +0200 Better collision detection commit 666e0dc488f66ed5318fd5e841be1a537ee45560 Author: chicco <cha...@cr...> Date: Fri May 18 23:40:10 2012 +0200 [krobot_pet] that all folks commit 82f57164333960d5b04bbc124c86a6daf344355b Author: Jérémie Dimino <je...@di...> Date: Fri May 18 22:39:08 2012 +0200 Send logs in background in joystick control commit 46c0ef8dfeb43e00ed50d72edad767ee4cf54cab Author: [Kro]bot <kr...@wa...> Date: Fri May 18 22:31:06 2012 +0200 Enable motors in joystick control commit 53bf72d4ef903e5d87c698b52be0f39860f89d06 Author: Jérémie Dimino <je...@di...> Date: Fri May 18 21:52:43 2012 +0200 Add joystick control commit 3d59652b59b7621cb9f011073ce7e1f923b8410e Author: chicco <cha...@cr...> Date: Fri May 18 18:02:26 2012 +0200 [homo] push bottle commit bdeff879b8ed42276763573967dc7ed28dd50ce9 Author: chicco <cha...@cr...> Date: Fri May 18 17:48:18 2012 +0200 plop commit 96d08ed82366e7c0b2599bd7035675e0cec7ed4e Author: chicco <cha...@cr...> Date: Fri May 18 13:43:40 2012 +0200 go commit bf9296f621e8ab25375fe4bdfa8a23197ddb9cb4 Author: Jérémie Dimino <je...@di...> Date: Fri May 18 13:09:30 2012 +0200 Fix logging in daemons commit 7a344e7ce89be0492587d0cba6bc32509456ed4f Author: chicco <cha...@cr...> Date: Fri May 18 12:36:10 2012 +0200 [pathfinding] correct bezier curve correction commit ae0e0bc5d8cce9c4fe7b38773f5d99ee45ed2e7d Author: Jérémie Dimino <je...@di...> Date: Fri May 18 12:14:10 2012 +0200 Optimize krobot-record Send all messages to log to the writer thread in one batch commit d2e02e09948f8e2f38183d4aea5441fb42092115 Author: Jérémie Dimino <je...@di...> Date: Fri May 18 11:57:54 2012 +0200 Add a flag for opencv commit 864db7bdf520c38dcf04dfb809e53b7a474e4cea Author: Jérémie Dimino <je...@di...> Date: Fri May 18 11:53:50 2012 +0200 Remove generated stuff from the repository commit 2147180a73cd3e00b5eb7e35a9b2decb614bb0ff Author: Jérémie Dimino <je...@di...> Date: Fri May 18 11:34:36 2012 +0200 Modify the message logging system * krobot-record records everything to stdout (so it can be piped to gzip) * krobot-replay filter-out non-can messages and Info can frames * add krobot-read to pretty-print the contents of record files commit 88d667e7e67cd64256ef567631bf788a32a2db1a Author: chicco <cha...@cr...> Date: Fri May 18 11:00:09 2012 +0200 [vm] correct typo commit 2ee981deaba2c5a24d2b9d64f52f7554440d5832 Author: chicco <cha...@cr...> Date: Fri May 18 10:36:07 2012 +0200 [info] modify bezier coefs such that it avoid colliding commit cce7084f6572f1a73bc8f9c1e2815f063525041a Author: chicco <cha...@cr...> Date: Fri May 18 02:47:59 2012 +0200 [info] add coins positions commit 4ee8b067e5a5f92c38c96a8f069a9f02dc088ee3 Author: chicco <cha...@cr...> Date: Fri May 18 01:48:21 2012 +0200 [krobot_vm] restart after some time when no trajectory is found commit 000b1c651d916fbe7fe4de92c47f9d535f294a0e Author: chicco <cha...@cr...> Date: Fri May 18 01:40:29 2012 +0200 [info] fix pathfinder commit 05a4ea204296802b2d8235f2519ebc7020d9372c Author: chicco <cha...@cr...> Date: Thu May 17 21:21:27 2012 +0200 [control] fix things with ennemy avoiding commit 650368da1ad2db0410ddcc397c2c31a06ca33674 Author: chicco <cha...@cr...> Date: Thu May 17 17:39:03 2012 +0200 [control] add krobot_stop_beacon to stop the annoying sound... commit 0ad19a68def0b2fabafeb0e5e15ee1e6177590bc Author: Xavier Lagorce <Xav...@cr...> Date: Fri May 18 02:09:22 2012 +0200 [control2011] Added CAN packets descriptions for new features commit 3ae218d6a175f384974252c5dd2eaa928fa13f6c Author: Xavier Lagorce <Xav...@cr...> Date: Fri May 18 02:08:35 2012 +0200 [Controller_Motor_STM32] New commands and forgotten mail commit 7b0cf7382c5779a9a3048bbc185785181a8aa151 Author: Xavier Lagorce <Xav...@cr...> Date: Fri May 18 00:31:03 2012 +0200 [Controller_Motor_STM32] Suspend motor controllers when the fault button is pressed. commit 4bbe513d86ee6fd90bd17203354ad4f773955a44 Author: Xavier Lagorce <Xav...@cr...> Date: Fri May 18 00:29:39 2012 +0200 [Controller_Motor_STM32] Added functions to suspend and re-enable a controller, taking into account the possible movement of the motor between the two operations commit b302c56062cbf220bba5ed93b8289976ada3926e Author: Olivier BICHLER <oli...@gm...> Date: Thu May 17 21:52:42 2012 +0200 [Sensor_Actuator] Multiple beacons handling commit 658408babb5310adde2136f174db84e380b51772 Author: Olivier BICHLER <oli...@gm...> Date: Thu May 17 19:11:45 2012 +0200 [Sensor_Actuator] Comment blinky leds commit dc78cd457b1b62d932798cd8274bf57f770daea2 Author: Olivier BICHLER <oli...@gm...> Date: Thu May 17 18:07:43 2012 +0200 [Sensor_Actuator] Bug correction on smooth commit 0b246ee805ed4f163fb9579213451fce33aa51f4 Author: Jérémie Dimino <je...@di...> Date: Thu May 17 16:18:16 2012 +0200 Allow to put fake beacons commit ed691e2747ff70813a0282e24ae45bc528a4e6de Author: chicco <cha...@cr...> Date: Thu May 17 15:02:20 2012 +0200 [homologation] homologation startegy restart when changing team commit 1f2f8c16bfb4dae9311823a60b86495466c59bab Author: chicco <cha...@cr...> Date: Thu May 17 11:39:24 2012 +0200 [control] last minute fix for homologation commit 97bb881fbf21d84c503a1614299dd9a0a86b7e26 Author: chicco <cha...@cr...> Date: Thu May 17 09:59:58 2012 +0200 [homologation] wait after pluging the jack commit c3258de737a58cc28457ba3dfdff35d6d269a203 Author: chicco <cha...@cr...> Date: Thu May 17 09:33:31 2012 +0200 [control] code from the whooole long night commit a66b5b7a6574372066c3bda8ae352262192cd19c Author: Xavier Lagorce <Xav...@cr...> Date: Thu May 17 10:21:09 2012 +0200 [control2011] Take into account the double beacon detection commit 6a43241bc8a4cfb99751ff0200319d03b0acfaf6 Author: Xavier Lagorce <Xav...@cr...> Date: Thu May 17 10:16:23 2012 +0200 [Controller_Motor_STM32] Correct independant encoder parameters commit 4efddb34ffcc7c46f83c34fde0ba3d02b7f3c6cd Author: Xavier Lagorce <Xav...@cr...> Date: Thu May 17 10:15:49 2012 +0200 [Controller_Motor_STM32] Corrected Makefile commit f021f7d3fc24b091b5707b5ebf6c8268ee2f41d7 Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 16 22:56:46 2012 +0200 [Controller_Motor_STM32] Always respond to a Bezier command with a CAN packet commit 6c07178363e06313500119b9f5544e1c88567baa Author: Olivier BICHLER <oli...@gm...> Date: Thu May 17 09:30:15 2012 +0200 [Sensor_Actuator] Changed CAN message to send two beacon positions commit 928d72ced8991fb8738d19e159eec18edf867fdd Author: Olivier BICHLER <oli...@gm...> Date: Thu May 17 00:13:12 2012 +0200 [Sensor_Actuator] Correction of bugs in some limit cases commit a00e289b2347abcce9a6513603322e341ae9e785 Author: Olivier BICHLER <oli...@gm...> Date: Thu May 17 00:20:08 2012 +0200 [Sensor_Actuator] Nouvelle calibration OK commit 0a079cd8bf2574072c85ff858e5974a202cd38b3 Author: chicco <cha...@cr...> Date: Wed May 16 21:03:17 2012 +0200 [viewer] draw the robot using independent encoder informations commit af11ff63690880602b4351c6a630d1f0d3260433 Author: chicco <cha...@cr...> Date: Wed May 16 20:51:13 2012 +0200 [viewer/vm] handler Odometry_indep/Set_odometry_indep commit 2aea2c681aeb19aca037ee85a6f97a1b30070d64 Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 16 20:09:36 2012 +0200 [Controller_Motor_STM32] Allow user choice of encoders for odometry commit e99b9813d3aed62947cb5a371b6e8c96527e9368 Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 16 19:11:27 2012 +0200 [Krobot_message] Added CAN messages for independant odometry commit 89f78177ab4494c17be6d21c8c8ed4d6ce365ada Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 16 19:01:29 2012 +0200 [Controller_Motor_STM32] Added messages to set independant odometry commit 69133de534b5a299380fd905600970fd3c82a365 Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 16 18:23:56 2012 +0200 [Controller_Motor_STM32] Verify bezier spline validity commit c1c21ceb36150b0970fdc2323679fcfe8dbc494e Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 16 18:22:20 2012 +0200 [Controller_Motor_STM32] Compute and broadcast second odometry commit 41ef32f16fb0f5bd7afe33b46dc9620b1fe48de9 Author: Olivier BICHLER <oli...@gm...> Date: Wed May 16 20:09:27 2012 +0200 [Sensor_Actuator] Updated beacon system to use an index switch and handle multiple beacons ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_messages.h b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_messages.h index 94ebea0..156bf47 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_messages.h +++ b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_messages.h @@ -24,6 +24,7 @@ #define CAN_MSG_ODOMETRY 104 // odometry_can_msg_t #define CAN_MSG_GHOST 105 // ghost_can_msg_t #define CAN_MSG_CONTROL_ERROR 106 // error_can_msg_t +#define CAN_MSG_ODOMETRY_INDEP 107 // odometry_can_msg_t // Received commands #define CAN_MSG_MOVE 201 // move_can_msg_t @@ -34,6 +35,11 @@ #define CAN_MSG_BEZIER_ADD 206 // bezier_can_msg_t #define CAN_MSG_BEZIER_LIMITS 207 // bezier_limits_can_msg_t #define CAN_MSG_MOTOR_COMMAND 208 // motor_command_can_msg_t +#define CAN_MSG_ODOMETRY_INDEP_SET 209 // odometry_can_msg_t +#define CAN_MSG_CONTROLLER_ACTIVATION 210 // controller_activation_can_msg_t +#define CAN_MSG_DRIVE_ACTIVATION 211 // controller_activation_can_msg_t +#define CAN_MSG_TORQUE_LIMIT 212 // torque_limit_can_msg_t +#define CAN_MSG_DRIVE_TORQUE_LIMIT 213 // drive_torque_limit_can_msg_t /* +-----------------------------------------------------------------+ | CAN messages data structures | @@ -81,6 +87,17 @@ typedef struct { uint8_t state; // 1 if trajectory in progress, 0 else } ghost_msg_t; +// Torque limitation on some motors +typedef struct { + uint8_t motor __attribute__((__packed__)); // Logic OR of bits corresponding to motors + uint16_t limit __attribute__((__packed__)); // Torque limit (between 0 and 3600) +} torque_limit_msg_t; + +// Torque limitation on propulsion drive +typedef struct { + uint16_t limit __attribute__((__packed__)); // Torque limit (between 0 and 3600) +} drive_torque_limit_msg_t; + // Move command typedef struct { int32_t distance __attribute__((__packed__)); // Distance in mm (fixed point representation...) @@ -95,6 +112,19 @@ typedef struct { uint16_t acceleration __attribute__((__packed__)); // Acceleration in 1/1000 radians/s^2 } turn_msg_t; +// Controller activation command +typedef struct { + uint8_t motor __attribute__((__packed__)); // Motor ID of the motor to act on + uint8_t activate __attribute__((__packed__)); // Activate the controller if non zero + // else release the control. +} controller_activation_msg_t; + +// Propulsion Drive activation command +typedef struct { + uint8_t activate __attribute__((__packed__)); // Activate the propulsion drive if non zero + // else release the control. +} drive_activation_msg_t; + // Add a new Bezier Spline to the wait queue typedef struct { uint16_t x_end:12 __attribute__((__packed__)); // end point x coordinate in mm @@ -125,8 +155,8 @@ typedef struct { // Command the speed of a particular motor typedef struct { - uint8_t motor_id; - int32_t speed; + uint8_t motor_id __attribute__((__packed__)); + int32_t speed __attribute__((__packed__)); } motor_command_msg_t; /* +-----------------------------------------------------------------+ @@ -164,6 +194,16 @@ typedef union { } ghost_can_msg_t; typedef union { + torque_limit_msg_t data; + uint32_t data32[2]; +} torque_limit_can_msg_t; + +typedef union { + drive_torque_limit_msg_t data; + uint32_t data32[2]; +} drive_torque_limit_can_msg_t; + +typedef union { move_msg_t data; uint32_t data32[2]; } move_can_msg_t; @@ -174,6 +214,16 @@ typedef union { } turn_can_msg_t; typedef union { + controller_activation_msg_t data; + uint32_t data32[2]; +} controller_activation_can_msg_t; + +typedef union { + drive_activation_msg_t data; + uint32_t data32[2]; +} drive_activation_can_msg_t; + +typedef union { bezier_msg_t data; uint32_t data32[2]; } bezier_can_msg_t; diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_messages_sensors.h b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_messages_sensors.h new file mode 100644 index 0000000..48c3b90 --- /dev/null +++ b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_messages_sensors.h @@ -0,0 +1,223 @@ +/** + * Sensor-Actuator board messages + * + * Header file for the Sensor and Actuator CAN messages + * + * Copyright © 2011 Nicolas Dandrimont <ol...@cr...> + * Authors: Nicolas Dandrimont <ol...@cr...> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifndef CAN_MESSAGES_H__ +#define CAN_MESSAGES_H__ + +/** + * Message IDs + */ + +// Beacon + +#define CAN_BEACON_POSITION 301 // beacon_position +#define CAN_BEACON_LOWLEVEL_POSITION 302 // beacon_lowlevel_position +#define CAN_BEACON_CALIBRATION 303 // beacon_calibration + +// Switches + +#define CAN_SWITCH_STATUS_1 311 // switch_status +#define CAN_SWITCH_STATUS_2 312 // switch_status +#define CAN_SWITCH_SET 313 // switch_request + + +// ADC + +#define CAN_ADC_VALUES_1 321 // adc_values +#define CAN_ADC_VALUES_2 322 // adc_values + +// Battery monitoring + +#define CAN_BATTERY_STATUS_1 331 // battery_status +#define CAN_BATTERY_STATUS_2 332 // battery_status + +// AX12 + +#define CAN_AX12_STATE 341 // ax12_state +#define CAN_AX12_REQUEST_STATE 342 // ax12_request_state +#define CAN_AX12_GOTO 343 // ax12_goto +//#define CAN_AX12_RESET 344 // Not used anymore +#define CAN_AX12_SET_TORQUE_ENABLE 345 // ax12_set_torque_enable + +/****************************************************************************/ + +/** + * Message Packets + */ + +/** + * Beacon messages + */ + +// Position of the opponent +struct beacon_position_pkt { + uint16_t angle[2]; // in 1/10000th of radians [0; 2*Pi[ + uint16_t distance[2]; // in mm [0; 65536[ +} __attribute__((packed)); + + + +// Beacon low-level position +struct beacon_lowlevel_position_pkt { + uint16_t angle; // in 1/10000th of radians [0; 2*Pi[ + uint16_t width; // in 1/100000th of radians [0; Pi/5[ + uint32_t period; // in timer ticks +} __attribute__((packed)); + + + +// Beacon calibration +struct beacon_calibration_pkt { + uint16_t width; // in 1/100000th of radians [0; Pi/5[ + uint16_t distance; // in mm [0; 65536[ +} __attribute__((packed)); + + +/** + * Switch messages + */ + +// Switch status +struct switch_status_pkt { + uint8_t sw1; + uint8_t sw2; + uint8_t sw3; + uint8_t sw4; + uint8_t sw5; + uint8_t sw6; + uint8_t sw7; + uint8_t sw8; +}; + +// Switch request +struct switch_request_pkt { + uint8_t num; + uint8_t state; +}; + +/** + * ADC messages + */ +// ADC Values +struct adc_values_pkt { + uint16_t val1; + uint16_t val2; + uint16_t val3; + uint16_t val4; +} __attribute__((packed)); + +/** + * Battery monitoring + */ +struct battery_status_pkt { + uint16_t elem[4]; // in 1/10000th volts [0; 6.5536[ +} __attribute__((packed)); + + +/** + * AX-12 + */ +struct ax12_state_pkt { + uint8_t address; + uint16_t position; + uint16_t speed; + uint16_t torque; +} __attribute__((packed)); + +struct ax12_request_state_pkt { + uint8_t address; +} __attribute__((packed)); + +struct ax12_goto_pkt { + uint8_t address; + uint16_t position; + uint16_t speed; +} __attribute__((packed)); + +struct ax12_set_torque_enable_pkt { + uint8_t address; + uint8_t enable; +}; + +/****************************************************************************/ + +/** + * Typedefs + */ + +typedef union { + struct beacon_position_pkt p; + uint32_t d[2]; +} beacon_position; + +typedef union { + struct beacon_lowlevel_position_pkt p; + uint32_t d[2]; +} beacon_lowlevel_position; + +typedef union { + struct beacon_calibration_pkt p; + uint32_t d[2]; +} beacon_calibration; + +typedef union { + struct switch_status_pkt p; + uint32_t d[2]; +} switch_status; + +typedef union { + struct switch_request_pkt p; + uint32_t d[2]; +} switch_request; + +typedef union { + struct adc_values_pkt p; + uint32_t d[2]; +} adc_values; + +typedef union { + struct battery_status_pkt p; + uint32_t d[2]; +} battery_status; + +typedef union { + struct ax12_state_pkt p; + uint32_t d[2]; +} ax12_state; + +typedef union { + struct ax12_request_state_pkt p; + uint32_t d[2]; +} ax12_request_state; + +typedef union { + struct ax12_goto_pkt p; + uint32_t d[2]; +} ax12_goto; + +typedef union { + struct ax12_set_torque_enable_pkt p; + uint32_t d[2]; +} ax12_set_torque_enable; + +#endif diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.c b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.c index 5ed50a6..3d83b64 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.c +++ b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.c @@ -12,6 +12,7 @@ #define ROBOT_MODE_NORMAL 0 #define ROBOT_MODE_HIL 1 +#define ROBOT_MODE_FAULT 2 #define CONTROL_ODOMETRY 0 @@ -19,7 +20,7 @@ PROC_DEFINE_STACK(stack_can_send, KERN_MINSTACKSIZE * 8); PROC_DEFINE_STACK(stack_can_receive, KERN_MINSTACKSIZE * 8); // globals -volatile uint8_t mode; +volatile uint8_t mode, old_mode; volatile uint8_t err1, err2, send_err; // Process for communication @@ -40,6 +41,7 @@ void canMonitorInit(void) { can_start(CAND1, &cfg); mode = ROBOT_MODE_NORMAL; + old_mode = ROBOT_MODE_NORMAL; // Start communication process proc_new(canMonitor_process, NULL, sizeof(stack_can_send), stack_can_send); @@ -88,8 +90,9 @@ static void NORETURN canMonitor_process(void) { can_transmit(CAND1, &txm, ms_to_ticks(10));*/ // Sending odometry data if not in HIL mode or motor commands if in HIL mode - if (mode != ROBOT_MODE_HIL) { - odo_getState(CONTROL_ODOMETRY, &odometry); + if (mode != ROBOT_MODE_HIL || + (mode == ROBOT_MODE_FAULT && old_mode == ROBOT_MODE_HIL)) { + odo_getState(0, &odometry); msg_odo.data.x = (int16_t)(odometry.x * 1000.0); msg_odo.data.y = (int16_t)(odometry.y * 1000.0); odometry.theta = fmodf(odometry.theta, 2*M_PI); @@ -103,6 +106,21 @@ static void NORETURN canMonitor_process(void) { txm.data32[1] = msg_odo.data32[1]; txm.eid = CAN_MSG_ODOMETRY; can_transmit(CAND1, &txm, ms_to_ticks(10)); + + odo_getState(1, &odometry); + msg_odo.data.x = (int16_t)(odometry.x * 1000.0); + msg_odo.data.y = (int16_t)(odometry.y * 1000.0); + odometry.theta = fmodf(odometry.theta, 2*M_PI); + if (odometry.theta > M_PI) + odometry.theta -= 2*M_PI; + if (odometry.theta < -M_PI) + odometry.theta += 2*M_PI; + msg_odo.data.theta = (int16_t)(odometry.theta * 10000.0); + + txm.data32[0] = msg_odo.data32[0]; + txm.data32[1] = msg_odo.data32[1]; + txm.eid = CAN_MSG_ODOMETRY_INDEP; + can_transmit(CAND1, &txm, ms_to_ticks(10)); } else { // Sending MOTOR3 data msg_mot.data.position = mc_getPosition(MOTOR3); @@ -166,6 +184,7 @@ static void NORETURN canMonitorListen_process(void) { bool received = false; can_tx_frame txm; robot_state_t odometry; + uint8_t res; move_can_msg_t move_msg; turn_can_msg_t turn_msg; @@ -175,6 +194,11 @@ static void NORETURN canMonitorListen_process(void) { bezier_can_msg_t bezier_msg; bezier_limits_can_msg_t bezier_limits_msg; motor_command_can_msg_t motor_command_msg; + switch_status switches; + torque_limit_can_msg_t torque_limit_msg; + drive_torque_limit_can_msg_t drive_torque_limit_msg; + controller_activation_can_msg_t cont_act_msg; + drive_activation_can_msg_t drive_activation_msg; // Initialize constant parameters of TX frame txm.dlc = 8; @@ -194,6 +218,16 @@ static void NORETURN canMonitorListen_process(void) { } else { // Handle commands and other informations switch (frame.eid) { + case CAN_MSG_TORQUE_LIMIT: + torque_limit_msg.data32[0] = frame.data32[0]; + torque_limit_msg.data32[1] = frame.data32[0]; + motorSetMaxPWM(torque_limit_msg.data.motor, torque_limit_msg.data.limit); + break; + case CAN_MSG_DRIVE_TORQUE_LIMIT: + drive_torque_limit_msg.data32[0] = frame.data32[0]; + drive_torque_limit_msg.data32[1] = frame.data32[1]; + motorSetMaxPWM(MOTOR3|MOTOR4, torque_limit_msg.data.limit);; + break; case CAN_MSG_MOVE: move_msg.data32[0] = frame.data32[0]; move_msg.data32[1] = frame.data32[1]; @@ -206,12 +240,36 @@ static void NORETURN canMonitorListen_process(void) { if (!tc_is_working(TC_MASK(DD_LINEAR_SPEED_TC) | TC_MASK(DD_ROTATIONAL_SPEED_TC))) dd_turn(turn_msg.data.angle / 10000.0, turn_msg.data.speed / 1000.0, turn_msg.data.acceleration / 1000.0); break; + case CAN_MSG_CONTROLLER_ACTIVATION: + cont_act_msg.data32[0] = frame.data32[0]; + cont_act_msg.data32[1] = frame.data32[1]; + if (!cont_act_msg.data.activate) + mc_suspend_controller(1 << (cont_act_msg.data.motor-1)); + else + mc_reactivate_controller(1 << (cont_act_msg.data.motor-1)); + break; + case CAN_MSG_DRIVE_ACTIVATION: + drive_activation_msg.data32[0] = frame.data32[0]; + drive_activation_msg.data32[1] = frame.data32[1]; + if (!drive_activation_msg.data.activate) { + mc_suspend_controller(MOTOR3); + mc_suspend_controller(MOTOR4); + dd_interrupt_trajectory(0., 0.); + } else { + mc_reactivate_controller(MOTOR3); + mc_reactivate_controller(MOTOR4); + } + break; case CAN_MSG_BEZIER_ADD: bezier_msg.data32[0] = frame.data32[0]; bezier_msg.data32[1] = frame.data32[1]; - dd_add_bezier(bezier_msg.data.x_end/1000.0, bezier_msg.data.y_end/1000.0, - bezier_msg.data.d1/100.0, bezier_msg.data.d2/100.0, - bezier_msg.data.theta_end/100.0, bezier_msg.data.v_end/1000.0); + res = dd_add_bezier(bezier_msg.data.x_end/1000.0, + bezier_msg.data.y_end/1000.0, + bezier_msg.data.d1/100.0, + bezier_msg.data.d2/100.0, + bezier_msg.data.theta_end/100.0, + bezier_msg.data.v_end/1000.0); + can_send_error(res,0); break; case CAN_MSG_BEZIER_LIMITS: bezier_limits_msg.data32[0] = frame.data32[0]; @@ -231,7 +289,15 @@ static void NORETURN canMonitorListen_process(void) { odometry.x = ((float)odometry_msg.data.x) / 1000.0; odometry.y = ((float)odometry_msg.data.y) / 1000.0; odometry.theta = ((float)odometry_msg.data.theta) / 10000.0; - odo_setState(CONTROL_ODOMETRY, &odometry); + odo_setState(0, &odometry); + break; + case CAN_MSG_ODOMETRY_INDEP_SET: + odometry_msg.data32[0] = frame.data32[0]; + odometry_msg.data32[1] = frame.data32[1]; + odometry.x = ((float)odometry_msg.data.x) / 1000.0; + odometry.y = ((float)odometry_msg.data.y) / 1000.0; + odometry.theta = ((float)odometry_msg.data.theta) / 10000.0; + odo_setState(1, &odometry); break; case CAN_MSG_ODOMETRY: // We should only receive such message in HIL mode @@ -265,6 +331,20 @@ static void NORETURN canMonitorListen_process(void) { motorSetSpeed(motor_command_msg.data.motor_id, motor_command_msg.data.speed); break; + case CAN_SWITCH_STATUS_1: + switches.d[0] = frame.data32[0]; + switches.d[1] = frame.data32[1]; + if (mode != ROBOT_MODE_FAULT && !switches.p.sw3) { + dd_interrupt_trajectory(0., 0.); + old_mode = mode; + mode = ROBOT_MODE_FAULT; + mc_suspend_controller(MOTOR3); + mc_suspend_controller(MOTOR4); + } else if (mode == ROBOT_MODE_FAULT && switches.p.sw3) { + mode = old_mode; + mc_reactivate_controller(MOTOR3); + mc_reactivate_controller(MOTOR4); + } } } } diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.h b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.h index c157f58..c829c10 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.h +++ b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/can_monitor.h @@ -19,6 +19,7 @@ #include "odometry.h" #include "differential_drive.h" #include "can_messages.h" +#include "can_messages_sensors.h" void canMonitorInit(void); void can_send_error(uint8_t err1, uint8_t err2); diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/controller_motor_stm32.mk b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/controller_motor_stm32.mk index ac9aa9a..37d3ed0 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/controller_motor_stm32.mk +++ b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/controller_motor_stm32.mk @@ -9,7 +9,7 @@ Firmware_DEBUG = 1 # Our target application TRG += controller_motor_stm32 -controller_motor_stm32_PREFIX = "/media/data/krobot/arm-i386/bin/arm-none-eabi-" +controller_motor_stm32_PREFIX = "$$HOME/opt/arm/bin/arm-none-eabi-" controller_motor_stm32_SUFFIX = "" diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/main.c b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/main.c index 48846a3..e4b87bf 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/main.c +++ b/elec/boards/Controller_Motor_STM32/Firmwares/Propulsion_Drive/controller_motor_stm32/main.c @@ -17,8 +17,11 @@ #include "command_generator.h" #include "differential_drive.h" -#define WHEEL_RADIUS 0.049245 -#define SHAFT_WIDTH 0.224 +#define PROP_WHEEL_RADIUS 0.049245 +#define PROP_SHAFT_WIDTH 0.22264 + +#define INDEP_WHEEL_RADIUS 0.0359 +#define INDEP_SHAFT_WIDTH 0.266 #define CONTROL_ODOMETRY 0 @@ -50,7 +53,7 @@ static void init(void) // Start control of drive motors tc_init(); dd_start(CONTROL_ODOMETRY, // Use odometry CONTROL_ODOMETRY for control - WHEEL_RADIUS, SHAFT_WIDTH, // Structural parameters + PROP_WHEEL_RADIUS, PROP_SHAFT_WIDTH, // Structural parameters 8*2*M_PI, // Absolute wheel speed limitation 0.5, // Linear velocity limitation 1.0, // Linear acceleration limitation @@ -77,8 +80,15 @@ static void init(void) params.encoder_gain = -2.0*M_PI/2000.0/15; // Left motor is reversed mc_new_controller(¶ms, dd_get_right_wheel_generator(), CONTROLLER_MODE_NORMAL); - // Start odometry - odometryInit(CONTROL_ODOMETRY, 1e-3, WHEEL_RADIUS, SHAFT_WIDTH, 2.0*M_PI/2000.0/15, -2.0*M_PI/2000.0/15); + // Start odometrys + odometryInit(0, 1e-3, + PROP_WHEEL_RADIUS, PROP_SHAFT_WIDTH, + ENCODER3, ENCODER4, + 2.0*M_PI/2000.0/15, -2.0*M_PI/2000.0/15); + odometryInit(1, 1e-3, + INDEP_WHEEL_RADIUS, INDEP_SHAFT_WIDTH, + ENCODER1, ENCODER2, + 2.0*M_PI/1024.0, -2.0*M_PI/1024.0); // Init beacon motor enableMotor(MOTOR2); @@ -96,6 +106,7 @@ static void init(void) LED4_OFF(); timer_delay(100); } + } static void NORETURN ind_process(void) diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.c b/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.c index 487ae75..ab84dce 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.c +++ b/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.c @@ -304,6 +304,10 @@ uint8_t dd_add_bezier(float x_end, float y_end, float d1, float d2, float end_an if (params.trajs[t_ind].initialized == 1) { return DD_TRAJECTORY_ALREADY_USED; } else { + // Test the validity of the spline + if (fabsf(d1) < 0.01 || fabsf(d2) < 0.01) { + return DD_BAD_TRAJECTORY; + } traj = ¶ms.trajs[t_ind]; // New trajectory is not enabled traj->enabled = 0; diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.h b/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.h index df33321..2c0a7e4 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.h +++ b/elec/boards/Controller_Motor_STM32/Firmwares/lib/differential_drive.h @@ -26,6 +26,7 @@ #define DD_NO_ERROR 0 #define DD_TRAJECTORY_ALREADY_USED 1 +#define DD_BAD_TRAJECTORY 2 #define DD_GHOST_STOPPED 0 #define DD_GHOST_MOVING 1 diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.c b/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.c index 2c2ae81..c106343 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.c +++ b/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.c @@ -21,6 +21,7 @@ typedef struct { uint8_t enable; // Is this controller enabled ? uint8_t running; // Is this controller running ? + uint8_t suspended; // Is this controller suspended ? uint8_t mode; // Is this a real controller or an HIL controller uint8_t motor; // Motor ID to control uint8_t encoder; // Encoder ID to measure motor position from @@ -178,13 +179,6 @@ static void NORETURN motorController_process(void) { // Measure motor rotation encoder_pos = (float)getEncoderPosition(params->encoder); delta = encoder_pos - params->last_encoder_pos; - /*if (getEncoderDirection(params->encoder) == ENCODER_DIR_UP) { - if (delta < 0) - delta = delta + 65535; - } else { - if (delta > 0) - delta = delta - 65535; - }*/ if (delta > 32767) { delta = delta - 65535; } else if (delta < - 32767) { @@ -208,12 +202,14 @@ static void NORETURN motorController_process(void) { params->last_estimate[1] = estimate[1]; params->last_encoder_pos = encoder_pos; - // Apply command - if (isnan(params->last_command)) { - motorSetSpeed(params->motor, 0); - motor_led_on(params->motor); - } else { - motorSetSpeed(params->motor, (int32_t)params->last_command); + // Apply command if necessary + if (!params->suspended) { + if (isnan(params->last_command)) { + motorSetSpeed(params->motor, 0); + motor_led_on(params->motor); + } else { + motorSetSpeed(params->motor, (int32_t)params->last_command); + } } } timer_waitEvent(&timer); // Wait for the remaining of the sample period @@ -416,3 +412,28 @@ void mc_change_mode(uint8_t motor, uint8_t new_mode) { } } } + +void mc_suspend_controller(uint8_t motor) { + control_params_t *params; + + params = &(controllers[get_motor_index(motor)]); + if (params->enable) + params->suspended = 1; + disableMotor(motor); +} + +void mc_reactivate_controller(uint8_t motor) { + control_params_t *params; + + params = &(controllers[get_motor_index(motor)]); + if (params->enable && params->suspended) { + params->last_command = 0; + params->last_estimate[0] = get_output_value(params->reference); + params->last_estimate[1] = 0; + params->last_output = params->last_estimate[0]; + params->last_encoder_pos = getEncoderPosition(params->encoder); + params->suspended = 0; + motorSetSpeed(motor, 0); + enableMotor(motor); + } +} diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.h b/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.h index f78cde4..0d793b2 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.h +++ b/elec/boards/Controller_Motor_STM32/Firmwares/lib/motor_controller.h @@ -89,6 +89,13 @@ uint8_t mc_is_controller_running(uint8_t motor); * Returns 'motor' 's controller mode */ uint8_t mc_controller_mode(uint8_t motor); - +/* + * Suspends 'motor' 's controller + */ +void mc_suspend_controller(uint8_t motor); +/* + * Get back on-line a controller + */ +void mc_reactivate_controller(uint8_t motor); #endif diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.c b/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.c index 6b33924..33a597d 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.c +++ b/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.c @@ -15,6 +15,7 @@ static cpu_stack_t stack_odometry[MAX_ODOMETRY_PROCESSES][(ODOMETRY_STACK_SIZE + typedef struct { robot_state_t robot_state; float wheel_radius, shaft_width, left_encoder_gain, right_encoder_gain; + uint8_t left_encoder, right_encoder; float Ts; uint8_t enable; uint8_t running; @@ -24,7 +25,10 @@ odometry_state_t state[MAX_ODOMETRY_PROCESSES]; static void NORETURN odometry_process(void); -void odometryInit(uint8_t process_num, float Ts, float wheel_radius, float shaft_width, float left_encoder_gain, float right_encoder_gain) { +void odometryInit(uint8_t process_num, float Ts, + float wheel_radius, float shaft_width, + uint8_t left_encoder, uint8_t right_encoder, + float left_encoder_gain, float right_encoder_gain) { // Initialize initial state state[process_num].robot_state.x = 0.; @@ -34,6 +38,8 @@ void odometryInit(uint8_t process_num, float Ts, float wheel_radius, float shaft // Initialize robot parameters state[process_num].wheel_radius = wheel_radius; state[process_num].shaft_width = shaft_width; + state[process_num].left_encoder = left_encoder; + state[process_num].right_encoder = right_encoder; state[process_num].left_encoder_gain = left_encoder_gain; state[process_num].right_encoder_gain = right_encoder_gain; state[process_num].Ts = Ts; @@ -57,7 +63,6 @@ void odo_restart(uint8_t process_num) { static void NORETURN odometry_process(void) { float pos_l, pos_r, last_pos_l, last_pos_r, delta_l, delta_r; - uint8_t dir_l, dir_r; Timer timer; odometry_state_t *state; @@ -72,8 +77,8 @@ static void NORETURN odometry_process(void) { state->running = 1; // State initialization - last_pos_l = (float)getEncoderPosition(ENCODER3); - last_pos_r = (float)getEncoderPosition(ENCODER4); + last_pos_l = (float)getEncoderPosition(state->left_encoder); + last_pos_r = (float)getEncoderPosition(state->right_encoder); while (1) { if (state->enable == 0) { @@ -83,8 +88,8 @@ static void NORETURN odometry_process(void) { timer_add(&timer); // Measure motors rotation and correct wrapping - pos_l = (float)getEncoderPosition(ENCODER3); dir_l = getEncoderDirection(ENCODER3); - pos_r = (float)getEncoderPosition(ENCODER4); dir_r = getEncoderDirection(ENCODER4); + pos_l = (float)getEncoderPosition(state->left_encoder); + pos_r = (float)getEncoderPosition(state->right_encoder); delta_l = pos_l - last_pos_l; delta_r = pos_r - last_pos_r; if (delta_l > 32767) { @@ -97,20 +102,6 @@ static void NORETURN odometry_process(void) { } else if (delta_r < - 32767) { delta_r = delta_r + 65535; } - /*if (dir_l == ENCODER_DIR_UP) { - if (delta_l < 0) - delta_l = delta_l + 65535; - } else { - if (delta_l > 0) - delta_l = delta_l - 65535; - } - if (dir_r == ENCODER_DIR_UP) { - if (delta_r < 0) - delta_r = delta_r + 65535; - } else { - if (delta_r > 0) - delta_r = delta_r - 65535; - }*/ delta_l *= state->left_encoder_gain; delta_r *= state->right_encoder_gain; last_pos_l = pos_l; diff --git a/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.h b/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.h index cac8c83..dcafed4 100644 --- a/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.h +++ b/elec/boards/Controller_Motor_STM32/Firmwares/lib/odometry.h @@ -22,7 +22,10 @@ typedef struct { float theta; } robot_state_t; -void odometryInit(uint8_t process_num, float Ts, float wheel_radius, float shaft_width, float left_encoder_gain, float right_encoder_gain); +void odometryInit(uint8_t process_num, float Ts, + float wheel_radius, float shaft_width, + uint8_t left_encoder, uint8_t right_encoder, + float left_encoder_gain, float right_encoder_gain); void odo_disable(uint8_t process_num); void odo_restart(uint8_t process_num); diff --git a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/clock_stm32.h b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/clock_stm32.h index e91753d..5c9203b 100644 --- a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/clock_stm32.h +++ b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/clock_stm32.h @@ -234,12 +234,30 @@ #define RCC_APB2_GPIOC (0x00000010) #define RCC_APB2_GPIOD (0x00000020) #define RCC_APB2_GPIOE (0x00000040) +#define RCC_APB2_GPIOF (0x00000080) +#define RCC_APB2_GPIOG (0x00000100) #define RCC_APB2_ADC1 (0x00000200) #define RCC_APB2_ADC2 (0x00000400) #define RCC_APB2_TIM1 (0x00000800) #define RCC_APB2_SPI1 (0x00001000) +#define RCC_APB2_TIM8 (0x00002000) #define RCC_APB2_USART1 (0x00004000) -#define RCC_APB2_ALL (0x00005E7D) +#define RCC_APB2_ADC3 (0x00008000) +#define RCC_APB2_ALL (RCC_APB2_AFIO \ + | RCC_APB2_GPIOA \ + | RCC_APB2_GPIOB \ + | RCC_APB2_GPIOC \ + | RCC_APB2_GPIOD \ + | RCC_APB2_GPIOE \ + | RCC_APB2_GPIOF \ + | RCC_APB2_GPIOG \ + | RCC_APB2_ADC1 \ + | RCC_APB2_ADC2 \ + | RCC_APB2_TIM1 \ + | RCC_APB2_SPI1 \ + | RCC_APB2_TIM8 \ + | RCC_APB2_USART1 \ + | RCC_APB2_ADC3) /** * RCC register: BCDR diff --git a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/irq_cm3.c b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/irq_cm3.c index 14311d9..bb8ac66 100644 --- a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/irq_cm3.c +++ b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/drv/irq_cm3.c @@ -95,8 +95,10 @@ static void sysirq_enable(sysirq_t irq) /* Enable the IRQ line (only for generic IRQs) */ if (irq >= 16 && irq < 48) NVIC_EN0_R = 1 << (irq - 16); - else if (irq >= 48) + else if (irq >= 48 && irq < 80) NVIC_EN1_R = 1 << (irq - 48); + else if (irq >= 80) + NVIC_EN2_R = 1 << (irq - 80); } void sysirq_setHandler(sysirq_t irq, sysirq_handler_t handler) diff --git a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_ints.h b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_ints.h index 7fde933..c425b59 100644 --- a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_ints.h +++ b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_ints.h @@ -83,8 +83,25 @@ #define EXTI15_10_IRQHANDLER 56 /* External Line[15:10] Interrupts */ #define RTCALARM_IRQHANDLER 57 /* RTC Alarm through EXTI Line Interrupt */ #define USBWAKEUP_IRQHANDLER 58 /* USB WakeUp from suspend through EXTI Line Interrupt */ +#define TIM8_BRK_IRQHANDLER 59 /*TIM8 Break Interrupt */ +#define TIM8_UP_IRQHANDLER 60 /*TIM8 Update Interrupt */ +#define TIM8_TRG_COM_IRQHANDLER 61 /*TIM8 Trigger and Commutation Interrupt */ +#define TIM8_CC_IRQHANDLER 62 /*TIM8 Capture Compare Interrupt */ +#define ADC3_IRQHANDLER 63 /*ADC3 global Interrupt */ +#define FSMC_IRQHANDLER 64 /*FSMC global Interrupt */ +#define SDIO_IRQHANDLER 65 /*SDIO global Interrupt */ +#define TIM5_IRQHANDLER 66 /*TIM5 global Interrupt */ +#define SPI3_IRQHANDLER 67 /*SPI3 global Interrupt */ +#define UART4_IRQHANDLER 68 /*UART4 global Interrupt */ +#define UART5_IRQHANDLER 69 /*UART5 global Interrupt */ +#define TIM6_IRQHANDLER 70 /*TIM6 global Interrupt */ +#define TIM7_IRQHANDLER 71 /*TIM7 global Interrupt */ +#define DMA2_Channel1_IRQHANDLER 72 /*DMA2 Channel 1 global Interrupt */ +#define DMA2_Channel2_IRQHANDLER 73 /*DMA2 Channel 2 global Interrupt */ +#define DMA2_Channel3_IRQHANDLER 74 /*DMA2 Channel 3 global Interrupt */ +#define DMA2_Channel4_5_IRQHANDLER 75 /* DMA2 Channel 4 and Channel 5 global Interrupt */ /*\}*/ -#define NUM_INTERRUPTS 66 +#define NUM_INTERRUPTS 76 #endif /* STM32_INTS_H */ diff --git a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_nvic.h b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_nvic.h index 9a209f3..6b35d10 100644 --- a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_nvic.h +++ b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/bertos/cpu/cortex-m3/io/stm32_nvic.h @@ -63,6 +63,7 @@ #define NVIC_ST_CAL_R (*((reg32_t *)0xE000E01C)) #define NVIC_EN0_R (*((reg32_t *)0xE000E100)) #define NVIC_EN1_R (*((reg32_t *)0xE000E104)) +#define NVIC_EN2_R (*((reg32_t *)0xE000E108)) #define NVIC_DIS0_R (*((reg32_t *)0xE000E180)) #define NVIC_DIS1_R (*((reg32_t *)0xE000E184)) #define NVIC_PEND0_R (*((reg32_t *)0xE000E200)) diff --git a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/sensor_actuator.cbp b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/sensor_actuator.cbp new file mode 100644 index 0000000..ae3b3e2 --- /dev/null +++ b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/sensor_actuator.cbp @@ -0,0 +1,202 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<CodeBlocks_project_file> + <FileVersion major="1" minor="6" /> + <Project> + <Option title="sensor_actuator" /> + <Option makefile_is_custom="1" /> + <Option pch_mode="2" /> + <Option compiler="gcc" /> + <MakeCommands> + <Build command="make" /> + <CompileFile command="make" /> + <Clean command="make clean" /> + <DistClean command="$make -f $makefile distclean$target" /> + <AskRebuildNeeded command="$make -q -f $makefile $target" /> + <SilentBuild command="$make -s -f $makefile $target" /> + </MakeCommands> + <Build> + <Target title=" "> + <Option output="bin/Release/sensor_actuator" prefix_auto="1" extension_auto="1" /> + <Option object_output="obj/Release/" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Compiler> + <Add option="-O2" /> + </Compiler> + <Linker> + <Add option="-s" /> + </Linker> + <MakeCommands> + <Build command="make" /> + <CompileFile command="make" /> + <Clean command="make clean" /> + <DistClean command="$make -f $makefile distclean$target" /> + <AskRebuildNeeded command="$make -q -f $makefile $target" /> + <SilentBuild command="$make -s -f $makefile $target" /> + </MakeCommands> + </Target> + </Build> + <Compiler> + <Add option="-Wall" /> + </Compiler> + <Unit filename="sensor_actuator/adc/adc.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/adc/adc.h" /> + <Unit filename="sensor_actuator/ax12/ax12.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/ax12/ax12.h" /> + <Unit filename="sensor_actuator/ax12/ax12_highlevel.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/ax12/ax12_highlevel.h" /> + <Unit filename="sensor_actuator/ax12/serial.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/ax12/serial.h" /> + <Unit filename="sensor_actuator/battery_monitoring/ads7828.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/battery_monitoring/ads7828.h" /> + <Unit filename="sensor_actuator/battery_monitoring/battery_monitoring.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/battery_monitoring/battery_monitoring.h" /> + <Unit filename="sensor_actuator/beacon/beacon.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/beacon/beacon.h" /> + <Unit filename="sensor_actuator/beacon/stm32lib/core_cm3.h" /> + <Unit filename="sensor_actuator/beacon/stm32lib/stm32f10x.h" /> + <Unit filename="sensor_actuator/beacon/stm32lib/stm32f10x_rcc.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/beacon/stm32lib/stm32f10x_rcc.h" /> + <Unit filename="sensor_actuator/beacon/stm32lib/stm32f10x_tim.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/beacon/stm32lib/stm32f10x_tim.h" /> + <Unit filename="sensor_actuator/can/can_messages.h" /> + <Unit filename="sensor_actuator/can/can_monitor.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/can/can_monitor.h" /> + <Unit filename="sensor_actuator/cfg/cfg_adc.h" /> + <Unit filename="sensor_actuator/cfg/cfg_afsk.h" /> + <Unit filename="sensor_actuator/cfg/cfg_ax25.h" /> + <Unit filename="sensor_actuator/cfg/cfg_battfs.h" /> + <Unit filename="sensor_actuator/cfg/cfg_can.h" /> + <Unit filename="sensor_actuator/cfg/cfg_context_switch.h" /> + <Unit filename="sensor_actuator/cfg/cfg_dac.h" /> + <Unit filename="sensor_actuator/cfg/cfg_dataflash.h" /> + <Unit filename="sensor_actuator/cfg/cfg_dc_motor.h" /> + <Unit filename="sensor_actuator/cfg/cfg_debug.h" /> + <Unit filename="sensor_actuator/cfg/cfg_eeprom.h" /> + <Unit filename="sensor_actuator/cfg/cfg_emb_flash.h" /> + <Unit filename="sensor_actuator/cfg/cfg_eth.h" /> + <Unit filename="sensor_actuator/cfg/cfg_fat.h" /> + <Unit filename="sensor_actuator/cfg/cfg_flash25.h" /> + <Unit filename="sensor_actuator/cfg/cfg_formatwr.h" /> + <Unit filename="sensor_actuator/cfg/cfg_gfx.h" /> + <Unit filename="sensor_actuator/cfg/cfg_hashtable.h" /> + <Unit filename="sensor_actuator/cfg/cfg_heap.h" /> + <Unit filename="sensor_actuator/cfg/cfg_i2c.h" /> + <Unit filename="sensor_actuator/cfg/cfg_i2s.h" /> + <Unit filename="sensor_actuator/cfg/cfg_ini_reader.h" /> + <Unit filename="sensor_actuator/cfg/cfg_kbd.h" /> + <Unit filename="sensor_actuator/cfg/cfg_keytag.h" /> + <Unit filename="sensor_actuator/cfg/cfg_kfile.h" /> + <Unit filename="sensor_actuator/cfg/cfg_lcd_32122a.h" /> + <Unit filename="sensor_actuator/cfg/cfg_lcd_hd44.h" /> + <Unit filename="sensor_actuator/cfg/cfg_led_7seg.h" /> + <Unit filename="sensor_actuator/cfg/cfg_lm75.h" /> + <Unit filename="sensor_actuator/cfg/cfg_lwip.h" /> + <Unit filename="sensor_actuator/cfg/cfg_md2.h" /> + <Unit filename="sensor_actuator/cfg/cfg_monitor.h" /> + <Unit filename="sensor_actuator/cfg/cfg_nand.h" /> + <Unit filename="sensor_actuator/cfg/cfg_nmea.h" /> + <Unit filename="sensor_actuator/cfg/cfg_parser.h" /> + <Unit filename="sensor_actuator/cfg/cfg_phase.h" /> + <Unit filename="sensor_actuator/cfg/cfg_pocketbus.h" /> + <Unit filename="sensor_actuator/cfg/cfg_proc.h" /> + <Unit filename="sensor_actuator/cfg/cfg_pwm.h" /> + <Unit filename="sensor_actuator/cfg/cfg_ramp.h" /> + <Unit filename="sensor_actuator/cfg/cfg_random.h" /> + <Unit filename="sensor_actuator/cfg/cfg_randpool.h" /> + <Unit filename="sensor_actuator/cfg/cfg_sd.h" /> + <Unit filename="sensor_actuator/cfg/cfg_sem.h" /> + <Unit filename="sensor_actuator/cfg/cfg_ser.h" /> + <Unit filename="sensor_actuator/cfg/cfg_signal.h" /> + <Unit filename="sensor_actuator/cfg/cfg_spi_bitbang.h" /> + <Unit filename="sensor_actuator/cfg/cfg_stepper.h" /> + <Unit filename="sensor_actuator/cfg/cfg_tas5706a.h" /> + <Unit filename="sensor_actuator/cfg/cfg_tftp.h" /> + <Unit filename="sensor_actuator/cfg/cfg_thermo.h" /> + <Unit filename="sensor_actuator/cfg/cfg_timer.h" /> + <Unit filename="sensor_actuator/cfg/cfg_usb.h" /> + <Unit filename="sensor_actuator/cfg/cfg_usbkbd.h" /> + <Unit filename="sensor_actuator/cfg/cfg_usbmouse.h" /> + <Unit filename="sensor_actuator/cfg/cfg_usbser.h" /> + <Unit filename="sensor_actuator/cfg/cfg_wdt.h" /> + <Unit filename="sensor_actuator/cfg/cfg_xmodem.h" /> + <Unit filename="sensor_actuator/hw/hw_afsk.h" /> + <Unit filename="sensor_actuator/hw/hw_buzzer.h" /> + <Unit filename="sensor_actuator/hw/hw_dataflash.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/hw/hw_dataflash.h" /> + <Unit filename="sensor_actuator/hw/hw_dc_motor.h" /> + <Unit filename="sensor_actuator/hw/hw_ft245rl.h" /> + <Unit filename="sensor_actuator/hw/hw_hx8347.h" /> + <Unit filename="sensor_actuator/hw/hw_i2c_bitbang.h" /> + <Unit filename="sensor_actuator/hw/hw_ili9225.h" /> + <Unit filename="sensor_actuator/hw/hw_kbd.h" /> + <Unit filename="sensor_actuator/hw/hw_lcd_32122a.h" /> + <Unit filename="sensor_actuator/hw/hw_lcd_hd44.h" /> + <Unit filename="sensor_actuator/hw/hw_led.h" /> + <Unit filename="sensor_actuator/hw/hw_led_7seg.h" /> + <Unit filename="sensor_actuator/hw/hw_lm75.h" /> + <Unit filename="sensor_actuator/hw/hw_mcp41.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/hw/hw_mcp41.h" /> + <Unit filename="sensor_actuator/hw/hw_ntc.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/hw/hw_ntc.h" /> + <Unit filename="sensor_actuator/hw/hw_phase.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/hw/hw_phase.h" /> + <Unit filename="sensor_actuator/hw/hw_rit128x96.h" /> + <Unit filename="sensor_actuator/hw/hw_sd.h" /> + <Unit filename="sensor_actuator/hw/hw_ser.h" /> + <Unit filename="sensor_actuator/hw/hw_sipo.h" /> + <Unit filename="sensor_actuator/hw/hw_spi.h" /> + <Unit filename="sensor_actuator/hw/hw_stepper.h" /> + <Unit filename="sensor_actuator/hw/hw_tas5706a.h" /> + <Unit filename="sensor_actuator/hw/hw_thermo.h" /> + <Unit filename="sensor_actuator/hw/hw_tlv5618.h" /> + <Unit filename="sensor_actuator/hw/hw_tmp123.h" /> + <Unit filename="sensor_actuator/hw/kbd_map.h" /> + <Unit filename="sensor_actuator/hw/mcp41_map.h" /> + <Unit filename="sensor_actuator/hw/ntc_map.h" /> + <Unit filename="sensor_actuator/hw/phase_map.h" /> + <Unit filename="sensor_actuator/hw/pwm_map.h" /> + <Unit filename="sensor_actuator/hw/thermo_map.h" /> + <Unit filename="sensor_actuator/main.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/switch/switch.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="sensor_actuator/switch/switch.h" /> + <Extensions> + <envvars /> + <code_completion /> + <debugger /> + <lib_finder disable_auto="1" /> + </Extensions> + </Project> +</CodeBlocks_project_file> diff --git a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/sensor_actuator/beacon/beacon.c b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/sensor_actuator/beacon/beacon.c index 6d180ea..be33ec7 100644 --- a/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/sensor_actuator/beacon/beacon.c +++ b/elec/boards/Sensor_Actuator/Firmware/sensor_actuator/sensor_actuator/beacon/beacon.c @@ -26,149 +26,158 @@ static struct Event got_capture; static struct Event updated_beacon; -static uint16_t cur_period = 0; -static uint16_t cur_width = 0; - +static uint16_t beacon_idx = 0; +static uint16_t beacon_measured = 0; +static uint32_t beacon_start[MAX_BEACONS] = {0}; +static uint32_t beacon_stop[MAX_BEACONS] = {0}; static uint32_t period = 0; -static uint16... [truncated message content] |