【智能车】角度滤波的利器之——虚拟示波器

【智能车】角度滤波的利器之——虚拟示波器

虚拟示波器下载地址 如何使用虚拟示波器

我们在调直立的时候,需要查看角度的变化情况,又或者是查看原始数值的变化情况的时候,虽说查看Livewatch动态框(基于IAR)是可以看的,但是缺点是数值变化太快,没法细致去查看,这时候就需要使用一款查看变化值的利器——虚拟示波器。我们只需要将我们的变量发送给虚拟示波器,它就能在屏幕上动态显示对应的波形,是不是很神奇,接下来我们来移植下相应代码!

接下来基于K60山外底层库进行移植操作: 首先打开 我们将虚拟示波器的相关代码放在UART.c里,因为我们要使用UART这个工具,放这里以后找也方便,你也可以自己建个.c存放也行。

float SDS_OutData[4]= {0};

unsigned short CRC_CHECK(unsigned char *Buf, unsigned char CRC_CNT)

{

unsigned short CRC_Temp;

unsigned char i,j;

CRC_Temp = 0xffff;

for (i=0;i

CRC_Temp ^= Buf[i];

for (j=0;j<8;j++) {

if (CRC_Temp & 0x01)

CRC_Temp = (CRC_Temp >>1 ) ^ 0xa001;

else

CRC_Temp = CRC_Temp >> 1;

}

}

return(CRC_Temp);

}

void SDS_OutPut_Data(float S_Out[])

{

int temp[4] = {0};

unsigned int temp1[4] = {0};

unsigned char databuf[10] = {0};

unsigned char i;

unsigned short CRC16 = 0;

float SDS_OutData[4];

for(i=0;i<4;i++) {

SDS_OutData[i]=S_Out[i];

}

for(i=0;i<4;i++)

{

temp[i] = (int)SDS_OutData[i];

temp1[i] = (unsigned int)temp[i];

}

for(i=0;i<4;i++)

{

databuf[i*2] = (unsigned char)(temp1[i]%256);

databuf[i*2+1] = (unsigned char)(temp1[i]/256);

}

CRC16 = CRC_CHECK(databuf,8);

databuf[8] = CRC16%256;

databuf[9] = CRC16/256;

for(i=0;i<10;i++)

{

uart_putchar(UART5, databuf[i] );

}

}

在UART.c文件最后移植以上代码,如下:

在UART.h记得声明外部变量,格式格式,写比较标准。不写应该也没问题的。

这样的话,虚拟示波器移植大致完成啦!

接下来就是如何将我们的数值发送到我们的软件上去。 我们可以在我们的main.c上将我们需要的数值赋值给数组,最后通过发送函数发送给虚拟示波器。大功告成! 上代码:

SDS_OutData[0] = ACC_x_z;

SDS_OutData[1] = GYRO_y;

SDS_OutData[2] = mpu_gyro_z;

SDS_OutPut_Data(SDS_OutData);

接下来就是连线问题,首先登场的是USB转TTL串口

拿杜邦线连接TXD和RXD两个管脚

由于要进行通信,因此与单片机连接方式为

串口: 单片机

TXD —— RXD

RXD —— TXD

单片机管脚可供选择如下图:

接下来初始化UART 我使用的是UART5 也就是PTE9 PTD9 两个管脚,你可以自己选用你自己喜欢的管脚,只要是同一组就行。

当串口在发送数据的时候有两个灯的时候即表示为发送成功,接下来打开虚拟示波器软件 然后打开设备管理器查看串口COM 显示当前串口为COM8

配置虚拟示波器设置: 然后就大功告成啦!so-easy!

注:当我们代码和硬件完成后,而且串口灯也亮,却发现虚拟示波器没波形,这时候的问题是坐标轴的数值太大,如下: 我们可以首先按下界面 然后通过按住Ctrl+鼠标滚轮,进行缩放:

大功告成~

相关推荐