6 Commits

24 changed files with 30947 additions and 18341 deletions

24
Hardware/MC33660.lib Normal file
View File

@@ -0,0 +1,24 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# MC33660
#
DEF MC33660 U 0 40 Y Y 1 F N
F0 "U" 0 0 50 H V C CNN
F1 "MC33660" 0 -100 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
S -400 250 400 -350 0 1 0 N
X VBB 1 50 450 200 D 50 50 1 1 W
X NC 2 -50 -550 200 U 50 50 1 1 W
X GND 3 50 -550 200 U 50 50 1 1 W
X ISO 4 600 -50 200 L 50 50 1 1 B
X TX 5 -600 -200 200 R 50 50 1 1 O
X RX 6 -600 -50 200 R 50 50 1 1 I
X VDD 7 -50 450 200 D 50 50 1 1 W
X CEN 8 -600 100 200 R 50 50 1 1 I
ENDDRAW
ENDDEF
#
#End Library

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,19 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.049999999999999996,
"copper_line_width": 0.19999999999999998,
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
@@ -20,13 +24,13 @@
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.09999999999999999,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
@@ -45,11 +49,100 @@
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.19999999999999998
"min_clearance": 0.2
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"drc_exclusions": [
[
"courtyards_overlap|118511500|75177000|1553c88f-2adb-4497-8788-967b865e436a|b792e1a3-e773-46cb-bdd0-cca64b65c21c",
""
],
[
"courtyards_overlap|123007000|75355000|00000000-0000-0000-0000-000061d28ad3|1553c88f-2adb-4497-8788-967b865e436a",
""
],
[
"lib_footprint_issues|141478000|85575000|00000000-0000-0000-0000-000061d2ae4b|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|115824000|80772000|1553c88f-2adb-4497-8788-967b865e436a|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|124460000|93980000|f3127aa8-4fa0-47de-9985-06be44bbdf06|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|125984000|82296000|00000000-0000-0000-0000-000061d2caf2|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|129032000|77978000|00000000-0000-0000-0000-000061de69e4|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|129540000|88900000|479edbfe-22e9-482f-abe6-e8a9ee4f8095|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|132842000|93218000|00000000-0000-0000-0000-000061d28984|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|139700000|89916000|0b7b6b80-ae94-4b1b-a38e-a90a7895e1d0|00000000-0000-0000-0000-000000000000",
""
],
[
"lib_footprint_mismatch|145703000|65864500|00000000-0000-0000-0000-000061d2f827|00000000-0000-0000-0000-000000000000",
""
],
[
"malformed_courtyard|124128000|98140000|00000000-0000-0000-0000-000061d2ae4b|00000000-0000-0000-0000-000000000000",
""
],
[
"malformed_courtyard|124178000|72040000|00000000-0000-0000-0000-000061d2ae4b|00000000-0000-0000-0000-000000000000",
""
],
[
"malformed_courtyard|158828000|72040000|00000000-0000-0000-0000-000061d2ae4b|00000000-0000-0000-0000-000000000000",
""
],
[
"silk_edge_clearance|108458000|61861000|ccc4cc25-ac17-45ef-825c-e079951ffb21|dc75368d-0996-4249-8abb-dc4cf7e8b3a4",
""
],
[
"silk_edge_clearance|108458000|74901000|ccc4cc25-ac17-45ef-825c-e079951ffb21|53b3d478-aede-49e5-a9c6-af0d51081e6b",
""
],
[
"silk_edge_clearance|131953000|99060000|626679e8-6101-4722-ac57-5b8d9dab4c8b|0ceda40c-021b-4e82-b42f-da6ab60c2da7",
""
],
[
"silk_over_copper|124256491|96080000|5918385d-932b-42f5-93dc-b50c4d404527|00000000-0000-0000-0000-000000000000",
""
],
[
"silk_over_copper|126686000|72160000|c0c7c21a-5ba8-4e1a-b19c-dd42f87b5e73|00000000-0000-0000-0000-000000000000",
""
],
[
"silk_overlap|114722000|93418819|2389429b-e330-41bd-ae02-ffdf7f42affb|277dc3b2-ee65-405f-ac52-614baa7cb1bf",
""
],
[
"silk_overlap|114807618|80226819|2cde46e7-b5a2-4709-b127-bb84cc090edc|d0190ea1-2eb5-4019-a426-876a8032a9c9",
""
],
[
"silk_overlap|125118537|76007746|ba335760-ecfa-408d-9aa6-aeeaddbba1a7|d65dbdcd-4994-45be-8af9-98fc61c06e09",
""
]
],
"meta": {
"filename": "board_design_settings.json",
"version": 2
@@ -57,35 +150,56 @@
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"creepage": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_filters_mismatch": "ignore",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "error",
"hole_clearance": "error",
"hole_near_hole": "error",
"hole_to_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"mirrored_text_on_front_layer": "warning",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"nonmirrored_text_on_back_layer": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_on_edge_cuts": "error",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_angle": "error",
"track_dangling": "warning",
"track_segment_length": "error",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
@@ -101,24 +215,100 @@
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.0,
"min_copper_edge_clearance": 0.049999999999999996,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.05,
"min_groove_width": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.19999999999999998,
"min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.39999999999999997,
"min_track_width": 0.2,
"min_via_annular_width": 0.05,
"min_via_diameter": 0.4,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpthpad": true,
"td_onroundshapesonly": false,
"td_onsmdpad": true,
"td_ontrackend": false,
"td_onvia": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0,
0.5,
1.0,
2.0
],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [
{
"diameter": 0.0,
@@ -140,7 +330,16 @@
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
"layer_presets": []
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
@@ -331,11 +530,21 @@
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
"lib_symbol_mismatch": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
@@ -344,8 +553,14 @@
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"same_local_global_label": "warning",
"similar_label_and_power": "warning",
"similar_labels": "warning",
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
@@ -357,12 +572,12 @@
},
"meta": {
"filename": "oiler SMD.kicad_pro",
"version": 1
"version": 3
},
"net_settings": {
"classes": [
{
"bus_width": 12.0,
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
@@ -372,32 +587,112 @@
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6.0
"wire_width": 6
}
],
"meta": {
"version": 2
"version": 4
},
"net_colors": null
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "Rehoiler SMD.net",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": true,
"label": "Exclude from BOM",
"name": "${EXCLUDE_FROM_BOM}",
"show": true
},
{
"group_by": true,
"label": "Exclude from Board",
"name": "${EXCLUDE_FROM_BOARD}",
"show": true
},
{
"group_by": true,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"include_excluded_from_bom": true,
"name": "Default Editing",
"sort_asc": true,
"sort_field": "Referenz"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
@@ -408,6 +703,11 @@
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.25,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.08
},
@@ -423,20 +723,26 @@
"meta": {
"version": 0
},
"model_mode": 0,
"model_mode": 4,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "",
"space_save_all_events": true,
"spice_adjust_passive_values": false,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"b1ddb058-f7b2-429c-9489-f4e2242ad7e5",
""
"Root"
]
],
"text_variables": {}

File diff suppressed because it is too large Load Diff

View File

