欢迎光临散文网 会员登陆 & 注册

手写STM32 FOC记录-----USART连接vofa+上位机显示波形

2023-08-31 15:06 作者:茄子土豆地三鲜  | 我要投稿

        电机调试过程中很有必要对相关参数进行监控,最好的方式就是将这些数据输出出来,编程可视化的波形,正好最近看到一款很好用的上位机——vofa+,想了想可以在STM32电机调试过程中用到,将实现过记录下来如下。

1、串口配置

其他基本配置跟前两篇一样,这里不做介绍,有疑问看看前两篇文章。

        根据原理图,选择USART2,模式选择异步通信,配置波特率为115200。

        选择串口引脚,PA2 ->Tx,PA3 ->Rx

    其他不用配置,默认即可,生成代码


2、收发数据验证

测试文件中编写一个串口初始化函数


主要用到以下两个接口函数

HAL_UART_Transmit_IT(&huart2 ,(uint8_t*)StaMessages,sizeof(StaMessages));

HAL_UART_Receive_IT(&huart2,(uint8_t*)RxBuffer,1);

主函数初始化调用


uint8_t StaMessages[4] = {0x11,0x22,0x33,0x44};

uint8_t RxBuffer[20];

void test_uart_init(void)

{

 

    HAL_UART_Transmit_IT(&huart2 ,(uint8_t*)StaMessages,sizeof(StaMessages)); //初始化发送数据

HAL_UART_Receive_IT(&huart2,(uint8_t*)RxBuffer,1);//调用中断接收函数,接收长度设为1,接收一个字节进一次中断

}

然后,重写接收回调函数HAL_UART_RxCpltCallback,

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

    UNUSED(huart);

    HAL_UART_Transmit(&huart2,(uint8_t*)RxBuffer,1,0xFFFF);  //发送接收到的数据

    HAL_UART_Receive_IT(&huart2,(uint8_t*)RxBuffer,1);  //再开启接收中断(因为里面中断只会触发一次,因此需要再次开启)

 

}

        需要说明一下的是,在调用接收中断HAL_UART_Receive_IT时,要根据实际情况填写接收长度,这里,我使用1个字节,即串口收到一个字节就进入接收回调,输出接收到的数据。

到这里就完成了,编译下载后,看一下实际效果。


3、FireWater协议连接vofa+输出波形

        这里主要给大家演示一下FireWater协议下的VOFA+使用效果和方法。FireWater协议是CSV风格的字符串流,直观简洁,编程像printf简单。但由于字符串解析消耗更多的运算资源(无论在上位机还是下位机),建议仅在通道数量不多、发送频率不高的时候使用。将鼠标放到FireWater协议上,可以很贴心的得到使用格式帮助。如上图所示,我们使用printf("simples:%f, %f\n", sin(t1), sin(t2)")函数进行打印测试。

由于需要使用printf打印输出数据,首先要保证printf可以正常输出,需要重写fputc

主函数调用printf输出测试

测试效果:

编写测试函数,输出三条正弦波

主函数中调用

打开vofa+,做好串口相关配置,拖出波形控件

这里有个小细节,如果下方显示数据正常,右侧通道数据也正常,但是没有波形出现,可以尝试拖动下方彩色球球,试试看波形能否正常显示,具体原因还没有研究明白

4、JustFloat协议连接vofa+输出波形

        FireWater协议仅在通道数量不多、发送频率不高的时候使用,而JustFloat协议是小端浮点数组形式的字节流协议,纯十六进制浮点传输,节省带宽。此协议非常适合用在通道数量多、发送频率高的时候。

编写JustFloat协议测试代码

void vofa_JustFloat_output(void)

{

static float t = 0;

uint8_t tail[4]  = {0x00, 0x00, 0x80, 0x7f};

   

    // 发送数据

    float data[4];  

    data[0] = sin(t);

    data[1] = sin(2*t);

    data[2] = sin(3*t);

    data[3] = sin(4*t);

  HAL_UART_Transmit(&huart2,(uint8_t*)data,sizeof(float) * 4,100);  //发送数据

    // 发送帧尾

HAL_UART_Transmit(&huart2,tail,4,100);

    HAL_Delay(100);

  t += 0.1;

 

}

在主函数中调用

选择JustFloat协议,其他配置与FireWater协议一致。

下方数据显示选择Hex,然后可以看到每包数据都会以00 00 80 7f结束。

这时配置下波形控件,显示4个数据,就可以看到4条曲线了。


手写STM32 FOC记录-----USART连接vofa+上位机显示波形的评论 (共 条)

分享到微博请遵守国家法律