建立方向盘项目初始版本

This commit is contained in:
2026-10-29 22:04:55 +08:00
commit 9962cbfbce
834 changed files with 1519203 additions and 0 deletions

View File

@@ -0,0 +1 @@
ok

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,128 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2026-10-28T10:41:16',(''),(''),
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2000,#2);
#2 = APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('M4 shim 0.5mm','M4 shim 0.5mm','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#107);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = MANIFOLD_SOLID_BREP('',#16);
#16 = CLOSED_SHELL('',(#17,#50,#70,#90));
#17 = ADVANCED_FACE('',(#18),#45,.T.);
#18 = FACE_BOUND('',#19,.T.);
#19 = EDGE_LOOP('',(#20,#29,#37,#44));
#20 = ORIENTED_EDGE('',*,*,#21,.F.);
#21 = EDGE_CURVE('',#22,#22,#24,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(4.5,-1.102182119233E-15,0.5));
#24 = CIRCLE('',#25,4.5);
#25 = AXIS2_PLACEMENT_3D('',#26,#27,#28);
#26 = CARTESIAN_POINT('',(0.,0.,0.5));
#27 = DIRECTION('',(0.,0.,1.));
#28 = DIRECTION('',(1.,0.,-0.));
#29 = ORIENTED_EDGE('',*,*,#30,.F.);
#30 = EDGE_CURVE('',#31,#22,#33,.T.);
#31 = VERTEX_POINT('',#32);
#32 = CARTESIAN_POINT('',(4.5,-1.102182119233E-15,0.));
#33 = LINE('',#34,#35);
#34 = CARTESIAN_POINT('',(4.5,-1.102182119233E-15,0.));
#35 = VECTOR('',#36,1.);
#36 = DIRECTION('',(0.,0.,1.));
#37 = ORIENTED_EDGE('',*,*,#38,.T.);
#38 = EDGE_CURVE('',#31,#31,#39,.T.);
#39 = CIRCLE('',#40,4.5);
#40 = AXIS2_PLACEMENT_3D('',#41,#42,#43);
#41 = CARTESIAN_POINT('',(0.,0.,0.));
#42 = DIRECTION('',(0.,0.,1.));
#43 = DIRECTION('',(1.,0.,-0.));
#44 = ORIENTED_EDGE('',*,*,#30,.T.);
#45 = CYLINDRICAL_SURFACE('',#46,4.5);
#46 = AXIS2_PLACEMENT_3D('',#47,#48,#49);
#47 = CARTESIAN_POINT('',(0.,0.,0.));
#48 = DIRECTION('',(0.,0.,1.));
#49 = DIRECTION('',(1.,0.,-0.));
#50 = ADVANCED_FACE('',(#51,#54),#65,.T.);
#51 = FACE_BOUND('',#52,.T.);
#52 = EDGE_LOOP('',(#53));
#53 = ORIENTED_EDGE('',*,*,#21,.T.);
#54 = FACE_BOUND('',#55,.T.);
#55 = EDGE_LOOP('',(#56));
#56 = ORIENTED_EDGE('',*,*,#57,.F.);
#57 = EDGE_CURVE('',#58,#58,#60,.T.);
#58 = VERTEX_POINT('',#59);
#59 = CARTESIAN_POINT('',(2.25,-5.510910596163E-16,0.5));
#60 = CIRCLE('',#61,2.25);
#61 = AXIS2_PLACEMENT_3D('',#62,#63,#64);
#62 = CARTESIAN_POINT('',(0.,0.,0.5));
#63 = DIRECTION('',(0.,0.,1.));
#64 = DIRECTION('',(1.,0.,-0.));
#65 = PLANE('',#66);
#66 = AXIS2_PLACEMENT_3D('',#67,#68,#69);
#67 = CARTESIAN_POINT('',(0.,0.,0.5));
#68 = DIRECTION('',(0.,0.,1.));
#69 = DIRECTION('',(1.,0.,-0.));
#70 = ADVANCED_FACE('',(#71,#74),#85,.F.);
#71 = FACE_BOUND('',#72,.F.);
#72 = EDGE_LOOP('',(#73));
#73 = ORIENTED_EDGE('',*,*,#38,.T.);
#74 = FACE_BOUND('',#75,.F.);
#75 = EDGE_LOOP('',(#76));
#76 = ORIENTED_EDGE('',*,*,#77,.F.);
#77 = EDGE_CURVE('',#78,#78,#80,.T.);
#78 = VERTEX_POINT('',#79);
#79 = CARTESIAN_POINT('',(2.25,-5.510910596163E-16,0.));
#80 = CIRCLE('',#81,2.25);
#81 = AXIS2_PLACEMENT_3D('',#82,#83,#84);
#82 = CARTESIAN_POINT('',(0.,0.,0.));
#83 = DIRECTION('',(0.,0.,1.));
#84 = DIRECTION('',(1.,0.,-0.));
#85 = PLANE('',#86);
#86 = AXIS2_PLACEMENT_3D('',#87,#88,#89);
#87 = CARTESIAN_POINT('',(0.,0.,0.));
#88 = DIRECTION('',(0.,0.,1.));
#89 = DIRECTION('',(1.,0.,-0.));
#90 = ADVANCED_FACE('',(#91),#102,.F.);
#91 = FACE_BOUND('',#92,.F.);
#92 = EDGE_LOOP('',(#93,#94,#100,#101));
#93 = ORIENTED_EDGE('',*,*,#57,.F.);
#94 = ORIENTED_EDGE('',*,*,#95,.F.);
#95 = EDGE_CURVE('',#78,#58,#96,.T.);
#96 = LINE('',#97,#98);
#97 = CARTESIAN_POINT('',(2.25,-5.510910596163E-16,-1.E-02));
#98 = VECTOR('',#99,1.);
#99 = DIRECTION('',(0.,0.,1.));
#100 = ORIENTED_EDGE('',*,*,#77,.T.);
#101 = ORIENTED_EDGE('',*,*,#95,.T.);
#102 = CYLINDRICAL_SURFACE('',#103,2.25);
#103 = AXIS2_PLACEMENT_3D('',#104,#105,#106);
#104 = CARTESIAN_POINT('',(0.,0.,-1.E-02));
#105 = DIRECTION('',(0.,0.,1.));
#106 = DIRECTION('',(1.,0.,-0.));
#107 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#111)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#108,#109,#110)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#108 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#109 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#110 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#111 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#108,
'distance_accuracy_value','confusion accuracy');
#112 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
ENDSEC;
END-ISO-10303-21;

