From 1aa5b84322048ba0025af21b179a720643267713 Mon Sep 17 00:00:00 2001 From: bmy <2583236812@qq.com> Date: Mon, 10 Jun 2024 16:56:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=BD=AE=E7=89=A9?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/by_servo.c | 56 +++++++++++++++++++++++++++++++++++----------- app/by_servo.h | 1 + project/src/main.c | 4 ++-- 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/app/by_servo.c b/app/by_servo.c index b109520..53569e6 100644 --- a/app/by_servo.c +++ b/app/by_servo.c @@ -17,11 +17,11 @@ void by_servo_set_claw_arm(int16_t angle) if (angle < 0) { angle = 0; - } else if (angle > 180) { - angle = 180; + } else if (angle > 270) { + angle = 270; } - ch_val = (uint32_t)(((float)angle / 180.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f); + ch_val = (uint32_t)(((float)angle / 270.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f); tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_2, ch_val); @@ -36,7 +36,7 @@ void by_servo_set_claw_arm(int16_t angle) */ void by_servo_set_claw(int16_t angle) { -#define PULSE_WIDTH_MIN 1.5f +#define PULSE_WIDTH_MIN 0.5f #define PULSE_WIDTH_MAX 2.5f uint32_t ch_val = 0; @@ -62,18 +62,18 @@ void by_servo_set_claw(int16_t angle) */ void by_servo_set_camera(int16_t angle) { -#define PULSE_WIDTH_MIN 1.5f +#define PULSE_WIDTH_MIN 0.5f #define PULSE_WIDTH_MAX 2.5f uint32_t ch_val = 0; if (angle < 0) { angle = 0; - } else if (angle > 180) { - angle = 180; + } else if (angle > 270) { + angle = 270; } - ch_val = (uint32_t)(((float)angle / 180.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f); + ch_val = (uint32_t)(((float)angle / 270.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f); tmr_channel_value_set(TMR3, TMR_SELECT_CHANNEL_4, ch_val); @@ -82,13 +82,13 @@ void by_servo_set_camera(int16_t angle) } /** - * @brief 设置云台摇臂 + * @brief 设置顶端抓取机构 * * @param angle 角度 (0-180) */ void by_servo_set_scoop(int16_t angle) { -#define PULSE_WIDTH_MIN 1.5f +#define PULSE_WIDTH_MIN 0.5f #define PULSE_WIDTH_MAX 2.5f uint32_t ch_val = 0; @@ -107,13 +107,40 @@ void by_servo_set_scoop(int16_t angle) #undef PULSE_WIDTH_MAX } +/** + * @brief 设置置物平台 + * + * @param angle 角度 (0-180) + */ +void by_servo_set_storage(int16_t angle) +{ +#define PULSE_WIDTH_MIN 0.5f +#define PULSE_WIDTH_MAX 2.5f + + uint32_t ch_val = 0; + + if (angle < 0) { + angle = 0; + } else if (angle > 180) { + angle = 180; + } + + ch_val = (uint32_t)(((float)angle / 180.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f); + + tmr_channel_value_set(TMR3, TMR_SELECT_CHANNEL_2, ch_val); + +#undef PULSE_WIDTH_MIN +#undef PULSE_WIDTH_MAX +} + void by_servo_init(void) { // 后续要不全初始化为空值,由主控按顺序初始化 - by_servo_set_claw_arm(0); - by_servo_set_claw(0); - by_servo_set_camera(0); + by_servo_set_claw_arm(220); // 36-220 + by_servo_set_claw(25); // 25-90 + by_servo_set_camera(45); by_servo_set_scoop(0); + by_servo_set_storage(0); } void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len) @@ -136,6 +163,9 @@ void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len) case 0x00C: by_servo_set_scoop(angle); break; + case 0x00D: + by_servo_set_storage(angle); + break; default: break; } diff --git a/app/by_servo.h b/app/by_servo.h index e80500e..2eabbcc 100644 --- a/app/by_servo.h +++ b/app/by_servo.h @@ -7,6 +7,7 @@ extern void by_servo_set_claw_arm(int16_t angle); extern void by_servo_set_claw(int16_t angle); extern void by_servo_set_camera(int16_t angle); extern void by_servo_set_scoop(int16_t angle); +extern void by_servo_set_storage(int16_t angle); extern void by_servo_init(void); extern void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len); diff --git a/project/src/main.c b/project/src/main.c index c743dd6..f106644 100644 --- a/project/src/main.c +++ b/project/src/main.c @@ -71,7 +71,7 @@ int main(void) { /* add user code begin 1 */ - + by_debug_init(); /* add user code end 1 */ /* system clock config. */ @@ -108,7 +108,7 @@ int main(void) while (1) { gpio_bits_write(GPIOA, GPIO_PINS_10, !gpio_output_data_bit_read(GPIOA, GPIO_PINS_10)); - delay_ms(1000); + delay_ms(500); /* add user code end 3 */ } }