@@ -1,257 +0,0 @@
update=03.01.2022 00:33:13
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1
[pcbnew]
version=1
PageLayoutDescrFile=
LastNetListRead=Rehoiler SMD.net
CopperLayerCount=2
BoardThickness=1.6
AllowMicroVias=0
AllowBlindVias=0
RequireCourtyardDefinitions=0
ProhibitOverlappingCourtyards=1
MinTrackWidth=0.2
MinViaDiameter=0.4
MinViaDrill=0.3
MinMicroViaDiameter=0.2
MinMicroViaDrill=0.09999999999999999
MinHoleToHole=0.25
TrackWidth1=0.25
TrackWidth2=0.5
TrackWidth3=1
TrackWidth4=2
ViaDiameter1=0.8
ViaDrill1=0.4
ViaDiameter2=0.7
ViaDrill2=0.35
ViaDiameter3=1
ViaDrill3=0.6
ViaDiameter4=2
ViaDrill4=1
dPairWidth1=0.2
dPairGap1=0.25
dPairViaGap1=0.25
SilkLineWidth=0.12
SilkTextSizeV=1
SilkTextSizeH=1
SilkTextSizeThickness=0.15
SilkTextItalic=0
SilkTextUpright=1
CopperLineWidth=0.2
CopperTextSizeV=1.5
CopperTextSizeH=1.5
CopperTextThickness=0.3
CopperTextItalic=0
CopperTextUpright=1
EdgeCutLineWidth=0.05
CourtyardLineWidth=0.05
OthersLineWidth=0.15
OthersTextSizeV=1
OthersTextSizeH=1
OthersTextSizeThickness=0.15
OthersTextItalic=0
OthersTextUpright=1
SolderMaskClearance=0
SolderMaskMinWidth=0
SolderPasteClearance=0
SolderPasteRatio=-0
[pcbnew/Layer.F.Cu]
Name=F.Cu
Type=0
Enabled=1
[pcbnew/Layer.In1.Cu]
Name=In1.Cu
Type=0
Enabled=0
[pcbnew/Layer.In2.Cu]
Name=In2.Cu
Type=0
Enabled=0
[pcbnew/Layer.In3.Cu]
Name=In3.Cu
Type=0
Enabled=0
[pcbnew/Layer.In4.Cu]
Name=In4.Cu
Type=0
Enabled=0
[pcbnew/Layer.In5.Cu]
Name=In5.Cu
Type=0
Enabled=0
[pcbnew/Layer.In6.Cu]
Name=In6.Cu
Type=0
Enabled=0
[pcbnew/Layer.In7.Cu]
Name=In7.Cu
Type=0
Enabled=0
[pcbnew/Layer.In8.Cu]
Name=In8.Cu
Type=0
Enabled=0
[pcbnew/Layer.In9.Cu]
Name=In9.Cu
Type=0
Enabled=0
[pcbnew/Layer.In10.Cu]
Name=In10.Cu
Type=0
Enabled=0
[pcbnew/Layer.In11.Cu]
Name=In11.Cu
Type=0
Enabled=0
[pcbnew/Layer.In12.Cu]
Name=In12.Cu
Type=0
Enabled=0
[pcbnew/Layer.In13.Cu]
Name=In13.Cu
Type=0
Enabled=0
[pcbnew/Layer.In14.Cu]
Name=In14.Cu
Type=0
Enabled=0
[pcbnew/Layer.In15.Cu]
Name=In15.Cu
Type=0
Enabled=0
[pcbnew/Layer.In16.Cu]
Name=In16.Cu
Type=0
Enabled=0
[pcbnew/Layer.In17.Cu]
Name=In17.Cu
Type=0
Enabled=0
[pcbnew/Layer.In18.Cu]
Name=In18.Cu
Type=0
Enabled=0
[pcbnew/Layer.In19.Cu]
Name=In19.Cu
Type=0
Enabled=0
[pcbnew/Layer.In20.Cu]
Name=In20.Cu
Type=0
Enabled=0
[pcbnew/Layer.In21.Cu]
Name=In21.Cu
Type=0
Enabled=0
[pcbnew/Layer.In22.Cu]
Name=In22.Cu
Type=0
Enabled=0
[pcbnew/Layer.In23.Cu]
Name=In23.Cu
Type=0
Enabled=0
[pcbnew/Layer.In24.Cu]
Name=In24.Cu
Type=0
Enabled=0
[pcbnew/Layer.In25.Cu]
Name=In25.Cu
Type=0
Enabled=0
[pcbnew/Layer.In26.Cu]
Name=In26.Cu
Type=0
Enabled=0
[pcbnew/Layer.In27.Cu]
Name=In27.Cu
Type=0
Enabled=0
[pcbnew/Layer.In28.Cu]
Name=In28.Cu
Type=0
Enabled=0
[pcbnew/Layer.In29.Cu]
Name=In29.Cu
Type=0
Enabled=0
[pcbnew/Layer.In30.Cu]
Name=In30.Cu
Type=0
Enabled=0
[pcbnew/Layer.B.Cu]
Name=B.Cu
Type=0
Enabled=1
[pcbnew/Layer.B.Adhes]
Enabled=1
[pcbnew/Layer.F.Adhes]
Enabled=1
[pcbnew/Layer.B.Paste]
Enabled=1
[pcbnew/Layer.F.Paste]
Enabled=1
[pcbnew/Layer.B.SilkS]
Enabled=1
[pcbnew/Layer.F.SilkS]
Enabled=1
[pcbnew/Layer.B.Mask]
Enabled=1
[pcbnew/Layer.F.Mask]
Enabled=1
[pcbnew/Layer.Dwgs.User]
Enabled=1
[pcbnew/Layer.Cmts.User]
Enabled=1
[pcbnew/Layer.Eco1.User]
Enabled=1
[pcbnew/Layer.Eco2.User]
Enabled=1
[pcbnew/Layer.Edge.Cuts]
Enabled=1
[pcbnew/Layer.Margin]
Enabled=1
[pcbnew/Layer.B.CrtYd]
Enabled=1
[pcbnew/Layer.F.CrtYd]
Enabled=1
[pcbnew/Layer.B.Fab]
Enabled=1
[pcbnew/Layer.F.Fab]
Enabled=1
[pcbnew/Layer.Rescue]
Enabled=0
[pcbnew/Netclasses]
[pcbnew/Netclasses/Default]
Name=Default
Clearance=0.2
TrackWidth=0.25
ViaDiameter=0.8
ViaDrill=0.4
uViaDiameter=0.3
uViaDrill=0.1
dPairWidth=0.2
dPairGap=0.25
dPairViaGap=0.25

View File

