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

news2024/9/24 1:15:05

目录

  • 一、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、官方代码的使用方式

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




(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pdf文件签名检查

如何检查pdf的签名 首先这里有一个已经签名的pdf文件&#xff0c;通过pdf软件可以看到文件的数字签名。 下面就是如何代码检查这里pdf文件的签名 1.引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId&g…

彩色相机工作原理——bayer格式理解

早期&#xff0c;图像传感器只能记录光的强弱&#xff0c;无法记录光的颜色&#xff0c;所以只能拍摄黑白照片。 1974年,拜尔提出了bayer阵列&#xff0c;发明了bayer格式图片。不同于高成本的三个图像传感器方案&#xff0c;拜尔提出只用一个图像传感器&#xff0c;在其前面放…

【进阶C语言】数据在内存中的存储

一、数据类型的介绍 1.整形家族 &#xff08;1&#xff09;char--字符型 单位&#xff1a;一个字节&#xff0c;包括unsigned char和signed char (2)short--短整形 单位&#xff1a;两个字节&#xff0c;包括unsigned short[int]和signed short[int] (3)int--整形 单位&…

水果店如何通过小程序商城完成配送路径

水果店线上发展的主要目标就是销售卖货&#xff0c;随着电商经济发展&#xff0c;传统线下店面临不少困境&#xff0c;线上部分商家会选择进驻到电商平台及外卖平台&#xff0c;但收获流量的同时也有高昂的流量费、抽成等成本的支出&#xff0c;难以外部宣传及内部打通流程、较…

电脑工具远程定时任务关机开机

使用方法 定时跟远程是两回事情不要搞混了 定时 不需要 扫码登录 直接就可以 软件设置 时间 到规定时间 就自动关机 远程操作 关机 锁屏 只要扫码登录软件挂后台就可以远程操作了 用自己手机微信扫码登录 后发送&#xff08;口令&#xff09;到文件传输助手 就可以看到口令…

电子技术基础(三)__第1章电路分析基础_第13篇__正弦交流电的相量表示

本文讲解 正弦交流电的稳态分析————正弦量的相量表示 一 基本概念 接下来&#xff0c; 注意: 大写字母 上 加点 表示相量 例如&#xff1a; 因为这里有 I m I_{m} Im​ 是幅值&#xff0c; 所以此相量称为幅值相量。 相量 其实就是一个复数&#xff0c; 表示正弦量的复…

小鹏:交出最差的财报,展现最膨胀的信心

上市三年&#xff0c;小鹏在今年第二季度交出了几乎是史上最差的财报&#xff0c;多项惨烈的数据叠加在一起&#xff0c;远远望去&#xff0c;就像一张病危通知单。 自2020年上市后&#xff0c;小鹏的扩张速度令资本惊叹&#xff0c;截至2023年6月30日&#xff0c;小鹏的门店数…

IntelliJ IDEA使用_Debug操作

文章目录 版本说明图标和快捷键查看变量计算表达式条件断点多线程调试 版本说明 当前的IntelliJ IDEA 的版本是2021.2.2&#xff08;下载IntelliJ IDEA&#xff09; ps&#xff1a;不同版本一些图标和设置位置可能会存在差异&#xff0c;但应该大部分都差不多。 图标和快捷键…

APP自动化之weditor工具

由于最近事情颇多&#xff0c;许久未更新文章。大家在做APP自动化测试过程中&#xff0c;可能使用的是Appium官方提供的inspect进行元素定位&#xff0c;但此工具调试不方便&#xff0c;于是今天给大家分享一款更好用的APP定位元素工具&#xff1a;weditor weditor基于web网页…

前端请求接口地址反向代理后 状态码404、反向代理注意事项

目录 1. 反向代理代码&#xff08;有问题&#xff09;问题 2. 问题排查原因【排查步骤】【问题1】产生原因【问题2】产生原因【附&#xff1a;排查代码】 3. 总结 - 解决代码4. 总结 - 反向代理 1. 反向代理代码&#xff08;有问题&#xff09; 接口封装 export function Get…

JenniAI:基于AI的文章生成器写作助手

【产品介绍】 • 名称 JenniAI • 成立/上线时间 2022年 • 具体描述 Jenni AI是一个基于AI的文章写作助手&#xff0c;通过使用先进的人工智能技术帮助用户更快、更好、更有创意地写作。无论用户需要写一篇论文、一篇博客、一封邮件、…

68、Spring Data JPA 的 方法名关键字查询

★ 方法名关键字查询&#xff08;全自动&#xff09; &#xff08;1&#xff09;继承 CrudRepository 接口 的 DAO 组件可按特定规则来定义查询方法&#xff0c;只要这些查询方法的 方法名 遵守特定的规则&#xff0c;Spring Data 将会自动为这些方法生成 查询语句、提供 方法…

Echarts 折线图的详细配置过程

文章目录 折线图 简介配置步骤简易示例 折线图 简介 Echarts是一款基于JavaScript的开源可视化库&#xff0c;由百度开发和维护。它提供了丰富多样的图表类型&#xff0c;其中折线图是其中一种常用的图表类型。 折线图通过连接数据点所形成的折线来展示数据的变化趋势。在折线…

华为云云耀云服务器L实例评测 | 购买流程及使用教程

目录 前言服务器购买进入购买界面选择服务器配置进行支付购买流程体验 控制台界面进入控制台控制台界面设置初始密码安全组配置 服务器使用使用xshell连接安装常用包实际测试 总结 前言 一直在考虑购买何种服务器&#xff0c;像我正在读研究生&#xff0c;如果想要在linux部署…

设计模式之代理模式的懂静态代理和动态代理

目录 1 概述1.1 如何实现&#xff1f;1.2 优点1.3 缺点1.4 适用场景 2 静态代理实现3 JDK 动态代理实现4 CGlib 动态代理实现5 总结 1 概述 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它的概念很简单&#xff0c;它通过创建一个代理对象来…

便捷又炸街!Mate 60的智感支付,是如何做到快速又安全的?

扫码支付已成为线下消费的主流付款方式&#xff0c;平时出门&#xff0c;手机一带&#xff0c;钱包拜拜&#xff01; 以微信支付为例&#xff0c;正常线下支付&#xff0c;手机解锁状态下&#xff1a; 第一步&#xff1a;找到微信APP&#xff1b; 第二步&#xff1a;打开右上…

9月15日作业

Qt代码 #include "mywnd.h"//构造函数的定义 mywnd::mywnd(QWidget *parent): QWidget(parent) //显性调用父类的有参构造完成对子类从父类继承下来成员的初始化工作 {//窗口设置this->resize(QSize(500, 433));this->setWindowTitle("Widget&quo…

MySQL-Linux安装、卸载:

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 https://downloads.mysql.com/archives/community/ 3. 创建目录&#xff0c;上传MySQL安装包 /usr/local/src/MySql/ 4. 解压 # 进入到…

软件测试面试必备,一文带你彻底掌握接口测试

一、什么是接口测试&#xff1f; 所谓接口&#xff0c;是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试&#xff0c;则是通过接口的不同情况下的输入&#xff0c;去对比输出&#xff0c;看看是否满足接口规范所规定的功能、…

Python vs C#:首先学习哪种编程语言最好?

进入编码可能很困难。 最艰难的部分? 决定先学什么语言。 当谈到 Python 与 C# 时,可能很难知道在您的决定中要考虑哪些因素。 我们为您提供了有关这些全明星编程语言的所有信息。 什么是 C#? 自 2000 年作为 Microsoft Visual Studio 的一部分开发 C# 以来,它一直是开发人…