STM32F103C8T6(C6T6)遥控小车发射接收模块 遥控发射端采用的芯片是c6t6,通过摇杆搭配NRF24L01向接收端发送数据,总共有8个数据通道,这里只用了左摇杆控制前后运动,右摇杆控制舵机左右转向,如需要其他通道可在源码里增加。 发射端采用的c6t6最小系统板搭配NRF24L01和L298N驱动器(驱动器可根据电机参数选择搭配)。 出售的是: 发射端原理图、PCB、源码。 接收端接线图,源码。 使用说明。

最近在捣鼓一个基于STM32F103C8T6(C6T6)芯片的遥控小车项目,感觉挺有意思的,所以想写点东西分享一下。这个项目主要用到了NRF24L01无线模块和L298N电机驱动器,整个过程还算顺利,但也遇到了一些小问题,不过都解决了。

发射端:摇杆控制与数据传输

发射端的核心是C6T6最小系统板,搭配NRF24L01无线模块和一个双摇杆模块。摇杆模块用来控制小车的前后运动和转向,NRF24L01负责将数据无线传输到接收端。

摇杆数据采集与处理

摇杆模块的输出是模拟信号,需要通过ADC转换成数字信号。C6T6的ADC采样频率挺高的,完全能满足需求。代码部分大致如下:

// 采集左右摇杆的X和Y轴数据
uint16_t left_x = ADC_Read(LEFT_X_CHANNEL);
uint16_t left_y = ADC_Read(LEFT_Y_CHANNEL);
uint16_t right_x = ADC_Read(RIGHT_X_CHANNEL);

这里,lefty控制小车的前后运动,rightx控制舵机的左右转向。数据处理部分比较简单,主要是将摇杆的中间位置(中立位置)映射为0,左右或前后移动则映射为正负值。

数据打包与无线传输

采集到的数据需要打包成一个数据包,通过NRF24L01发送出去。NRF24L01的配置部分可以参考很多开源代码,这里就不详细展开了。数据包的结构大致如下:

typedef struct {
    int16_t forward_backward;
    int16_t left_right;
} remote_data_t;

这样设计的好处是扩展性很强,如果需要增加更多的控制通道,只需要在结构体中添加新的字段即可。

接收端:数据解析与执行

接收端用的也是C6T6,搭配NRF24L01和L298N驱动器。NRF24L01接收数据后,解析成相应的控制信号,驱动电机和舵机。

数据接收与解析

接收端的代码逻辑比较简单,主要是等待数据包的到来,然后解析数据:

remote_data_t data;
if (nrf24_receive(&data)) {
    // 解析数据并控制电机和舵机
    motor_control(data.forward_backward);
    servo_control(data.left_right);
}
电机与舵机控制

电机控制部分用的是L298N,这个驱动器支持双电机,电流也挺大的,完全能满足小车的需求。舵机用的是标准的PWM控制,C6T6的PWM输出很稳定,控制起来很轻松。

void motor_control(int16_t speed) {
    if (speed > 0) {
        // 前进
        GPIO_WriteBit(MOTOR_FORWARD_PORT, MOTOR_FORWARD_PIN, Bit_SET);
        GPIO_WriteBit(MOTOR_BACKWARD_PORT, MOTOR_BACKWARD_PIN, Bit_RESET);
        PWM_SetDutyCycle(MOTOR_PWM_CHANNEL, speed);
    } else if (speed < 0) {
        // 后退
        GPIO_WriteBit(MOTOR_FORWARD_PORT, MOTOR_FORWARD_PIN, Bit_RESET);
        GPIO_WriteBit(MOTOR_BACKWARD_PORT, MOTOR_BACKWARD_PIN, Bit_SET);
        PWM_SetDutyCycle(MOTOR_PWM_CHANNEL, -speed);
    } else {
        // 停止
        GPIO_WriteBit(MOTOR_FORWARD_PORT, MOTOR_FORWARD_PIN, Bit_RESET);
        GPIO_WriteBit(MOTOR_BACKWARD_PORT, MOTOR_BACKWARD_PIN, Bit_RESET);
        PWM_SetDutyCycle(MOTOR_PWM_CHANNEL, 0);
    }
}

舵机的控制类似,只不过用的是PWM信号,频率固定在50Hz。

项目扩展与注意事项

这个项目的基础部分已经完成,但还有很多可以扩展的地方。比如:

  1. 增加灯光控制:可以在数据包中添加一个字段,控制小车的前后灯。
  2. 增加音效:在小车移动时播放一些音效,增加趣味性。
  3. 增加避障功能:在接收端加装超声波传感器,实现自动避障。

不过,这些功能的增加需要在发射端和接收端同时进行修改,数据包的结构也需要相应调整。

总结

总的来说,这个项目不算太复杂,但涉及的知识点还是挺多的,包括ADC采样、PWM控制、无线通信等。对于刚接触STM32的朋友们来说,是一个不错的练手项目。如果感兴趣的话,可以参考我的源码和原理图,自己动手试试看!

STM32F103C8T6(C6T6)遥控小车发射接收模块 遥控发射端采用的芯片是c6t6,通过摇杆搭配NRF24L01向接收端发送数据,总共有8个数据通道,这里只用了左摇杆控制前后运动,右摇杆控制舵机左右转向,如需要其他通道可在源码里增加。 发射端采用的c6t6最小系统板搭配NRF24L01和L298N驱动器(驱动器可根据电机参数选择搭配)。 出售的是: 发射端原理图、PCB、源码。 接收端接线图,源码。 使用说明。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