DIY 一个汽车方向盘游戏外设(MMOS OSW DIY)

OSW-MMOS直驱方向盘DIY过程记录 - 简书 (jianshu.com)
DIY 一个汽车方向盘游戏外设(MMOS OSW DIY) 首先讲一下这个直驱系统大概的框架,首先是电脑,电脑里装MMOS的软件(这个软件国内高手把它汉化了的),电脑通过USB线,连接一个stm32板,这个stm 32板上刷MMOS的固件,这个STM32板再通过一根脉冲线,连接到电机驱动器上的CN 2接口,STM32板就作为电机驱动器的上位机,就是这根从stm32到电机驱动器的接线,也是我们这次自行组装需要接线最多的地方,然后电机驱动器再通过两根线与伺服电机相连(这两根线是电机厂商附带免费送的),这就是一个完整的流程,设置好后,我们就可以通过伺服电机来控制游戏里的汽车方向了。
首先就从最上面的ST M32板说起,原教程用的是一个原厂的ST M32开发版。而我这次用到的是一个比较小的ST M32核心板,芯片也和原厂的同样为STM32f407VGT6,这个核心板是不带下载组件的,要另外购买一个下载模块,而我这次是把这个MMOS固件,发给商家,让他帮忙给我下载(也叫刷)上去,晶振用8m的,(他这个晶振有的是25m的,有的是8m的),焊接好两排排针,调试好,他这个核心板是免费送miniusb线,和一组彩色杜邦线,(虽然我后来是自己买了一根绿联的MINIUSB线换上了,和几颗屏蔽磁环),下面有接线的对照图,他这个核心板,比起原厂的开发板,针脚的字母上前面少一个P字母,对应着接就行了是一样的,,他这个核心板我用了这么多天下来,是没什么问题的,可以用,唯一不好的地方,就是因为板子太小,这个地线GND 接口太少,有时候我不得不把两根或者多根地线缠绕在一起用,据说所有的地线在这个板子里,实际上是相通的,比如我这次就把这个com线,接到了SWD调试接口那里的地线上,还有一根地线也缠绕在了一起,,

1、电机准备

选择支持外部模拟转矩模式的伺服电机+配套伺服驱动器,注意看外部模拟转矩模式下是否支持指令换向

a.亿丰驱动器、时代超群等支持自定义IO输入控制换向的电机,力反馈使用PWM+DIR模式

b.华大、伊莱斯等转矩模式下只支持-10~+10v模拟信号输入控制,力回馈使用100%-50%-0PWM模式,需要使用运放添加减法电路控制

a类咸鱼较少,淘宝全新成套1200-1400左右,b类咸鱼二手较多,价格更低

交流伺服电机是目前性能最好的方案,普遍使用130电机,但130电机单电机就有11kg,家里小需要经常换地的话就很痛苦,于是选了110 6N电机,方便搬动的同时,转动惯量也更小,理论上响应速度也应该更快,伺服电机最高可以达到额定扭矩的3倍,18N应该可以稳稳的满足原G29选手,早期不了解具体特性,咸鱼选了一个伊莱斯电机,价格合适,成色漂亮,到手测了以后才发现不支持换向,来回折腾一个月,终于调试成功

伺服驱动

伺服电机是模拟方向盘最主要的部件,伺服电机要具有模拟量控制的转矩模式。推荐使用伺服电机驱动器:亿丰AASD,台达ASDA-AB,日鼎DCS。

  1. 亿丰AASD接线及驱动器设置

主控板上的电机信号控制线为DB9母头

恢复默认设置:

设置Pn000=2后可使用Fn004恢复出厂设置,具体方法请查看驱动器说明书。

参数设置:

Pn002=0 转矩模式。

Pn003=0 外部使能。

Pn018=0或1 当方向盘转向与游戏中相反时改动此参数。

Pn052=1 SigIn1设置为伺服使能。

Pn053=18 SigIn2设置为指令取反。

Pn188=5 设置值越大模拟量响应越慢,干扰噪声越小。