@@ -1,698 +0,0 @@
EESchema Schematic File Version 4
EELAYER 30 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 1
Title ""
Date ""
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
$Comp
L MCU_Module:WeMos_D1_mini U1
U 1 1 61D21889
P 6500 3150
F 0 "U1" H 6500 2261 50 0000 C CNN
F 1 "WeMos_D1_mini" H 6500 2170 50 0000 C CNN
F 2 "Module:WEMOS_D1_mini_light" H 6500 2000 50 0001 C CNN
F 3 "https://wiki.wemos.cc/products:d1:d1_mini#documentation" H 4650 2000 50 0001 C CNN
1 6500 3150
1 0 0 -1
$EndComp
$Comp
L Transistor_FET:IRLZ44N Q1
U 1 1 61D22C04
P 9400 3750
F 0 "Q1" H 9604 3796 50 0000 L CNN
F 1 "IRLZ44N" H 9604 3705 50 0000 L CNN
F 2 "Package_TO_SOT_THT:TO-220-3_Vertical" H 9650 3675 50 0001 L CIN
F 3 "http://www.irf.com/product-info/datasheets/data/irlz44n.pdf" H 9400 3750 50 0001 L CNN
1 9400 3750
1 0 0 -1
$EndComp
$Comp
L Device:R R3
U 1 1 61D23437
P 9050 4000
F 0 "R3" H 9120 4046 50 0000 L CNN
F 1 "4k7" H 9120 3955 50 0000 L CNN
F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder" V 8980 4000 50 0001 C CNN
F 3 "~" H 9050 4000 50 0001 C CNN
1 9050 4000
1 0 0 -1
$EndComp
$Comp
L Device:R R2
U 1 1 61D23883
P 8750 3750
F 0 "R2" V 8543 3750 50 0000 C CNN
F 1 "100" V 8634 3750 50 0000 C CNN
F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder" V 8680 3750 50 0001 C CNN
F 3 "~" H 8750 3750 50 0001 C CNN
1 8750 3750
0 1 1 0
$EndComp
$Comp
L power:GND #PWR0101
U 1 1 61D23AAC
P 9050 4200
F 0 "#PWR0101" H 9050 3950 50 0001 C CNN
F 1 "GND" H 9055 4027 50 0000 C CNN
F 2 "" H 9050 4200 50 0001 C CNN
F 3 "" H 9050 4200 50 0001 C CNN
1 9050 4200
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0102
U 1 1 61D240D1
P 9500 4200
F 0 "#PWR0102" H 9500 3950 50 0001 C CNN
F 1 "GND" H 9505 4027 50 0000 C CNN
F 2 "" H 9500 4200 50 0001 C CNN
F 3 "" H 9500 4200 50 0001 C CNN
1 9500 4200
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0103
U 1 1 61D2429A
P 6500 4200
F 0 "#PWR0103" H 6500 3950 50 0001 C CNN
F 1 "GND" H 6505 4027 50 0000 C CNN
F 2 "" H 6500 4200 50 0001 C CNN
F 3 "" H 6500 4200 50 0001 C CNN
1 6500 4200
1 0 0 -1
$EndComp
Wire Wire Line
6500 4200 6500 3950
Wire Wire Line
8450 3750 8600 3750
Wire Wire Line
8900 3750 9050 3750
Wire Wire Line
9050 3850 9050 3750
Connection ~ 9050 3750
Wire Wire Line
9050 3750 9200 3750
Wire Wire Line
9050 4200 9050 4150
Wire Wire Line
9500 4200 9500 3950
$Comp
L Connector_Generic:Conn_01x02 J4
U 1 1 61D24E27
P 9800 3350
F 0 "J4" H 9880 3342 50 0000 L CNN
F 1 "PUMP" H 9880 3251 50 0000 L CNN
F 2 "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" H 9800 3350 50 0001 C CNN
F 3 "~" H 9800 3350 50 0001 C CNN
1 9800 3350
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x02 J3
U 1 1 61D2549D
P 9800 2750
F 0 "J3" H 9880 2742 50 0000 L CNN
F 1 "POWER" H 9880 2651 50 0000 L CNN
F 2 "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" H 9800 2750 50 0001 C CNN
F 3 "~" H 9800 2750 50 0001 C CNN
1 9800 2750
1 0 0 -1
$EndComp
Wire Wire Line
9500 3550 9500 3500
Wire Wire Line
9500 3450 9600 3450
Wire Wire Line
9600 3350 9500 3350
Wire Wire Line
9500 3350 9500 3200
Wire Wire Line
9500 2750 9600 2750
$Comp
L power:GND #PWR0104
U 1 1 61D25EA9
P 9600 2900
F 0 "#PWR0104" H 9600 2650 50 0001 C CNN
F 1 "GND" H 9605 2727 50 0000 C CNN
F 2 "" H 9600 2900 50 0001 C CNN
F 3 "" H 9600 2900 50 0001 C CNN
1 9600 2900
1 0 0 -1
$EndComp
Wire Wire Line
9600 2850 9600 2900
Connection ~ 9500 2750
$Comp
L power:GND #PWR0105
U 1 1 61D27601
P 10100 2350
F 0 "#PWR0105" H 10100 2100 50 0001 C CNN
F 1 "GND" H 10105 2177 50 0000 C CNN
F 2 "" H 10100 2350 50 0001 C CNN
F 3 "" H 10100 2350 50 0001 C CNN
1 10100 2350
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0106
U 1 1 61D282EA
P 6600 2350
F 0 "#PWR0106" H 6600 2200 50 0001 C CNN
F 1 "+3.3V" H 6615 2523 50 0000 C CNN
F 2 "" H 6600 2350 50 0001 C CNN
F 3 "" H 6600 2350 50 0001 C CNN
1 6600 2350
1 0 0 -1
$EndComp
$Comp
L Regulator_Switching:R-78C5.0-1.0 U2
U 1 1 61D28955
P 10100 2050
F 0 "U2" H 10100 2292 50 0000 C CNN
F 1 "R-78C5.0-1.0" H 10100 2201 50 0000 C CNN
F 2 "Converter_DCDC:Converter_DCDC_RECOM_R-78E-0.5_THT" H 10150 1800 50 0001 L CIN
F 3 "https://www.recom-power.com/pdf/Innoline/R-78Cxx-1.0.pdf" H 10100 2050 50 0001 C CNN
1 10100 2050
1 0 0 -1
$EndComp
$Comp
L power:+5V #PWR0107
U 1 1 61D2BC64
P 6400 2350
F 0 "#PWR0107" H 6400 2200 50 0001 C CNN
F 1 "+5V" H 6415 2523 50 0000 C CNN
F 2 "" H 6400 2350 50 0001 C CNN
F 3 "" H 6400 2350 50 0001 C CNN
1 6400 2350
1 0 0 -1
$EndComp
$Comp
L power:+5V #PWR0108
U 1 1 61D2C166
P 10550 1900
F 0 "#PWR0108" H 10550 1750 50 0001 C CNN
F 1 "+5V" H 10565 2073 50 0000 C CNN
F 2 "" H 10550 1900 50 0001 C CNN
F 3 "" H 10550 1900 50 0001 C CNN
1 10550 1900
1 0 0 -1
$EndComp
Wire Wire Line
10400 2050 10550 2050
Wire Wire Line
10550 2050 10550 1900
$Comp
L Diode:BAT42 D2
U 1 1 61D2CD57
P 8250 4400
F 0 "D2" V 8296 4320 50 0000 R CNN
F 1 "BAT42" V 8205 4320 50 0000 R CNN
F 2 "Diode_SMD:D_SOD-123" H 8250 4225 50 0001 C CNN
F 3 "http://www.vishay.com/docs/85660/bat42.pdf" H 8250 4400 50 0001 C CNN
F 4 "BAT 42" H 8250 4400 50 0001 C CNN "Reichelt Order No."
1 8250 4400
0 -1 -1 0
$EndComp
$Comp
L Connector_Generic:Conn_01x02 J2
U 1 1 61D2DCEE
P 8550 4700
F 0 "J2" H 8630 4692 50 0000 L CNN
F 1 "SIGNAL" H 8630 4601 50 0000 L CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Horizontal" H 8550 4700 50 0001 C CNN
F 3 "~" H 8550 4700 50 0001 C CNN
1 8550 4700
1 0 0 -1
$EndComp
Wire Wire Line
8350 4700 8250 4700
Wire Wire Line
8250 4700 8250 4550
Wire Wire Line
8250 4250 8250 3350
$Comp
L Device:C C1
U 1 1 61D2F740
P 7400 3700
F 0 "C1" H 7515 3746 50 0000 L CNN
F 1 "10n" H 7515 3655 50 0000 L CNN
F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder" H 7438 3550 50 0001 C CNN
F 3 "~" H 7400 3700 50 0001 C CNN
1 7400 3700
1 0 0 -1
$EndComp
$Comp
L Device:C C2
U 1 1 61D32638
P 8000 3700
F 0 "C2" H 8115 3746 50 0000 L CNN
F 1 "10n" H 8115 3655 50 0000 L CNN
F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder" H 8038 3550 50 0001 C CNN
F 3 "~" H 8000 3700 50 0001 C CNN
1 8000 3700
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0109
U 1 1 61D32EB9
P 8000 3850
F 0 "#PWR0109" H 8000 3600 50 0001 C CNN
F 1 "GND" H 8005 3677 50 0000 C CNN
F 2 "" H 8000 3850 50 0001 C CNN
F 3 "" H 8000 3850 50 0001 C CNN
1 8000 3850
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0110
U 1 1 61D331A8
P 7400 3850
F 0 "#PWR0110" H 7400 3600 50 0001 C CNN
F 1 "GND" H 7405 3677 50 0000 C CNN
F 2 "" H 7400 3850 50 0001 C CNN
F 3 "" H 7400 3850 50 0001 C CNN
1 7400 3850
1 0 0 -1
$EndComp
$Comp
L Diode:BAT42 D1
U 1 1 61D35ED1
P 7750 4400
F 0 "D1" V 7796 4320 50 0000 R CNN
F 1 "BAT42" V 7705 4320 50 0000 R CNN
F 2 "Diode_SMD:D_SOD-123" H 7750 4225 50 0001 C CNN
F 3 "http://www.vishay.com/docs/85660/bat42.pdf" H 7750 4400 50 0001 C CNN
F 4 "BAT 42" H 7750 4400 50 0001 C CNN "Reichelt Order No."
1 7750 4400
0 -1 -1 0
$EndComp
$Comp
L Diode:1N4001 D3
U 1 1 61D36E68
P 9100 2750
F 0 "D3" H 9100 2967 50 0000 C CNN
F 1 "1N4001" H 9100 2876 50 0000 C CNN
F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9100 2575 50 0001 C CNN
F 3 "http://www.vishay.com/docs/88503/1n4001.pdf" H 9100 2750 50 0001 C CNN
1 9100 2750
1 0 0 -1
$EndComp
Wire Wire Line
9250 2750 9500 2750
Wire Wire Line
8950 2050 8950 2750
Wire Wire Line
8950 2050 9450 2050
$Comp
L Device:CP C3
U 1 1 61D3892A
P 9450 2200
F 0 "C3" H 9568 2246 50 0000 L CNN
F 1 "470µF" H 9568 2155 50 0000 L CNN
F 2 "Capacitor_SMD:CP_Elec_8x10" H 9488 2050 50 0001 C CNN
F 3 "~" H 9450 2200 50 0001 C CNN
F 4 "ECC MZS350ARA471" H 9450 2200 50 0001 C CNN "Reichelt Order No."
1 9450 2200
1 0 0 -1
$EndComp
Connection ~ 9450 2050
Wire Wire Line
9450 2050 9800 2050
$Comp
L power:GND #PWR0111
U 1 1 61D3952C
P 9450 2350
F 0 "#PWR0111" H 9450 2100 50 0001 C CNN
F 1 "GND" H 9455 2177 50 0000 C CNN
F 2 "" H 9450 2350 50 0001 C CNN
F 3 "" H 9450 2350 50 0001 C CNN
1 9450 2350
1 0 0 -1
$EndComp
$Comp
L Device:CP C4
U 1 1 61D39810
P 10550 2200
F 0 "C4" H 10668 2246 50 0000 L CNN
F 1 "100µ" H 10668 2155 50 0000 L CNN
F 2 "Capacitor_SMD:CP_Elec_6.3x7.7" H 10588 2050 50 0001 C CNN
F 3 "~" H 10550 2200 50 0001 C CNN
F 4 "ECC HXE250ARA101" H 10550 2200 50 0001 C CNN "Reichelt Order No."
1 10550 2200
1 0 0 -1
$EndComp
Connection ~ 10550 2050
$Comp
L power:GND #PWR0112
U 1 1 61D39D32
P 10550 2350
F 0 "#PWR0112" H 10550 2100 50 0001 C CNN
F 1 "GND" H 10555 2177 50 0000 C CNN
F 2 "" H 10550 2350 50 0001 C CNN
F 3 "" H 10550 2350 50 0001 C CNN
1 10550 2350
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0113
U 1 1 61D3BF4D
P 7850 5450
F 0 "#PWR0113" H 7850 5200 50 0001 C CNN
F 1 "GND" H 7855 5277 50 0000 C CNN
F 2 "" H 7850 5450 50 0001 C CNN
F 3 "" H 7850 5450 50 0001 C CNN
1 7850 5450
1 0 0 -1
$EndComp
$Comp
L power:+5V #PWR0114
U 1 1 61D3C31B
P 7850 5050
F 0 "#PWR0114" H 7850 4900 50 0001 C CNN
F 1 "+5V" H 7865 5223 50 0000 C CNN
F 2 "" H 7850 5050 50 0001 C CNN
F 3 "" H 7850 5050 50 0001 C CNN
1 7850 5050
1 0 0 -1
$EndComp
Wire Wire Line
7900 5100 7850 5100
Wire Wire Line
7850 5100 7850 5050
$Comp
L Device:R R1
U 1 1 61D3DA39
P 7450 5300
F 0 "R1" V 7243 5300 50 0000 C CNN
F 1 "100" V 7334 5300 50 0000 C CNN
F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder" V 7380 5300 50 0001 C CNN
F 3 "~" H 7450 5300 50 0001 C CNN
1 7450 5300
0 1 1 0
$EndComp
$Comp
L Diode:1N4001 D4
U 1 1 61D3DFDC
P 9300 3350
F 0 "D4" V 9254 3430 50 0000 L CNN
F 1 "1N4001" V 9345 3430 50 0000 L CNN
F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9300 3175 50 0001 C CNN
F 3 "http://www.vishay.com/docs/88503/1n4001.pdf" H 9300 3350 50 0001 C CNN
1 9300 3350
0 1 1 0
$EndComp
Wire Wire Line
9300 3500 9500 3500
Connection ~ 9500 3500
Wire Wire Line
9500 3500 9500 3450
Wire Wire Line
9300 3200 9500 3200
Connection ~ 9500 3200
Wire Wire Line
9500 3200 9500 2750
$Comp
L Connector_Generic:Conn_01x04 J1
U 1 1 61D4071E
P 8100 5200
F 0 "J1" H 8180 5192 50 0000 L CNN
F 1 "COCKPIT" H 8180 5101 50 0000 L CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal" H 8100 5200 50 0001 C CNN
F 3 "~" H 8100 5200 50 0001 C CNN
1 8100 5200
1 0 0 -1
$EndComp
Wire Wire Line
7900 5400 7850 5400
Wire Wire Line
7850 5400 7850 5450
Wire Wire Line
7150 5300 7300 5300
Wire Wire Line
7750 4550 7750 5200
Wire Wire Line
7900 5200 7750 5200
Wire Wire Line
7600 5300 7900 5300
$Comp
L power:GND #PWR0115
U 1 1 61D47EEA
P 8250 4850
F 0 "#PWR0115" H 8250 4600 50 0001 C CNN
F 1 "GND" H 8255 4677 50 0000 C CNN
F 2 "" H 8250 4850 50 0001 C CNN
F 3 "" H 8250 4850 50 0001 C CNN
1 8250 4850
1 0 0 -1
$EndComp
Wire Wire Line
8250 4850 8250 4800
Wire Wire Line
8250 4800 8350 4800
$Comp
L Connector_Generic:Conn_01x04 J5
U 1 1 61E12B85
P 8450 2500
F 0 "J5" H 8530 2492 50 0000 L CNN
F 1 "I2C" H 8530 2401 50 0000 L CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal" H 8450 2500 50 0001 C CNN
F 3 "~" H 8450 2500 50 0001 C CNN
1 8450 2500
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0116
U 1 1 61E137AF
P 8050 1550
F 0 "#PWR0116" H 8050 1400 50 0001 C CNN
F 1 "+3.3V" H 8065 1723 50 0000 C CNN
F 2 "" H 8050 1550 50 0001 C CNN
F 3 "" H 8050 1550 50 0001 C CNN
1 8050 1550
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0117
U 1 1 61E147DB
P 8200 2750
F 0 "#PWR0117" H 8200 2500 50 0001 C CNN
F 1 "GND" H 8205 2577 50 0000 C CNN
F 2 "" H 8200 2750 50 0001 C CNN
F 3 "" H 8200 2750 50 0001 C CNN
1 8200 2750
1 0 0 -1
$EndComp
Wire Wire Line
8250 2700 8200 2700
Wire Wire Line
8200 2700 8200 2750
Wire Wire Line
8050 2950 8050 2400
Wire Wire Line
8050 2400 8250 2400
Wire Wire Line
7950 2850 7950 2500
Wire Wire Line
7950 2500 8250 2500
$Comp
L Device:R R4
U 1 1 61E189A2
P 7950 1850
F 0 "R4" H 7880 1804 50 0000 R CNN
F 1 "4k7" H 7880 1895 50 0000 R CNN
F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder" V 7880 1850 50 0001 C CNN
F 3 "~" H 7950 1850 50 0001 C CNN
1 7950 1850
-1 0 0 1
$EndComp
$Comp
L Device:R R5
U 1 1 61E1955B
P 8050 2150
F 0 "R5" H 7980 2104 50 0000 R CNN
F 1 "4k7" H 7980 2195 50 0000 R CNN
F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder" V 7980 2150 50 0001 C CNN
F 3 "~" H 8050 2150 50 0001 C CNN
1 8050 2150
-1 0 0 1
$EndComp
Wire Wire Line
8250 2600 7850 2600
Wire Wire Line
7850 2600 7850 1600
Wire Wire Line
7850 1600 7950 1600
Wire Wire Line
8050 1600 8050 1550
Connection ~ 7950 1600
Wire Wire Line
7950 1600 8050 1600
Wire Wire Line
8050 2000 8050 1600
Connection ~ 8050 1600
Wire Wire Line
7950 1600 7950 1700
Wire Wire Line
8050 2300 8050 2400
Connection ~ 8050 2400
Wire Wire Line
7950 2000 7950 2500
Connection ~ 7950 2500
Wire Wire Line
6900 3550 7150 3550
Wire Wire Line
7150 3550 7150 5300
Wire Wire Line
6900 3450 7400 3450
Connection ~ 7400 3450
Wire Wire Line
7400 3450 7400 3550
Wire Wire Line
7400 3450 7750 3450
Wire Wire Line
7750 3450 7750 4250
Wire Wire Line
6900 3350 8000 3350
Wire Wire Line
8000 3350 8000 3550
Wire Wire Line
8000 3350 8250 3350
Connection ~ 8000 3350
Wire Wire Line
8450 3250 8450 3750
Wire Wire Line
6900 3250 8450 3250
$Comp
L Memory_EEPROM:24LC64 U3
U 1 1 61DDD4E7
P 6750 1550
F 0 "U3" H 6750 2031 50 0000 C CNN
F 1 "24LC64" H 6750 1940 50 0000 C CNN
F 2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" H 6750 1550 50 0001 C CNN
F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/21189f.pdf" H 6750 1550 50 0001 C CNN
1 6750 1550
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0118
U 1 1 61DDE198
P 6750 1250
F 0 "#PWR0118" H 6750 1100 50 0001 C CNN
F 1 "+3.3V" H 6765 1423 50 0000 C CNN
F 2 "" H 6750 1250 50 0001 C CNN
F 3 "" H 6750 1250 50 0001 C CNN
1 6750 1250
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0119
U 1 1 61DDE4C0
P 6750 1850
F 0 "#PWR0119" H 6750 1600 50 0001 C CNN
F 1 "GND" H 6755 1677 50 0000 C CNN
F 2 "" H 6750 1850 50 0001 C CNN
F 3 "" H 6750 1850 50 0001 C CNN
1 6750 1850
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0120
U 1 1 61DDE71F
P 6300 1850
F 0 "#PWR0120" H 6300 1600 50 0001 C CNN
F 1 "GND" H 6305 1677 50 0000 C CNN
F 2 "" H 6300 1850 50 0001 C CNN
F 3 "" H 6300 1850 50 0001 C CNN
1 6300 1850
1 0 0 -1
$EndComp
Wire Wire Line
6350 1650 6300 1650
Wire Wire Line
6300 1650 6300 1850
Wire Wire Line
6350 1450 6300 1450
Wire Wire Line
6300 1450 6300 1550
Connection ~ 6300 1650
Wire Wire Line
6350 1550 6300 1550
Connection ~ 6300 1550
Wire Wire Line
6300 1550 6300 1650
Wire Wire Line
6900 2850 7400 2850
Wire Wire Line
6900 2950 7500 2950
Wire Wire Line
7150 1550 7400 1550
Wire Wire Line
7400 1550 7400 2850
Connection ~ 7400 2850
Wire Wire Line
7400 2850 7950 2850
Wire Wire Line
7500 1450 7500 2950
Wire Wire Line
7150 1450 7500 1450
Connection ~ 7500 2950
Wire Wire Line
7500 2950 8050 2950
$Comp
L power:GND #PWR0121
U 1 1 61DFBD18
P 7250 1850
F 0 "#PWR0121" H 7250 1600 50 0001 C CNN
F 1 "GND" H 7255 1677 50 0000 C CNN
F 2 "" H 7250 1850 50 0001 C CNN
F 3 "" H 7250 1850 50 0001 C CNN
1 7250 1850
1 0 0 -1
$EndComp
Wire Wire Line
7150 1650 7250 1650
Wire Wire Line
7250 1650 7250 1850
$Comp
L power:GND #PWR0122
U 1 1 61DEAC05
P 6000 1700
F 0 "#PWR0122" H 6000 1450 50 0001 C CNN
F 1 "GND" H 6005 1527 50 0000 C CNN
F 2 "" H 6000 1700 50 0001 C CNN
F 3 "" H 6000 1700 50 0001 C CNN
1 6000 1700
1 0 0 -1
$EndComp
$Comp
L Device:C C5
U 1 1 61DEA081
P 6000 1550
F 0 "C5" H 6115 1596 50 0000 L CNN
F 1 "10n" H 6115 1505 50 0000 L CNN
F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder" H 6038 1400 50 0001 C CNN
F 3 "~" H 6000 1550 50 0001 C CNN
1 6000 1550
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0123
U 1 1 61DEAFE2
P 6000 1400
F 0 "#PWR0123" H 6000 1250 50 0001 C CNN
F 1 "+3.3V" H 6015 1573 50 0000 C CNN
F 2 "" H 6000 1400 50 0001 C CNN
F 3 "" H 6000 1400 50 0001 C CNN
1 6000 1400
1 0 0 -1
$EndComp
$EndSCHEMATC

