本文已参与「新人创作礼」活动.一起开启掘金创作之路。
1.1 控制方案设计
轮椅控制部分包括轮椅脚踏板、靠背和LED的控制,采用AIOT开发板的E53接口引出的GPIO1-GPIO4发出控制信号,结构如图3.1所示,具体包括以下: (1)开发板的GPIO2输出高、低电平控制LED灯珠的亮灭; (2)开发板的GPIO1和GPIO3连接到电机驱动板1,驱动脚踏板部分的两个电动推杆,以实现脚踏板的升降; (3)开发板的GPIO2和GPIO4连接到电机驱动板2,驱动靠背部分的两个电动推杆,以实现靠背的升降; (4)开发板上云,接收来自手机小程序的控制指令。
图1.1 轮椅控制结构
1.2 轮椅靠背、脚踏板控制
1.2.1 硬件部分
为了控制轮椅脚踏板和靠背的升起和降落,在轮椅的两个脚踏板和靠背处放置了4个电动推杆,如下图所示,电动推杆采用了直流有刷电机,提供0-24V电压即可控制推杆的升起和降落。
如图1.2为电动推杆和安装图。
图1.2 靠背和脚踏板上的电动推杆
项目采用了如下图所示的单路电机驱动板,对驱动板的IN1和IN2提供提供控制信号可以控制电机正转、反转和刹车,对PWM口输入不同占空比的方波可以控制电机的转速。另外,在项目开发时,为保证脚踏板和靠背控制的同步性,靠背和两个脚踏板的电动推杆均连接到同一个电机驱动板。
图1.3 电机驱动板接线图和控制信号
电机驱动板需要提供9-36V的电压来驱动电动推杆,因此采用了24V开关电源,如下图所示,可输出24V 4.5A的电压。
图1.4 系统电源模块
1.2.2 软件设计
为了控制推杆电机和靠背电机,采用了AIOT开发板板载E53模块的GPIO1-4实现电机方向的控制,方向控制如下表所示:
表1-1 电平控制信号
| 推杆 | GPIO1 | GPIO3 | 功能 |
|---|---|---|---|
| 1 | 0 | 脚踏板推杆降下 | |
| 0 | 1 | 脚踏板推杆升起 | |
| 靠背 | GPIO2 | GPIO4 | 功能 |
| 1 | 0 | 靠背推杆降下 | |
| 0 | 1 | 靠背推杆升起 |
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口电平的高低即可控制其亮灭。
图3.7 LED灯珠