Pn189=30 模拟量与转矩的比例。

Pn191=0或1 反馈力方向不对时改动此参数。

Pn270=300 电机最大转速。

所有设置完成后重新上电。

自动校准模拟量(尽可能不要用自动校准):

断开电机使能,MMOS FFB中进行方向盘对中,进入Fn007,长按SET后显示donE,完成模拟转矩指令校正。如方向盘还会自行转动,可用Pn190进行微调。

使用亿丰伺服电机的设置

  1. 台达ASDA-AB接线及驱动器设置

接线如下图

主控板上的电机信号控制线为DB9母头

恢复默认设置:

P2-08=10 恢复出厂配置,完成后重新上电。

参数设置:

P0-02=09 可以在伺服驱动器上看到模拟量电压的大小。

P1-01=03 设定伺服扭矩模式。

P1-46=12500 编码器一圈输出的脉冲数为2500。

P1-55=200 最大转速,根据实际使用情况设置。

P2-10=01 DI1-设置为使能接口。

P2-13=06 DI4-设置为命令输入反向控制。

所有设置完成后重新上电。

自动校准模拟量(尽可能不要用自动校准):

断开电机使能,MMOS FFB中进行方向盘对中,P2-08=20,P4-10=2

如果有报警:

ALE14(逆向极限异常)解除方法P2-16参数值设为0。

ALE15(正向极限异常)解除方法P2-17参数值设为0。

使用台达伺服电机的设置

  1. 日鼎DCS接线及驱动器设置

主控板上的电机信号控制线为DB9母头

恢复默认设置:

按MOED/ESC到Fn-01,按向上键到Fn-06,长按SHIFT/ENT出现LoAD后放开,出现donE,初始化成功,重新上电。

参数设置:

Pn-09=2 转矩模式。按MOED/ESC到Pn-01,按向上键到Pn-09,长按SHIFT/ENT数值闪动后放开,按向上/向下键调数值为2(转矩模式),长按SHIFT/ENT出现Pn-09,设置完成。

Pn-10=1 COUNT1设置为使能。

Pn-11=2 COUNT2设置为复位。

Pn-19=2500 编码器单圈脉冲数。

Pn-34=300 最大转速,根据实际使用情况设置。

Pn-54=0.01 VREF电压滤波。

Pn-70=1到1.5 扭矩倍数。

Pn-74=15 15:正向力反馈,14或16:反向力反馈。

所有设置完成后重新上电。

模拟量调零(尽可能不要用自动校准):

断开电机使能,MMOS FFB中进行方向盘对中,运行Fn07,查看ON-10是否为0+/-0.02V,打开电机使能,查看方向盘是否转上一边,Pn-71可进行微调。

作者:fred_wu_xs https://www.bilibili.com/read/cv10344806/ 出处:bilibili

2、STM32控制板

MMOS方案使用stm32f4作为主控板,淘宝上STM32F407普遍50左右,512K的版本就可以,mini的版本体积更小,引脚也够,就选用了这个

使用usb转TTL串口烧录固件后,通过usb连接电脑,启动MMOS软件,可以识别并进行设置

3、扩展输入输出电路

MMOS固件是读取电机编码器数据作为方向盘角度输入,游戏里力回馈数据转换为PWM+方向输出控制电机转动实现力回馈,伺服电机转矩模式支持模拟输入,用pwm当做模拟信号直接输入,电机会有震动,体验并不好,所以需要添加外围电路转换为模拟信号,

编码器信号输入:

便宜的电机都是增量式编码器,ABZ三路信号,每路差分输出,A+A-B+B-Z+Z-,总共6路信号,差分信号可使用单路直接输入,但容易受到干扰,因此使用AM26LS32或sn75175对差分信号进行采集,转换为单路ABZ方波信号,输入至STM32,波形更稳定,方向识别也更精准

力回馈pwm输出:

a.支持指令换向的电机,使用pwm转0-10v模块转换为模拟量后输入,dir作为单独指令输入

