在众多的遥控小车中,图1所示的这款是价格最低且功能最少的。
它采用电池供电,电压为3V。由于只有一个电机进行驱动,在遥控电路的控制下,只能作前进、后退及停止操作。

图1 遥控小车
遥控小车的电路结构见图2所示,通过遥控发送模块的2个按键来控制小车前进或后退。

图2 电路结构
为了丰富其功能,可为其添加运动方向指示灯以指示其前进与后退。
由于电机是由遥控接收模块来供电,小车的正、反转控制是靠接收模块改变供电的极性来实现的,故在电机的供电线路上并接2个方向相反的LED灯即可指示运动的方向。当然,2给LED都需要串如1K的电阻来限流,以防烧毁LED灯。
图3是添加一个LED模块的测试发送,经测试思路正确,在电机转动时能指示运行方向。

图3 添加运动方向指示灯
在小车运行中,进行有效的避障处理是十分必要的。否则。即使是在人工的操控下,也易出现碰撞问题。
为此,可以在小车的前、后两端添加避障模块来解决该问题。
避障模块的外观如图4所示,其电路见图5所示。

图4避障模块

图5避障电路
此外,若将避障模块的输出信号与蜂鸣器模块相连接,则可起到方向障碍提升的作用。

图6 蜂鸣器模块
有了避障模块该如何控制电机呢?
那就是在电机的供电线上,传入一个继电器常闭触点,一旦避障模块发出信号,就控制继电器打开继电器触点以使电机停止转动。
这里之所以使用继电器,是因为电机的供电线路是允许极性变换的,一般的开关电路不好控制。
在使用2路避障模块的情况下,为进行继电器的控制,可通过一个与门电路将2个输入信号合并成一个继电器控制信号。
继电器模块的外观及引脚功能见图7所示:

图7 继电器模块
在添加避障功能后,其形式如图8所示,经测试能达到避障效果。

图8 添加避障功能
前面小车一侧进行了功能补充,而在遥控模块的发送端,也可进行相应的功能改造。
其着手处就是2个控制键,将它由手控改为兼有手控和程控2种模式。
具体的方法就是将按键的控制端引出,可由外部的MCU功能模块进行控制。
这样,在MCU的控制下就可对小车进行行进方向和时长的控制,而时长则可对应行进距离的控制。
为此,在程控模式下小车就变成了一个在多个工位间传送工件的机器人,其整体电路结构如图9所示。

图10 整体电路结构
演示视频1:避障
通过前面的添加,尽管其功能有所改善,它还有提升的空间。前面的改善只是添加了一些功能模块,要想有更大的提升,则需将MCU功能模块移到小车上。
此外,为了驱动直流电机,需配置驱动模块,见图11所示。

图11 驱动模块
在使用RA2T1开发板进行PWM调节的情况下,其器件连接见如图12所示。

图12 PWM调速
1.调速控制:
在MCU的控制下,通过占空比的变化即可调整小车的转速,其相关的程序内容为:
占空比设置函数:
void GPT_PWM_SetDuty(uint8_t duty)
{
timer_info_t info;
R_GPT_InfoGet(&g_timer2_ctrl, &info);
uint32_t current_period_counts = info.period_counts;
uint32_t duty_cycle_counts = (uint32_t)(((uint64_t)current_period_counts * duty) / 100);
R_GPT_DutyCycleSet(&g_timer2_ctrl, duty_cycle_counts, GPT_IO_PIN_GTIOCB);
}其主程序为:
void hal_entry(void)
{
uint8_t duty = 0;
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3);
assert(FSP_SUCCESS == err);
R_GPT_Open(&g_timer2_ctrl, &g_timer2_cfg);
R_GPT_Start(&g_timer2_ctrl);
duty=10;
while(1)
{
if(R_BSP_PinRead(BSP_IO_PORT_02_PIN_00)==BSP_IO_LEVEL_LOW)
{
duty=(duty+3)%40;
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
while(R_BSP_PinRead(BSP_IO_PORT_02_PIN_00)==BSP_IO_LEVEL_LOW);
}
GPT_PWM_SetDuty(duty);
R_BSP_SoftwareDelay(200, BSP_DELAY_UNITS_MILLISECONDS);
}
}经程序的编译和下载,在按键的控制下,即可看到明显的转速变化。
演示视频2:PWM调速
2.手机控制:
尽管遥控小车可控制运动的方向,但毕竟难于进行数字化控制。
通过串口与蓝牙模块的连接,可实现同手机的数据交换。
这里选取的蓝牙模块为KT6368A,其串口通讯的波特率为115200bps,其连接形式如图13所示。

图13 连接形式
以手机数据控制转速的主程序为:
void hal_entry(void)
{
uint8_t duty = 0;
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 2);
assert(FSP_SUCCESS == err);
R_GPT_Open(&g_timer2_ctrl, &g_timer2_cfg);
R_GPT_Start(&g_timer2_ctrl);
duty=10;
while(1)
{
if(uart_receive_complete_flag)
{
uart_receive_complete_flag = false;
if(uart_rx_buffer[0] == 0x55)
{
duty=uart_rx_buffer[1];
printf("%x\n", m);
}
err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer,2);
assert(FSP_SUCCESS == err);
}
GPT_PWM_SetDuty(duty);
R_BSP_SoftwareDelay(200, BSP_DELAY_UNITS_MILLISECONDS);
}
}在运行程序的情况下,在手机端可见到该蓝牙设备的存在,见图14所示。

图14 发现蓝牙设备
在连接该蓝牙设备后,发送相应的控制码可控制电机的转速,数据发送界面见图15所示,运行效果见图16所示。

图15 发送控制码

图16 运行效果
演示视频3:蓝牙控制
我要赚赏金