Binary file not shown.

View File

@@ -0,0 +1,128 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2026-10-28T10:41:16',(''),(''),
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2000,#2);
#2 = APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('M4 shim 1mm','M4 shim 1mm','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#107);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = MANIFOLD_SOLID_BREP('',#16);
#16 = CLOSED_SHELL('',(#17,#50,#70,#90));
#17 = ADVANCED_FACE('',(#18),#45,.T.);
#18 = FACE_BOUND('',#19,.T.);
#19 = EDGE_LOOP('',(#20,#29,#37,#44));
#20 = ORIENTED_EDGE('',*,*,#21,.F.);
#21 = EDGE_CURVE('',#22,#22,#24,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(4.5,-1.102182119233E-15,1.));
#24 = CIRCLE('',#25,4.5);
#25 = AXIS2_PLACEMENT_3D('',#26,#27,#28);
#26 = CARTESIAN_POINT('',(0.,0.,1.));
#27 = DIRECTION('',(0.,0.,1.));
#28 = DIRECTION('',(1.,0.,-0.));
#29 = ORIENTED_EDGE('',*,*,#30,.F.);
#30 = EDGE_CURVE('',#31,#22,#33,.T.);
#31 = VERTEX_POINT('',#32);
#32 = CARTESIAN_POINT('',(4.5,-1.102182119233E-15,0.));
#33 = LINE('',#34,#35);
#34 = CARTESIAN_POINT('',(4.5,-1.102182119233E-15,0.));
#35 = VECTOR('',#36,1.);
#36 = DIRECTION('',(0.,0.,1.));
#37 = ORIENTED_EDGE('',*,*,#38,.T.);
#38 = EDGE_CURVE('',#31,#31,#39,.T.);
#39 = CIRCLE('',#40,4.5);
#40 = AXIS2_PLACEMENT_3D('',#41,#42,#43);
#41 = CARTESIAN_POINT('',(0.,0.,0.));
#42 = DIRECTION('',(0.,0.,1.));
#43 = DIRECTION('',(1.,0.,-0.));
#44 = ORIENTED_EDGE('',*,*,#30,.T.);
#45 = CYLINDRICAL_SURFACE('',#46,4.5);
#46 = AXIS2_PLACEMENT_3D('',#47,#48,#49);
#47 = CARTESIAN_POINT('',(0.,0.,0.));
#48 = DIRECTION('',(0.,0.,1.));
#49 = DIRECTION('',(1.,0.,-0.));
#50 = ADVANCED_FACE('',(#51,#54),#65,.T.);
#51 = FACE_BOUND('',#52,.T.);
#52 = EDGE_LOOP('',(#53));
#53 = ORIENTED_EDGE('',*,*,#21,.T.);
#54 = FACE_BOUND('',#55,.T.);
#55 = EDGE_LOOP('',(#56));
#56 = ORIENTED_EDGE('',*,*,#57,.F.);
#57 = EDGE_CURVE('',#58,#58,#60,.T.);
#58 = VERTEX_POINT('',#59);
#59 = CARTESIAN_POINT('',(2.25,-5.510910596163E-16,1.));
#60 = CIRCLE('',#61,2.25);
#61 = AXIS2_PLACEMENT_3D('',#62,#63,#64);
#62 = CARTESIAN_POINT('',(0.,0.,1.));
#63 = DIRECTION('',(0.,0.,1.));
#64 = DIRECTION('',(1.,0.,-0.));
#65 = PLANE('',#66);
#66 = AXIS2_PLACEMENT_3D('',#67,#68,#69);
#67 = CARTESIAN_POINT('',(0.,0.,1.));
#68 = DIRECTION('',(0.,0.,1.));
#69 = DIRECTION('',(1.,0.,-0.));
#70 = ADVANCED_FACE('',(#71,#74),#85,.F.);
#71 = FACE_BOUND('',#72,.F.);
#72 = EDGE_LOOP('',(#73));
#73 = ORIENTED_EDGE('',*,*,#38,.T.);
#74 = FACE_BOUND('',#75,.F.);
#75 = EDGE_LOOP('',(#76));
#76 = ORIENTED_EDGE('',*,*,#77,.F.);
#77 = EDGE_CURVE('',#78,#78,#80,.T.);
#78 = VERTEX_POINT('',#79);
#79 = CARTESIAN_POINT('',(2.25,-5.510910596163E-16,0.));
#80 = CIRCLE('',#81,2.25);
#81 = AXIS2_PLACEMENT_3D('',#82,#83,#84);
#82 = CARTESIAN_POINT('',(0.,0.,0.));
#83 = DIRECTION('',(0.,0.,1.));
#84 = DIRECTION('',(1.,0.,-0.));
#85 = PLANE('',#86);
#86 = AXIS2_PLACEMENT_3D('',#87,#88,#89);
#87 = CARTESIAN_POINT('',(0.,0.,0.));
#88 = DIRECTION('',(0.,0.,1.));
#89 = DIRECTION('',(1.,0.,-0.));
#90 = ADVANCED_FACE('',(#91),#102,.F.);
#91 = FACE_BOUND('',#92,.F.);
#92 = EDGE_LOOP('',(#93,#94,#100,#101));
#93 = ORIENTED_EDGE('',*,*,#57,.F.);
#94 = ORIENTED_EDGE('',*,*,#95,.F.);
#95 = EDGE_CURVE('',#78,#58,#96,.T.);
#96 = LINE('',#97,#98);
#97 = CARTESIAN_POINT('',(2.25,-5.510910596163E-16,-1.E-02));
#98 = VECTOR('',#99,1.);
#99 = DIRECTION('',(0.,0.,1.));
#100 = ORIENTED_EDGE('',*,*,#77,.T.);
#101 = ORIENTED_EDGE('',*,*,#95,.T.);
#102 = CYLINDRICAL_SURFACE('',#103,2.25);
#103 = AXIS2_PLACEMENT_3D('',#104,#105,#106);
#104 = CARTESIAN_POINT('',(0.,0.,-1.E-02));
#105 = DIRECTION('',(0.,0.,1.));
#106 = DIRECTION('',(1.,0.,-0.));
#107 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#111)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#108,#109,#110)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#108 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#109 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#110 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#111 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#108,
'distance_accuracy_value','confusion accuracy');
#112 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
ENDSEC;
END-ISO-10303-21;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,5 @@
Nominal gap 1.4mm: 7mm standoff body, 0.8mm motor washer, 0.5mm encoder shim.
M4 male 8mm; through 3mm angle and 0.8mm metal washer, nominal motor engagement 4.2mm.
M4 top shank 8mm through 0.8mm top washer + 3.2mm bracket + 0.5mm shim, female entry 3.5mm.
Intersections above 0.001 mm3, selected complete simplified assembly pairs:
none

