{"adoption": {"forks": 276, "observed_at": "2026-08-28T04:03:32.048292+00:00", "stars": 1085}, "canonical_url": "https://ross.abutalabs.com/products/minifoc", "card": {"archived": false, "artifact_type": "library", "description": "你还在为有刷电机的高噪声、低响应速度和低寿命而烦恼吗？这个项目是一个20块钱就能搞定的FOC无刷电机控制方案！This project is a FOC (Field Oriented Control) BLDC Motor control scheme that can be done for 3$!", "domain": ["robotics", "embedded-systems", "hardware"], "enriched": true, "function": ["embedded"], "health_score": 21, "homepage": "https://zhuyanzhen1.github.io/miniFOC/", "language": "C++", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ZhuYanzhen1/miniFOC"], "name": "ZhuYanzhen1/miniFOC", "platform": ["embedded", "c", "cpp"], "pushed_at": "2023-11-17T18:14:00+00:00", "repo": "ZhuYanzhen1/miniFOC", "stars": 1085, "tags": ["foc", "bldc", "motor-control", "gd32", "svpwm", "low-cost", "firmware", "control"], "topics": ["foc", "gd32", "bldc", "controller"], "urls": [], "use_cases": ["control a brushless motor with FOC on a $3 budget", "replace noisy brushed motor drivers with quiet BLDC control", "drive a BLDC motor via UART commands", "implement torque closed-loop control for a gimbal or robot motor", "learn how field oriented control works on embedded hardware", "build low-cost motor controllers for robotics projects"], "what_it_is": "miniFOC is an open-source Field Oriented Control (FOC) firmware and hardware scheme for brushless DC (BLDC) motors, designed to run on very cheap Chinese-made microcontrollers (GD32) for around $3 in parts. It provides a torque closed-loop controller controllable over a 3-wire UART port, with SVPWM modulation and support for torque, speed, and position control.", "when_to_avoid": ["you need sensorless FOC or current-loop control today (V2 is still in development)", "you need a mature, production-grade controller like ODrive with extensive community support", "your project requires position/speed closed-loop out of the box without additional tuning", "AGPL-3.0 licensing is incompatible with your product"], "when_to_choose": ["you need extremely low-cost FOC motor control hardware and firmware", "you want quiet, efficient BLDC control instead of brushed motors or ESCs", "you are working with GD32/STM32-class MCUs and UART-based motor control", "you want an open-source (AGPL-3.0) alternative to SimpleFOC or ODrive for simple torque control"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/minifoc", "repo": "ZhuYanzhen1/miniFOC", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:32.048292+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:49:42.034370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f8b8f125c30427e3671d3fc0be619d6d253a2ca664585f25b9944afb40acb55b", "fetched_at": "2026-08-28T04:03:32.048292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ZhuYanzhen1/miniFOC"}, {"content_hash": "9e28490d3d66a8c78332d337505971284c8a49a4a018a1df6f22433b78dc8092", "fetched_at": "2026-08-29T12:52:22.067331+00:00", "kind": "homepage", "missing": false, "url": "https://zhuyanzhen1.github.io/miniFOC/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1846, "days_push": 1020, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}