匿名四轴上位机可以通过串口上传数据,画出波形图,这个功能在调试pid的时候还是很有用的,主要就讲如何使用这个功能
有个视频说的很详细 http://v.youku.com/v_show/id_XNTkzNDkxNTU2.html
1、设置好串口,如下
在基本功能里可以发送接收,当成普通的串口调试助手来使用,设置完了点击下面的打开串口即可
2、设置帧格式
在左边高级收码中,右上角有帧格式的设置,如下
1-10的选择根据代码里fun的值来,对应0xA1-0xAA,这里我使用的是oxA2 故选择2
后面为代码对应帧里上传的数据格式的选择,我上传的是三个float型,所以只需要把前三个都选择为float就行了
最后打开上图的 开关,显示 保存设置帧格式设置完毕
3、画波形所需的数据设置,如下
最上面的1-20序号对应后面会提到的波形序号,也就是说最多能指定显示20个波形
下面设置的每个序号对应波形的数据来源,从某个帧的某个位获得。
数据帧即之前设置过的,由于我上传使用的是0xA2 所以选择2,数据位即之前设置的三个float型的选择,可以看到最多有30个数据位,与之前类型选择的个数一样
我选择数据位1(之前三个float 我串口上传的分别是pitch roll yaw角度),这样我们就把待会的波形1的数据来源设置为帧2的第一位,也就是pitch角了
同理 把 roll yaw 即帧2的位2和3 设置为波形序号2,3 设置结束 打开旁边的数据校验 数据显示 功能帧显示,再打开下面的
就可以看到上传的原始数据(左边)和相应的处理后的数据(右边)
此时调到波形显示界面,打开波形显示 勾选刚才设置过的序号123 可以看到pitch roll yaw角的曲线
最后讲讲单片机上传数据的代码部分,上传的数据需要按照上位机规定的格式来上传,在上位机打开时 按F12可以看到使用说明,里面有讲格式的规定,以下为上传三个角度的代码,串口初始化等略过
void usart1_send_char(u8 c)
{
while((USART1->SR&0X40)==0);//等待上一次发送完毕
USART1->DR=c;
}
//fun:功能字. 0XA0~0XAF
//data:数据缓存区,最多28字节!!
//len:data区有效数据个数
void usart1_niming_report(u8 fun,u8*data,u8 len)
{
u8 send_buf[32];
u8 i;
if(len>28)return; //最多28字节数据
send_buf[len+3]=0; //校验数置零
send_buf[0]=0X88; //帧头
send_buf[1]=fun; //功能字
send_buf[2]=len; //数据长度
for(i=0;i<len;i++)send_buf[3+i]=data[i]; //复制数据
for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i]; //计算校验和
for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]); //发送数据到串口1
}
void mpu6050_send_data(float pitch,float roll,float yaw)
{
u8 tbuf[16];
unsigned char *p;
p=(unsigned char *)&pitch;
tbuf[0]=(unsigned char)(*(p+3));
tbuf[1]=(unsigned char)(*(p+2));
tbuf[2]=(unsigned char)(*(p+1));
tbuf[3]=(unsigned char)(*(p+0));
p=(unsigned char *)&roll;
tbuf[4]=(unsigned char)(*(p+3));
tbuf[5]=(unsigned char)(*(p+2));
tbuf[6]=(unsigned char)(*(p+1));
tbuf[7]=(unsigned char)(*(p+0));
p=(unsigned char *)&yaw;
tbuf[8]=(unsigned char)(*(p+3));
tbuf[9]=(unsigned char)(*(p+2));
tbuf[10]=(unsigned char)(*(p+1));
tbuf[11]=(unsigned char)(*(p+0));
usart1_niming_report(0XA2,tbuf,12);//自定义帧,0XA2
}
稍微提一下最后一个函数,就是把float拆成四个字节发送(由于串口只能一个字节一个字节的发送),用指针获得float型变量的首地址,然后强制转换为unsigned char型,地址逐渐加大把float的四个字节分别发出即可。