4
Hardware/sym-lib-table Normal file
View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "MC33660")(type "Legacy")(uri "MC33660.lib")(options "")(descr ""))
)

View File

@@ -1,6 +1,6 @@
{
"codegenerator_checksum": "23dff82a4745f67041012080b05ec367c2dd44c6bb02974143b227ba49682b6f",
"timestamp": "2024-01-10 19:06:30",
"codegenerator_checksum": "15e9152fb712bc6ed7c3353a05b1b54dc697f3e489a6e1ff42b7e57f0fa094d4",
"timestamp": "2025-05-04 12:01:55",
"dtc_table_data": [
{
"num": 0,
@@ -89,6 +89,31 @@
},
{
"num": 17,
"title": "OBD2-KLine Timeout",
"description": "Die Anfrage über OBD2-KLine konnte nicht gesendet werden. Prüfen Sie den K-Line-Treiber (z.B. L9637D) und die Verkabelung."
},
{
"num": 18,
"title": "OBD2-CAN Timeout",
"description": "Die Anfrage an das Steuergerät über OBD2-CAN konnte nicht gesendet werden. Prüfen Sie die Verbindung zum CAN-Modul und die OBD2-Konfiguration."
},
{
"num": 19,
"title": "Keine OBD2-CAN Antwort",
"description": "Es wurde innerhalb der erwarteten Zeit keine Antwort vom Steuergerät über OBD2-CAN empfangen. Prüfen Sie, ob das Fahrzeug OBD2 unterstützt und die Verbindung korrekt ist."
},
{
"num": 20,
"title": "Keine OBD2-KLine Antwort",
"description": "Es wurde innerhalb der erwarteten Zeit keine Antwort über OBD2-KLine empfangen. Prüfen Sie die Verbindung zum Steuergerät und die Protokollkompatibilität."
},
{
"num": 21,
"title": "OBD2-KLine Antwort ungültig",
"description": "Das empfangene Frame war unvollständig oder entsprach nicht dem erwarteten OBD2-Format. Möglicherweise inkompatibles Steuergerät."
},
{
"num": 22,
"title": "Last Error",
"description": "Last Error"
}

View File

@@ -32,7 +32,6 @@ struct can_frame
// Function prototypes
void Init_CAN();
void CAN_Process();
uint32_t Process_CAN_WheelSpeed();
#endif

View File

@@ -85,7 +85,9 @@ typedef enum SpeedSource_e
#endif
SOURCE_IMPULSE,
SOURCE_GPS,
SOURCE_CAN
SOURCE_CAN,
SOURCE_OBD2_KLINE,
SOURCE_OBD2_CAN
} SpeedSource_t;
// String representation of SpeedSource enum

View File

@@ -7,10 +7,10 @@
* It includes enums for DTC active status, severity levels, and specific DTC codes.
* The file also defines an array of DTC definitions and a timestamp indicating the generation time.
*
* @note This file is auto-generated by a script on 2024-01-10 18:37:05.
* @note This file is auto-generated by a script on 2025-05-04 12:01:55.
*
* @author Marcel Peterkau
* @date 10.01.2024
* @date 04.05.2025
*/
#ifndef DTC_DEFS_H
@@ -57,7 +57,12 @@ typedef struct {
#define DTC_FAKE_DTC_INFO 14
#define DTC_FAKE_DTC_WARN 15
#define DTC_FAKE_DTC_CRIT 16
#define DTC_LAST_DTC 17
#define DTC_OBD2_KLINE_TIMEOUT 17
#define DTC_OBD2_CAN_TIMEOUT 18
#define DTC_OBD2_CAN_NO_RESPONSE 19
#define DTC_OBD2_KLINE_NO_RESPONSE 20
#define DTC_OBD2_KLINE_BAD_FRAME 21
#define DTC_LAST_DTC 22
const DTC_t dtc_definitions[] = {
{ DTC_NO_DTC , DTC_NONE }, // No Error
@@ -77,9 +82,14 @@ const DTC_t dtc_definitions[] = {
{ DTC_FAKE_DTC_INFO , DTC_INFO }, // Ein Dummy-DTC der Schwere "Info" für Debugging-Zwecke
{ DTC_FAKE_DTC_WARN , DTC_WARN }, // Ein Dummy-DTC der Schwere "Warnung" für Debugging-Zwecke
{ DTC_FAKE_DTC_CRIT , DTC_CRITICAL }, // Ein Dummy-DTC der Schwere "Kritisch" für Debugging-Zwecke
{ DTC_OBD2_KLINE_TIMEOUT , DTC_CRITICAL }, // Die Anfrage über OBD2-KLine konnte nicht gesendet werden. Prüfen Sie den K-Line-Treiber (z.B. L9637D) und die Verkabelung.
{ DTC_OBD2_CAN_TIMEOUT , DTC_CRITICAL }, // Die Anfrage an das Steuergerät über OBD2-CAN konnte nicht gesendet werden. Prüfen Sie die Verbindung zum CAN-Modul und die OBD2-Konfiguration.
{ DTC_OBD2_CAN_NO_RESPONSE , DTC_WARN }, // Es wurde innerhalb der erwarteten Zeit keine Antwort vom Steuergerät über OBD2-CAN empfangen. Prüfen Sie, ob das Fahrzeug OBD2 unterstützt und die Verbindung korrekt ist.
{ DTC_OBD2_KLINE_NO_RESPONSE , DTC_WARN }, // Es wurde innerhalb der erwarteten Zeit keine Antwort über OBD2-KLine empfangen. Prüfen Sie die Verbindung zum Steuergerät und die Protokollkompatibilität.
{ DTC_OBD2_KLINE_BAD_FRAME , DTC_WARN }, // Das empfangene Frame war unvollständig oder entsprach nicht dem erwarteten OBD2-Format. Möglicherweise inkompatibles Steuergerät.
{ DTC_LAST_DTC , DTC_NONE } // Last Error
};
#endif // DTC_DEFS_H
// CODEGENERATOR_CHECKSUM: 23dff82a4745f67041012080b05ec367c2dd44c6bb02974143b227ba49682b6f
// CODEGENERATOR_CHECKSUM: 15e9152fb712bc6ed7c3353a05b1b54dc697f3e489a6e1ff42b7e57f0fa094d4

View File

@@ -32,6 +32,7 @@ typedef struct Globals_s
bool hasDTC; /**< Flag indicating the presence of Diagnostic Trouble Codes (DTC) */
bool measurementActive; /**< Flag indicating active measurement */
uint32_t measuredPulses; /**< Number of measured pulses */
bool toggle_wifi;
} Globals_t;
extern Globals_t globals; /**< Global variable struct */

View File

@@ -0,0 +1,10 @@
#ifndef _OBD2_CAN_H_
#define _OBD2_CAN_H_
#include <Arduino.h>
// === Funktionen ===
void Init_OBD2_CAN();
uint32_t Process_OBD2_CAN_Speed();
#endif

View File

@@ -0,0 +1,10 @@
#ifndef _OBD2_KLINE_H_
#define _OBD2_KLINE_H_
#include <Arduino.h>
// === Funktionen ===
void Init_OBD2_KLine(Stream &serial); // Übergib z.B. SoftwareSerial oder Serial1
uint32_t Process_OBD2_KLine_Speed(); // liefert mm seit letztem Aufruf
#endif

View File

@@ -11,21 +11,14 @@
[platformio]
extra_configs =
wifi_credentials.ini
default_envs = pcb_rev_1-3, pcb_rev_1-2
default_envs = pcb_rev_1-3_serial, pcb_rev_1-3_ota, pcb_rev_1-2_serial, pcb_rev_1-2_ota
[env]
platform = espressif8266
board = d1_mini
framework = arduino
upload_speed = 921600
upload_protocol = espota
upload_port = 10.0.1.14
upload_flags =
--port=8266
--auth=${wifi_cred.admin_password}
build_flags =
!python codegen/git_rev_macro.py
-DWIFI_SSID_CLIENT=${wifi_cred.wifi_ssid_client}
@@ -58,21 +51,48 @@ lib_deps =
coryjfowler/mcp_can @ ^1.5.0
mikalhart/TinyGPSPlus @ ^1.0.3
[env:pcb_rev_1-3]
;build_type = debug
[env:pcb_rev_1-3_serial]
extends = env
custom_pcb_revision = 3
upload_protocol = esptool
build_flags =
${env.build_flags}
-DPCB_REV=${this.custom_pcb_revision}
board_build.ldscript = eagle.flash.4m1m.ld
[env:pcb_rev_1-2]
;build_type = debug
[env:pcb_rev_1-3_ota]
extends = env
custom_pcb_revision = 3
upload_protocol = espota
upload_port = 10.0.1.14
upload_flags =
--port=8266
--auth=${wifi_cred.admin_password}
build_flags =
${env.build_flags}
-DPCB_REV=${this.custom_pcb_revision}
board_build.ldscript = eagle.flash.4m1m.ld
[env:pcb_rev_1-2_serial]
extends = env
custom_pcb_revision = 2
upload_protocol = esptool
build_flags =
${env.build_flags}
-DPCB_REV=${this.custom_pcb_revision}
board_build.ldscript = eagle.flash.4m1m.ld
[env:pcb_rev_1-2_ota]
extends = env
custom_pcb_revision = 2
upload_protocol = espota
upload_port = 10.0.1.14
upload_flags =
--port=8266
--auth=${wifi_cred.admin_password}
build_flags =
${env.build_flags}
-DPCB_REV=${this.custom_pcb_revision}
board_build.ldscript = eagle.flash.4m1m.ld

View File

@@ -49,21 +49,6 @@ void Init_CAN()
CAN0.setMode(MCP_NORMAL);
}
/**
* @brief Processes CAN messages and sends a CAN debug message periodically.
*
* This function processes CAN messages and sends a CAN debug message periodically based on a time interval.
*/
void CAN_Process()
{
static uint32_t previousMillis = 0;
if (millis() - previousMillis >= 100)
{
sendCANDebugMessage();
previousMillis = millis();
}
}
/**
* @brief Processes CAN messages to determine the wheel speed based on the configured CAN source.
*
@@ -115,6 +100,16 @@ uint32_t Process_CAN_WheelSpeed()
MaintainDTC(DTC_NO_CAN_SIGNAL, (millis() > lastRecTimestamp + 10000 ? true : false));
}
#ifdef CAN_DEBUG_MESSAGE
static uint32_t previousMillis = 0;
if (millis() - previousMillis >= 1000)
{
sendCANDebugMessage();
previousMillis = millis();
}
#endif
return milimeters_to_add;
}

View File

@@ -7,8 +7,10 @@ const char *SpeedSourceString[] = {
#endif
"Impuls",
"GPS",
"CAN-Bus"
};
"CAN-Bus",
"OBD2 (K-Line)",
"OBD2 (CAN)",
};
const size_t SpeedSourceString_Elements = sizeof(SpeedSourceString) / sizeof(SpeedSourceString[0]);
@@ -19,14 +21,15 @@ const char *GPSBaudRateString[] = {
"19200",
"38400",
"57600",
"115200"
};
"115200",
};
const size_t GPSBaudRateString_Elements = sizeof(GPSBaudRateString) / sizeof(GPSBaudRateString[0]);
// String representation of CANSource enum
const char *CANSourceString[] = {
"KTM 890 Adventure R (2021)",
"KTM 1290 Superduke R (2023)"};
"KTM 1290 Superduke R (2023)",
};
const size_t CANSourceString_Elements = sizeof(CANSourceString) / sizeof(CANSourceString[0]);

View File

@@ -145,19 +145,14 @@ void GetConfig_EEPROM()
uint32_t checksum = LubeConfig.checksum;
LubeConfig.checksum = 0;
if (Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig)) != checksum)
{
MaintainDTC(DTC_EEPROM_CFG_BAD, true);
}
MaintainDTC(DTC_EEPROM_CFG_BAD, (Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig)) != checksum));
LubeConfig.checksum = checksum;
uint32_t ConfigSanityCheckResult = ConfigSanityCheck(false);
if (ConfigSanityCheckResult > 0)
{
MaintainDTC(DTC_EEPROM_CFG_SANITY, true, ConfigSanityCheckResult);
}
MaintainDTC(DTC_EEPROM_CFG_SANITY, (ConfigSanityCheckResult > 0), ConfigSanityCheckResult);
}
/**
@@ -210,10 +205,8 @@ void GetPersistence_EEPROM()
uint32_t checksum = PersistenceData.checksum;
PersistenceData.checksum = 0;
if (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) != checksum)
{
MaintainDTC(DTC_EEPROM_PDS_BAD, true);
}
MaintainDTC(DTC_EEPROM_PDS_BAD, (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) != checksum));
PersistenceData.checksum = checksum;
}
}

View File

@@ -15,18 +15,19 @@
DebugStatus_t DebuggerStatus[dbg_cntElements];
String IpAddress2String(const IPAddress &ipAddress);
void processCmdDebug(String command);
void Debug_formatCFG();
void Debug_formatPersistence();
void Debug_printSystemInfo();
void Debug_printWifiInfo();
void Debug_CheckEEPOM();
void Debug_CheckEEPOM(bool autocorrect);
void Debug_dumpConfig();
void Debug_dumpPersistance();
void Debug_ShowDTCs();
void Debug_dumpGlobals();
void Debug_printHelp();
void Debug_Purge();
const char *uint32_to_binary_string(uint32_t num);
/**
* @brief Initializes the debugger by setting the initial status for different debug ports.
@@ -236,7 +237,9 @@ void processCmdDebug(String command)
else if (command == "formatPDS")
Debug_formatPersistence();
else if (command == "checkEE")
Debug_CheckEEPOM();
Debug_CheckEEPOM(false);
else if (command == "checkEEfix")
Debug_CheckEEPOM(true);
else if (command == "dumpEE1k")
dumpEEPROM(0, 1024);
else if (command == "dumpEE")
@@ -271,6 +274,10 @@ void processCmdDebug(String command)
Websocket_PushNotification("Debug Success Notification", success);
else if (command == "notify_info")
Websocket_PushNotification("Debug Info Notification", info);
else if (command == "purge")
Debug_Purge();
else if (command == "toggle_wifi")
globals.toggle_wifi = true;
else
Debug_pushMessage("unknown Command\n");
}
@@ -377,14 +384,14 @@ void Debug_dumpPersistance()
*/
void Debug_printWifiInfo()
{
// Add relevant code here if needed
Debug_pushMessage("IP Adress: %s\n", WiFi.localIP().toString().c_str());
}
/**
* @brief Checks the EEPROM data integrity by calculating and comparing checksums.
* Prints the result to the debug output.
*/
void Debug_CheckEEPOM()
void Debug_CheckEEPOM(bool autocorrect)
{
// Check PersistenceData EEPROM checksum
uint32_t checksum = PersistenceData.checksum;
@@ -414,6 +421,17 @@ void Debug_CheckEEPOM()
Debug_pushMessage("LubeConfig EEPROM Checksum BAD\n");
}
LubeConfig.checksum = checksum;
uint32_t sanitycheck = ConfigSanityCheck(autocorrect);
if (sanitycheck == 0)
{
Debug_pushMessage("LubeConfig Sanity Check OK\n");
}
else
{
Debug_pushMessage("LubeConfig Sanity Check BAD: %s\n", uint32_to_binary_string(sanitycheck));
}
}
/**
@@ -474,3 +492,44 @@ void Debug_printHelp()
Debug_pushMessage(buff);
}
}
/**
* @brief Start purging for 10 pulses.
*/
void Debug_Purge()
{
globals.purgePulses = 10;
globals.resumeStatus = globals.systemStatus;
globals.systemStatus = sysStat_Purge;
Debug_pushMessage("Purging 10 pulses\n");
}
/**
* @brief Convert a uint32_t value to a binary string with nibbles separated by a space.
*
* This function takes a uint32_t value and converts it to a binary string
* representation. The binary string is stored in a static buffer and returned
* as a const char pointer. Each nibble (4 bits) in the binary representation
* is separated by a space. The buffer is overwritten on subsequent calls to
* this function.
*
* @param num The uint32_t value to convert.
* @return A pointer to a const char string containing the binary representation
* of the input number with nibbles separated by a space.
*/
const char *uint32_to_binary_string(uint32_t num)
{
static char binary_str[65]; // 32 bits + 31 spaces + null terminator
int i, j;
for (i = 31, j = 0; i >= 0; i--, j++)
{
binary_str[j] = ((num >> i) & 1) ? '1' : '0';
if (i % 4 == 0 && i != 0)
{
binary_str[++j] = ' '; // Insert space after every nibble
}
}
binary_str[j] = '\0'; // Null terminator
return binary_str;
}

