X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fcobboard%2Fshovel.c;fp=projects%2Fmicrob2010%2Fcobboard%2Fshovel.c;h=56efa9685c59b5d7803d77686ae58ba49bbd80ae;hp=b2a8cc0501a66f7adad1b015851385700510c217;hb=f5502f60124c62801685777bb7c699bdfb7e1166;hpb=dab083b5d263fdf9675362bfe5a85f993a43a6c6 diff --git a/projects/microb2010/cobboard/shovel.c b/projects/microb2010/cobboard/shovel.c index b2a8cc0..56efa96 100644 --- a/projects/microb2010/cobboard/shovel.c +++ b/projects/microb2010/cobboard/shovel.c @@ -47,6 +47,10 @@ #define SHOVEL_MID 4500 #define SHOVEL_UP 11000 +static int32_t shovel_k1 = 1000; +static int32_t shovel_k2 = 20; +static uint8_t shovel_current_limit = 1; + /* init spickle position at beginning */ static void shovel_autopos(void) { @@ -69,6 +73,51 @@ static uint8_t shovel_is_at_pos(int32_t pos) return 0; } +void shovel_set_current_limit_coefs(int32_t k1, int32_t k2) +{ + shovel_k1 = k1; + shovel_k2 = k2; +} + +uint8_t shovel_get_current_limit_coefs(int32_t *k1, int32_t *k2) +{ + *k1 = shovel_k1; + *k2 = shovel_k2; + return shovel_current_limit; +} + +void shovel_current_limit_enable(uint8_t enable) +{ + shovel_current_limit = enable; +} + +/* Set CS command for shovel. Called by CS manager. */ +void shovel_set(void *mot, int32_t cmd) +{ + static int32_t oldpos; + int32_t pos, maxcmd, speed; + + pos = encoders_spi_get_value(SHOVEL_ENCODER); + if (shovel_current_limit) { + speed = pos - oldpos; + if (speed > 0 && cmd < 0) + maxcmd = shovel_k1; + else if (speed < 0 && cmd > 0) + maxcmd = shovel_k1; + else { + speed = ABS(speed); + maxcmd = shovel_k1 + shovel_k2 * speed; + } + if (cmd > maxcmd) + cmd = maxcmd; + else if (cmd < -maxcmd) + cmd = -maxcmd; + } + + pwm_ng_set(mot, cmd); + oldpos = pos; +} + void shovel_down(void) { quadramp_set_1st_order_vars(&cobboard.shovel.qr, 2500, 2500);