轮椅的脚踏板、靠背电动控制设计

337 阅读3分钟

本文已参与「新人创作礼」活动.一起开启掘金创作之路。

1.1 控制方案设计

轮椅控制部分包括轮椅脚踏板、靠背和LED的控制,采用AIOT开发板的E53接口引出的GPIO1-GPIO4发出控制信号,结构如图3.1所示,具体包括以下: (1)开发板的GPIO2输出高、低电平控制LED灯珠的亮灭; (2)开发板的GPIO1和GPIO3连接到电机驱动板1,驱动脚踏板部分的两个电动推杆,以实现脚踏板的升降; (3)开发板的GPIO2和GPIO4连接到电机驱动板2,驱动靠背部分的两个电动推杆,以实现靠背的升降; (4)开发板上云,接收来自手机小程序的控制指令。

image.png

图1.1 轮椅控制结构

1.2 轮椅靠背、脚踏板控制

1.2.1 硬件部分

为了控制轮椅脚踏板和靠背的升起和降落,在轮椅的两个脚踏板和靠背处放置了4个电动推杆,如下图所示,电动推杆采用了直流有刷电机,提供0-24V电压即可控制推杆的升起和降落。

如图1.2为电动推杆和安装图。

image.png

图1.2 靠背和脚踏板上的电动推杆

项目采用了如下图所示的单路电机驱动板,对驱动板的IN1和IN2提供提供控制信号可以控制电机正转、反转和刹车,对PWM口输入不同占空比的方波可以控制电机的转速。另外,在项目开发时,为保证脚踏板和靠背控制的同步性,靠背和两个脚踏板的电动推杆均连接到同一个电机驱动板。

image.png

图1.3 电机驱动板接线图和控制信号

电机驱动板需要提供9-36V的电压来驱动电动推杆,因此采用了24V开关电源,如下图所示,可输出24V 4.5A的电压。

image.png

图1.4 系统电源模块

1.2.2 软件设计

为了控制推杆电机和靠背电机,采用了AIOT开发板板载E53模块的GPIO1-4实现电机方向的控制,方向控制如下表所示:

表1-1 电平控制信号

推杆GPIO1GPIO3功能
10脚踏板推杆降下
01脚踏板推杆升起
靠背GPIO2GPIO4功能
10靠背推杆降下
01靠背推杆升起

IO初始化程序如下:


  gpio_pin_config_t gpio2_pinB14_config = {

      .direction = *kGPIO_DigitalOutput*,

      .outputLogic = 0U,

      .interruptMode = *kGPIO_NoIntmode*

  };

  /* Initialize GPIO functionality on GPIO_B1_15 (pin B14) */

  GPIO_PinInit(GPIO2, 31U, &gpio2_pinB14_config);//GPIO2

  GPIO_PinInit(GPIO2, 30U, &gpio2_pinB14_config);//GPIO3

  GPIO_PinInit(GPIO3, 17U, &gpio2_pinB14_config);//GPIO1

  GPIO_PinInit(GPIO3, 4U, &gpio2_pinB14_config);//GPIO4

  IOMUXC_SetPinMux(IOMUXC_GPIO_B1_15_GPIO2_IO31, 0U);//GPIO2

  IOMUXC_SetPinMux(IOMUXC_GPIO_B1_14_GPIO2_IO30, 0U);//GPIO3

  IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_GPIO3_IO17, 0U);//GPIO1

IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_GPIO3_IO4, 0U);//GPIO1

开发板接收到微信小程序的控制指令后IO口的输出程序:


       power_switch = cjson_switch->valueint;

       **if** (power_switch == 0) {

           GPIO_PinWrite(GPIO2, 31, 0);

       } **else** **if** (power_switch == 1) {

            GPIO_PinWrite(GPIO2, 31, 1);

       }

 

        }

**else** **if**(cjson_switch_jiao != NULL){ //脚踏板升起

       tuigan_jiao_switch = cjson_switch_jiao->valueint;

       **if** (tuigan_jiao_switch == 0) {

           GPIO_PinWrite(GPIO2, 30, 0);

       } **else** **if** (tuigan_jiao_switch == 1) {

           GPIO_PinWrite(GPIO2, 30, 1);

       }

     }

     **else** **if**(cjson_switch_jiao_down != NULL){ //脚踏板降下

       tuigan_jiao_down_switch = cjson_switch_jiao_down->valueint;

       **if** (tuigan_jiao_down_switch == 0) {

           GPIO_PinWrite(GPIO3, 17, 0);

       } **else** **if** (tuigan_jiao_down_switch == 1) {

           GPIO_PinWrite(GPIO3, 17, 1);

       }

    }

**else** **if**(cjson_switch_bei != NULL){ //靠背升起

       tuigan_bei_switch = cjson_switch_bei->valueint;

       **if** (tuigan_bei_switch == 0) {

           GPIO_PinWrite(GPIO3, 4, 0);

       } **else** **if** (tuigan_bei_switch == 1) {

           GPIO_PinWrite(GPIO3, 4, 1);

       }

    }

1.3 轮椅灯光控制

轮椅灯光的控制采用图1.5的LED灯珠,在使用时设置IO口为输出模式,然后控制IO口电平的高低即可控制其亮灭。

image.png

图3.7 LED灯珠