首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

ODrive移植keil(三)—— USB虚拟串口和快速正弦余弦运算

  • 23-09-28 04:01
  • 4575
  • 9514
blog.csdn.net

目录

  • 一、USB虚拟串口
    • 1.1、硬件连接
    • 1.2、代码移植
    • 1.3、测试
    • 1.4、最终代码
  • 二、快速正弦余弦运算
    • 2.1、硬件连接
    • 2.2、代码移植
    • 2.3、测试
    • 2.4、结论
  • 三、软件中断
    • 3.1、配置中断
    • 3.2、官方代码的使用方式

 
ODrive、VESC和SimpleFOC 教程链接汇总:请点击
 

一、USB虚拟串口

单片机的USB通信,一般都是以虚拟串口的方式实现,ODrive使用自定义的接口,所以才需要用zadig驱动。
本次移植,支持USB虚拟串口通信,本节介绍实现的方法。

1.1、硬件连接

在这里插入图片描述

驱动板购买链接:某宝购买

可以用USB供电3.3V,或者用外部供电。
但不要同时两个供电,驱动板本身产生的3.3V和USB提供的3.3V可能会有电压差,导致电流烧坏元件。

 
 

1.2、代码移植

利用STM32CubeMX生成USB转串口的代码,我没有实现,测试不行。
正点原子提供STM32F103C8T6的USB转串口例程,但是没有提供STM32F4的USB转串口例程,
所以我决定移植一个。

本次移植参考了正点原子,下图:
在这里插入图片描述

 
在这里插入图片描述

 
移植的前期工作就是按照这篇教程操作,然后再添加VCP的相关文件,
我本来是打算描述下移植的细节的,但是隔的时间太久了,已经记不清细节,
在这里插入图片描述
ODrive的GPIO3/4是USAR2,
USART2的配置在usbd_cdc_vcp.c文件中,并在USB初始化的时候被调用,
修改串口在 usbd_cdc_vcp.h文件中修改宏定义,并在usbd_cdc_vcp.c文件中修改串口中断函数定义
 

1.3、测试

在这里插入图片描述
USB收到的数据通过USART2发出,USART2收到的数据通过USB发出。
 

1.4、最终代码

以上测试证明了USB虚拟串口移植成功,但在实际应用中,只需要USB收发数据,不需要USART2,所以屏蔽掉相关配置。

在这里插入图片描述
 
在这里插入图片描述

 
 

二、快速正弦余弦运算

本节代码测试三种正弦余弦的运算方案,以体现不同方案的效率和精度,

三种方案分别是:
1、普通的浮点数正弦余弦运算,
2、DSP库优化后的正弦余弦运算,
3、ODrive提供的快速正弦余弦运算。
 

2.1、硬件连接

DSP做为软件算法,不需要外接设备,下图:

在这里插入图片描述

驱动板购买链接:某宝购买

 

2.2、代码移植

  • 本节代码要添加DSP库,参考了正点原子的例程,
    在这里插入图片描述
    在这里插入图片描述
  • 移植后的代码,通过USB虚拟串口通信,
    在这里插入图片描述
     

2.3、测试

在这里插入图片描述
普通的浮点运算, 运算时间大约303944 us,精度在0.000001f,
DSP库优化后的运算,运算时间大约261520 us,精度在0.000001f,
ODrive快速运算, 运算时间大约184065 us,精度在0.0001f,
 

2.4、结论

1、带不带DSP库,运算差别并没有想象的大,
2、ODrive快速运算精度差一点,但是速度完胜,
3、此次移植我本来是打算用DSP库的快速运算的,但对比后我觉得继续用ODrive的快速运算会更好,
4、稍后在mit驱动器移植的教程中,我们会继续对比不同的快速运算方案,结果非常出人意料。
 

三、软件中断

这个功能一般很少用,本人在稍后的移植中也没有使用,大家了解即可。
之所以要拿出来讲一下,是因为网上搜到的都没有说完整,浪费了我不少时间,所以我要讲一下给大家避坑。

3.1、配置中断

初始化配置,除了要使能软件中断,还要配置借用的软件中断向量,下图:

在这里插入图片描述
 
在这里插入图片描述
 
主循环中触发中断,在中断函数中LED闪烁,下图:
在这里插入图片描述
 

3.2、官方代码的使用方式

官方代码中是这样使用软件中断的,下图:
在这里插入图片描述
上面描述的意思,似乎进入软件中断后,就不再进入第二个更新中断了。
但是我实际的测试,从软件中断退出后仍然会执行第二个更新中断,并且我觉得在软件中断中等待第二次更新中断,很浪费时间,所以就没有使用这个方案。也可能是我没有掌握好这个功能。
 
 
 
 
(完)
 
 

注:本文转载自blog.csdn.net的loop222的文章"https://blog.csdn.net/loop222/article/details/132897516"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top