首发:Rice 嵌入式开发技术分享
作者:RiceDIY
简要
- 平衡车文章分为4篇进行说明:
- 《平衡车 - 硬件》:讲解平衡车的硬件设计。
- 《平衡车 - 软件》:讲解平衡车的软件设计,算法。
- 《平衡车 - 上位机》:讲解调参上位机的设计
- 《平衡车 - 微信小程序》:讲解微信小程序作为遥控器的实现。
- github连接:https://github.com/RiceChen/Balance\_Car.git
- PC上位机采用QT开发,主要功能,参数设置,方向控制,数据波形显示。
软件设计
- 上位机与下位机通信,是采用串口通信,我自己定义了一个协议:
struct data_packet {
unsigned char head;
unsigned char type;
unsigned char channel;
unsigned char reserver1;
int data;
int reserver2 :24;
int tail :8;
};
- 其中head和tail是固定的。head为oxbc,tail为'\n'
- type:参数设置类型,方向控制类型,波形显示控制类型
typedef enum {
BC_PARAM_TYPE = 0x01,
BC_DIRECTION_TYPE,
BC_WAVEFORM_TYPE,
}BC_DATA_TYPE;
- channel:根据不同类型选择不同的通道类型:
// BC_PARAM_TYPE
typedef enum {
BC_BALANCE_P_PARAM_CHANNEL = 0x01,
BC_BALANCE_I_PARAM_CHANNEL,
BC_BALANCE_D_PARAM_CHANNEL,
BC_SPEED_P_PARAM_CHANNEL,
BC_SPEED_I_PARAM_CHANNEL,
BC_SPEED_D_PARAM_CHANNEL,
BC_SPEED_PARAM_CHANNEL,
}BC_PARAM_CHANNEL;
// BC_DIRECTION_TYPE
typedef enum {
BC_UP_DIRECTION_CHANNEL = 0x01,
BC_DOWN_DIRECTION_CHANNEL,
BC_LEFT_DIRECTION_CHANNEL,
BC_RIGHT_DIRECTION_CHANNEL,
BC_LEFT_UP_DIRECTION_CHANNEL,
BC_LEFT_DOWN_DIRECTION_CHANNEL,
BC_RIGHT_UP_DIRECTION_CHANNEL,
BC_RIGHT_DOWN_DIRECTION_CHANNEL,
}BC_DIRECTION_CHANNEL;
// BC_WAVEFORM_TYPE
typedef enum {
BC_BALANCE_PID_WAVEFORM_CHANNEL = 0x01,
BC_SPEED_PID_WAVEFORM_CHANNEL,
BC_SPEED_WAVEFORM_CHANNEL,
}BC_WAVEFORM_CHANNEL;
- data: 具体类型,具体通道对应的数值。
- 其中波形图显示,采用QT的chart组件,Qt开发我不熟悉,所以我只能上github搬砖,果真有人写了对应的demo,所以我就直接搬过来了。它包含四个文件:callout.cpp, callout.h, chartview.cpp,chartview.h。
效果:
关注微信公众号『Rice嵌入式开发技术分享』,后台回复“微信”添加作者微信,备注”入群“,便可邀请进入技术交流群。
推荐阅读
更多嵌入式技术干货请关注Rice 嵌入式开发技术分享