对于电机控制来说,在调试过程中,我们需要一个工具去打印对应的波形,简易大概得查看波形,快速查找大部分问题所在。但在极高性能要求的情况下,建议使用电机的原始数据,进行拟合波形,首先串口打印数据波形,可能存在不准确,不可靠的风险。
这里只介绍串口打印功能的相关设置
一、MDK的相关设置
1、打开MDK的MicroLIB功能
MicroLib是一个针对用C编写的基于ARM的嵌入式应用程序的高度优化的库。与包含在ARM编译器工具链中的标准C库相比,MicroLib提供了许多嵌入式系统所需的代码大小的显著优势。
打开MDK魔术棒,Target->Use MicroLIB
2、初始化、打开设备的串口(不使用中断,DMA,直接收发即可)
3、重定向printf函数,在MDK底下,加入以下代码进行编译
记得包含头文件 #include <stdio.h>
//发送字符串
void Usart_SendString(uint8_t *str)
{
unsigned int k = 0;
do{
HAL_UART_Transmit(&huart1, (uint8_t *)(str + k), 1, 1000);
k++;
} while(*(str + k) != '\0');
}
//重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到串口DEBUG_USART */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
return (ch);
}
//重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
int ch;
HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);
return (ch);
}
二、VOFA的设置
1、与设备串口设置匹配
2、添加一个控件
三、打印波形测试
1、打印数据命令
//打印三个整形数
//记得在数据的最后加一个\n结束
//一个%d代表一个数据
printf("%d,%d,%d\n",int1,int2,int3);
//打印三个两个小数位的浮点数
//记得在数据的最后加一个\n结束
printf("%.2f,%.2f,%.2f\n",float1,float2,float3);
2、测试打印一个三相正弦波
(1)在main函数加入一下代码
#include <stdio.h>
#include <math.h>
int main(void)
{
/*
......用户代码
*/
float a = 0.0F; //角度模拟
float b = 0.0F;
float c = 0.0F;
float d = 0.0F;
while(1){
a += 0.01F;
if(a >= 6.28F) a = 0.0F;
b = sinf(a);
c = sinf(a-2.09F); //120度化成弧度制约等于 2.09
d = sinf(a+2.09F);
printf("%.2F,%.2F,%.2F\n",b,c,d);
}
}
(2)VOFA+效果
先右键,将数据选择打印到Y轴