设计一种将方向盘的旋转角度转换为USB信号的装置,用于汽车驾驶模拟

news/2025/3/22 10:12:17/文章来源:https://www.cnblogs.com/linkstu/p/18786269

量角器是一种专门的设备,用于高精度测量旋转角度,并通过USB将这些测量结果传输到主机。它集成了一个精确的编码器,能够以1度的精度测量角度。树莓派Pico通过可编程I/O (Programmable I/O)高速读取编码器信号,而TinyUSB库则用于与主机共享数据。该量角器的开发主要是为了解决在汽车驾驶模拟中需要精确测量物理方向盘的旋转角度的问题。

软件栈

为了提供所需的功能,该平台需要支持快速I/O和简单的USB处理。使用直接GPIO读取编码器信号的初步实验表明,在快速旋转过程中,信号可能部分丢失,因为直接GPIO只能处理高达~10kHz的变化。一个更好更快的选择是使用Raspberry Pi Pico上可用的可编程输入/输出(Programmable Input/Output, PIO)功能。

最初,我计划使用最简单的软件选项——MicroPython,但它缺乏对USB功能的直接支持。CircuitPython是第二个候选,但它没有完全的PIO支持。最后,我选择了c++,因为它为Raspberry Pi Pico (TinyUSB库)提供了良好的USB支持以及PIO功能。

我基于TinyUSB库中的hid_composite示例实现,并从实现中删除了除通用输入/输出设备外的所有子设备。我用一个处理基于tm1637的显示的简单类和一个带有处理编码器信号的自定义PIO代码的Encoder c++类完成了代码。

为了开发,我使用了Microsoft Visual Studio Code和官方的Raspberry Pi Pico扩展(在macOS和Windows上)。

编码器信号处理

编码器产生两相正交脉冲信号,每个相位每旋转400个脉冲。该信号的解码由PIO程序(在文件encoder.pio中)执行,该程序等待通道a上的上升沿,然后检查通道B上的值:对于0,生成IRQ 0;对于1,生成irq1。这些中断由Encoder c++类处理:irq0减少旋转计数器,而irq1增加旋转计数器。这种配置每次旋转产生400个脉冲,计数器值需要乘以360/400 = 0.9来表示以度为单位的值。

通过增加三个PIO程序,可以将测量精度提高到每旋转1600个脉冲:一个等待通道A的下降沿,另一个等待通道B的上升沿,第三个等待通道B的下降沿。

USB通信

USB处理实现基于TinyUSB库中的hid_composite示例。除通用输入/输出设备外,所有设备类型都从原始代码中删除。可以使用tests目录中的两个示例在主机设备上测试该实现:

•Test_hid.py,它使用了hid库

•Test_pyusb.py,它使用pyusb库

•构建指令

连接:

•编码器<-> RPi Pico

•VCC[红色]<-> VBus[引脚40](5V)

•GND[黑色]<-> GND[例如引脚38]

•通道A[白色]<-> GP2[引脚4]+ 10 kOhm上拉电阻至3V3[引脚36]

•通道B[绿色]<-> GP3[引脚5]+ 10 kOhm上拉电阻到3V3[引脚36]

•TM1637显示<-> RPi Pico

•CLK <-> 5[引脚7]

•DIO <-> 4[引脚6]

•VCC <-> 3V3[引脚36]

•GND <-> GND[例如引脚38]

•复位开关<-> RPi Pico

•3V3[针36]

•GP14[引脚19]

案例:

使用OpenSCAD设计的简单设备案例和插件案例可以在GitHub的案例目录中找到。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

郑州商转公直还办理流程

时间线:1.2025.3.10周一,去贷款行办理《同意提前结清商业贷款函》、《同意提前结清商业贷款函》、余额证明,12号周三电话我已出好,可以去公积金中心办商转公了;2.2025.3.17周一,去公积金中心办理商转公直还,周四下午收到已放款短信,周五早上接到贷款行电话提醒去办提前…

构建一个2.4GHz无线网络分析仪,可兼作远程(LoRa)收发器

快速预览 呈现DualCast !我最新的(也是最先进的)项目。它是一种紧凑型无线设备,除了能够通过LoRa技术发送915MHz AES-128加密的远程命令外,还能够分析2.4GHz Wi-Fi网络上的实时流量。(默认设置下最高可达一公里!)翻转180以激活Wi-Fi模式。此外,它还配备了许多传感器,如用于…

Vue3 关闭vueDevTools工具

1、文件 vite.config.ts 2、注释

SecureCRT SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输

SecureCRT & SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输SecureCRT & SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输 rock-solid terminal emulation & flexible secure file transfer for com…

deepseek模型部署到本地使用+投喂数据训练

近期,由于国外大量攻击,导致 DeepSeek 经常无法使用;另外,许多朋友希望在本地搭建自己的知识库,以保护自己的资料不被外泄。因此,越来越多的人希望能够在本地部署 DeepSeek,但对于技术难度有所担忧。别担心,这篇教程将为你扫清所有障碍!从环境搭建到模型运行,每一步都…

Axure RP上使用 Font Awesome 图标库

Axure RP 可以使用 Web Fonts,这让置入 Font Awesome 变得非常方便。Font Awesome 是一种字体,只是主要针对图标使用,而非我们所熟知的中文/西文字体。 进行简单的几步设置,就可以在自己项目上面使用 Font Awesome 的 1609 个免费图标。图标覆盖广泛,风格也相对统一。 一、…

读DAMA数据管理知识体系指南27文件和内容管理概念(上)

读DAMA数据管理知识体系指南27文件和内容管理概念(上)1. 文件和内容管理 1.1. 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理 1.2. 重点在于保持文件和其他非结构化或半结构化信息的完整性,并使这些信息能够被访问 2. 业务驱…

(Windows11)如何自编译Aseprite(像素画软件) - 1.3.12版本

如何自编译Aseprite(像素画软件)-windows-以1.3.12版本为例 1. Aseprite说明开源像素画软件,自带调色板 Steam也可购买:steam购买2. 官方编译说明(Windows系统下) 官方库提供了win、mac以及Linux编译方式 文档地址:https://github.com/aseprite/aseprite/blob/main/INSTAL…

BUAA_OO_Unit1总结

Unit1 总结 1. 程序结构分析 1.1 代码结构(类图)1.2 类的度量统计类名 属性个数 方法个数 方法名 方法规模(代码行) 控制分支数目 类总代码规模(行)Function 4 6 Function 5 0 85sort 10 1 (双重循环)getCan 20 3 (条件+循环嵌套)huanCan 15 2 (条件替换逻辑)prework 15 …

永久免费!支持视频号下载,2025最新版本

在昨天的推文中给大家分享了一款非常不错的 Ai 工具,含有 Ai 一键抠图、Ai 无损放大等功能,对于设计和作图的小伙伴来说,非常的有帮助这款Ai 合集工具,内容丰富,且使用简单,纯在线使用,不消耗本地电脑硬件内存,有需要的小伙伴可以点击下方链接体验 一键Ai抠图、无损放大…