b.只支持-10v~+10v的电机,使用pwm转0-10v转换为模拟量,再使用运放减法电路,得到-5v~+5v的模拟输出(https://www.jianshu.com/p/9f9480f7aaca)

-5~+5V的信号可以直接输入至伺服驱动器,驱动器中模拟信号增益可调,将原增益参数调大即可达到300%的转矩控制

pwm转电压目前有两种方案,LTC2644芯片-延迟低速度快价格高,GP8108芯片-价格低速度一般,引脚简单够用

运放减法使用OP07芯片

驱动器使能信号:

驱动器可以设置为通电使能,或IO引脚控制使能,使用控制使能,可以单独外接紧急切断按钮更加安全

无方向控制的-10v~+10v方案中,使用GP8101 pwm转模拟信号模块输出需要10ms左右稳定,未稳定前模块输出为0,通过减法电路后,输入到模拟引脚为-5v,此时如果先伺服电机已经通电,会有一下大幅度反转,比较危险,因此需要添加RC延时导通电路,控制使能信号延时200ms发送(https://www.jianshu.com/p/98396fd67af3)

4、方向盘部分电路连接

电机编码器 ------ 驱动器编码器接口CN1(伺服电机成套匹配)

电机动力 ------ 驱动器动力接口U V W PE(伺服电机成套匹配)

220V交流电------ 电源滤波器 ------ 驱动器rst输入,地线 ------ 驱动器外壳或单独接地引脚(地线十分重要,必须接,电机对电网有干扰,会影响踏板的模拟量的输入,可以使用电源录波器来进行隔离,效果显著)

驱动器控制接口CN2 ------ STM32控制及板外围电路 (编码器ABZ、驱动器模拟输入、模拟地、方向指令,驱动器使能)

伊莱斯电机编码器为2500线,mmos转数设置10000,勾选反向编码器,PWM设置100.50.0,频率8.2KHz

5、方向盘机械部分组装

电机轴去掉定位梢后,使用张紧套连接方向盘或快拆,张紧套与快拆见需要一个转接法兰连接固定,可3D打印或淘宝CNC定制,竞技方向盘孔距一般为70mm,快拆分70mm和75mm两种

电机本身需要对应尺寸的基座,固定至方向盘支架,淘宝有成品伺服电机支架,孔距需要和游戏支架匹配

DIY 一个汽车方向盘游戏外设(MMOS OSW DIY) | MR (mr-cn.net)

MMOS软件界面

控制方案

所谓的力反馈其实就是扭矩控制。游戏将相应的力反馈信号发送给外设的驱动程序,驱动程序通过USB传输给主控后,主控产生一个PWM信号,其占空比对应游戏的力反馈力度;PWM信号再传输给PAC(PWM-Analog Converter)芯片,PAC芯片按其占空比产生对应幅度的模拟量给伺服驱动器,驱动器将控制电机产生对应扭矩的力。

具体如何设置为扭矩模式需要阅读伺服的说明书。以我的台达为例,扭矩模式下扭矩值通过T_REF的电位控制,所以我们需要PAC芯片根据占空比产生-10~10V的电压信号。要产生正的的模拟量简单,但是负的会麻烦许多,但我们又肯定是需要不同方向的扭矩的。

所以阅读说明书,发现我们可以通过输入一个开关量,控制扭矩的方向。也就是所谓的指令取反功能。这下就简单了,我们将DI4设置为方向取反,之后只需要管扭矩的绝对值,方向通过设置一根单独的方向信号线就可以解决。这也就是所谓的PWM+DIR模式。

不同的伺服有着不同的控制功能和要求,比如日鼎用的是H桥模式,那么我们就需要产生两组PWM信号,用以控制H桥等等。具体的情况需要具体分析,也需要仔细阅读说明书。相对来讲,PWM+DIR是比较简单的一种。

我们使用的是MMOS这一闭源方案,作者提供的固件是没有源码的,因此我们的芯片型号、引脚定义都已经固定好了,我们直接套用即可。如果是日鼎的方案,PE11就是另外一个PWM,仿照PE9串接一个PAC芯片即可。

还需要注意的是,DI-默认是上拉使能的,接在COM-上才是失能。此外,在设计时应该按照说明书的要求,严格区分模拟电与数字电,不同的部分使用不同的电源。使用了差分驱动的信号线,应将差分信号双绞成对传送到光耦。PAC芯片前的光耦,因为传送的是PWM信号,我们需要使用高速光耦,在选型时应注意相关参数。

之后按照说明书,将信号线焊接在相应的引脚上。

参考资料

国内中文资料较多的是哔哩哔哩各个作者的专栏。

DIY伺服直驱方向盘试玩神力科莎 @pkintel DIY伺服直驱方向盘试玩神力科莎_哔哩哔哩_bilibili

这里要特别感谢 @pkintel 前辈,他在视频评论区分享了完整的资料,包括MMOS固件、驱动、设置指南、接线指南以及他设计的多种方案的控制板图纸。

(待完善)台达ASDA-AB伺服器DIY MMOs 直驱力回馈方向盘教程 @极速外卖 (待完善)台达ASDA-AB伺服器DIY MMOs 直驱力回馈方向盘教程 - 哔哩哔哩

该贴内有正确的台达伺服的连接以及设置方法。

MMOS FFB伺服直驱方向盘主控板DIY @fred_wu_xs MMOS FFB伺服直驱方向盘主控板DIY - 哔哩哔哩

该贴内有多种品牌的伺服的连接及设置方法。

【一张图】看懂台达ASDA-AB伺服驱动器diy osw ffb力反馈反向盘参数配置for mmos @辅助全关 【一张图】看懂台达ASDA-AB伺服驱动器diy osw ffb力反馈反向盘参数配置for mmos - 哔哩哔哩

该作者提供了详细的伺服设置方法以及接线方法(不止台达一种,同作者还分享了多种其他伺服的教程)。

DIY国产伺服方向盘完成,教程,MMOS汉化 (stmicroelectronics.cn)

DIY国产伺服方向盘完成,教程,MMOS汉化 (stmicroelectronics.cn)

这次DIY未用到12-24V电源,是直接去电STM32不知道对此有什么影响(后期看是否能慢慢调整)

具体参数设置:1丶驱动器设置Pn02设置为0 (转矩模式)

Pn03设置为0 (外部使能)

Pn53设置为58 (指令取反)用于接PWM&DIR中的DIR

Pn161自定义设置(这个是设置接收型号的区间:自己理解的undefined )

Pn162同上

Pn190模拟转矩指令偏移调整:自定义设置(受STM32影响)

输出的DAC电压值大小

Pn191模拟转矩指令方向:这个也要用到,当方向反转时伺服停止使能,设置本参数(1-2)具体看自己之前设置,然后

调转A.B相

驱动器参数设置到这里基本上就可以了,其他关于刚性等需设置Pn190往下的参数,详情请自己研究说明书

2丶接线:本次接线CN2公用了8根线算上外接使能那根一共10根 (抱歉接线错了,上班整的怕领导发现,现在更新下)

驱动器 连接线 STM32

6-----------红-----------使能

9-----------蓝-----------电源(12-24V这里我用了5Vundefined )

10-----------白-----------COM(应该是12-24V的地线)

13-----------黑-----------地AGND模拟量输入地线 接STM32地

15-----------黄-----------编码器Z+ 对应stm32的PA2

18-----------橙-----------编码器B+ 对应stm32的PA1

20-----------清-----------编码器A+ 对应stm32的PA0

25-----------紫-----------Vref模拟量输入 对应stm32的PE9

7 -----------绿-----------指令取反 对应stm32的PE11

链接线只做参考,具体颜色请自己区分

哔哩哔哩几个UP的视频参考

超详细低成本自制模拟器教学 教程向!_哔哩哔哩_bilibili

OSW MMOSFFB 多功能自制主控板调试_哔哩哔哩_bilibili

好用不贵,自制MMOS,国产伺服直驱方向盘,新手小白详尽流程_哔哩哔哩_bilibili

MMOS FFB伺服直驱方向盘主控板DIY - 哔哩哔哩 (bilibili.com)

好用不贵,自制MMOS,国产伺服直驱方向盘,新手小白详尽流程-硬件综合区-外设天下-电脑外设发烧友聚集地 (wstx.com)


有的方向盘会在正中位置来回左右摆动,的这样一个问题,我们今天来解决一下

这是通过调整三个参数来解决的,一个是电脑上mmos软件的"最小力反馈",另外两个是电机驱动器上面的pn159和 pn190,调整pn159用dn017观察,而调整pn190是用dn016观察。


先说说mmos软件的"最小力反馈"这个参数,首先这个参数不要设置过大,我一般用都是3%到5%,其次,比较有意思的一点,这个参数一变动的话,电机驱动器上面的pn159和 pn190的数值也要相应的重新调整才匹配。

而调整pn159和pn190,我不建议用自动调整的方法,因为方向盘来回左右摆动,无法读准数值。

注:这次电机驱动器调整的这些参数都是即时生效的,不用断电重启都可以。


下面详解一下我的实战例子,电机驱动器上电,打开电脑的mmos软件,(因为这个软件经常不能保存参数,我们稳妥一点),先点安装,把电机的"设备设置"参数设置好,再点保存,关闭,然后把软件的"最小力反馈"设置到3%,这时发现方向盘有来回左右摆动现象,调整电机驱动器pn 190参数,我的pn 190默认参数是24,我们先把它归0,然后观察dn 016参数,(因为方向盘来回左右摆动的原因,这个数值是不停跳动的,需要我们用手扶住方向盘,把它固定在正中央位置),这时读得它的数值是0.19,经过单位换算,我们就把pn190的参数给设置成-190(负数),这时候我们发现方向盘已经不摆了,我们再用同样的方法,同样的步骤,通过观察dn 017把pn 159的参数也给改一下,我这里这两个参数也基本上是一样的,到这里基本大功告成。(感觉主要起作用的还是pn190,调好以后,方向盘不来回摆动正常了以后,就把pn159的数值也调到和pn190一样的就行了)

接下来我们再折腾一下,验证一下,我们把mmos软件里的"最小力反馈"设置到5%,这个时候发现方向盘又开始摆动了,观察dn 016的参数,(当然还是要用手扶正盘子),读数为0.11,再次调整pn 190参数,因为这次没有归0,上面的数值已经是负190了,我们累加在一起,直接设置成负300,好了,又搞定了,pn159也一样的。

就是说我们电机驱动器调好一个数值后,就可以不动了。由于mmos的参数经常不能保存,每次打开就只需要改mmos里面软件的参数,(改成和你电机驱动器相对应的那个数值),就行了。

【一张图】看懂台达ASDA-AB伺服驱动器diy osw ffb力反馈反向盘参数配置for mmos - 哔哩哔哩 (bilibili.com)

【一张图】配置台达伺服diy osw ffb mmos力反馈直驱台达方案_哔哩哔哩_bilibili

相关推荐
白乐天_n12 小时前
腾讯游戏安全移动赛题Tencent2016A
安全·游戏
这是我5812 小时前
C++打小怪游戏
c++·其他·游戏·visual studio·小怪·大型·怪物
tealcwu13 小时前
【游戏设计原理】21 - 解谜游戏的设计
游戏·游戏策划
清梦202014 小时前
经典问题---跳跃游戏II(贪心算法)
算法·游戏·贪心算法
tealcwu15 小时前
【游戏设计原理】22 - 石头剪刀布
游戏·游戏策划
l1384942745117 小时前
Java每日一题(2)
java·开发语言·游戏
孤留光乩1 天前
从零搭建纯前端飞机大战游戏(附源码)
前端·javascript·游戏·html·css3
王大队长1 天前
Epic游戏使用mod
游戏
tealcwu1 天前
【游戏设计原理】20 - 囚徒困境
游戏
这是我582 天前
C++打小怪游戏2
c++·游戏