View File

@@ -0,0 +1,3 @@
EncoderBracket solid=True facets=4292 volume=10157.0049 zmin=0.0000
Shim05 solid=True facets=260 volume=23.7834 zmin=0.0000
Shim10 solid=True facets=260 volume=47.5667 zmin=0.0000

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -0,0 +1,46 @@
# PCD 76 mm 共孔编码器支架:首版试装件
本目录为依现有电机与编码器近似模型制作的打印试装件。角码直接贴住电机,由金属立柱和金属垫圈先独立锁紧,塑料支架位于柱另一端,只固定编码器。原电机及原磁铁座文件未修改。
## 打印文件
| 文件 | 数量 | 说明 |
| --- | --- | --- |
| `EncoderBracket.stl` | 1 | 64 × 64 × 3.2 mm 方框,四角朝左右两侧外开口 |
| `Shim05.stl` | 4,建议多备 | 每片 0.5 mm,放在柱顶和塑料支架之间 |
| `Shim10.stl` | 4,备用 | 每片 1.0 mm,用于调整芯片与磁铁的间距 |
STL 已按打印底面放置在 Z=0。支架平放打印;开口和竖直孔无需额外建模支撑,最终以切片预览为准。建议 PETG、0.2 mm 层高、至少 3 道外墙。0.5 mm 垫片建议采用 0.1 mm 层高、避免切片把厚度四舍五入,并检查翘曲。模型中的开口宽 4.6 mm;FDM 孔和开口尺寸会受设备与材料影响,先试放 M4 螺杆。
`Shared76_Print.FCStd` 为打印朝向零件,三个对象在同一原点,需在树中分别选择或直接使用单独 STL;`EncoderBracket.step` 和 `Shim*.step` 是单件交换文件。`Shared76_Assembly.FCStd`、`.step` 为装配核查模型。实体由脚本生成,几何不是尺寸表驱动的参数化草图;重建使用 `scripts/rebuild_shared76_print.FCMacro`,会覆盖本目录相关输出。
## 五金及假设
- 四个角码:按 20 × 20 × 18 mm、3 mm 厚模型,椭圆槽按 9.5 × 5.5 mm 假设。PCD 76 mm 四孔及 45° 相位沿用现有电机模型,须按实物确认。
- 四根金属 M4 公母柱:模型采用**柱身 7 mm、公牙 8 mm、六角对边 7 mm**,角码表面再垫 0.8 mm 金属平垫圈,金属柱先压紧角码。可参考 [Würth Elektronik 971070471 数据表](https://www.we-online.com/components/products/datasheet/971xx0xx1.pdf) 的规格:钢镀锌、M4、公牙 8 mm、柱身 7 mm、母牙深 4.5 mm。此为尺寸参考,厂家未声明其适合方向盘电机主固定;必须确认实际柱件、足够强度、螺纹和锁紧情况。
- 电机侧在上述假设下理论进牙 `8 − 3 − 0.8 = 4.2 mm`,真实垫圈厚度、角码厚度、螺纹深度和有效咬合均须核实;不要让螺纹顶到底。
- 每个塑料支架脚用一个独立顶部 M4 螺丝及约外径 9 mm、厚 0.8 mm 金属垫圈。模型按支架厚 3.2 mm、每脚 0.5 mm 调整垫片,顶部 M4×8 理论进入柱内 `8 − 3.2 − 0.5 − 0.8 = 3.5 mm`。如采用参考柱 4.5 mm 女牙深,理论比底部留 1 mm;实际孔深、螺丝、垫圈与垫片必须逐个核实,确保不顶底且有足够进牙。其他立柱规格或调整垫片组合需重算。手头 M4×8 只能作为顶部候选,不能替代角码所需的公母柱。
- PCB 采用 Ø33 mm、3 个 Ø3 mm 孔,板厚 1.6 mm、芯片突出 0.8 mm 均为假设;三颗 M2×4 mm 小自攻螺丝从芯片面穿原孔拧入支架 Ø1.8 mm 导孔,假设头部 Ø4 × 1.5 mm。先手工试配,不要强拧。PCB 背面通过中央开孔留给焊点和导线;实际元件和线材形状未知,需试放。
- 磁铁座沿用 `models/encoder_print_v1/MagnetHolder.stl`,适配现有 Ø10 × 3 mm 径向充磁磁铁;不需要重新打印,除非原件不合适。
## 磁铁间隙如何调整
每个金属柱顶部、塑料支架底部放 **完全等厚** 的打印调整垫片,调整时不松动固定角码的金属柱。以下按 3 mm 角码、0.8 mm 金属垫圈、7 mm 柱身、1.6 mm PCB 和 0.8 mm 芯片高度估算,均为名义值:
| 每脚垫片 | 芯片表面至磁铁表面的名义间隙 | 顶部 M4×8、0.8 mm 金属垫圈时理论进柱 |
| --- | --- | --- |
| 无 | 0.9 mm | 4.0 mm |
| 0.5 mm | 1.4 mm | 3.5 mm |
| 1 mm | 1.9 mm | 3.0 mm |
| 1 + 0.5 mm | 2.4 mm | 2.5 mm |
首先每脚放 0.5 mm 垫片。更换为 1 mm 会增大间隙;取掉垫片会减小间隙。每次都要重新核对顶部螺丝的进牙和孔底余量;例如参考柱女牙深 4.5 mm,**无垫片**时名义 4.0 mm 进牙只余 0.5 mm,公差下可能顶底。四处垫片厚度不能不同,否则 PCB 可能倾斜。实际芯片突出高度未测,真实间隙不是表中保证值;断电手动转几圈检查无碰擦,再检查角度和磁场状态。
## 装配顺序
1. 先将 PCB 正对磁铁的一面朝向电机,三颗 M2 自攻螺丝在拆下的支架上轻拧固定;孔留有微调余量,对准磁铁中心后再适度锁紧。检查板背焊点、PCB 元件与框架不压线。
2. 角码直接贴在电机四个 76 mm 孔处;每孔放金属垫圈,用适合的公母柱独立锁紧角码。此时不装塑料支架在电机和角码之间。
3. 四个柱顶各放一片同厚调整垫片,沿电机轴向摆放支架,分别装顶部 M4 螺丝及金属垫圈。四个开口左右相反,不能假定四颗螺丝预装后可整体单向侧滑装拆。顶部螺丝的实际工具空间和与 2020 型材/T 型螺母的关系尚未建模验证。
4. 断电缓慢手转电机至少几圈,确认磁铁座、PCB、支架及线材不擦碰;再检查编码器数值和磁场。测试前确认四个角码及两侧型材可靠固定,编码器塑料支架不能承担这些力。
`mesh_check.txt` 记录 STL 网格闭合、体积及打印 Z 范围;`geometry_check.txt` 是近似总装静态布尔检查。实际角码、螺丝工具、焊线、磁场和动力载荷均未实物验证。