From: Xavier L. <Ba...@us...> - 2011-03-25 21:15:11
|
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 af2f09b9bb1cb78cd68a0085bf7dbc87a4635d7d (commit) from 941e8e22c085789a822b680edd67dfdf93f6d8eb (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 af2f09b9bb1cb78cd68a0085bf7dbc87a4635d7d Author: Xavier Lagorce <Xav...@cr...> Date: Fri Mar 25 22:12:02 2011 +0100 [Controller_Motor_STM32] Command generator operational * Move some stacks for dynamic to static * Fixed some bugs ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/can_monitor.c b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/can_monitor.c index dca6596..03cfe90 100644 --- a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/can_monitor.c +++ b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/can_monitor.c @@ -10,6 +10,8 @@ #include "can_monitor.h" #include "hw/hw_led.h" +PROC_DEFINE_STACK(stack_can_send, KERN_MINSTACKSIZE * 8); + typedef struct { uint16_t encoder1_pos __attribute__((__packed__)); uint16_t encoder2_pos __attribute__((__packed__)); @@ -50,7 +52,7 @@ void canMonitorInit(void) { can_start(CAND1, &cfg); // Start communication process - proc_new(canMonitor_process, NULL, KERN_MINSTACKSIZE * 8, NULL); + proc_new(canMonitor_process, NULL, sizeof(stack_can_send), stack_can_send); } static void NORETURN canMonitor_process(void) { diff --git a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/command_generator.c b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/command_generator.c index da0fd67..6542070 100644 --- a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/command_generator.c +++ b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/command_generator.c @@ -103,6 +103,9 @@ float get_output_value(command_generator_t *generator) { int32_t cur_time; float speed, dt; + if (generator->type.state != GEN_STATE_RUNNING) + return generator->type.last_output; + switch (generator->type.t) { case GEN_CONSTANT: // Constant generator, no update needed @@ -112,12 +115,14 @@ float get_output_value(command_generator_t *generator) { dt = (cur_time - generator->ramp.last_time)*1e-6; generator->type.last_output += dt*generator->ramp.speed; generator->ramp.last_time = cur_time; + break; case GEN_RAMP2: cur_time = ticks_to_us(timer_clock()); speed = get_output_value(generator->ramp2.speed); dt = (cur_time - generator->ramp.last_time)*1e-6; generator->type.last_output += dt*speed; generator->ramp.last_time = cur_time; + break; } switch (generator->type.callback.type) { diff --git a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/controller_motor_stm32.mk b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/controller_motor_stm32.mk index 7d1317b..cbfc980 100644 --- a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/controller_motor_stm32.mk +++ b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/controller_motor_stm32.mk @@ -22,14 +22,14 @@ controller_motor_stm32_WIZARD_CSRC = \ bertos/cpu/cortex-m3/drv/can_stm32.c \ bertos/cpu/cortex-m3/hw/switch_ctx_cm3.c \ bertos/mware/event.c \ + bertos/kern/monitor.c \ bertos/cpu/cortex-m3/drv/timer_cm3.c \ bertos/struct/heap.c \ bertos/drv/can.c \ - bertos/kern/monitor.c \ + bertos/mware/formatwr.c \ bertos/drv/timer.c \ bertos/kern/signal.c \ bertos/kern/proc.c \ - bertos/mware/formatwr.c \ bertos/mware/hex.c \ # diff --git a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/main.c b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/main.c index ecbc3a7..9dd248c 100644 --- a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/main.c +++ b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/main.c @@ -17,7 +17,9 @@ #include "can_monitor.h" #include "command_generator.h" -command_generator_t generator; +command_generator_t genR, genL; + +PROC_DEFINE_STACK(stack_op, KERN_MINSTACKSIZE * 8); static void init(void) { @@ -41,11 +43,12 @@ static void init(void) canMonitorInit(); // Start control of drive motors - new_ramp_generator(&generator, 0., 180.); + new_ramp_generator(&genR, 0., 180.); + new_ramp_generator(&genL, 0., 180.); float k[] = {-68.0325, -1.0205}; float l0[] = {0.0236, 3.9715}; - mc_new_controller(MOTOR3, ENCODER3, -360.0/2000.0/15.0, 0.833, 0.015, 0.005, k, -k[0], l0, &generator); - mc_new_controller(MOTOR4, ENCODER4, -360.0/2000.0/15.0, 0.833, 0.015, 0.005, k, -k[0], l0, &generator); + mc_new_controller(MOTOR3, ENCODER3, -360.0/2000.0/15.0, 0.833, 0.015, 0.005, k, -k[0], l0, &genL); + mc_new_controller(MOTOR4, ENCODER4, -360.0/2000.0/15.0, 0.833, 0.015, 0.005, k, -k[0], l0, &genR); // Blink to say we are ready for (uint8_t i=0; i < 2; i++) { @@ -87,13 +90,21 @@ static void NORETURN square_process(void) static void NORETURN goto_process(void) { LED1_ON(); - start_generator(&generator); + start_generator(&genL); + start_generator(&genR); timer_delay(2000); - pause_generator(&generator); - adjust_speed(&generator, 360.); + pause_generator(&genL); + pause_generator(&genR); + adjust_speed(&genL, 360.); + adjust_speed(&genR, 360.); timer_delay(1000); - start_generator(&generator); + start_generator(&genL); + start_generator(&genR); timer_delay(2000); + adjust_speed(&genL, 0.); + adjust_speed(&genR, 0.); + timer_delay(200); + mc_delete_controller(MOTOR3); mc_delete_controller(MOTOR4); LED1_OFF(); } @@ -104,7 +115,7 @@ int main(void) init(); /* Create a new child process */ - proc_new(goto_process, NULL, KERN_MINSTACKSIZE * 8, NULL); + proc_new(goto_process, NULL, sizeof(stack_op), stack_op); /* * The main process is kept to periodically report the stack diff --git a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/motor_controller.c b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/motor_controller.c index 99fc75b..8246a8c 100644 --- a/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/motor_controller.c +++ b/elec/boards/Controller_Motor_STM32/Firmware/controller_motor_stm32/motor_controller.c @@ -210,7 +210,7 @@ uint8_t mc_new_controller(uint8_t motor, uint8_t encoder, float encoder_gain, fl motorSetSpeed(motor, 0); // start the controller - proc_new(motorController_process, params, KERN_MINSTACKSIZE * 8, NULL); + proc_new(motorController_process, params, KERN_MINSTACKSIZE * 16, NULL); return CONTROLLER_OK; } else { diff --git a/elec/boards/Controller_Motor_STM32/Firmware/project.bertos b/elec/boards/Controller_Motor_STM32/Firmware/project.bertos index e2a1b7f..33b0c75 100644 --- a/elec/boards/Controller_Motor_STM32/Firmware/project.bertos +++ b/elec/boards/Controller_Motor_STM32/Firmware/project.bertos @@ -29,11 +29,11 @@ p13 (lp14 S'signal' p15 -aS'kernel' +aS'debug' p16 -aS'monitor' +aS'kernel' p17 -aS'debug' +aS'monitor' p18 aS'timer' p19 hooks/post-receive -- krobot |