View File

@@ -1,5 +1,5 @@
# No. | DTC-Constant | Severity | Title | Description
#-----|------------------------------|---------------|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------
#-----|------------------------------|---------------|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------
1; DTC_TANK_EMPTY; DTC_CRITICAL; Ölvorrat leer; Ölvorrat ist komplett leer. Den Ölvorrat auffüllen und im Menu 'Wartung' zurück setzen
2; DTC_TANK_LOW; DTC_WARN; Ölvorrat niedrig; Ölvorrat ist unter der Warnschwelle. Den Ölvorrat demnächst auffüllen und im Menu 'Wartung' zurück setzen
3; DTC_NO_EEPROM_FOUND; DTC_CRITICAL; kein EEPROM erkannt; Es wurde kein EEPROM gefunden. Dies lässt einen Hardware-Defekt vermuten.
@@ -16,3 +16,8 @@
14; DTC_FAKE_DTC_INFO; DTC_INFO; Dummy-DTC Info; Ein Dummy-DTC der Schwere "Info" für Debugging-Zwecke
15; DTC_FAKE_DTC_WARN; DTC_WARN; Dummy-DTC Warnung; Ein Dummy-DTC der Schwere "Warnung" für Debugging-Zwecke
16; DTC_FAKE_DTC_CRIT; DTC_CRITICAL; Dummy-DTC Kritisch; Ein Dummy-DTC der Schwere "Kritisch" für Debugging-Zwecke
17; DTC_OBD2_KLINE_TIMEOUT; DTC_CRITICAL; OBD2-KLine Timeout; Die Anfrage über OBD2-KLine konnte nicht gesendet werden. Prüfen Sie den K-Line-Treiber (z.B. L9637D) und die Verkabelung.
18; DTC_OBD2_CAN_TIMEOUT; DTC_CRITICAL; OBD2-CAN Timeout; Die Anfrage an das Steuergerät über OBD2-CAN konnte nicht gesendet werden. Prüfen Sie die Verbindung zum CAN-Modul und die OBD2-Konfiguration.
19; DTC_OBD2_CAN_NO_RESPONSE; DTC_WARN; Keine OBD2-CAN Antwort; Es wurde innerhalb der erwarteten Zeit keine Antwort vom Steuergerät über OBD2-CAN empfangen. Prüfen Sie, ob das Fahrzeug OBD2 unterstützt und die Verbindung korrekt ist.
20; DTC_OBD2_KLINE_NO_RESPONSE; DTC_WARN; Keine OBD2-KLine Antwort; Es wurde innerhalb der erwarteten Zeit keine Antwort über OBD2-KLine empfangen. Prüfen Sie die Verbindung zum Steuergerät und die Protokollkompatibilität.
21; DTC_OBD2_KLINE_BAD_FRAME; DTC_WARN; OBD2-KLine Antwort ungültig; Das empfangene Frame war unvollständig oder entsprach nicht dem erwarteten OBD2-Format. Möglicherweise inkompatibles Steuergerät.

View File

@@ -26,4 +26,5 @@ void initGlobals()
globals.systemStatus = sysStat_Startup;
globals.measurementActive = false;
globals.measuredPulses = 0;
globals.toggle_wifi = false;
}

View File

@@ -37,6 +37,8 @@
#include "gps.h"
#include "dtc.h"
#include "led_colors.h"
#include "obd2_kline.h"
#include "obd2_can.h"
#ifdef FEATURE_ENABLE_WIFI_CLIENT
#include <ESP8266WiFiMulti.h>
@@ -154,6 +156,16 @@ void setup()
wheelSpeedcapture = &Process_Impulse_WheelSpeed;
Serial.print("\nPulse-Input Init done");
break;
case SOURCE_OBD2_KLINE:
Init_OBD2_KLine(Serial);
wheelSpeedcapture = &Process_OBD2_KLine_Speed;
Serial.print("\nOBD2-KLine-Init done");
break;
case SOURCE_OBD2_CAN:
Init_OBD2_CAN();
wheelSpeedcapture = &Process_OBD2_CAN_Speed;
Serial.print("\nOBD2-CAN-Init done");
break;
default:
break;
}
@@ -227,6 +239,7 @@ void setup()
void loop()
{
// Run lubrication application with the calculated wheel distance
if (wheelSpeedcapture != nullptr)
RunLubeApp(wheelSpeedcapture());
#ifdef FEATURE_ENABLE_OLED
@@ -234,12 +247,6 @@ void loop()
Display_Process();
#endif
// Process CAN messages if the speed source is not impulse
if (LubeConfig.SpeedSource != SOURCE_IMPULSE)
{
CAN_Process();
}
// Process button input, manage LED behavior, perform EEPROM tasks, handle webserver operations,
// process Diagnostic Trouble Codes (DTC), and manage debugging
Button_Process();
@@ -249,6 +256,12 @@ void loop()
DTC_Process();
Debug_Process();
if (globals.toggle_wifi == true){
globals.toggle_wifi = false;
toggleWiFiAP();
}
// Handle OTA updates and update cyclic EEPROM tasks for Persistence Data Structure (PDS)
ArduinoOTA.handle();
EEPROMCyclicPDSTicker.update();
@@ -266,24 +279,6 @@ void loop()
yield();
}
/**
* @brief Converts an IPAddress object to a String representation.
*
* This function takes an IPAddress object and converts it into a String representing
* the IPv4 address. Each octet of the address is separated by a dot.
*
* @param ipAddress The IPAddress object to be converted.
* @return A String representing the IPv4 address.
*/
String IpAddress2String(const IPAddress &ipAddress)
{
// Concatenate each octet of the IPAddress with dots in between
return String(ipAddress[0]) + String(".") +
String(ipAddress[1]) + String(".") +
String(ipAddress[2]) + String(".") +
String(ipAddress[3]);
}
#ifdef FEATURE_ENABLE_WIFI_CLIENT
/**
* @brief Callback function for maintaining WiFi connection and handling connection failures.

84
Software/src/obd2_can.cpp Normal file
View File

@@ -0,0 +1,84 @@
#include "obd2_can.h"
#include <mcp_can.h>
#include <SPI.h>
#include "common.h"
#include "globals.h"
#include "dtc.h"
#include "debugger.h"
// === Setup: MCP2515 CS-Pin definieren ===
#define OBD2_CAN_CS_PIN 10
#define OBD2_OBD_REQUEST_ID 0x7DF
#define OBD2_OBD_RESPONSE_ID 0x7E8
MCP_CAN OBD_CAN(OBD2_CAN_CS_PIN);
static uint32_t lastQueryTime = 0;
static uint32_t lastRecvTime = 0;
static uint32_t lastSpeedMMperSec = 0;
#define OBD2_QUERY_INTERVAL 500 // alle 500ms
void Init_OBD2_CAN()
{
if (OBD_CAN.begin(MCP_STD, CAN_500KBPS, MCP_16MHZ) != CAN_OK)
{
Serial.println("OBD2 CAN Init FAILED!");
return;
}
OBD_CAN.setMode(MCP_NORMAL);
delay(100);
Serial.println("OBD2 CAN Init OK");
}
uint32_t Process_OBD2_CAN_Speed()
{
if (millis() - lastQueryTime < OBD2_QUERY_INTERVAL)
return 0;
lastQueryTime = millis();
// Anfrage: 01 0D → Geschwindigkeit
byte obdRequest[8] = {0x02, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00};
byte sendStat = OBD_CAN.sendMsgBuf(OBD2_OBD_REQUEST_ID, 0, 8, obdRequest);
if (sendStat != CAN_OK)
{
MaintainDTC(DTC_OBD2_CAN_TIMEOUT, true);
Debug_pushMessage("OBD2_CAN: send failed (%d)\n", sendStat);
return 0;
}
unsigned long rxId;
byte len = 0;
byte rxBuf[8];
uint32_t timeout = millis() + 100;
while (millis() < timeout)
{
if (OBD_CAN.checkReceive() == CAN_MSGAVAIL)
{
OBD_CAN.readMsgBuf(&rxId, &len, rxBuf);
if ((rxId & 0xFFF8) == OBD2_OBD_RESPONSE_ID && rxBuf[1] == 0x0D)
{
MaintainDTC(DTC_OBD2_CAN_NO_RESPONSE, false); // alles ok
uint8_t speed_kmh = rxBuf[3];
uint32_t speed_mm_per_sec = (uint32_t)speed_kmh * 1000000 / 3600;
uint32_t dt = millis() - lastRecvTime;
lastRecvTime = millis();
lastSpeedMMperSec = speed_mm_per_sec;
Debug_pushMessage("OBD2_CAN: %d km/h (%lu mm/s)\n", speed_kmh, speed_mm_per_sec);
return (speed_mm_per_sec * dt) / 1000;
}
}
}
// Keine Antwort erhalten
MaintainDTC(DTC_OBD2_CAN_NO_RESPONSE, true);
Debug_pushMessage("OBD2_CAN: no response within timeout\n");
return 0;
}

View File

@@ -0,0 +1,74 @@
#include "obd2_kline.h"
// === Konstante für Anfrageintervalle ===
#define OBD2_QUERY_INTERVAL 500 // alle 500 ms neue Anfrage
// === Private Variablen ===
static Stream *klineSerial = nullptr;
static uint32_t lastQueryTime = 0;
static uint32_t lastRecvTime = 0;
static uint32_t lastSpeedMMperSec = 0;
// === Slow Init nach ISO9141-2 ===
void OBD2_KLine_SlowInit()
{
pinMode(1, OUTPUT); // TXD-Pin (z.B. D1)
digitalWrite(1, HIGH);
delay(3000);
digitalWrite(1, LOW);
delay(200); // 200ms
digitalWrite(1, HIGH);
delay(400); // 400ms
digitalWrite(1, LOW);
delay(400); // 400ms
digitalWrite(1, HIGH);
delay(200); // 200ms
// zurück auf Serialbetrieb
pinMode(1, INPUT);
delay(300);
}
// === Initialisierung ===
void Init_OBD2_KLine(Stream &serial)
{
klineSerial = &serial;
OBD2_KLine_SlowInit();
delay(100);
// Sende 01 0D (Vehicle Speed)
byte speedRequest[] = {0x68, 0x6A, 0xF1, 0x01, 0x0D}; // OBD2 PID-Request
klineSerial->write(speedRequest, sizeof(speedRequest));
}
// === Geschwindigkeit abfragen ===
uint32_t Process_OBD2_KLine_Speed()
{
if (!klineSerial || (millis() - lastQueryTime < OBD2_QUERY_INTERVAL)) return 0;
byte req[] = {0x68, 0x6A, 0xF1, 0x01, 0x0D};
klineSerial->write(req, sizeof(req));
lastQueryTime = millis();
uint8_t buf[16];
size_t len = klineSerial->readBytes(buf, sizeof(buf));
for (size_t i = 0; i < len - 2; ++i)
{
if (buf[i] == 0x48 && buf[i + 1] == 0x6B && buf[i + 2] == 0x10)
{
if (buf[i + 3] == 0x41 && buf[i + 4] == 0x0D)
{
uint8_t speed_kmh = buf[i + 5];
uint32_t speed_mm_per_sec = (uint32_t)speed_kmh * 1000000 / 3600;
uint32_t dt = millis() - lastRecvTime;
lastRecvTime = millis();
lastSpeedMMperSec = speed_mm_per_sec;
return (speed_mm_per_sec * dt) / 1000;
}
}
}
return 0;
}