{"id":100863,"date":"2026-09-05T13:57:13","date_gmt":"2026-09-05T05:57:13","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/100863.html"},"modified":"2026-09-05T13:57:13","modified_gmt":"2026-09-05T05:57:13","slug":"stm32_mpu6050_%e6%bb%a4%e6%b3%a2%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/100863.html","title":{"rendered":"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b"},"content":{"rendered":"<h2>&#x1f681; STM32 &#043; MPU6050 \u4ece\u96f6\u5230\u56db\u8f74&#xff1a;\u4e00\u5957\u8ba9\u4f60\u771f\u7684&#034;\u770b\u61c2&#034;\u98de\u63a7\u7684\u6559\u7a0b<\/h2>\n<p>\u4e00\u53e5\u8bdd\u8bf4\u6e05\u8fd9\u7bc7\u6559\u7a0b\u5728\u5e72\u561b&#xff1a;\u6211\u4eec\u7528\u4e00\u5757 STM32\u3001\u4e00\u4e2a MPU6050&#xff08;\u5c0f\u9640\u87ba&#043;\u5c0f\u52a0\u901f\u5ea6\u8ba1&#xff09;&#xff0c;\u4e00\u6b65\u6b65\u505a\u51fa\u4e00\u4e2a&#034;\u77e5\u9053\u81ea\u5df1\u5728\u54ea\u3001\u600e\u4e48\u4fdd\u6301\u5e73\u8861\u3001\u600e\u4e48\u98de\u7a33&#034;\u7684\u56db\u8f74\u98de\u63a7\u6838\u5fc3\u3002\u4ece\u8bfb\u53d6\u4f20\u611f\u5668\u539f\u59cb\u6570\u636e&#xff0c;\u5230\u7b97\u51fa\u59ff\u6001\u89d2&#xff0c;\u5230\u7528 PID \u53bb\u63a7\u5236\u7535\u673a&#xff0c;\u518d\u5230\u7528\u5149\u6d41\u4f20\u611f\u5668\u5b9e\u73b0\u5ba4\u5185\u5b9a\u70b9\u2014\u2014\u6bcf\u4e00\u6b65\u90fd\u8bb2\u6e05\u695a&#034;\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u505a&#034;&#xff0c;\u800c\u4e0d\u662f\u53ea\u4e22\u7ed9\u4f60\u4e00\u5806\u4ee3\u7801\u3002<\/p>\n<hr \/>\n<h3>&#x1f9ed; \u76ee\u5f55<\/h3>\n<li>\u5148\u8ba4\u8bc6\u4f20\u611f\u5668&#xff1a;\u4e00\u4e2a&#034;\u778e\u5b50&#034;\u548c\u4e00\u4e2a&#034;\u9189\u6c49&#034;<\/li>\n<li>\u8ba9 STM32 \u548c\u5b83&#034;\u804a\u4e0a\u5929&#034;&#xff1a;I2C \u8bfb\u6570\u636e<\/li>\n<li>\u628a\u4e71\u7801\u53d8\u6210\u4eba\u8bdd&#xff1a;\u5355\u4f4d\u6362\u7b97\u4e0e\u6821\u51c6<\/li>\n<li>\u59ff\u6001\u5230\u5e95\u600e\u4e48\u63cf\u8ff0&#xff1a;\u6b27\u62c9\u89d2\u3001\u77e9\u9635\u3001\u56db\u5143\u6570<\/li>\n<li>\u59ff\u6001\u89e3\u7b97&#xff1a;\u600e\u4e48\u628a\u4e24\u4e2a\u4f20\u611f\u5668&#034;\u5408\u6210&#034;\u4e00\u4e2a\u51c6\u7684<\/li>\n<li>\u8fdb\u9636\u6ee4\u6ce2&#xff1a;\u5361\u5c14\u66fc \u548c DMP&#xff08;\u5077\u61d2\u795e\u5668&#xff09;<\/li>\n<li>PID&#xff1a;\u8ba9\u59ff\u6001&#034;\u542c\u8bdd&#034;\u7684\u63a7\u5236\u9b54\u6cd5<\/li>\n<li>\u7535\u673a\u8f93\u51fa&#xff1a;PID \u7b97\u51fa\u7684\u6570\u600e\u4e48\u53d8\u6210&#034;\u8f6c\u591a\u5feb&#034;<\/li>\n<li>\u5149\u6d41\u4f20\u611f\u5668&#xff1a;\u5ba4\u5185\u6ca1 GPS \u65f6\u9760&#034;\u770b\u56fe&#034;\u5b9a\u4f4d<\/li>\n<li>\u98de\u63a7\u5168\u8c8c&#xff1a;\u628a\u524d\u9762\u4e32\u6210\u4e00\u6761\u5b8c\u6574\u95ed\u73af<\/li>\n<li>\u65b0\u624b\u5b66\u4e60\u8def\u7ebf &amp; \u53c2\u8003\u8d44\u6e90<\/li>\n<hr \/>\n<h3>1. \u5148\u8ba4\u8bc6\u4f20\u611f\u5668&#xff1a;\u4e00\u4e2a&#034;\u778e\u5b50&#034;\u548c\u4e00\u4e2a&#034;\u9189\u6c49&#034;<\/h3>\n<p>\u8fd9\u5c31\u662f\u6211\u4eec\u8fd9\u7bc7\u6559\u7a0b\u7684&#034;\u4e3b\u89d2&#034;\u2014\u2014\u4e00\u5757\u5df4\u638c\u5927\u7684 MPU6050 \u6a21\u5757&#xff0c;\u4ee5\u53ca\u627f\u8f7d\u7b97\u6cd5\u7684 STM32 \u5355\u7247\u673a&#xff1a;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055709-6a9baf3532450.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u25b2 \u56fe 1 \u00b7 MPU6050 \u516d\u8f74&#xff08;3 \u8f74\u52a0\u901f\u5ea6 &#043; 3 \u8f74\u9640\u87ba&#xff09;\u4f20\u611f\u5668\u6a21\u5757&#xff0c;\u901a\u8fc7 I2C \u4e0e\u5355\u7247\u673a\u901a\u4fe1 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055709-6a9baf3570a00.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u25b2 \u56fe 2 \u00b7 STM32 \u5f00\u53d1\u677f&#xff0c;\u4f5c\u4e3a\u98de\u63a7\u7684&#034;\u5927\u8111&#034;&#xff0c;\u8d1f\u8d23\u8bfb\u6570\u636e\u3001\u7b97\u59ff\u6001\u3001\u8f93\u51fa PWM<\/p>\n<p>\u60f3\u8c61 MPU6050 \u5176\u5b9e\u88c5\u4e86\u4e24\u4e2a\u6027\u683c\u5b8c\u5168\u76f8\u53cd\u7684\u5c0f\u5bb6\u4f19&#xff1a;<\/p>\n<h4>&#x1f974; \u9640\u87ba\u4eea&#xff08;Gyroscope&#xff09;\u2014\u2014\u4e00\u4e2a&#034;\u9189\u6c49&#034;<\/h4>\n<ul>\n<li>\u5b83\u8d1f\u8d23\u6d4b\u89d2\u901f\u5ea6&#xff0c;\u4e5f\u5c31\u662f&#034;\u6211\u8f6c\u5f97\u6709\u591a\u5feb&#034;&#xff08;\u5355\u4f4d \u00b0\/s&#xff09;\u3002<\/li>\n<li>\u4f18\u70b9&#xff1a;\u53cd\u5e94\u6781\u5feb&#xff0c;\u4f60\u521a\u8f6c\u4e00\u70b9\u70b9\u5b83\u7acb\u523b\u5c31\u77e5\u9053\u3002<\/li>\n<li>\u7f3a\u70b9&#xff1a;\u5b83\u53ea\u80fd\u6d4b&#034;\u8f6c\u52a8\u7684\u901f\u5ea6&#034;&#xff0c;\u8981\u5f97\u5230\u89d2\u5ea6\u5fc5\u987b\u79ef\u5206&#xff08;\u628a\u901f\u5ea6\u7d2f\u52a0\u8d77\u6765&#xff09;\u3002\u53ef\u5b83\u6709\u4e2a\u574f\u6bdb\u75c5\u2014\u2014\u4f1a\u6084\u6084&#034;\u8dd1\u504f&#034;&#xff08;\u96f6\u504f\u6f02\u79fb&#xff09;\u3002\u5c31\u50cf\u9189\u6c49\u8d70\u8def&#xff0c;\u8d70\u51e0\u6b65\u65b9\u5411\u5c31\u6b6a\u4e86&#xff0c;\u65f6\u95f4\u8d8a\u4e45\u9519\u5f97\u8d8a\u79bb\u8c31\u3002<\/li>\n<li>\u7ed3\u8bba&#xff1a;\u77ed\u65f6\u95f4\u8d85\u51c6&#xff0c;\u957f\u65f6\u95f4\u5fc5\u6f02\u3002<\/li>\n<\/ul>\n<h4>&#x1f9d8; \u52a0\u901f\u5ea6\u8ba1&#xff08;Accelerometer&#xff09;\u2014\u2014\u4e00\u4e2a&#034;\u5750\u5f97\u7a33\u7684\u8001\u5b9e\u4eba&#034;<\/h4>\n<ul>\n<li>\u5b83\u8d1f\u8d23\u6d4b\u52a0\u901f\u5ea6&#xff08;\u5355\u4f4d g&#xff09;&#xff0c;\u9759\u6b62\u65f6\u80fd&#034;\u611f\u89c9&#034;\u51fa\u91cd\u529b\u671d\u54ea\u8fb9\u3002<\/li>\n<li>\u4f18\u70b9&#xff1a;\u957f\u671f\u8d85\u7ea7\u7a33\u5b9a&#xff0c;\u4f60\u653e\u5e73\u5b83\u5c31\u77e5\u9053&#034;\u5730\u9762\u5728\u8fd9\u8fb9&#034;&#xff0c;\u6c38\u8fdc\u4e0d\u6f02\u3002<\/li>\n<li>\u7f3a\u70b9&#xff1a;\u5b83\u7279\u522b&#034;\u6015\u6296&#034;\u3002\u98de\u673a\u4e00\u9707\u3001\u4e00\u52a0\u901f&#xff0c;\u5b83\u6d4b\u51fa\u7684\u65b9\u5411\u5c31\u5168\u662f\u4e71\u98a4\u7684\u566a\u58f0&#xff0c;\u77ed\u65f6\u95f4\u91cc\u6839\u672c\u6ca1\u6cd5\u4fe1\u3002<\/li>\n<li>\u7ed3\u8bba&#xff1a;\u957f\u671f\u7a33&#xff0c;\u77ed\u65f6\u95f4\u6296\u3002<\/li>\n<\/ul>\n<h4>&#x1f4a1; \u6838\u5fc3\u601d\u60f3&#xff1a;\u53d6\u957f\u8865\u77ed<\/h4>\n<p>\u8fd9\u4fe9\u4e00\u4e2a&#034;\u5feb\u4f46\u6f02&#034;&#xff0c;\u4e00\u4e2a&#034;\u7a33\u4f46\u6296&#034;\u2014\u2014\u6b63\u597d\u4e92\u8865\u3002\u59ff\u6001\u89e3\u7b97&#xff08;\u59ff\u6001\u878d\u5408&#xff09;\u7684\u5168\u90e8\u79d8\u5bc6&#xff0c;\u5c31\u662f\u60f3\u529e\u6cd5\u8ba9\u5b83\u4fe9&#034;\u4e92\u76f8\u5f53\u9760\u5c71&#034;&#xff0c;\u5408\u6210\u4e00\u4e2a\u65e2\u5feb\u53c8\u7a33\u7684\u89d2\u5ea6\u3002<\/p>\n<p>&#x1f3af; \u8fd9\u5c31\u662f&#034;\u4e92\u8865\u6ee4\u6ce2&#034;\u540d\u5b57\u7684\u6765\u6e90&#xff1a;\u628a\u4e24\u4e2a\u4f20\u611f\u5668\u7684\u957f\u5904\u4e92\u8865\u8d77\u6765\u3002<\/p>\n<p>\u63a5\u7ebf\u56fe&#xff08;\u5c31\u8fd9\u4e48\u7b80\u5355&#xff0c;\u4e00\u5171 4 \u6839\u7ebf&#xff09;&#xff1a;<\/p>\n<p>  STM32                         MPU6050 \u6a21\u5757<br \/>\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n \u2502  3.3V   \u2500\u2500\u2500\u253c\u2500\u2500 \u7ea2\u8272 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6\u2502  VCC       \u2502<br \/>\n \u2502   GND   \u2500\u2500\u2500\u253c\u2500\u2500 \u9ed1\u8272 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6\u2502  GND       \u2502<br \/>\n \u2502  PB6\u00b7SCL \u2500\u2500\u253c\u2500\u2500 \u9ec4\u8272 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6\u2502  SCL       \u2502<br \/>\n \u2502  PB7\u00b7SDA \u2500\u2500\u253c\u2500\u2500 \u7eff\u8272 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6\u2502  SDA       \u2502<br \/>\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n           &#xff08;SCL \/ SDA \u90fd\u9700\u8981\u63a5 4.7k\u03a9 \u4e0a\u62c9\u7535\u963b\u5230 3.3V&#xff09;<\/p>\n<p>\u26a0\ufe0f \u65b0\u624b\u5e38\u8e29\u7684\u4e09\u4e2a\u5751<\/p>\n<li>MPU6050 \u7684 AD0 \u5f15\u811a\u63a5\u5730 \u2192 \u5730\u5740\u662f 0x68&#xff1b;\u63a5 3.3V \u2192 \u5730\u5740\u53d8 0x69\u3002\u5730\u5740\u5199\u9519 &#061; \u901a\u4fe1\u5931\u8d25&#xff0c;\u6700\u6700\u5e38\u89c1\u7684\u5751&#xff01;<\/li>\n<li>\u522b\u628a\u6a21\u5757\u4e0a\u7684 5V \u76f4\u63a5\u603c\u5230 STM32 \u5f15\u811a\u4e0a&#xff08;I\/O \u662f 3.3V \u7535\u5e73&#xff09;\u3002<\/li>\n<li>I2C \u5fc5\u987b\u63a5\u4e0a\u62c9\u7535\u963b&#xff0c;\u5426\u5219\u4fe1\u53f7\u4e0d\u7a33\u5b9a\u3001\u65f6\u597d\u65f6\u574f\u3002<\/li>\n<hr \/>\n<h3>2. \u8ba9 STM32 \u548c\u5b83&#034;\u804a\u4e0a\u5929&#034;&#xff1a;I2C \u8bfb\u6570\u636e<\/h3>\n<h4>&#x1f4ec; \u5b83\u662f\u600e\u4e48\u6c9f\u901a\u7684&#xff1f;<\/h4>\n<p>MPU6050 \u5185\u90e8\u6709\u4e00\u6392&#034;\u90ae\u7bb1&#034;&#xff08;\u5bc4\u5b58\u5668&#xff09;&#xff0c;STM32 \u53ea\u8981\u7528 I2C \u534f\u8bae&#034;\u5199\u4e2a\u7eb8\u6761\u8fdb\u53bb\u3001\u6216\u53d6\u4e00\u5f20\u7eb8\u6761\u51fa\u6765&#034;\u5c31\u80fd\u6c9f\u901a\u3002\u82af\u7247\u5e95\u5c42\u7684\u7535\u8def\u8fde\u63a5\u5927\u6982\u662f\u8fd9\u6837&#xff1a;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055709-6a9baf358ba73.png\" alt=\"\" \/><\/p>\n<p>\u25b2 \u56fe 3 \u00b7 MPU6050 \u5185\u90e8\u7535\u8def\u539f\u7406\u793a\u610f&#xff08;MCU \u901a\u8fc7 I2C \u6570\u636e\u7ebf SDA\/SCL \u4e0e\u7247\u5185\u5bc4\u5b58\u5668\u8bfb\u5199\u901a\u4fe1&#xff09;<\/p>\n<p>\u6570\u636e\u90fd\u6392\u597d\u961f\u653e\u5728\u4ece\u5730\u5740 0x3B \u5f00\u59cb\u7684\u4e00\u8fde\u4e32\u90ae\u7bb1\u91cc&#xff0c;\u987a\u5e8f\u662f&#xff1a;<\/p>\n<p> \u52a0\u901f\u5ea6X \u2192 \u52a0\u901f\u5ea6Y \u2192 \u52a0\u901f\u5ea6Z \u2192 \u6e29\u5ea6 \u2192 \u9640\u87baX \u2192 \u9640\u87baY \u2192 \u9640\u87baZ<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502  2\u5b57\u8282 \u2502\u2502  2\u5b57\u8282 \u2502\u2502  2\u5b57\u8282 \u2502\u2502 2\u5b57\u8282\u2502\u2502 2\u5b57\u8282\u2502\u2502 2\u5b57\u8282\u2502\u2502 2\u5b57\u8282\u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n 0x3B     0x3D     0x3F     0x41   0x43    0x45    0x47<\/p>\n<p>\u6240\u4ee5\u6211\u4eec\u4e00\u6b21\u7a81\u53d1\u8bfb\u53d6 14 \u4e2a\u5b57\u8282&#xff0c;\u5c31\u628a 6 \u4e2a\u8f74 &#043; \u6e29\u5ea6\u5168\u62ff\u56de\u6765\u4e86&#xff0c;\u6548\u7387\u6700\u9ad8\u3002<\/p>\n<h4>&#x1f50c; \u521d\u59cb\u5316\u4ee3\u7801&#xff08;STM32 HAL \u5e93&#xff09;<\/h4>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token function\">MPU6050_Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">HAL_Delay<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7b49\u5f85\u4f20\u611f\u5668\u5185\u90e8\u4f9b\u7535\u7a33\u5b9a<\/span><br \/>\n    <span class=\"token class-name\">uint8_t<\/span> reg <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0x01<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5524\u9192\u5e76\u9009\u62e9\u65f6\u949f\u6e90 PLL with X Gyro<\/span><br \/>\n    <span class=\"token function\">HAL_I2C_Mem_Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x6B<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>reg<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    reg <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0x10<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u9640\u87ba\u4eea\u91cf\u7a0b \u00b11000\u00b0\/s<\/span><br \/>\n    <span class=\"token function\">HAL_I2C_Mem_Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x1B<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>reg<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    reg <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0x00<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u52a0\u901f\u5ea6\u91cf\u7a0b \u00b12g (16384 LSB\/g)<\/span><br \/>\n    <span class=\"token function\">HAL_I2C_Mem_Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x1C<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>reg<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>&#x1f4d6; \u8bfb\u53d6 14 \u5b57\u8282\u539f\u59cb\u6570\u636e<\/h4>\n<p><span class=\"token class-name\">uint8_t<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">14<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token class-name\">int16_t<\/span> ax<span class=\"token punctuation\">,<\/span> ay<span class=\"token punctuation\">,<\/span> az<span class=\"token punctuation\">,<\/span> gx<span class=\"token punctuation\">,<\/span> gy<span class=\"token punctuation\">,<\/span> gz<span class=\"token punctuation\">,<\/span> tmp<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token function\">MPU6050_ReadRaw<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u4ece 0x3B \u5f00\u59cb&#xff0c;\u4e00\u53e3\u6c14\u8bfb 14 \u4e2a\u5b57\u8282<\/span><br \/>\n    <span class=\"token function\">HAL_I2C_Mem_Read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x68<\/span><span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x3B<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> buf<span class=\"token punctuation\">,<\/span> <span class=\"token number\">14<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6bcf\u4e2a\u6570\u636e\u662f16\u4f4d\u6709\u7b26\u53f7\u6570&#xff0c;\u9ad8\u5b57\u8282\u5728\u524d&#xff0c;\u4f4e\u5b57\u8282\u5728\u540e&#xff0c;\u62fc\u8d77\u6765&#xff1a;<\/span><br \/>\n    ax <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    ay <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    az <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    tmp<span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ \u6e29\u5ea6<\/span><br \/>\n    gx <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    gy <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">11<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    gz <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">13<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u2705 \u5b8c\u6210\u540e\u6253\u5f00\u4e32\u53e3\u6253\u5370 ax, ay, az, gx, gy, gz&#xff0c;\u8f7b\u8f7b\u6643\u52a8\u6a21\u5757&#xff0c;\u770b\u6570\u503c\u4f1a\u4e0d\u4f1a\u8ddf\u7740\u53d8\u3002\u80fd\u53d8 &#061; \u4f60\u6210\u529f\u4e86&#xff01;\u8fd9\u662f\u98de\u63a7\u4e4b\u8def\u7684\u7b2c\u4e00\u4e2a\u91cc\u7a0b\u7891 &#x1f389;\u3002<\/p>\n<hr \/>\n<h3>3. \u628a\u4e71\u7801\u53d8\u6210\u4eba\u8bdd&#xff1a;\u5355\u4f4d\u6362\u7b97\u4e0e\u6821\u51c6<\/h3>\n<p>\u4e0a\u4e00\u6b65\u8bfb\u5230\u7684\u53ea\u662f\u539f\u59cb ADC \u6570\u5b57&#xff08;\u6bd4\u5982 16384\u3001-5000&#xff09;&#xff0c;\u50cf\u4e00\u5806\u6ca1\u5355\u4f4d\u7684\u4e71\u7801\u3002\u8981\u53d8\u6210\u6709\u7269\u7406\u610f\u4e49\u7684\u503c&#xff0c;\u5f97\u9664\u4ee5&#034;\u7075\u654f\u5ea6&#034;&#xff1a;<\/p>\n<p>\u7269\u7406\u503c &#061; \u539f\u59cb\u503c \u00f7 \u7075\u654f\u5ea6<br \/>\nMPU6050 \u82af\u7247\u5185\u90e8\u662f\u4e00\u4e2a 16 \u4f4d\u7684 ADC&#xff08;\u6a21\u6570\u8f6c\u6362\u5668&#xff09;\u3002\u5b83\u6d4b\u5230\u7684\u7269\u7406\u4fe1\u53f7&#xff08;\u91cd\u529b\u3001\u65cb\u8f6c&#xff09;\u6700\u7ec8\u4f1a\u88ab\u8f6c\u6362\u6210\u4e00\u4e2a 16 \u4f4d\u6709\u7b26\u53f7\u6574\u6570&#xff08;int16_t&#xff09;\u3002<\/p>\n<p>16 \u4f4d\u6709\u7b26\u53f7\u6570\u7684\u6700\u5927\u8303\u56f4\u662f&#xff1a;<br \/>\n\u221232768\u223c&#043;32767<br \/>\n\u221232768\u223c&#043;32767\u3002<br \/>\n\u6ee1\u91cf\u7a0b\u5bf9\u5e94\u7684\u6700\u5927\u6570\u5b57\u5c31\u662f 32768\u3002<\/p>\n<p>\u4f60\u9009\u62e9\u4e86 \u00b12g\u00b12*g* \u91cf\u7a0b&#xff08;gg \u662f\u5730\u7403\u91cd\u529b\u52a0\u901f\u5ea6&#xff0c;\u7ea6\u7b49\u4e8e 9.8\u2009m\/s2&#xff09;\u3002<\/p>\n<h5>\u6362\u7b97\u63a8\u5bfc&#xff1a;<\/h5>\n<ul>\n<li>\u82af\u7247\u611f\u53d7\u5230\u7684\u52a0\u901f\u5ea6\u8303\u56f4\u662f&#xff1a;\u22122g\u223c&#043;2g<\/li>\n<li>\u82af\u7247 ADC \u8f93\u51fa\u7684\u6570\u5b57\u8303\u56f4\u662f&#xff1a;\u221232768\u223c&#043;32767<\/li>\n<li>\u4e24\u8005\u4e00\u4e00\u5bf9\u5e94&#xff1a;\n<ul>\n<li>&#043;2g&#043;2g \u5bf9\u5e94\u6570\u5b57 &#043;32768<\/li>\n<li>&#043;1g&#043;1g \u5bf9\u5e94\u6570\u5b57 &#043;16384&#xff08;\u5373 32768\u00f72&#xff09;<\/li>\n<li>0g0g \u5bf9\u5e94\u6570\u5b57 0<\/li>\n<li>\u22121g\u22121g \u5bf9\u5e94\u6570\u5b57 \u221216384<\/li>\n<li>\u22122g\u22122g \u5bf9\u5e94\u6570\u5b57 \u221232768<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<table>\n<tr>\u91cf\u7a0b\u52a0\u901f\u5ea6\u7075\u654f\u5ea6 (LSB\/g)\u9640\u87ba\u7075\u654f\u5ea6 (LSB\/\u00b0\/s)<\/tr>\n<tbody>\n<tr>\n<td>\u00b12g \/ \u00b1250\u00b0\/s<\/td>\n<td>16384<\/td>\n<td>131<\/td>\n<\/tr>\n<tr>\n<td>\u00b14g \/ \u00b1500\u00b0\/s<\/td>\n<td>8192<\/td>\n<td>65.5<\/td>\n<\/tr>\n<tr>\n<td>\u00b18g \/ \u00b11000\u00b0\/s<\/td>\n<td>4096<\/td>\n<td>32.8<\/td>\n<\/tr>\n<tr>\n<td>\u00b116g \/ \u00b12000\u00b0\/s<\/td>\n<td>2048<\/td>\n<td>16.4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span class=\"token comment\">\/\/ \u52a0\u901f\u5ea6&#xff1a;\u00f716384 \u2192 \u5355\u4f4d g&#xff08;\u9759\u6b62\u65f6\u91cd\u529b 1g \u4f1a\u843d\u5728\u67d0\u4e2a\u8f74\u4e0a&#xff09;<\/span><br \/>\n<span class=\"token keyword\">float<\/span> accelX <span class=\"token operator\">&#061;<\/span> ax <span class=\"token operator\">\/<\/span> <span class=\"token number\">16384.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">float<\/span> accelY <span class=\"token operator\">&#061;<\/span> ay <span class=\"token operator\">\/<\/span> <span class=\"token number\">16384.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">float<\/span> accelZ <span class=\"token operator\">&#061;<\/span> az <span class=\"token operator\">\/<\/span> <span class=\"token number\">16384.0f<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u9640\u87ba\u4eea&#xff1a;\u00f732.8 \u2192 \u5355\u4f4d \u00b0\/s<\/span><br \/>\n<span class=\"token keyword\">float<\/span> gyroX <span class=\"token operator\">&#061;<\/span> gx <span class=\"token operator\">\/<\/span> <span class=\"token number\">32.8f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">float<\/span> gyroY <span class=\"token operator\">&#061;<\/span> gy <span class=\"token operator\">\/<\/span> <span class=\"token number\">32.8f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">float<\/span> gyroZ <span class=\"token operator\">&#061;<\/span> gz <span class=\"token operator\">\/<\/span> <span class=\"token number\">32.8f<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>&#x1f9ca; \u96f6\u504f\u6821\u51c6&#xff1a;\u5e2e&#034;\u9189\u6c49&#034;\u5148\u7ad9\u76f4<\/h4>\n<p>\u8fd8\u8bb0\u5f97\u90a3\u4e2a\u4f1a\u8dd1\u504f\u7684\u9640\u87ba\u4eea\u5417&#xff1f;\u5b83\u9759\u6b62\u65f6\u660e\u660e\u6ca1\u8f6c&#xff0c;\u5374\u4f1a\u8f93\u51fa\u4e00\u4e2a\u56fa\u5b9a\u7684&#034;\u5047\u901f\u5ea6&#034;&#xff08;\u96f6\u504f&#xff09;\u3002\u5982\u679c\u4e0d\u6263\u6389&#xff0c;\u79ef\u5206\u4f1a\u8d8a\u6765\u8d8a\u504f\u3002<\/p>\n<p>\u89e3\u51b3\u529e\u6cd5&#xff1a;\u4e0a\u7535\u540e\u8ba9\u5b83\u9759\u6b62\u51e0\u79d2&#xff0c;\u591a\u91c7\u51e0\u6b21\u5e73\u5747&#xff0c;\u5c31\u5f97\u5230\u8fd9\u4e2a&#034;\u5047\u901f\u5ea6&#034;&#xff0c;\u4ee5\u540e\u6bcf\u4e2a\u8bfb\u6570\u90fd\u51cf\u6389\u5b83\u3002<\/p>\n<p><span class=\"token comment\">\/\/<\/span><br \/>\n<span class=\"token comment\">\/\/ Created by 31962 on 2026\/8\/30.<\/span><br \/>\n<span class=\"token comment\">\/\/<\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Tmpu6050.h&#034;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;debug_config.h&#034;<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5b58\u50a8\u6821\u51c6\u504f\u79fb\u91cf&#xff08;\u5168\u90e8\u4f7f\u7528\u539f\u59cb\u6709\u7b26\u53f7 16 \u4f4d\u6574\u6570 LSB \u5c3a\u5ea6&#xff0c;\u907f\u514d\u5355\u4f4d\u6df7\u4e71&#xff09;<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">int16_t<\/span> ax_offset <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">int16_t<\/span> ay_offset <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">int16_t<\/span> az_offset <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">int16_t<\/span> gx_offset <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">int16_t<\/span> gy_offset <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">static<\/span> <span class=\"token class-name\">int16_t<\/span> gz_offset <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token class-name\">uint8_t<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">14<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061; \u521d\u59cb\u5316 MPU6050 &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">MPU6050_Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">HAL_Delay<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7b49\u5f85\u4f20\u611f\u5668\u5185\u90e8\u4f9b\u7535\u7a33\u5b9a<\/span><br \/>\n    <span class=\"token class-name\">uint8_t<\/span> reg <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0x01<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5524\u9192\u5e76\u9009\u62e9\u65f6\u949f\u6e90 PLL with X Gyro<\/span><br \/>\n    <span class=\"token function\">HAL_I2C_Mem_Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x6B<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>reg<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    reg <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0x10<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u9640\u87ba\u4eea\u91cf\u7a0b \u00b11000\u00b0\/s<\/span><br \/>\n    <span class=\"token function\">HAL_I2C_Mem_Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x1B<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>reg<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    reg <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0x00<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u52a0\u901f\u5ea6\u91cf\u7a0b \u00b12g (16384 LSB\/g)<\/span><br \/>\n    <span class=\"token function\">HAL_I2C_Mem_Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x1C<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>reg<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061; I2C \u626b\u63cf &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">I2C_Scan<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Scanning I2C bus&#8230;\\\\r\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">uint8_t<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">128<\/span><span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">HAL_I2C_IsDeviceReady<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> HAL_OK<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Found I2C device at address: 0x%02X (8-bit: 0x%02X)\\\\r\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;No I2C device found!\\\\r\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061; \u81ea\u52a8\u6821\u51c6&#xff08;\u5f00\u673a\u65f6\u6c34\u5e73\u9759\u6b62\u653e\u684c\u4e0a&#xff09; &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">MPU6050_Calibrate<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token class-name\">int32_t<\/span> sum_ax <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> sum_ay <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> sum_az <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token class-name\">int32_t<\/span> sum_gx <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> sum_gy <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> sum_gz <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> samples <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">200<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token function\">debug_printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Calibrating&#8230; Keep MPU6050 still and flat!\\\\r\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> samples<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">HAL_I2C_Mem_Read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x3B<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> buf<span class=\"token punctuation\">,<\/span> <span class=\"token number\">14<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> HAL_OK<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u5fc5\u987b\u5f3a\u5236\u8f6c\u6362\u4e3a (int16_t)&#xff0c;\u5426\u5219\u8d1f\u6570\u4f1a\u51fa\u9519&#xff01;<\/span><br \/>\n            sum_ax <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            sum_ay <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            sum_az <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            sum_gx <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            sum_gy <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">11<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            sum_gz <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">13<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token function\">HAL_Delay<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8ba1\u7b97\u504f\u5dee&#xff1a;<\/span><br \/>\n    ax_offset <span class=\"token operator\">&#061;<\/span> sum_ax <span class=\"token operator\">\/<\/span> samples<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ X \u8f74\u9759\u6b62\u7406\u8bba\u4e0a\u662f 0<\/span><br \/>\n    ay_offset <span class=\"token operator\">&#061;<\/span> sum_ay <span class=\"token operator\">\/<\/span> samples<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ Y \u8f74\u9759\u6b62\u7406\u8bba\u4e0a\u662f 0<\/span><br \/>\n    <span class=\"token comment\">\/\/ Z \u8f74\u9759\u6b62\u7406\u8bba\u4e0a\u662f 1g&#xff0c;\u5bf9\u5e94 16384 LSB \u523b\u5ea6&#xff01;\u7528\u523b\u5ea6\u51cf\u523b\u5ea6&#xff01;<\/span><br \/>\n    az_offset <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>sum_az <span class=\"token operator\">\/<\/span> samples<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">16384<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9640\u87ba\u4eea\u9759\u6b62\u7406\u8bba\u4e0a\u5168\u4e3a 0<\/span><br \/>\n    gx_offset <span class=\"token operator\">&#061;<\/span> sum_gx <span class=\"token operator\">\/<\/span> samples<span class=\"token punctuation\">;<\/span><br \/>\n    gy_offset <span class=\"token operator\">&#061;<\/span> sum_gy <span class=\"token operator\">\/<\/span> samples<span class=\"token punctuation\">;<\/span><br \/>\n    gz_offset <span class=\"token operator\">&#061;<\/span> sum_gz <span class=\"token operator\">\/<\/span> samples<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061; \u8f93\u51fa\u6700\u7ec8\u6821\u51c6\u5e76\u6362\u7b97\u540e\u7684\u7269\u7406\u91cf\u6570\u636e &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">MPU6050_GetCalibratedData<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span> <span class=\"token operator\">*<\/span>mpu_value<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">HAL_I2C_Mem_Read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>hi2c1<span class=\"token punctuation\">,<\/span> MPU6050_ADDRESS<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x3B<\/span><span class=\"token punctuation\">,<\/span> I2C_MEMADD_SIZE_8BIT<span class=\"token punctuation\">,<\/span> buf<span class=\"token punctuation\">,<\/span> <span class=\"token number\">14<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> HAL_OK<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 1. \u8bfb\u53d6\u5e26\u7b26\u53f7\u7684\u539f\u59cb 16 \u4f4d\u6574\u6570<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> raw_ax   <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span>  <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> raw_ay   <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span>  <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> raw_az   <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span>  <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> raw_temp <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">]<\/span>  <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> raw_gx   <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">]<\/span>  <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> raw_gy   <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">11<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> raw_gz   <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">int16_t<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">|<\/span> buf<span class=\"token punctuation\">[<\/span><span class=\"token number\">13<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 2. \u51cf\u53bb LSB \u523b\u5ea6\u504f\u5dee<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> cal_ax <span class=\"token operator\">&#061;<\/span> raw_ax <span class=\"token operator\">&#8211;<\/span> ax_offset<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> cal_ay <span class=\"token operator\">&#061;<\/span> raw_ay <span class=\"token operator\">&#8211;<\/span> ay_offset<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> cal_az <span class=\"token operator\">&#061;<\/span> raw_az <span class=\"token operator\">&#8211;<\/span> az_offset<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> cal_gx <span class=\"token operator\">&#061;<\/span> raw_gx <span class=\"token operator\">&#8211;<\/span> gx_offset<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> cal_gy <span class=\"token operator\">&#061;<\/span> raw_gy <span class=\"token operator\">&#8211;<\/span> gy_offset<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token class-name\">int16_t<\/span> cal_gz <span class=\"token operator\">&#061;<\/span> raw_gz <span class=\"token operator\">&#8211;<\/span> gz_offset<span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 3. \u7edf\u4e00\u9664\u4ee5\u7075\u654f\u5ea6&#xff0c;\u8f6c\u6362\u4e3a\u7269\u7406 float \u5355\u4f4d<\/span><br \/>\n        mpu_value<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>cal_ax <span class=\"token operator\">\/<\/span> <span class=\"token number\">16384.0f<\/span><span class=\"token punctuation\">;<\/span>          <span class=\"token comment\">\/\/ \u52a0\u901f\u5ea6 X (g)<\/span><br \/>\n        mpu_value<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>cal_ay <span class=\"token operator\">\/<\/span> <span class=\"token number\">16384.0f<\/span><span class=\"token punctuation\">;<\/span>          <span class=\"token comment\">\/\/ \u52a0\u901f\u5ea6 Y (g)<\/span><br \/>\n        mpu_value<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>cal_az <span class=\"token operator\">\/<\/span> <span class=\"token number\">16384.0f<\/span><span class=\"token punctuation\">;<\/span>          <span class=\"token comment\">\/\/ \u52a0\u901f\u5ea6 Z (g)<\/span><br \/>\n        mpu_value<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>raw_temp <span class=\"token operator\">\/<\/span> <span class=\"token number\">340.0f<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">36.53f<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6e29\u5ea6 (\u2103) \u4e0d\u6821\u51c6\u76f4\u63a5\u6362\u7b97<\/span><br \/>\n        mpu_value<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>cal_gx <span class=\"token operator\">\/<\/span> <span class=\"token number\">32.8f<\/span><span class=\"token punctuation\">;<\/span>             <span class=\"token comment\">\/\/ \u9640\u87ba\u4eea X (\u00b0\/s)<\/span><br \/>\n        mpu_value<span class=\"token punctuation\">[<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>cal_gy <span class=\"token operator\">\/<\/span> <span class=\"token number\">32.8f<\/span><span class=\"token punctuation\">;<\/span>             <span class=\"token comment\">\/\/ \u9640\u87ba\u4eea Y (\u00b0\/s)<\/span><br \/>\n        mpu_value<span class=\"token punctuation\">[<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span><span class=\"token punctuation\">)<\/span>cal_gz <span class=\"token operator\">\/<\/span> <span class=\"token number\">32.8f<\/span><span class=\"token punctuation\">;<\/span>             <span class=\"token comment\">\/\/ \u9640\u87ba\u4eea Z (\u00b0\/s)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>&#x1f4a1; \u4e09\u8f74\u90fd\u8fd9\u6837\u5904\u7406\u3002\u52a0\u901f\u5ea6\u8ba1\u4e00\u822c\u4e0d\u7528\u5927\u6821\u51c6&#xff08;\u5b83\u672c\u8eab\u591f\u7a33&#xff09;&#xff0c;\u9664\u975e\u4f60\u8981\u5f88\u9ad8\u7cbe\u5ea6\u3002<\/p>\n<p>\u6211\u7684\u6700\u540e\u7684\u7ed3\u679c&#xff1a;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055709-6a9baf35c0527.png\" alt=\"image-20260830142640205\" \/><\/p>\n<hr \/>\n<h3>4. \u59ff\u6001\u5230\u5e95\u600e\u4e48\u63cf\u8ff0&#xff1a;\u6b27\u62c9\u89d2\u3001\u77e9\u9635\u3001\u56db\u5143\u6570<\/h3>\n<h4>&#x1f914; \u4e00\u4e2a\u6df1\u523b\u7684\u95ee\u9898&#xff1a;\u600e\u4e48\u544a\u8bc9\u522b\u4eba&#034;\u4e00\u4e2a\u7269\u4f53\u73b0\u5728\u671d\u54ea&#034;&#xff1f;<\/h4>\n<p>\u5148\u770b\u8fd9\u5f20\u56fe&#xff0c;\u4e00\u67b6\u56db\u8f74\u5728\u7a7a\u4e2d\u80fd\u7ed5\u4e09\u4e2a\u65b9\u5411\u8f6c&#xff0c;\u8fd9\u5c31\u662f\u5b83\u7684&#034;\u4e09\u4e2a\u81ea\u7531\u5ea6&#034;&#xff1a;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055709-6a9baf35eb08d.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u25b2 \u56fe 4 \u00b7 \u56db\u8f74\u7684\u4e09\u4e2a\u59ff\u6001\u89d2&#xff1a;Roll&#xff08;\u6a2a\u6eda&#xff09;\u3001Pitch&#xff08;\u4fef\u4ef0&#xff09;\u3001Yaw&#xff08;\u504f\u822a&#xff09;\u2014\u2014\u5b83\u4eec\u5b9a\u4e49\u4e86\u98de\u673a&#034;\u671d\u54ea\u3001\u6b6a\u591a\u5c11&#034;<\/p>\n<p>\u6709\u4e09\u79cd\u4e3b\u6d41&#034;\u8bed\u8a00&#034;&#xff1a;<\/p>\n<h5>\u2460 \u6b27\u62c9\u89d2&#xff08;Roll \/ Pitch \/ Yaw&#xff09;\u2014\u2014\u6700\u76f4\u89c2<\/h5>\n<ul>\n<li>Roll \u6a2a\u6eda&#xff1a;\u50cf\u98de\u673a\u538b\u7fc5\u8180\u5f80\u5de6\/\u5f80\u53f3\u6b6a\u3002<\/li>\n<li>Pitch \u4fef\u4ef0&#xff1a;\u50cf\u98de\u673a\u62ac\u5934\/\u4f4e\u5934\u3002<\/li>\n<li>Yaw \u504f\u822a&#xff1a;\u50cf\u98de\u673a\u5728\u539f\u5730\u8f6c\u5708&#xff08;\u5de6\u8f6c\/\u53f3\u8f6c&#xff09;\u3002<\/li>\n<li>\u81f4\u547d\u7f3a\u70b9&#xff1a;\u5f53 Pitch \u8f6c\u5230\u63a5\u8fd1 \u00b190\u00b0&#xff08;\u4ef0\u5934\u5230\u5929\u9876&#xff09;\u65f6&#xff0c;\u4f1a\u9677\u5165&#034;\u4e07\u5411\u9501&#034;&#xff08;Gimbal Lock&#xff09;\u2014\u2014Roll \u548c Yaw \u7a81\u7136\u5206\u4e0d\u6e05\u4e86&#xff0c;\u4e22\u5931\u4e00\u4e2a\u81ea\u7531\u5ea6&#xff0c;\u7b97\u6cd5\u76f4\u63a5\u5d29\u6e83\u3002\u5c31\u50cf\u4e24\u4e2a\u94f0\u94fe\u53e0\u5728\u4e00\u8d77\u5361\u6b7b\u3002<\/li>\n<\/ul>\n<h5>\u2461 \u65cb\u8f6c\u77e9\u9635&#xff08;3\u00d73&#xff09;\u2014\u2014\u7cbe\u786e\u4f46\u5570\u55e6<\/h5>\n<ul>\n<li>\u4fe1\u606f\u5b8c\u6574\u3001\u6570\u5b66\u6e05\u695a&#xff0c;\u4f46\u6709 9 \u4e2a\u5143\u7d20\u3001\u4fe1\u606f\u5197\u4f59&#xff0c;\u800c\u4e14\u6bcf\u6b21\u8fd0\u7b97\u540e\u6570\u503c\u4f1a&#034;\u6f02\u79fb&#034;&#xff0c;\u8981\u53cd\u590d\u505a\u6b63\u4ea4\u5316\u6821\u6b63&#xff0c;\u5f88\u9ebb\u70e6\u3002<\/li>\n<\/ul>\n<h5>\u2462 \u56db\u5143\u6570&#xff08;Quaternion&#xff09;\u2014\u2014\u98de\u63a7\u754c\u7684&#034;\u666e\u901a\u8bdd&#034; \u2b50<\/h5>\n<ul>\n<li>\u53ea\u7528 4 \u4e2a\u6570\u5b57&#xff0c;\u6ca1\u6709\u4e07\u5411\u9501&#xff0c;\u8fd0\u7b97\u91cf\u5c0f\u3001\u7a33\u5b9a\u6027\u597d\u3002<\/li>\n<li>\u98de\u63a7\u548c\u59ff\u6001\u89e3\u7b97\u7684\u5de5\u4e1a\u6807\u51c6&#xff0c;\u51e0\u4e4e\u6240\u6709\u98de\u63a7\u90fd\u7528\u5b83\u3002<\/li>\n<\/ul>\n<h4>&#x1f9ee; \u56db\u5143\u6570\u957f\u4ec0\u4e48\u6837&#xff1f;<\/h4>\n<p>\u5b83\u53ef\u4ee5\u7406\u89e3\u4e3a&#034;\u7ed5\u4e00\u4e2a\u8f74 n \u8f6c\u4e00\u4e2a\u89d2\u5ea6 \u03b8&#034;\u7684\u6d53\u7f29\u7f16\u7801&#xff1a;<\/p>\n<p>q &#061; q0 &#043; q1\u00b7i &#043; q2\u00b7j &#043; q3\u00b7k<br \/>\n  &#061; cos(\u03b8\/2) &#043; sin(\u03b8\/2)\u00b7(nx\u00b7i &#043; ny\u00b7j &#043; nz\u00b7k)<\/p>\n<p>\u5e76\u4e14\u5b83\u5fc5\u987b\u6ee1\u8db3\u5f52\u4e00\u5316&#xff08;\u6a21\u957f\u4e3a 1&#xff09;&#xff1a;<\/p>\n<p>q0\u00b2 &#043; q1\u00b2 &#043; q2\u00b2 &#043; q3\u00b2 &#061; 1<\/p>\n<h4>&#x1f504; \u56db\u5143\u6570 \u2192 \u6b27\u62c9\u89d2&#xff08;\u89e3\u7b97\u7ed3\u679c\u6700\u7ec8\u8981\u7ed9\u4eba\u770b\u7684&#xff09;<\/h4>\n<p><span class=\"token comment\">\/\/ \u7531\u56db\u5143\u6570\u53cd\u89e3\u51fa\u4e09\u4e2a\u6b27\u62c9\u89d2<\/span><br \/>\nRoll  <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atan2f<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>q0<span class=\"token operator\">*<\/span>q1 <span class=\"token operator\">&#043;<\/span> q2<span class=\"token operator\">*<\/span>q3<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>q1<span class=\"token operator\">*<\/span>q1 <span class=\"token operator\">&#043;<\/span> q2<span class=\"token operator\">*<\/span>q2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\nPitch <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">asinf<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>q0<span class=\"token operator\">*<\/span>q2 <span class=\"token operator\">&#8211;<\/span> q1<span class=\"token operator\">*<\/span>q3<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\nYaw   <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atan2f<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>q0<span class=\"token operator\">*<\/span>q3 <span class=\"token operator\">&#043;<\/span> q1<span class=\"token operator\">*<\/span>q2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>q2<span class=\"token operator\">*<\/span>q2 <span class=\"token operator\">&#043;<\/span> q3<span class=\"token operator\">*<\/span>q3<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>\u2699\ufe0f \u56db\u5143\u6570\u7684&#034;\u5fc3\u810f&#034;&#xff1a;\u59ff\u6001\u600e\u4e48\u968f\u65f6\u95f4\u66f4\u65b0&#xff1f;<\/h4>\n<p>\u77e5\u9053\u4e86\u89d2\u901f\u5ea6 \u03c9&#xff0c;\u5c31\u80fd\u63a8\u51fa\u56db\u5143\u6570\u600e\u4e48\u53d8\u3002\u8fd9\u662f\u4e00\u6761\u5fae\u5206\u65b9\u7a0b&#xff1a;<\/p>\n<p>dq\/dt &#061; \u00bd \u00b7 q \u2297 \u03c9<\/p>\n<p>\u5728\u4ee3\u7801\u91cc&#xff0c;\u6211\u4eec\u7528&#034;\u4e00\u9636\u79ef\u5206&#034;\u628a\u5b83\u79bb\u6563\u5316&#xff08;halfT &#061; dt\/2&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\">\/\/ \u8fd9\u662f Mahony \/ Madgwick \u90fd\u7528\u7684\u56db\u5143\u6570\u4e00\u9636\u79ef\u5206\u6838\u5fc3<\/span><br \/>\nq0 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span>q1<span class=\"token operator\">*<\/span>gx <span class=\"token operator\">&#8211;<\/span> q2<span class=\"token operator\">*<\/span>gy <span class=\"token operator\">&#8211;<\/span> q3<span class=\"token operator\">*<\/span>gz<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> halfT<span class=\"token punctuation\">;<\/span><br \/>\nq1 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span> q0<span class=\"token operator\">*<\/span>gx <span class=\"token operator\">&#043;<\/span> q2<span class=\"token operator\">*<\/span>gz <span class=\"token operator\">&#8211;<\/span> q3<span class=\"token operator\">*<\/span>gy<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> halfT<span class=\"token punctuation\">;<\/span><br \/>\nq2 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span> q0<span class=\"token operator\">*<\/span>gy <span class=\"token operator\">&#8211;<\/span> q1<span class=\"token operator\">*<\/span>gz <span class=\"token operator\">&#043;<\/span> q3<span class=\"token operator\">*<\/span>gx<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> halfT<span class=\"token punctuation\">;<\/span><br \/>\nq3 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span> q0<span class=\"token operator\">*<\/span>gz <span class=\"token operator\">&#043;<\/span> q1<span class=\"token operator\">*<\/span>gy <span class=\"token operator\">&#8211;<\/span> q2<span class=\"token operator\">*<\/span>gx<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> halfT<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token comment\">\/\/ \u5f52\u4e00\u5316&#xff0c;\u4fdd\u8bc1\u6a21\u957f\u4e3a 1<\/span><br \/>\n<span class=\"token keyword\">float<\/span> norm <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sqrtf<\/span><span class=\"token punctuation\">(<\/span>q0<span class=\"token operator\">*<\/span>q0<span class=\"token operator\">&#043;<\/span>q1<span class=\"token operator\">*<\/span>q1<span class=\"token operator\">&#043;<\/span>q2<span class=\"token operator\">*<\/span>q2<span class=\"token operator\">&#043;<\/span>q3<span class=\"token operator\">*<\/span>q3<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\nq0<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> q1<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> q2<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> q3<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span><\/p>\n<p>&#x1f4cc; \u4e00\u53e5\u8bdd\u8bb0\u4f4f&#xff1a;\u6b27\u62c9\u89d2\u76f4\u89c2\u4f46\u4f1a&#034;\u5361\u6b7b&#034;&#xff08;\u4e07\u5411\u9501&#xff09;&#xff0c;\u56db\u5143\u6570\u6ca1\u6709\u8fd9\u4e2a\u6bdb\u75c5\u53c8\u7701\u7b97\u529b&#xff0c;\u6240\u4ee5\u98de\u63a7\u90fd\u7528\u56db\u5143\u6570\u3002<\/p>\n<p>\u4ee5\u4e0a\u662f\u6570\u5b66\u7814\u7a76\u751f\u9700\u8981\u7814\u7a76\u7684\u9886\u57df&#xff0c;\u6211\u4eec\u77e5\u9053\u5b66\u4f1a\u7528\u73b0\u6210\u7684\u7b97\u6cd5\u5e93\u6216\u5219ai\u5904\u7406\u6536\u5230\u7684\u6570\u636e\u5c31\u884c<\/p>\n<hr \/>\n<h3>5. \u59ff\u6001\u89e3\u7b97&#xff1a;\u600e\u4e48\u628a\u4e24\u4e2a\u4f20\u611f\u5668&#034;\u5408\u6210&#034;\u4e00\u4e2a\u51c6\u7684<\/h3>\n<h4>&#x1f9e0; \u5148\u61c2\u4e92\u8865\u6ee4\u6ce2\u601d\u60f3&#xff08;\u4e00\u7ef4\u7248\u672c&#xff09;<\/h4>\n<p>\u9640\u87ba\u4eea\u79ef\u5206\u51fa\u6765\u7684\u89d2\u5ea6&#xff1a;\u5feb\u4f46\u4f1a\u6f02\u3002 \u52a0\u901f\u5ea6\u8ba1\u7b97\u51fa\u7684\u89d2\u5ea6&#xff1a;\u7a33\u4f46\u4f1a\u6296\u3002<\/p>\n<p>\u4e92\u8865\u6ee4\u6ce2\u5c31\u662f\u7ed9\u5b83\u4fe9\u5404\u4e0a\u4e00\u9053&#034;\u6ee4\u955c&#034;&#xff0c;\u7136\u540e\u52a0\u6743\u76f8\u52a0&#xff1a;<\/p>\n<p>angle &#061; \u03b1 \u00b7 (angle &#043; gyro\u00b7dt) &#043; (1\u2212\u03b1) \u00b7 angle_acc<br \/>\n       \u2514\u2500\u2500\u2500\u2500\u2500 \u9640\u87ba\u4eea&#xff08;\u6743\u91cd\u5927&#xff0c;\u5360 0.98&#xff09;\u2500\u2500\u2500\u2500\u2500\u2518   \u2514\u2500\u52a0\u901f\u5ea6\u8ba1&#xff08;\u6743\u91cd\u5c0f&#xff0c;\u5360 0.02&#xff09;\u2500\u2518<\/p>\n<ul>\n<li>\u03b1 \u901a\u5e38\u53d6 0.95~0.98&#xff1a;\u5927\u90e8\u5206\u4fe1\u4efb&#034;\u5feb&#034;\u7684\u9640\u87ba\u4eea&#xff0c;<\/li>\n<li>\u7528\u5269\u4e0b\u4e00\u70b9\u70b9&#034;\u7a33&#034;\u7684\u52a0\u901f\u5ea6\u8ba1&#xff0c;\u5077\u5077\u628a\u6f02\u79fb\u62c9\u56de\u6765\u3002<\/li>\n<\/ul>\n<p>    \u9640\u87ba\u4eea \u03c9 \u2500\u2500\u25b6 [\u9ad8\u901a\u00b7\u03b1]   \u2510<br \/>\n                            \u251c\u2500\u2500\u25b6 \u52a0\u6743\u6c42\u548c \u2500\u2500\u25b6 \u59ff\u6001\u89d2<br \/>\n    \u52a0\u901f\u5ea6\u8ba1 \u2500\u2500\u25b6 [\u4f4e\u901a\u00b71\u2212\u03b1]  \u2518<\/p>\n<h4>&#x1f681; \u4e09\u7ef4\u7248&#xff1a;Mahony \u7b97\u6cd5&#xff08;\u56db\u5143\u6570\u4e92\u8865\u6ee4\u6ce2&#xff09;<\/h4>\n<p>\u4e00\u7ef4\u4e92\u8865\u6ee4\u6ce2\u4e00\u6b21\u53ea\u80fd\u7b97\u4e00\u4e2a\u8f74\u3002\u628a\u540c\u6837\u7684\u601d\u60f3\u63a8\u5e7f\u5230\u4e09\u7ef4\u56db\u5143\u6570&#xff0c;\u5c31\u662f\u5927\u540d\u9f0e\u9f0e\u7684 Mahony \u7b97\u6cd5\u3002\u5b83\u6d41\u7a0b\u5c31\u4e09\u6b65&#xff0c;\u975e\u5e38\u597d\u61c2&#xff1a;<\/p>\n<p>\u6b65\u9aa41  \u7531\u5f53\u524d\u56db\u5143\u6570&#xff0c;\u53cd\u63a8&#034;\u7406\u8bba\u91cd\u529b\u65b9\u5411&#034; v<br \/>\n\u6b65\u9aa42  \u62ff\u52a0\u901f\u5ea6\u8ba1\u5b9e\u6d4b\u7684\u91cd\u529b\u65b9\u5411 a&#xff0c;\u4e0e v \u505a\u53c9\u79ef \u2192 \u5f97\u5230\u8bef\u5dee e &#061; v \u00d7 a<br \/>\n       &#xff08;\u6ce8\u610f&#xff1a;\u9640\u87ba\u4eea\u82e5\u5b8c\u5168\u51c6&#xff0c;a \u5e94\u8be5\u7b49\u4e8e v&#xff1b;\u5dee\u5f97\u8d8a\u591a&#xff0c;e \u8d8a\u5927&#xff09;<br \/>\n\u6b65\u9aa43  \u7528\u8bef\u5dee e \u901a\u8fc7 PI \u4fee\u6b63\u9640\u87ba\u4eea&#xff1a;\u03c9 &#061; \u03c9 &#043; Kp\u00b7e &#043; Ki\u00b7\u222be<br \/>\n       \u518d\u7528\u4fee\u6b63\u540e\u7684 \u03c9 \u53bb\u79ef\u5206\u66f4\u65b0\u56db\u5143\u6570<\/p>\n<p>\u4e00\u53e5\u8bdd&#xff1a;\u52a0\u901f\u5ea6\u8ba1\u662f&#034;\u8001\u5e08&#034;&#xff0c;\u8d1f\u8d23\u6311\u9640\u87ba\u4eea\u7684\u6bdb\u75c5&#xff08;\u8bef\u5dee&#xff09;&#xff0c;\u901a\u8fc7 PI \u4e00\u70b9\u70b9\u7ea0\u6b63\u5b83\u7684\u6f02\u79fb\u3002<\/p>\n<h4>&#x1f4bb; Mahony \u5b8c\u6574\u4ee3\u7801&#xff08;\u53ef\u76f4\u63a5\u7528&#xff09;<\/h4>\n<p><span class=\"token comment\">\/\/ \u8f93\u5165&#xff1a;\u52a0\u901f\u5ea6(\u5355\u4f4dg)\u3001\u89d2\u901f\u5ea6(rad\/s&#xff0c;\u6ce8\u610f\u8981\u8f6c\u6210\u5f27\u5ea6)\u3001\u91c7\u6837\u5468\u671fdt<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">MahonyAHRSupdate<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span> gx<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">float<\/span> gy<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">float<\/span> gz<span class=\"token punctuation\">,<\/span><br \/>\n                      <span class=\"token keyword\">float<\/span> ax<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">float<\/span> ay<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">float<\/span> az<span class=\"token punctuation\">,<\/span><br \/>\n                      <span class=\"token keyword\">float<\/span> dt<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">float<\/span> halfT <span class=\"token operator\">&#061;<\/span> dt<span class=\"token operator\">\/<\/span><span class=\"token number\">2.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">float<\/span> norm<span class=\"token punctuation\">,<\/span> ex<span class=\"token punctuation\">,<\/span> ey<span class=\"token punctuation\">,<\/span> ez<span class=\"token punctuation\">,<\/span> vx<span class=\"token punctuation\">,<\/span> vy<span class=\"token punctuation\">,<\/span> vz<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ 1. \u5f52\u4e00\u5316\u52a0\u901f\u5ea6\u8ba1&#xff08;\u53ea\u5173\u5fc3\u65b9\u5411&#xff0c;\u4e0d\u5173\u5fc3\u5927\u5c0f&#xff09;<\/span><br \/>\n    norm <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sqrtf<\/span><span class=\"token punctuation\">(<\/span>ax<span class=\"token operator\">*<\/span>ax<span class=\"token operator\">&#043;<\/span>ay<span class=\"token operator\">*<\/span>ay<span class=\"token operator\">&#043;<\/span>az<span class=\"token operator\">*<\/span>az<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    ax<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> ay<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> az<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ 2. \u7531\u5f53\u524d\u56db\u5143\u6570\u63a8\u7b97&#034;\u7406\u8bba\u91cd\u529b\u65b9\u5411&#034;v&#xff08;\u673a\u4f53\u5750\u6807\u7cfb\u4e0b&#xff09;<\/span><br \/>\n    vx <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>q1<span class=\"token operator\">*<\/span>q3 <span class=\"token operator\">&#8211;<\/span> q0<span class=\"token operator\">*<\/span>q2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    vy <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>q0<span class=\"token operator\">*<\/span>q1 <span class=\"token operator\">&#043;<\/span> q2<span class=\"token operator\">*<\/span>q3<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    vz <span class=\"token operator\">&#061;<\/span> q0<span class=\"token operator\">*<\/span>q0 <span class=\"token operator\">&#8211;<\/span> q1<span class=\"token operator\">*<\/span>q1 <span class=\"token operator\">&#8211;<\/span> q2<span class=\"token operator\">*<\/span>q2 <span class=\"token operator\">&#043;<\/span> q3<span class=\"token operator\">*<\/span>q3<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ 3. \u53c9\u79ef\u5f97\u5230\u59ff\u6001\u8bef\u5dee e &#061; v \u00d7 a<\/span><br \/>\n    ex <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>ay<span class=\"token operator\">*<\/span>vz <span class=\"token operator\">&#8211;<\/span> az<span class=\"token operator\">*<\/span>vy<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    ey <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>az<span class=\"token operator\">*<\/span>vx <span class=\"token operator\">&#8211;<\/span> ax<span class=\"token operator\">*<\/span>vz<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    ez <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>ax<span class=\"token operator\">*<\/span>vy <span class=\"token operator\">&#8211;<\/span> ay<span class=\"token operator\">*<\/span>vx<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ 4. \u8bef\u5dee\u79ef\u5206 &#043; \u6bd4\u4f8b&#xff0c;\u4fee\u6b63\u9640\u87ba\u4eea&#xff08;Kp\u6bd4\u4f8b\u3001Ki\u79ef\u5206&#xff09;<\/span><br \/>\n    exInt <span class=\"token operator\">&#043;&#061;<\/span> ex <span class=\"token operator\">*<\/span> Ki <span class=\"token operator\">*<\/span> dt<span class=\"token punctuation\">;<\/span><br \/>\n    eyInt <span class=\"token operator\">&#043;&#061;<\/span> ey <span class=\"token operator\">*<\/span> Ki <span class=\"token operator\">*<\/span> dt<span class=\"token punctuation\">;<\/span><br \/>\n    ezInt <span class=\"token operator\">&#043;&#061;<\/span> ez <span class=\"token operator\">*<\/span> Ki <span class=\"token operator\">*<\/span> dt<span class=\"token punctuation\">;<\/span><br \/>\n    gx <span class=\"token operator\">&#043;&#061;<\/span> Kp<span class=\"token operator\">*<\/span>ex <span class=\"token operator\">&#043;<\/span> exInt<span class=\"token punctuation\">;<\/span><br \/>\n    gy <span class=\"token operator\">&#043;&#061;<\/span> Kp<span class=\"token operator\">*<\/span>ey <span class=\"token operator\">&#043;<\/span> eyInt<span class=\"token punctuation\">;<\/span><br \/>\n    gz <span class=\"token operator\">&#043;&#061;<\/span> Kp<span class=\"token operator\">*<\/span>ez <span class=\"token operator\">&#043;<\/span> ezInt<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ 5. \u56db\u5143\u6570\u5fae\u5206\u79ef\u5206\u66f4\u65b0 &#043; \u5f52\u4e00\u5316<\/span><br \/>\n    q0 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span>q1<span class=\"token operator\">*<\/span>gx <span class=\"token operator\">&#8211;<\/span> q2<span class=\"token operator\">*<\/span>gy <span class=\"token operator\">&#8211;<\/span> q3<span class=\"token operator\">*<\/span>gz<span class=\"token punctuation\">)<\/span><span class=\"token operator\">*<\/span>halfT<span class=\"token punctuation\">;<\/span><br \/>\n    q1 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span> q0<span class=\"token operator\">*<\/span>gx <span class=\"token operator\">&#043;<\/span> q2<span class=\"token operator\">*<\/span>gz <span class=\"token operator\">&#8211;<\/span> q3<span class=\"token operator\">*<\/span>gy<span class=\"token punctuation\">)<\/span><span class=\"token operator\">*<\/span>halfT<span class=\"token punctuation\">;<\/span><br \/>\n    q2 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span> q0<span class=\"token operator\">*<\/span>gy <span class=\"token operator\">&#8211;<\/span> q1<span class=\"token operator\">*<\/span>gz <span class=\"token operator\">&#043;<\/span> q3<span class=\"token operator\">*<\/span>gx<span class=\"token punctuation\">)<\/span><span class=\"token operator\">*<\/span>halfT<span class=\"token punctuation\">;<\/span><br \/>\n    q3 <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token punctuation\">(<\/span> q0<span class=\"token operator\">*<\/span>gz <span class=\"token operator\">&#043;<\/span> q1<span class=\"token operator\">*<\/span>gy <span class=\"token operator\">&#8211;<\/span> q2<span class=\"token operator\">*<\/span>gx<span class=\"token punctuation\">)<\/span><span class=\"token operator\">*<\/span>halfT<span class=\"token punctuation\">;<\/span><br \/>\n    norm <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sqrtf<\/span><span class=\"token punctuation\">(<\/span>q0<span class=\"token operator\">*<\/span>q0<span class=\"token operator\">&#043;<\/span>q1<span class=\"token operator\">*<\/span>q1<span class=\"token operator\">&#043;<\/span>q2<span class=\"token operator\">*<\/span>q2<span class=\"token operator\">&#043;<\/span>q3<span class=\"token operator\">*<\/span>q3<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    q0<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> q1<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> q2<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span> q3<span class=\"token operator\">\/&#061;<\/span>norm<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>&#x1f39b;\ufe0f \u53c2\u6570\u7ecf\u9a8c&#xff08;\u5148\u8bb0\u4e2a\u5927\u6982&#xff0c;\u540e\u9762\u518d\u8c03&#xff09;<\/h4>\n<ul>\n<li>Kp&#xff08;\u7ea0\u504f\u529b\u5ea6&#xff09;&#xff1a;\u8d8a\u5927\u54cd\u5e94\u8d8a\u5feb&#xff0c;\u4f46\u592a\u5927\u5f15\u5165\u566a\u58f0\u3002\u5e38\u7528\u8d77\u6b65\u503c 2.0\u3002<\/li>\n<li>Ki&#xff08;\u6d88\u9664\u9640\u87ba\u96f6\u504f&#xff09;&#xff1a;\u7528\u4e8e\u6d88\u9664\u957f\u65f6\u95f4\u6f02\u79fb\u3002\u5e38\u7528\u8d77\u6b65\u503c 0.005\u3002<\/li>\n<li>\u91c7\u6837\u5468\u671f dt \u5efa\u8bae 1~5ms&#xff08;\u4e3b\u5faa\u73af\u91cc\u8dd1&#xff09;\u3002<\/li>\n<li>\u8c03\u53c2\u65b9\u6cd5&#xff1a;\u628a\u89d2\u5ea6\u901a\u8fc7\u4e32\u53e3\u753b\u51fa\u6765&#xff0c;\u770b\u54cd\u5e94\u5feb\u4e0d\u5feb\u3001\u4f1a\u4e0d\u4f1a\u9707\u8361&#xff0c;\u518d\u5fae\u8c03\u3002<\/li>\n<\/ul>\n<hr \/>\n<h3>6. \u8fdb\u9636\u6ee4\u6ce2&#xff1a;\u5361\u5c14\u66fc \u548c DMP&#xff08;\u5077\u61d2\u795e\u5668&#xff09;<\/h3>\n<h4>&#x1f9e0; \u5361\u5c14\u66fc\u6ee4\u6ce2&#xff1a;\u4f1a&#034;\u81ea\u5df1\u5b66\u4e60\u600e\u4e48\u52a0\u6743&#034;\u7684\u9ad8\u624b<\/h4>\n<p>\u4e92\u8865\u6ee4\u6ce2\u7684\u6743\u91cd \u03b1 \u662f\u5199\u6b7b\u7684\u3002\u5361\u5c14\u66fc\u6ee4\u6ce2\u66f4\u806a\u660e&#xff1a;\u5b83\u6709\u4e00\u4e2a\u9884\u6d4b &#043; \u6821\u6b63\u7684\u4e24\u6b65\u5faa\u73af&#xff0c;\u4f1a\u6839\u636e\u566a\u58f0\u81ea\u52a8\u8c03\u6574\u6743\u91cd&#xff0c;\u662f&#034;\u7ebf\u6027\u7cfb\u7edf\u7684\u6700\u4f18\u4f30\u8ba1\u5668&#034;\u3002<\/p>\n<p>        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510          \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n  \u9884\u6d4b  \u2502 \u89d2\u5ea6&#061;\u89d2\u5ea6&#043;    \u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6\u2502 \u6821\u6b63          \u2502<br \/>\n        \u2502 (gyro-bias)dt\u2502          \u2502 \u89d2\u5ea6 &#043;&#061; K\u00b7(&#8230;)\u2502<br \/>\n        \u2502 P &#061; APAT&#043;Q   \u2502          \u2502 K &#061; \u6700\u4f18\u589e\u76ca   \u2502<br \/>\n        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518          \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u25b2                        \u2502<br \/>\n              \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  (\u5faa\u73af)<\/p>\n<p>\u516c\u5f0f&#xff08;\u4e0d\u7528\u80cc&#xff0c;\u7406\u89e3\u5373\u53ef&#xff09;&#xff1a;<\/p>\n<p>\u9884\u6d4b&#xff1a;x\u0302k &#061; A\u00b7x\u0302k-1 &#043; B\u00b7uk &#xff0c; Pk &#061; A\u00b7Pk-1\u00b7A\u1d40 &#043; Q<br \/>\n\u6821\u6b63&#xff1a;K &#061; Pk\u00b7H\u1d40(H\u00b7Pk\u00b7H\u1d40&#043;R)\u207b\u00b9 &#xff0c; x\u0302k &#061; x\u0302k &#043; K\u00b7(zk \u2212 H\u00b7x\u0302k)<\/p>\n<ul>\n<li>\u4f18\u70b9&#xff1a;\u66f4\u4f18\u3001\u80fd\u663e\u5f0f\u5efa\u6a21\u566a\u58f0\u3002<\/li>\n<li>\u7f3a\u70b9&#xff1a;\u7b97\u5f97\u591a\u4e00\u70b9&#xff0c;\u8981\u8c03 3 \u4e2a\u566a\u58f0\u53c2\u6570&#xff08;Q_angle\u3001Q_gyro\u3001R_angle&#xff09;&#xff0c;\u8c03\u8d77\u6765\u6bd4\u4e92\u8865\u6ee4\u6ce2\u8d39\u52b2\u3002<\/li>\n<li>\u65e9\u671f\u5728 51\/STM32 \u4e0a\u5f88\u6d41\u884c\u505a\u5355\u8f74\u59ff\u6001&#xff08;\u4e00\u6b21\u7b97\u4e00\u4e2a\u8f74&#xff09;\u3002<\/li>\n<\/ul>\n<h4>&#x1f634; DMP&#xff1a;MPU6050 \u81ea\u5e26\u7684&#034;\u5077\u61d2\u795e\u5668&#034;<\/h4>\n<p>\u91cd\u70b9\u6765\u4e86&#xff01;MPU6050 \u82af\u7247\u5185\u90e8\u81ea\u5e26\u4e00\u4e2a\u6570\u5b57\u8fd0\u52a8\u5904\u7406\u5668 DMP&#xff0c;\u53ef\u4ee5\u76f4\u63a5\u5728\u786c\u4ef6\u91cc\u5b8c\u6210\u59ff\u6001\u89e3\u7b97&#xff0c;\u8f93\u51fa\u73b0\u6210\u7684\u56db\u5143\u6570&#xff0c;\u90fd\u4e0d\u7528\u4f60\u81ea\u5df1\u5199 Mahony\/\u5361\u5c14\u66fc&#xff01;<\/p>\n<p><span class=\"token comment\">\/\/ \u4ece DMP \u7684 FIFO \u8bfb\u51fa\u56db\u5143\u6570&#xff08;q30 \u5b9a\u70b9\u683c\u5f0f&#xff09;<\/span><br \/>\n<span class=\"token keyword\">long<\/span> quat<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token function\">dmp_read_fifo<\/span><span class=\"token punctuation\">(<\/span>gyro<span class=\"token punctuation\">,<\/span> accel<span class=\"token punctuation\">,<\/span> quat<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>timestamp<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>sensors<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>more<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u9664\u4ee5 2^30 \u8f6c\u6210\u6d6e\u70b9<\/span><br \/>\nq0 <span class=\"token operator\">&#061;<\/span> quat<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">1073741824.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\nq1 <span class=\"token operator\">&#061;<\/span> quat<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">1073741824.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\nq2 <span class=\"token operator\">&#061;<\/span> quat<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">1073741824.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\nq3 <span class=\"token operator\">&#061;<\/span> quat<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">1073741824.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token comment\">\/\/ \u518d\u7528\u4e0a\u7ae0\u7684\u516c\u5f0f\u628a\u56db\u5143\u6570\u6362\u7b97\u6210\u6b27\u62c9\u89d2\u5373\u53ef<\/span><\/p>\n<p>&#x1f4a1; \u5b98\u65b9\u79fb\u690d\u5305 MPU6050 &#043; dmp6Axis&#xff08;Jrowberg&#xff09;\u662f\u5927\u5bb6\u6700\u5e38\u7528\u7684\u3002\u79fb\u690d\u597d\u5c31\u80fd\u76f4\u63a5\u62ff\u89d2\u5ea6&#xff0c;\u975e\u5e38\u9002\u5408\u5feb\u901f\u4e0a\u624b\u6216\u7b97\u529b\u4f4e\u7684 MCU\u3002<\/p>\n<h4>\u2696\ufe0f \u56db\u79cd\u65b9\u6848\u600e\u4e48\u9009&#xff1f;&#xff08;\u4e00\u5f20\u8868\u770b\u6e05&#xff09;<\/h4>\n<table>\n<tr>\u65b9\u6848\u539f\u7406\u8ba1\u7b97\u91cf\u7a33\u5b9a\u6027\u9002\u5408\u573a\u666f<\/tr>\n<tbody>\n<tr>\n<td>\u4e00\u9636\u4e92\u8865\u6ee4\u6ce2<\/td>\n<td>\u56fa\u5b9a\u6743\u91cd\u52a0\u6743<\/td>\n<td>\u5f88\u5c0f<\/td>\n<td>\u4e00\u822c<\/td>\n<td>\u5e73\u8861\u5c0f\u8f66\u3001\u5165\u95e8\u7406\u89e3<\/td>\n<\/tr>\n<tr>\n<td>\u5361\u5c14\u66fc\u6ee4\u6ce2<\/td>\n<td>\u6700\u4f18\u4f30\u8ba1&#xff08;\u9884\u6d4b&#043;\u6821\u6b63&#xff09;<\/td>\n<td>\u4e2d<\/td>\n<td>\u8f83\u597d&#xff0c;\u8981\u8c03\u53c2\u6570<\/td>\n<td>\u5355\u8f74\u89d2\u5ea6\u3001\u8981\u5e73\u6ed1<\/td>\n<\/tr>\n<tr>\n<td>Mahony\/Madgwick<\/td>\n<td>\u56db\u5143\u6570\u4e92\u8865\u6ee4\u6ce2<\/td>\n<td>\u5c0f<\/td>\n<td>\u597d\u3001\u65e0\u4e07\u5411\u9501<\/td>\n<td>\u98de\u63a7\u59ff\u6001\u89e3\u7b97&#xff08;\u6700\u63a8\u8350&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u786c\u4ef6 DMP<\/td>\n<td>\u82af\u7247\u5185\u90e8\u786c\u4ef6\u89e3\u7b97<\/td>\n<td>\u6700\u5c0f(MCU)<\/td>\n<td>\u597d&#xff0c;\u4f46\u91c7\u6837\u7387\u56fa\u5b9a<\/td>\n<td>\u5feb\u901f\u4e0a\u624b\u3001\u4f4e\u7b97\u529b MCU<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4ee5\u4e0b\u662f\u5bf9roll\u548cpitch\u89d2\u8fdb\u884c\u6ee4\u6ce2&#xff0c;\u56e0\u4e3a MPU6050 \u53ea\u6709 6 \u4e2a\u8f74&#xff0c;\u6ca1\u6709\u201c\u5730\u78c1\u8ba1\u201d&#xff08;\u6307\u5357\u9488&#xff09;&#xff0c;\u6240\u4ee5\u5b83\u5728\u7269\u7406\u4e0a\u6839\u672c\u65e0\u6cd5\u5bf9 Yaw&#xff08;\u504f\u822a\u89d2&#xff09;\u8fdb\u884c\u6ee4\u6ce2\u6821\u6b63<\/p>\n<p>\u4ee5\u4e0a\u90fd\u6709ai\u548c\u7b97\u6cd5\u5e93\u5b9e\u73b0&#xff0c;\u76f4\u63a5\u8c03\u7528api\u5c31\u884c&#xff0c;\u63a5\u4e0b\u6765\u6211\u4f1a\u5bf9\u6bd4\u6ca1\u6709\u6ee4\u6ce2\u548c\u6ee4\u6ce2\u4ee5\u540e\u7684\u6548\u679c&#xff0c;\u901a\u8fc7vofa\u5c55\u793a<\/p>\n<h3>5.1 \u4e00\u9636\u4e92\u8865\u6ee4\u6ce2<\/h3>\n<h4>1. \u6ee4\u6ce2\u5668\u5934\u6587\u4ef6 mpu6050_filter.h<\/h4>\n<p>\u521b\u5efa\u5982\u4e0b\u7684\u6587\u4ef6&#xff0c;\u7c98\u8d34\u590d\u5236&#xff1a;<\/p>\n<p>#ifndef __MPU6050_FILTER_H<br \/>\n#define __MPU6050_FILTER_H<\/p>\n<p>#include &#034;main.h&#034;<br \/>\n#include &#034;Tmpu6050.h&#034;<br \/>\n#include &lt;math.h&gt;<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u59ff\u6001\u89d2\u7ed3\u6784\u4f53 &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\ntypedef struct {<br \/>\n    float pitch;    \/\/ \u4fef\u4ef0\u89d2 (\u7ed5Y\u8f74&#xff0c;\u62ac\u5934\u4f4e\u5934)<br \/>\n    float roll;     \/\/ \u7ffb\u6eda\u89d2 (\u7ed5X\u8f74&#xff0c;\u5de6\u53f3\u503e\u659c)<br \/>\n    float yaw;      \/\/ \u504f\u822a\u89d2 (\u7ed5Z\u8f74&#xff0c;\u5de6\u53f3\u8f6c\u5411&#xff0c;\u4ec5\u9640\u87ba\u4eea\u79ef\u5206)<br \/>\n} Attitude_t;<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u5361\u5c14\u66fc\u6ee4\u6ce2\u5668\u72b6\u6001\u7ed3\u6784\u4f53 &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\ntypedef struct {<br \/>\n    float angle;        \/\/ \u5f53\u524d\u6700\u4f18\u89d2\u5ea6\u4f30\u8ba1\u503c<br \/>\n    float bias;         \/\/ \u5f53\u524d\u9640\u87ba\u4eea\u96f6\u504f\u4f30\u8ba1\u503c<br \/>\n    float P[2][2];      \/\/ \u8bef\u5dee\u534f\u65b9\u5dee\u77e9\u9635 (2&#215;2)<br \/>\n    float Q_angle;      \/\/ \u89d2\u5ea6\u8fc7\u7a0b\u566a\u58f0 (\u8d8a\u5c0f\u8d8a\u4fe1\u4efb\u9640\u87ba\u4eea)<br \/>\n    float Q_bias;       \/\/ \u96f6\u504f\u8fc7\u7a0b\u566a\u58f0<br \/>\n    float R_measure;    \/\/ \u6d4b\u91cf\u566a\u58f0 (\u8d8a\u5c0f\u8d8a\u4fe1\u4efb\u52a0\u901f\u5ea6\u8ba1)<br \/>\n} Kalman_t;<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u51fd\u6570\u58f0\u660e &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/p>\n<p>\/\/ &#8212; \u901a\u7528\u5de5\u5177 &#8212;<br \/>\nvoid MPU6050_GetAccelAngles(float *mpu_data, float *accel_pitch, float *accel_roll);<\/p>\n<p>\/\/ &#8212; \u65b9\u6cd5\u2460&#xff1a;\u4e00\u9636\u4e92\u8865\u6ee4\u6ce2 &#8212;<br \/>\nvoid Filter_Complementary1st_Init(Attitude_t *att);<br \/>\nvoid Filter_Complementary1st_Update(Attitude_t *att, float *mpu_data, float dt);<\/p>\n<p>\/\/ &#8212; \u65b9\u6cd5\u2461&#xff1a;\u4e8c\u9636\u4e92\u8865\u6ee4\u6ce2 &#8212;<br \/>\nvoid Filter_Complementary2nd_Init(Attitude_t *att);<br \/>\nvoid Filter_Complementary2nd_Update(Attitude_t *att, float *mpu_data, float dt);<\/p>\n<p>\/\/ &#8212; \u65b9\u6cd5\u2462&#xff1a;\u5361\u5c14\u66fc\u6ee4\u6ce2 &#8212;<br \/>\nvoid Filter_Kalman_Init(Kalman_t *kf);<br \/>\nfloat Filter_Kalman_Update(Kalman_t *kf, float accel_angle, float gyro_rate, float dt);<br \/>\nvoid Filter_Kalman_GetAttitude(Kalman_t *kf_pitch, Kalman_t *kf_roll,<br \/>\n                                Attitude_t *att, float *mpu_data, float dt);<\/p>\n<p>\/\/ &#8212; VOFA&#043; \u8f93\u51fa (JustFloat \u534f\u8bae) &#8212;<br \/>\nvoid VOFA_SendData(float *data, uint8_t count);<\/p>\n<p>#endif<\/p>\n<hr \/>\n<h4>2. \u6ee4\u6ce2\u5668\u5b9e\u73b0 mpu6050_filter.c<\/h4>\n<p>#include &#034;mpu6050_filter.h&#034;<br \/>\n#include &lt;string.h&gt;<br \/>\n#include &lt;stdio.h&gt;<\/p>\n<p>extern UART_HandleTypeDef huart1; \/\/ \u6839\u636e\u4f60\u7684\u5b9e\u9645\u4e32\u53e3\u4fee\u6539<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/                   \u901a\u7528\u5de5\u5177&#xff1a;\u52a0\u901f\u5ea6\u8ba1\u7b97\u503e\u89d2<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u7528 atan2 \u4ece\u52a0\u901f\u5ea6\u76f4\u63a5\u7b97\u51fa\u9759\u6001\u89d2\u5ea6&#xff08;\u53ea\u5728\u9759\u6b62\/\u7f13\u6162\u8fd0\u52a8\u65f6\u51c6\u786e&#xff09;<br \/>\nvoid MPU6050_GetAccelAngles(float *mpu_data, float *accel_pitch, float *accel_roll) {<br \/>\n    float ax &#061; mpu_data[0]; \/\/ \u5355\u4f4d: g<br \/>\n    float ay &#061; mpu_data[1];<br \/>\n    float az &#061; mpu_data[2];<\/p>\n<p>    \/\/ Pitch: \u7ed5Y\u8f74\u65cb\u8f6c&#xff08;\u62ac\u5934\u4f4e\u5934&#xff09;<br \/>\n    *accel_pitch &#061; atan2f(ax, sqrtf(ay * ay &#043; az * az)) * 57.2957795f; \/\/ \u5f27\u5ea6\u8f6c\u89d2\u5ea6<\/p>\n<p>    \/\/ Roll: \u7ed5X\u8f74\u65cb\u8f6c&#xff08;\u5de6\u53f3\u503e\u659c&#xff09;<br \/>\n    *accel_roll  &#061; atan2f(ay, sqrtf(ax * ax &#043; az * az)) * 57.2957795f;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/              \u65b9\u6cd5\u2460&#xff1a;\u4e00\u9636\u4e92\u8865\u6ee4\u6ce2 (First-Order Complementary)<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u539f\u7406&#xff1a;<br \/>\n\/\/   angle &#061; \u03b1 * (angle &#043; gyro * dt) &#043; (1-\u03b1) * accel_angle<br \/>\n\/\/          \u2191 \u9ad8\u901a\u6ee4\u6ce2&#xff08;\u4fe1\u4efb\u9640\u87ba\u4eea\u77ed\u671f\u53d8\u5316&#xff09;  \u2191 \u4f4e\u901a\u6ee4\u6ce2&#xff08;\u4fe1\u4efb\u52a0\u901f\u5ea6\u8ba1\u957f\u671f\u8d8b\u52bf&#xff09;<br \/>\n\/\/   \u03b1 \u8d8a\u5927 \u2192 \u8d8a\u4fe1\u4efb\u9640\u87ba\u4eea&#xff08;\u54cd\u5e94\u5feb\u4f46\u4f1a\u6f02\u79fb&#xff09;<br \/>\n\/\/   \u03b1 \u8d8a\u5c0f \u2192 \u8d8a\u4fe1\u4efb\u52a0\u901f\u5ea6\u8ba1&#xff08;\u7a33\u5b9a\u4f46\u6709\u9707\u52a8\u566a\u58f0&#xff09;<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/p>\n<p>#define COMP1_ALPHA  0.98f  \/\/ \u4e92\u8865\u7cfb\u6570&#xff0c;\u901a\u5e38\u53d6 0.95 ~ 0.99<\/p>\n<p>void Filter_Complementary1st_Init(Attitude_t *att) {<br \/>\n    att-&gt;pitch &#061; 0.0f;<br \/>\n    att-&gt;roll  &#061; 0.0f;<br \/>\n    att-&gt;yaw   &#061; 0.0f;<br \/>\n}<\/p>\n<p>void Filter_Complementary1st_Update(Attitude_t *att, float *mpu_data, float dt) {<br \/>\n    \/\/ 1. \u4ece\u52a0\u901f\u5ea6\u8ba1\u7b97\u9759\u6001\u89d2\u5ea6<br \/>\n    float accel_pitch, accel_roll;<br \/>\n    MPU6050_GetAccelAngles(mpu_data, &amp;accel_pitch, &amp;accel_roll);<\/p>\n<p>    \/\/ 2. \u8bfb\u53d6\u9640\u87ba\u4eea\u89d2\u901f\u5ea6 (\u00b0\/s)<br \/>\n    float gyro_x &#061; mpu_data[4]; \/\/ Roll  \u65b9\u5411\u7684\u89d2\u901f\u5ea6<br \/>\n    float gyro_y &#061; mpu_data[5]; \/\/ Pitch \u65b9\u5411\u7684\u89d2\u901f\u5ea6<br \/>\n    float gyro_z &#061; mpu_data[6]; \/\/ Yaw   \u65b9\u5411\u7684\u89d2\u901f\u5ea6<\/p>\n<p>    \/\/ 3. \u4e00\u9636\u4e92\u8865\u6ee4\u6ce2\u6838\u5fc3\u516c\u5f0f<br \/>\n    \/\/    \u77ed\u671f\u76f8\u4fe1\u9640\u87ba\u4eea\u79ef\u5206&#xff0c;\u957f\u671f\u7528\u52a0\u901f\u5ea6\u8ba1\u4fee\u6b63\u6f02\u79fb<br \/>\n    att-&gt;pitch &#061; COMP1_ALPHA * (att-&gt;pitch &#043; gyro_y * dt) &#043; (1.0f &#8211; COMP1_ALPHA) * accel_pitch;<br \/>\n    att-&gt;roll  &#061; COMP1_ALPHA * (att-&gt;roll  &#043; gyro_x * dt) &#043; (1.0f &#8211; COMP1_ALPHA) * accel_roll;<br \/>\n    att-&gt;yaw  &#043;&#061; gyro_z * dt; \/\/ Yaw \u53ea\u80fd\u9760\u9640\u87ba\u4eea\u79ef\u5206&#xff08;\u52a0\u901f\u5ea6\u8ba1\u65e0\u6cd5\u6d4b\u504f\u822a&#xff09;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/              \u65b9\u6cd5\u2461&#xff1a;\u4e8c\u9636\u4e92\u8865\u6ee4\u6ce2 (Second-Order Complementary)<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u539f\u7406&#xff1a;\u5728\u4e00\u9636\u4e92\u8865\u7684\u57fa\u7840\u4e0a&#xff0c;\u5f15\u5165\u52a0\u901f\u5ea6\u8ba1\u89d2\u5ea6\u7684\u53d8\u5316\u7387\u4f5c\u4e3a\u7b2c\u4e8c\u4e2a\u4fee\u6b63\u9879&#xff0c;<br \/>\n\/\/       \u76f8\u5f53\u4e8e\u591a\u4e86\u4e00\u4e2a&#034;\u5fae\u5206\u6821\u6b63&#034;\u73af\u8282&#xff0c;\u8ba9\u6ee4\u6ce2\u5668\u5bf9\u7a81\u53d8\u66f4\u654f\u611f\u4e14\u66f4\u5e73\u6ed1\u3002<br \/>\n\/\/<br \/>\n\/\/   x1 &#061; (accel_angle &#8211; angle) * k1<br \/>\n\/\/   x2 &#043;&#061; (accel_angle &#8211; angle) * k2 * dt<br \/>\n\/\/   angle &#043;&#061; (gyro_rate &#043; x1 &#043; x2) * dt<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/p>\n<p>\/\/ \u4e8c\u9636\u4e92\u8865\u6ee4\u6ce2\u5185\u90e8\u72b6\u6001<br \/>\nstatic float comp2_x1_pitch &#061; 0, comp2_x2_pitch &#061; 0;<br \/>\nstatic float comp2_x1_roll  &#061; 0, comp2_x2_roll  &#061; 0;<\/p>\n<p>#define COMP2_K1  0.02f   \/\/ \u6bd4\u4f8b\u4fee\u6b63\u7cfb\u6570&#xff08;\u8d8a\u5927\u8d8a\u4fe1\u52a0\u901f\u5ea6\u8ba1&#xff09;<br \/>\n#define COMP2_K2  0.005f  \/\/ \u79ef\u5206\u4fee\u6b63\u7cfb\u6570&#xff08;\u6d88\u9664\u7a33\u6001\u8bef\u5dee&#xff09;<\/p>\n<p>void Filter_Complementary2nd_Init(Attitude_t *att) {<br \/>\n    att-&gt;pitch &#061; 0.0f;<br \/>\n    att-&gt;roll  &#061; 0.0f;<br \/>\n    att-&gt;yaw   &#061; 0.0f;<br \/>\n    comp2_x1_pitch &#061; 0; comp2_x2_pitch &#061; 0;<br \/>\n    comp2_x1_roll  &#061; 0; comp2_x2_roll  &#061; 0;<br \/>\n}<\/p>\n<p>void Filter_Complementary2nd_Update(Attitude_t *att, float *mpu_data, float dt) {<br \/>\n    float accel_pitch, accel_roll;<br \/>\n    MPU6050_GetAccelAngles(mpu_data, &amp;accel_pitch, &amp;accel_roll);<\/p>\n<p>    float gyro_x &#061; mpu_data[4];<br \/>\n    float gyro_y &#061; mpu_data[5];<br \/>\n    float gyro_z &#061; mpu_data[6];<\/p>\n<p>    \/\/ &#8212; Pitch \u4e8c\u9636\u4e92\u8865 &#8212;<br \/>\n    float err_pitch &#061; accel_pitch &#8211; att-&gt;pitch; \/\/ \u52a0\u901f\u5ea6\u8ba1\u4e0e\u5f53\u524d\u4f30\u8ba1\u7684\u504f\u5dee<br \/>\n    comp2_x1_pitch &#061; err_pitch * COMP2_K1;      \/\/ \u6bd4\u4f8b\u4fee\u6b63<br \/>\n    comp2_x2_pitch &#043;&#061; err_pitch * COMP2_K2 * dt; \/\/ \u79ef\u5206\u4fee\u6b63&#xff08;\u6d88\u9664\u7a33\u6001\u504f\u5dee&#xff09;<br \/>\n    att-&gt;pitch &#043;&#061; (gyro_y &#043; comp2_x1_pitch &#043; comp2_x2_pitch) * dt;<\/p>\n<p>    \/\/ &#8212; Roll \u4e8c\u9636\u4e92\u8865 &#8212;<br \/>\n    float err_roll &#061; accel_roll &#8211; att-&gt;roll;<br \/>\n    comp2_x1_roll &#061; err_roll * COMP2_K1;<br \/>\n    comp2_x2_roll &#043;&#061; err_roll * COMP2_K2 * dt;<br \/>\n    att-&gt;roll &#043;&#061; (gyro_x &#043; comp2_x1_roll &#043; comp2_x2_roll) * dt;<\/p>\n<p>    \/\/ &#8212; Yaw \u4ec5\u9640\u87ba\u4eea\u79ef\u5206 &#8212;<br \/>\n    att-&gt;yaw &#043;&#061; gyro_z * dt;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/              \u65b9\u6cd5\u2462&#xff1a;\u5361\u5c14\u66fc\u6ee4\u6ce2 (Kalman Filter)<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u539f\u7406&#xff08;\u7b80\u5316\u7248&#xff09;&#xff1a;<br \/>\n\/\/   \u9884\u6d4b\u9636\u6bb5&#xff1a;\u7528\u9640\u87ba\u4eea\u79ef\u5206\u9884\u6d4b\u4e0b\u4e00\u65f6\u523b\u7684\u89d2\u5ea6<br \/>\n\/\/   \u66f4\u65b0\u9636\u6bb5&#xff1a;\u7528\u52a0\u901f\u5ea6\u8ba1\u7684\u6d4b\u91cf\u503c\u4fee\u6b63\u9884\u6d4b\u7ed3\u679c<br \/>\n\/\/   \u5361\u5c14\u66fc\u589e\u76ca K \u4f1a\u81ea\u52a8\u8c03\u6574&#xff1a;<br \/>\n\/\/     &#8211; \u5982\u679c\u52a0\u901f\u5ea6\u8ba1\u566a\u58f0\u5927 \u2192 K \u53d8\u5c0f \u2192 \u66f4\u4fe1\u4efb\u9640\u87ba\u4eea<br \/>\n\/\/     &#8211; \u5982\u679c\u9640\u87ba\u4eea\u6f02\u79fb\u5927   \u2192 K \u53d8\u5927 \u2192 \u66f4\u4fe1\u4efb\u52a0\u901f\u5ea6\u8ba1<br \/>\n\/\/   \u6700\u7ec8\u5f97\u5230&#034;\u6570\u5b66\u4e0a\u6700\u4f18&#034;\u7684\u89d2\u5ea6\u4f30\u8ba1<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/p>\n<p>void Filter_Kalman_Init(Kalman_t *kf) {<br \/>\n    kf-&gt;angle &#061; 0.0f;<br \/>\n    kf-&gt;bias  &#061; 0.0f;<br \/>\n    kf-&gt;P[0][0] &#061; 1.0f;  kf-&gt;P[0][1] &#061; 0.0f;<br \/>\n    kf-&gt;P[1][0] &#061; 0.0f;  kf-&gt;P[1][1] &#061; 1.0f;<\/p>\n<p>    \/\/ \u566a\u58f0\u53c2\u6570&#xff08;\u53ef\u6839\u636e\u5b9e\u9645\u4f20\u611f\u5668\u566a\u58f0\u8c03\u6574&#xff09;<br \/>\n    kf-&gt;Q_angle   &#061; 0.001f;  \/\/ \u89d2\u5ea6\u8fc7\u7a0b\u566a\u58f0&#xff08;\u8d8a\u5c0f \u2192 \u8d8a\u4fe1\u4efb\u9640\u87ba\u4eea\u9884\u6d4b&#xff09;<br \/>\n    kf-&gt;Q_bias    &#061; 0.003f;  \/\/ \u96f6\u504f\u8fc7\u7a0b\u566a\u58f0<br \/>\n    kf-&gt;R_measure &#061; 0.03f;   \/\/ \u6d4b\u91cf\u566a\u58f0&#xff08;\u8d8a\u5c0f \u2192 \u8d8a\u4fe1\u4efb\u52a0\u901f\u5ea6\u8ba1\u6d4b\u91cf&#xff09;<br \/>\n}<\/p>\n<p>float Filter_Kalman_Update(Kalman_t *kf, float accel_angle, float gyro_rate, float dt) {<br \/>\n    \/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u7b2c\u4e00\u6b65&#xff1a;\u9884\u6d4b (Predict) &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n    \/\/ \u7528\u9640\u87ba\u4eea\u89d2\u901f\u5ea6\u9884\u6d4b\u5f53\u524d\u89d2\u5ea6&#xff08;\u51cf\u53bb\u4f30\u8ba1\u7684\u96f6\u504f&#xff09;<br \/>\n    kf-&gt;angle &#043;&#061; dt * (gyro_rate &#8211; kf-&gt;bias);<\/p>\n<p>    \/\/ \u66f4\u65b0\u8bef\u5dee\u534f\u65b9\u5dee\u77e9\u9635&#xff08;\u4e0d\u786e\u5b9a\u6027\u4f1a\u968f\u65f6\u95f4\u589e\u5927&#xff09;<br \/>\n    kf-&gt;P[0][0] &#043;&#061; dt * (dt * kf-&gt;P[1][1] &#8211; kf-&gt;P[0][1] &#8211; kf-&gt;P[1][0] &#043; kf-&gt;Q_angle);<br \/>\n    kf-&gt;P[0][1] -&#061; dt * kf-&gt;P[1][1];<br \/>\n    kf-&gt;P[1][0] -&#061; dt * kf-&gt;P[1][1];<br \/>\n    kf-&gt;P[1][1] &#043;&#061; kf-&gt;Q_bias * dt;<\/p>\n<p>    \/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u7b2c\u4e8c\u6b65&#xff1a;\u66f4\u65b0 (Update) &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n    \/\/ \u8ba1\u7b97\u5361\u5c14\u66fc\u589e\u76ca K<br \/>\n    float S &#061; kf-&gt;P[0][0] &#043; kf-&gt;R_measure; \/\/ \u521b\u65b0\u534f\u65b9\u5dee<br \/>\n    float K[2]; \/\/ \u5361\u5c14\u66fc\u589e\u76ca\u5411\u91cf<br \/>\n    K[0] &#061; kf-&gt;P[0][0] \/ S;<br \/>\n    K[1] &#061; kf-&gt;P[1][0] \/ S;<\/p>\n<p>    \/\/ \u7528\u52a0\u901f\u5ea6\u8ba1\u6d4b\u91cf\u503c\u4fee\u6b63\u9884\u6d4b<br \/>\n    float y &#061; accel_angle &#8211; kf-&gt;angle; \/\/ \u521b\u65b0&#xff08;\u6d4b\u91cf\u6b8b\u5dee&#xff09;<br \/>\n    kf-&gt;angle &#043;&#061; K[0] * y;<br \/>\n    kf-&gt;bias  &#043;&#061; K[1] * y;<\/p>\n<p>    \/\/ \u66f4\u65b0\u8bef\u5dee\u534f\u65b9\u5dee\u77e9\u9635&#xff08;\u4e0d\u786e\u5b9a\u6027\u56e0\u4fee\u6b63\u800c\u51cf\u5c0f&#xff09;<br \/>\n    float P00_temp &#061; kf-&gt;P[0][0];<br \/>\n    float P01_temp &#061; kf-&gt;P[0][1];<br \/>\n    kf-&gt;P[0][0] -&#061; K[0] * P00_temp;<br \/>\n    kf-&gt;P[0][1] -&#061; K[0] * P01_temp;<br \/>\n    kf-&gt;P[1][0] -&#061; K[1] * P00_temp;<br \/>\n    kf-&gt;P[1][1] -&#061; K[1] * P01_temp;<\/p>\n<p>    return kf-&gt;angle;<br \/>\n}<\/p>\n<p>\/\/ \u5c01\u88c5&#xff1a;\u4e00\u6b21\u6027\u8ba1\u7b97 Pitch \u548c Roll<br \/>\nvoid Filter_Kalman_GetAttitude(Kalman_t *kf_pitch, Kalman_t *kf_roll,<br \/>\n                                Attitude_t *att, float *mpu_data, float dt) {<br \/>\n    float accel_pitch, accel_roll;<br \/>\n    MPU6050_GetAccelAngles(mpu_data, &amp;accel_pitch, &amp;accel_roll);<\/p>\n<p>    att-&gt;pitch &#061; Filter_Kalman_Update(kf_pitch, accel_pitch, mpu_data[5], dt);<br \/>\n    att-&gt;roll  &#061; Filter_Kalman_Update(kf_roll,  accel_roll,  mpu_data[4], dt);<br \/>\n    att-&gt;yaw  &#043;&#061; mpu_data[6] * dt;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/              VOFA&#043; JustFloat \u534f\u8bae\u8f93\u51fa<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ VOFA&#043; \u7684 JustFloat \u534f\u8bae&#xff1a;<br \/>\n\/\/   \u76f4\u63a5\u53d1\u9001 float \u6570\u636e\u7684\u4e8c\u8fdb\u5236\u539f\u59cb\u5b57\u8282&#xff08;\u5c0f\u7aef\u5e8f&#xff09;<br \/>\n\/\/   \u6bcf\u7ec4\u6570\u636e\u7ed3\u5c3e\u8ffd\u52a0 4 \u4e2a\u5b57\u8282\u7684\u5e27\u5c3e&#xff1a;0x00 0x00 0x80 0x7F<br \/>\n\/\/   VOFA&#043; \u4f1a\u81ea\u52a8\u8bc6\u522b\u5e76\u753b\u51fa\u6ce2\u5f62<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/p>\n<p>void VOFA_SendData(float *data, uint8_t count) {<br \/>\n    \/\/ \u5e27\u5c3e\u6807\u5fd7&#xff08;\u56fa\u5b9a\u4e3a 0x007F8000 \u7684\u5c0f\u7aef\u8868\u793a&#xff09;<br \/>\n    static const uint8_t tail[4] &#061; {0x00, 0x00, 0x80, 0x7F};<\/p>\n<p>    \/\/ \u53d1\u9001\u6240\u6709 float \u6570\u636e&#xff08;\u6bcf\u4e2a float \u5360 4 \u5b57\u8282&#xff09;<br \/>\n    HAL_UART_Transmit(&amp;huart1, (uint8_t *)data, count * sizeof(float), 10);<\/p>\n<p>    \/\/ \u53d1\u9001\u5e27\u5c3e<br \/>\n    HAL_UART_Transmit(&amp;huart1, (uint8_t *)tail, 4, 10);<br \/>\n}<\/p>\n<hr \/>\n<h4>3. \u4e3b\u51fd\u6570 main.c \u2014 \u56db\u79cd\u6ee4\u6ce2\u5bf9\u6bd4\u9a8c\u8bc1<\/h4>\n<p>\/* USER CODE BEGIN Header *\/<br \/>\n\/**<br \/>\n  ******************************************************************************<br \/>\n  * &#064;file           : main.c<br \/>\n  * &#064;brief          : Main program body<br \/>\n  ******************************************************************************<br \/>\n  * &#064;attention<br \/>\n  *<br \/>\n  * Copyright (c) 2026 STMicroelectronics.<br \/>\n  * All rights reserved.<br \/>\n  *<br \/>\n  * This software is licensed under terms that can be found in the LICENSE file<br \/>\n  * in the root directory of this software component.<br \/>\n  * If no LICENSE file comes with this software, it is provided AS-IS.<br \/>\n  *<br \/>\n  ******************************************************************************<br \/>\n  *\/<br \/>\n\/* USER CODE END Header *\/<br \/>\n\/* Includes &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*\/<br \/>\n#include &#034;main.h&#034;<br \/>\n#include &#034;i2c.h&#034;<br \/>\n#include &#034;usart.h&#034;<br \/>\n#include &#034;gpio.h&#034;<\/p>\n<p>\/* Private includes &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*\/<br \/>\n\/* USER CODE BEGIN Includes *\/<br \/>\n#include &#034;debug_config.h&#034;<br \/>\n#include &#034;Tmpu6050.h&#034;<br \/>\n#include &#034;mpu6050_filter_all.h&#034;<br \/>\n\/* USER CODE END Includes *\/<\/p>\n<p>\/* Private typedef &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*\/<br \/>\n\/* USER CODE BEGIN PTD *\/<\/p>\n<p>\/* USER CODE END PTD *\/<\/p>\n<p>\/* Private define &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*\/<br \/>\n\/* USER CODE BEGIN PD *\/<\/p>\n<p>\/* USER CODE END PD *\/<\/p>\n<p>\/* Private macro &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*\/<br \/>\n\/* USER CODE BEGIN PM *\/<\/p>\n<p>\/* USER CODE END PM *\/<\/p>\n<p>\/* Private variables &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*\/<\/p>\n<p>\/* USER CODE BEGIN PV *\/<br \/>\n\/\/ \u56db\u79cd\u6ee4\u6ce2\u65b9\u6cd5\u7684\u59ff\u6001\u89d2\u7ed3\u679c<br \/>\nAttitude_t att_comp1;   \/\/ \u4e00\u9636\u4e92\u8865<br \/>\nAttitude_t att_comp2;   \/\/ \u4e8c\u9636\u4e92\u8865<br \/>\nAttitude_t att_kalman;  \/\/ \u5361\u5c14\u66fc<\/p>\n<p>\/\/ \u5361\u5c14\u66fc\u6ee4\u6ce2\u5668\u5b9e\u4f8b&#xff08;Pitch \u548c Roll \u5404\u4e00\u4e2a&#xff09;<br \/>\nKalman_t kf_pitch, kf_roll;<br \/>\n\/\/ \u65f6\u95f4\u6b65\u957f&#xff08;10ms &#061; 100Hz&#xff09;<br \/>\n#define DT  0.01f<\/p>\n<p>\/\/ \u9009\u62e9\u5f53\u524d\u9a8c\u8bc1\u7684\u6ee4\u6ce2\u65b9\u6cd5&#xff08;\u6539\u8fd9\u4e2a\u6570\u5b57\u5207\u6362 1\/2\/3&#xff09;<br \/>\n#define FILTER_MODE  1   \/\/ 1&#061;\u4e00\u9636\u4e92\u8865, 2&#061;\u4e8c\u9636\u4e92\u8865, 3&#061;\u5361\u5c14\u66fc<br \/>\n\/* USER CODE END PV *\/<\/p>\n<p>\/* Private function prototypes &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*\/<br \/>\nvoid SystemClock_Config(void);<br \/>\n\/* USER CODE BEGIN PFP *\/<\/p>\n<p>\/* USER CODE END PFP *\/<\/p>\n<p>\/* Private user code &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*\/<br \/>\n\/* USER CODE BEGIN 0 *\/<br \/>\nfloat mpu_value[7]&#061;{0};<br \/>\n\/* USER CODE END 0 *\/<\/p>\n<p>\/**<br \/>\n  * &#064;brief  The application entry point.<br \/>\n  * &#064;retval int<br \/>\n  *\/<br \/>\nint main(void)<br \/>\n{<\/p>\n<p>  \/* USER CODE BEGIN 1 *\/<\/p>\n<p>  \/* USER CODE END 1 *\/<\/p>\n<p>  \/* MCU Configuration&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;*\/<\/p>\n<p>  \/* Reset of all peripherals, Initializes the Flash interface and the Systick. *\/<br \/>\n  HAL_Init();<\/p>\n<p>  \/* USER CODE BEGIN Init *\/<\/p>\n<p>  \/* USER CODE END Init *\/<\/p>\n<p>  \/* Configure the system clock *\/<br \/>\n  SystemClock_Config();<\/p>\n<p>  \/* USER CODE BEGIN SysInit *\/<\/p>\n<p>  \/* USER CODE END SysInit *\/<\/p>\n<p>  \/* Initialize all configured peripherals *\/<br \/>\n  MX_GPIO_Init();<br \/>\n  MX_I2C1_Init();<br \/>\n  MX_USART1_UART_Init();<br \/>\n  \/* USER CODE BEGIN 2 *\/<br \/>\n  MPU6050_Init();<br \/>\n  \/\/ \u4fdd\u6301\u9759\u6b62\u5e73\u653e 1 \u79d2\u949f\u8fdb\u884c\u81ea\u52a8\u6821\u51c6<br \/>\n  MPU6050_Calibrate();<br \/>\n  \/\/ 3. \u521d\u59cb\u5316\u6240\u6709\u6ee4\u6ce2\u5668<br \/>\n  Filter_Complementary1st_Init(&amp;att_comp1); \/\/ \u4e00\u9636\u4e92\u8865\u6ee4\u6ce2\u5668<br \/>\n  Filter_Complementary2nd_Init(&amp;att_comp2); \/\/ \u4e8c\u9636\u4e92\u8865\u6ee4\u6ce2\u5668<br \/>\n  Filter_Kalman_Init(&amp;kf_pitch); \/\/ pitch \u5361\u5c14\u66fc\u6ee4\u6ce2\u5668<br \/>\n  Filter_Kalman_Init(&amp;kf_roll); \/\/ roll \u5361\u5c14\u66fc\u6ee4\u6ce2\u5668<br \/>\n  att_kalman.pitch &#061; 0;<br \/>\n  att_kalman.roll &#061; 0;<br \/>\n  att_kalman.yaw &#061; 0;<br \/>\n  float accel_pitch_raw, accel_roll_raw;<br \/>\n  \/* USER CODE END 2 *\/<\/p>\n<p>  \/* Infinite loop *\/<br \/>\n  \/* USER CODE BEGIN WHILE *\/<br \/>\n  while (1)<br \/>\n  {<br \/>\n    \/\/ \u83b7\u53d6\u6821\u51c6\u540e\u7684\u6570\u636e<br \/>\n    MPU6050_GetCalibratedData(mpu_value);<br \/>\n    \/\/ &#061;&#061;&#061;&#061;&#061; \u540c\u65f6\u8fd0\u884c\u4e09\u79cd\u8f6f\u4ef6\u6ee4\u6ce2\u7b97\u6cd5 &#061;&#061;&#061;&#061;&#061;<br \/>\n    Filter_Complementary1st_Update(&amp;att_comp1, mpu_value, DT);<br \/>\n    Filter_Complementary2nd_Update(&amp;att_comp2, mpu_value, DT);<br \/>\n    Filter_Kalman_GetAttitude(&amp;kf_pitch, &amp;kf_roll, &amp;att_kalman, mpu_value, DT);<\/p>\n<p>    \/\/ &#061;&#061;&#061;&#061;&#061; \u52a0\u901f\u5ea6\u8ba1\u76f4\u63a5\u7b97\u51fa\u7684\u539f\u59cb\u89d2\u5ea6&#xff08;\u672a\u6ee4\u6ce2&#xff0c;\u4f5c\u4e3a\u53c2\u8003\u57fa\u51c6\u7ebf&#xff09;&#061;&#061;&#061;&#061;&#061;<br \/>\n    MPU6050_GetAccelAngles(mpu_value, &amp;accel_pitch_raw, &amp;accel_roll_raw);<\/p>\n<p>    \/\/ &#061;&#061;&#061;&#061;&#061; VOFA&#043; \u53ef\u89c6\u5316\u8f93\u51fa &#061;&#061;&#061;&#061;&#061;<br \/>\n    \/\/ \u53d1\u9001 8 \u4e2a\u901a\u9053\u7684\u6570\u636e\u5230 VOFA&#043; \u540c\u65f6\u663e\u793a\u5bf9\u6bd4&#xff1a;<br \/>\n    \/\/   CH1: \u52a0\u901f\u5ea6\u8ba1\u539f\u59cb Pitch&#xff08;\u6709\u566a\u58f0&#xff0c;\u4f5c\u4e3a\u53c2\u8003&#xff09;<br \/>\n    \/\/   CH2: \u4e00\u9636\u4e92\u8865 Pitch<br \/>\n    \/\/   CH3: \u4e8c\u9636\u4e92\u8865 Pitch<br \/>\n    \/\/   CH4: \u5361\u5c14\u66fc Pitch<br \/>\n    \/\/   CH5: \u52a0\u901f\u5ea6\u8ba1\u539f\u59cb Roll<br \/>\n    \/\/   CH6: \u4e00\u9636\u4e92\u8865 Roll<br \/>\n    \/\/   CH7: \u4e8c\u9636\u4e92\u8865 Roll<br \/>\n    \/\/   CH8: \u5361\u5c14\u66fc Roll<br \/>\n    float vofa_buf[8] &#061; {<br \/>\n      accel_pitch_raw,      \/\/ CH1 \u539f\u59cb\u52a0\u901f\u5ea6\u8ba1 Pitch<br \/>\n      att_comp1.pitch,      \/\/ CH2 \u4e00\u9636\u4e92\u8865 Pitch<br \/>\n      att_comp2.pitch,      \/\/ CH3 \u4e8c\u9636\u4e92\u8865 Pitch<br \/>\n      att_kalman.pitch,     \/\/ CH4 \u5361\u5c14\u66fc Pitch<br \/>\n      accel_roll_raw,       \/\/ CH5 \u539f\u59cb\u52a0\u901f\u5ea6\u8ba1 Roll<br \/>\n      att_comp1.roll,       \/\/ CH6 \u4e00\u9636\u4e92\u8865 Roll<br \/>\n      att_comp2.roll,       \/\/ CH7 \u4e8c\u9636\u4e92\u8865 Roll<br \/>\n      att_kalman.roll,      \/\/ CH8 \u5361\u5c14\u66fc Roll<br \/>\n  };<\/p>\n<p>    VOFA_SendData(vofa_buf, 8);<\/p>\n<p>    \/\/ &#061;&#061;&#061;&#061;&#061; \u4e5f\u53ef\u4ee5\u5207\u6362\u4e3a printf \u6587\u5b57\u8f93\u51fa\u8c03\u8bd5 &#061;&#061;&#061;&#061;&#061;<br \/>\n    \/\/ &#xff08;\u5982\u679c\u7528 VOFA&#043; \u7684 FireWater \u534f\u8bae&#xff0c;\u53d6\u6d88\u4e0b\u9762\u6ce8\u91ca&#xff09;<br \/>\n    \/\/ debug_printf(&#034;%.2f,%.2f,%.2f,%.2f\\\\r\\\\n&#034;,<br \/>\n    \/\/        accel_pitch_raw, att_comp1.pitch, att_comp2.pitch, att_kalman.pitch);<br \/>\n    \/\/ debug_printf(&#034;%.2f,%.2f,%.2f,%.2f\\\\r\\\\n&#034;,accel_roll_raw,att_comp1.roll,att_comp2.roll,att_kalman.roll);<\/p>\n<p>    HAL_Delay(10); \/\/ 10ms &#061; 100Hz \u91c7\u6837\u7387&#xff0c;\u4e0e DT&#061;0.01f \u5bf9\u5e94<br \/>\n    \/* USER CODE END WHILE *\/<\/p>\n<p>    \/* USER CODE BEGIN 3 *\/<br \/>\n  }<br \/>\n  \/* USER CODE END 3 *\/<br \/>\n}<\/p>\n<p>\/**<br \/>\n  * &#064;brief System Clock Configuration<br \/>\n  * &#064;retval None<br \/>\n  *\/<br \/>\nvoid SystemClock_Config(void)<br \/>\n{<br \/>\n  RCC_OscInitTypeDef RCC_OscInitStruct &#061; {0};<br \/>\n  RCC_ClkInitTypeDef RCC_ClkInitStruct &#061; {0};<\/p>\n<p>  \/** Initializes the RCC Oscillators according to the specified parameters<br \/>\n  * in the RCC_OscInitTypeDef structure.<br \/>\n  *\/<br \/>\n  RCC_OscInitStruct.OscillatorType &#061; RCC_OSCILLATORTYPE_HSE;<br \/>\n  RCC_OscInitStruct.HSEState &#061; RCC_HSE_ON;<br \/>\n  RCC_OscInitStruct.HSEPredivValue &#061; RCC_HSE_PREDIV_DIV1;<br \/>\n  RCC_OscInitStruct.HSIState &#061; RCC_HSI_ON;<br \/>\n  RCC_OscInitStruct.PLL.PLLState &#061; RCC_PLL_ON;<br \/>\n  RCC_OscInitStruct.PLL.PLLSource &#061; RCC_PLLSOURCE_HSE;<br \/>\n  RCC_OscInitStruct.PLL.PLLMUL &#061; RCC_PLL_MUL9;<br \/>\n  if (HAL_RCC_OscConfig(&amp;RCC_OscInitStruct) !&#061; HAL_OK)<br \/>\n  {<br \/>\n    Error_Handler();<br \/>\n  }<\/p>\n<p>  \/** Initializes the CPU, AHB and APB buses clocks<br \/>\n  *\/<br \/>\n  RCC_ClkInitStruct.ClockType &#061; RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK<br \/>\n                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;<br \/>\n  RCC_ClkInitStruct.SYSCLKSource &#061; RCC_SYSCLKSOURCE_PLLCLK;<br \/>\n  RCC_ClkInitStruct.AHBCLKDivider &#061; RCC_SYSCLK_DIV1;<br \/>\n  RCC_ClkInitStruct.APB1CLKDivider &#061; RCC_HCLK_DIV2;<br \/>\n  RCC_ClkInitStruct.APB2CLKDivider &#061; RCC_HCLK_DIV1;<\/p>\n<p>  if (HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_2) !&#061; HAL_OK)<br \/>\n  {<br \/>\n    Error_Handler();<br \/>\n  }<br \/>\n}<\/p>\n<p>\/* USER CODE BEGIN 4 *\/<\/p>\n<p>\/* USER CODE END 4 *\/<\/p>\n<p>\/**<br \/>\n  * &#064;brief  This function is executed in case of error occurrence.<br \/>\n  * &#064;retval None<br \/>\n  *\/<br \/>\nvoid Error_Handler(void)<br \/>\n{<br \/>\n  \/* USER CODE BEGIN Error_Handler_Debug *\/<br \/>\n  \/* User can add his own implementation to report the HAL error return state *\/<br \/>\n  __disable_irq();<br \/>\n  while (1)<br \/>\n  {<br \/>\n  }<br \/>\n  \/* USER CODE END Error_Handler_Debug *\/<br \/>\n}<br \/>\n#ifdef USE_FULL_ASSERT<br \/>\n\/**<br \/>\n  * &#064;brief  Reports the name of the source file and the source line number<br \/>\n  *         where the assert_param error has occurred.<br \/>\n  * &#064;param  file: pointer to the source file name<br \/>\n  * &#064;param  line: assert_param error line source number<br \/>\n  * &#064;retval None<br \/>\n  *\/<br \/>\nvoid assert_failed(uint8_t *file, uint32_t line)<br \/>\n{<br \/>\n  \/* USER CODE BEGIN 6 *\/<br \/>\n  \/* User can add his own implementation to report the file name and line number,<br \/>\n     ex: printf(&#034;Wrong parameters value: file %s on line %d\\\\r\\\\n&#034;, file, line) *\/<br \/>\n  \/* USER CODE END 6 *\/<br \/>\n}<br \/>\n#endif \/* USE_FULL_ASSERT *\/<\/p>\n<hr \/>\n<h4>4. VOFA&#043; \u914d\u7f6e\u65b9\u6cd5<\/h4>\n<h5>\u6b65\u9aa4 1&#xff1a;\u6253\u5f00 VOFA&#043; \u8f6f\u4ef6<\/h5>\n<ul>\n<li>\u4e0b\u8f7d\u5730\u5740&#xff1a;https:\/\/www.vofa.plus<\/li>\n<\/ul>\n<h5>\u6b65\u9aa4 2&#xff1a;\u914d\u7f6e\u4e32\u53e3<\/h5>\n<ul>\n<li>\u9009\u62e9\u4f60\u7684 COM \u53e3<\/li>\n<li>\u6ce2\u7279\u7387\u8bbe\u7f6e\u4e3a\u4f60 CubeMX \u91cc\u914d\u7f6e\u7684\u503c&#xff08;\u5e38\u89c1 115200&#xff09;<\/li>\n<\/ul>\n<h5>\u6b65\u9aa4 3&#xff1a;\u9009\u62e9\u534f\u8bae<\/h5>\n<ul>\n<li>\u70b9\u51fb\u53f3\u4e0a\u89d2\u534f\u8bae\u9009\u62e9&#xff1a;JustFloat<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055710-6a9baf36b36c3.png\" alt=\"image-20260830150257103\" \/><\/p>\n<h5>\u6b65\u9aa4 4&#xff1a;\u5f00\u59cb\u63a5\u6536<\/h5>\n<ul>\n<li>\u70b9\u51fb&#034;\u5f00\u59cb&#034;\u6309\u94ae&#xff0c;\u5c31\u80fd\u770b\u5230 8 \u6761\u66f2\u7ebf\u5b9e\u65f6\u6eda\u52a8<\/li>\n<\/ul>\n<h5>\u6b65\u9aa4 5&#xff1a;\u901a\u9053\u547d\u540d&#xff08;\u4fbf\u4e8e\u5bf9\u6bd4\u89c2\u5bdf&#xff09;<\/h5>\n<p>\u5728 VOFA&#043; \u7684\u901a\u9053\u5217\u8868\u4e2d&#xff0c;\u6309\u987a\u5e8f\u91cd\u547d\u540d\u4e3a&#xff1a;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055710-6a9baf36c5d39.png\" alt=\"image-20260830150312318\" \/><\/p>\n<table>\n<tr>\u901a\u9053\u540d\u79f0\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>CH1<\/td>\n<td>Raw Pitch<\/td>\n<td>\u52a0\u901f\u5ea6\u8ba1\u539f\u59cb\u89d2\u5ea6&#xff08;\u6709\u6bdb\u523a\u566a\u58f0&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>CH2<\/td>\n<td>Comp1 Pitch<\/td>\n<td>\u4e00\u9636\u4e92\u8865\u6ee4\u6ce2<\/td>\n<\/tr>\n<tr>\n<td>CH3<\/td>\n<td>Comp2 Pitch<\/td>\n<td>\u4e8c\u9636\u4e92\u8865\u6ee4\u6ce2<\/td>\n<\/tr>\n<tr>\n<td>CH4<\/td>\n<td>Kalman Pitch<\/td>\n<td>\u5361\u5c14\u66fc\u6ee4\u6ce2<\/td>\n<\/tr>\n<tr>\n<td>CH5<\/td>\n<td>Raw Roll<\/td>\n<td>\u52a0\u901f\u5ea6\u8ba1\u539f\u59cb Roll<\/td>\n<\/tr>\n<tr>\n<td>CH6<\/td>\n<td>Comp1 Roll<\/td>\n<td>\u4e00\u9636\u4e92\u8865 Roll<\/td>\n<\/tr>\n<tr>\n<td>CH7<\/td>\n<td>Comp2 Roll<\/td>\n<td>\u4e8c\u9636\u4e92\u8865 Roll<\/td>\n<\/tr>\n<tr>\n<td>CH8<\/td>\n<td>Kalman Roll<\/td>\n<td>\u5361\u5c14\u66fc Roll<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6211\u5c06\u5355\u7247\u673a\u6c34\u5e73\u653e\u7f6e\u540e&#xff0c;\u53ef\u4ee5\u770b\u51fa&#xff1a;Pitch\u6ee4\u6ce2<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055710-6a9baf36d8e7b.png\" alt=\"image-20260830145832229\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055711-6a9baf373f808.png\" alt=\"image-20260830150144073\" \/><\/p>\n<hr \/>\n<h4>5. \u56db\u79cd\u6ee4\u6ce2\u65b9\u6cd5\u5bf9\u6bd4\u603b\u7ed3<\/h4>\n<p>\u4e0d\u662f\u7edd\u5bf9\u7684&#xff0c;\u5728\u6211\u4eec\u7684\u573a\u666f\u4e2d&#xff0c;\u6bcf\u4e2ampu6050\u7684\u73af\u5883\u4ee5\u53ca\u6e29\u5ea6\u8865\u507f\u90fd\u4e0d\u4e00\u6837&#xff0c;\u6240\u4ee5\u4f1a\u6709\u504f\u5dee&#xff0c;\u4f46\u662f\u7b97\u6cd5\u6ca1\u6709\u597d\u574f&#xff0c;\u53ea\u6709\u9002\u5408\u3002\u8fd8\u6709\u53c2\u6570\u7684\u8c03\u8282\u597d\u574f<\/p>\n<table>\n<tr>\u7279\u6027\u4e00\u9636\u4e92\u8865\u4e8c\u9636\u4e92\u8865\u5361\u5c14\u66fcDMP<\/tr>\n<tbody>\n<tr>\n<td>\u590d\u6742\u5ea6<\/td>\n<td>\u2b50<\/td>\n<td>\u2b50\u2b50<\/td>\n<td>\u2b50\u2b50\u2b50<\/td>\n<td>\u2b50&#xff08;\u786c\u4ef6\u81ea\u52a8&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>CPU \u5360\u7528<\/td>\n<td>\u6781\u4f4e<\/td>\n<td>\u4f4e<\/td>\n<td>\u4e2d\u7b49<\/td>\n<td>\u51e0\u4e4e\u4e3a\u96f6<\/td>\n<\/tr>\n<tr>\n<td>\u8c03\u53c2\u96be\u5ea6<\/td>\n<td>\u53ea\u9700\u8c03 \u03b1<\/td>\n<td>\u8c03 K1, K2<\/td>\n<td>\u8c03 Q, R<\/td>\n<td>\u65e0\u9700\u8c03\u53c2<\/td>\n<\/tr>\n<tr>\n<td>\u6297\u9707\u52a8<\/td>\n<td>\u4e00\u822c<\/td>\n<td>\u8f83\u597d<\/td>\n<td>\u6700\u4f18<\/td>\n<td>\u597d<\/td>\n<\/tr>\n<tr>\n<td>\u957f\u671f\u6f02\u79fb<\/td>\n<td>\u5c0f<\/td>\n<td>\u66f4\u5c0f<\/td>\n<td>\u6700\u5c0f<\/td>\n<td>\u65e0<\/td>\n<\/tr>\n<tr>\n<td>\u9002\u7528\u573a\u666f<\/td>\n<td>\u5165\u95e8\u5b66\u4e60<\/td>\n<td>\u5e73\u8861\u8f66<\/td>\n<td>\u65e0\u4eba\u673a\/\u673a\u5668\u4eba<\/td>\n<td>\u5feb\u901f\u51fa\u6210\u54c1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>7. PID&#xff1a;\u8ba9\u59ff\u6001&#034;\u542c\u8bdd&#034;\u7684\u63a7\u5236\u9b54\u6cd5<\/h3>\n<h4>&#x1f3af; \u4ece&#034;\u600e\u4e48\u628a\u98de\u673a\u6446\u5e73&#034;\u8bf4\u8d77<\/h4>\n<p>\u59ff\u6001\u89e3\u7b97\u544a\u8bc9\u6211\u4eec&#034;\u98de\u673a\u73b0\u5728\u6b6a\u4e86\u591a\u5c11&#034;&#xff0c;\u4f46\u5149\u77e5\u9053\u4e0d\u884c&#xff0c;\u5f97\u8ba9\u5b83\u81ea\u5df1\u6446\u6b63\u3002\u8fd9\u5c31\u662f PID \u7684\u6d3b\u3002<\/p>\n<p>PID \u662f\u4e2a&#034;\u8d1f\u53cd\u9988\u95ed\u73af&#034;&#xff1a;\u4e0d\u505c\u5730\u62ff&#034;\u671f\u671b\u503c&#034;\u548c&#034;\u5f53\u524d\u503c&#034;\u6bd4&#xff0c;\u7b97\u51fa\u5dee\u8ddd&#xff08;\u8bef\u5dee&#xff09;&#xff0c;\u518d\u7528\u5dee\u8ddd\u53bb\u6307\u6325\u7535\u673a&#xff1a;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055711-6a9baf37d986c.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u25b2 \u56fe 5 \u00b7 PID \u8d1f\u53cd\u9988\u95ed\u73af&#xff1a;\u671f\u671b\u503c \u2212 \u6d4b\u91cf\u503c &#061; \u8bef\u5dee \u2192 PID \u2192 \u88ab\u63a7\u5bf9\u8c61 \u2192 \u8f93\u51fa&#xff0c;\u8f93\u51fa\u518d\u53cd\u9988\u56de\u6765\u6bd4\u8f83<\/p>\n<p>     \u671f\u671b\u89d2\u5ea6 \u2500\u2500\u2192 [\u8bef\u5deee] \u2500\u2500\u2192 [PID\u63a7\u5236\u5668] \u2500\u2500\u2192 [\u7535\u673a\/\u673a\u4f53] \u2500\u2500\u2192 \u8f93\u51fa<br \/>\n                    \u25b2                                    \u2502<br \/>\n                    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u8d1f\u53cd\u9988 \u25c0\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                              (\u59ff\u6001\u89e3\u7b97\u6d4b\u51fa\u5f53\u524d\u89d2\u5ea6)<\/p>\n<h4>&#x1f3ad; \u4e09\u4e2a\u5b57\u6bcd\u5404\u662f\u4ec0\u4e48\u813e\u6c14&#xff1f;<\/h4>\n<ul>\n<li>P&#xff08;\u6bd4\u4f8b&#xff09;&#xff1a;\u8bef\u5dee\u8d8a\u5927\u63a8\u5f97\u8d8a\u731b&#xff0c;\u53cd\u5e94\u5feb\u3002\u4f46\u5149\u9760 P \u6d88\u9664\u4e0d\u4e86\u6700\u540e\u90a3\u4e00\u70b9&#034;\u7a33\u6001\u8bef\u5dee&#034;&#xff0c;\u800c\u4e14 P \u592a\u5927\u5bb9\u6613&#034;\u6296\u5f97\u50cf\u7b5b\u7ce0&#034;\u3002<\/li>\n<li>I&#xff08;\u79ef\u5206&#xff09;&#xff1a;\u628a\u8bef\u5dee\u6512\u8d77\u6765&#xff0c;\u4e13\u95e8\u6d88\u706d\u90a3\u70b9&#034;\u6b7b\u6d3b\u6d88\u4e0d\u6389&#034;\u7684\u7a33\u6001\u504f\u5dee&#xff08;\u6bd4\u5982\u98de\u673a\u8001\u5f80\u4e00\u8fb9\u6b6a&#xff0c;\u9760 I \u4e00\u76f4\u7ed9\u4e2a\u8865\u507f\u529b&#xff09;\u3002<\/li>\n<li>D&#xff08;\u5fae\u5206&#xff09;&#xff1a;\u770b\u8bef\u5dee\u53d8\u5316\u5f97\u591a\u5feb&#xff0c;\u6709&#034;\u9884\u89c1\u6027&#034;&#xff0c;\u80fd\u5239\u8f66\u2014\u2014\u6291\u5236\u8d85\u8c03\u3001\u8ba9\u7cfb\u7edf\u66f4\u5feb\u7a33\u4e0b\u6765&#xff08;\u5c31\u50cf\u5f00\u8f66\u5feb\u649e\u4e0a\u524d\u63d0\u524d\u677e\u6cb9\u95e8&#xff09;\u3002<\/li>\n<\/ul>\n<p>u(t) &#061; Kp\u00b7e(t) &#043; Ki\u00b7\u222be(t)dt &#043; Kd\u00b7(de(t)\/dt)<br \/>\n        \u6bd4\u4f8b      \u79ef\u5206\u7d2f\u8ba1        \u53d8\u5316\u7387<\/p>\n<h4>&#x1f9f1; \u4f4d\u7f6e\u5f0f vs \u589e\u91cf\u5f0f<\/h4>\n<p><span class=\"token comment\">\/\/ \u4f4d\u7f6e\u5f0f PID&#xff1a;\u4e00\u6b21\u76f4\u63a5\u8f93\u51fa\u4e00\u4e2a&#034;\u7edd\u5bf9\u63a7\u5236\u91cf&#034;<\/span><br \/>\nout <span class=\"token operator\">&#061;<\/span> Kp<span class=\"token operator\">*<\/span>err <span class=\"token operator\">&#043;<\/span> Ki<span class=\"token operator\">*<\/span>errSum <span class=\"token operator\">&#043;<\/span> Kd<span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>err <span class=\"token operator\">&#8211;<\/span> lastErr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u589e\u91cf\u5f0f PID&#xff1a;\u8f93\u51fa&#034;\u53d8\u5316\u91cf&#034;&#xff0c;\u518d\u7d2f\u52a0&#xff08;\u5929\u7136\u5e26\u79ef\u5206\u6548\u679c\u3001\u66f4\u5b89\u5168&#xff09;<\/span><br \/>\ndOut <span class=\"token operator\">&#061;<\/span> Kp<span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>err <span class=\"token operator\">&#8211;<\/span> lastErr<span class=\"token punctuation\">)<\/span><span class=\"token operator\">&#043;<\/span> Ki<span class=\"token operator\">*<\/span>err<span class=\"token operator\">&#043;<\/span> Kd<span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span>err <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span>lastErr <span class=\"token operator\">&#043;<\/span> lastLastErr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\nout <span class=\"token operator\">&#043;&#061;<\/span> dOut<span class=\"token punctuation\">;<\/span><\/p>\n<table>\n<tr>\u7279\u6027\u4f4d\u7f6e\u5f0f PID\u589e\u91cf\u5f0f PID<\/tr>\n<tbody>\n<tr>\n<td>\u8f93\u51fa\u542b\u4e49<\/td>\n<td>\u6700\u7ec8\u7edd\u5bf9\u63a7\u5236\u91cf<\/td>\n<td>\u672c\u6b21\u8f93\u51fa\u53d8\u5316\u91cf \u0394out<\/td>\n<\/tr>\n<tr>\n<td>\u79ef\u5206\u5b58\u50a8<\/td>\n<td>\u4fdd\u5b58\u5168\u90e8\u5386\u53f2\u8bef\u5dee\u603b\u548c errSum<\/td>\n<td>\u4ec5\u4fdd\u5b58\u6700\u8fd1 3 \u6b21\u8bef\u5dee&#xff0c;\u65e0\u603b\u7d2f\u52a0<\/td>\n<\/tr>\n<tr>\n<td>\u79ef\u5206\u9971\u548c\u98ce\u9669<\/td>\n<td>\u9ad8<\/td>\n<td>\u4f4e<\/td>\n<\/tr>\n<tr>\n<td>\u6545\u969c\u51b2\u51fb<\/td>\n<td>\u5927&#xff0c;\u5f02\u5e38\u65f6\u8f93\u51fa\u76f4\u63a5\u8df3\u53d8<\/td>\n<td>\u5c0f&#xff0c;\u53ea\u4f1a\u5c0f\u5e45\u6539\u52a8<\/td>\n<\/tr>\n<tr>\n<td>\u53d8\u91cf\u6570\u91cf<\/td>\n<td>\u5c11<\/td>\n<td>\u7565\u591a<\/td>\n<\/tr>\n<tr>\n<td>\u5178\u578b\u7528\u9014<\/td>\n<td>\u6e29\u63a7\u3001\u9600\u95e8\u3001\u5b9a\u503c\u63a7\u5236<\/td>\n<td>\u7535\u673a\u3001\u5c0f\u8f66\u3001\u65e0\u4eba\u673a\u8fd0\u52a8\u63a7\u5236<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>&#x1f96a; \u98de\u63a7\u7528\u7684\u662f&#034;\u4e32\u7ea7 PID&#034;&#xff08;\u53cc\u5c42\u5d4c\u5957\u7684\u4e09\u660e\u6cbb&#xff09;<\/h4>\n<p>\u4e00\u4e2a PID \u76f4\u63a5\u63a7\u89d2\u5ea6\u901a\u5e38\u4e0d\u591f\u7a33\u3002\u56db\u8f74\u98de\u63a7\u666e\u904d\u7528\u4e32\u7ea7 PID&#xff1a;<\/p>\n<p>      \u671f\u671b\u89d2\u5ea6 \u2500\u25b6 [\u5916\u73af\u00b7\u89d2\u5ea6PID] \u2192 \u671f\u671b\u89d2\u901f\u5ea6 \u2500\u25b6 [\u5185\u73af\u00b7\u89d2\u901f\u5ea6PID] \u2192 \u7535\u673a\u63a7\u5236\u91cf<br \/>\n                        \u25b2                              \u25b2<br \/>\n                \u59ff\u6001\u89e3\u7b97\u89d2\u5ea6                       \u9640\u87ba\u4eea\u5b9e\u6d4b\u89d2\u901f\u5ea6<\/p>\n<ul>\n<li>\u5916\u73af&#xff08;\u89d2\u5ea6\u73af&#xff09;&#xff1a;\u7ba1&#034;\u7a33&#034;&#xff0c;\u8f93\u5165\u89d2\u5ea6\u8bef\u5dee&#xff0c;\u9700\u8981\u4ece\u52a0\u901f\u5ea6\u8ba1\u79ef\u5206\u51fa\u6765&#xff0c;\u6bd4\u8f83\u6162&#xff0c;\u8f93\u51fa&#034;\u671f\u671b\u89d2\u901f\u5ea6&#034;\u3002<\/li>\n<li>\u5185\u73af&#xff08;\u89d2\u901f\u5ea6\u73af&#xff09;&#xff1a;\u7ba1&#034;\u5feb&#034;&#xff0c;\u8f93\u5165\u89d2\u901f\u5ea6\u8bef\u5dee&#xff08;\u9640\u87ba\u4eea\u76f4\u63a5\u7ed9&#xff09;&#xff0c;\u8f93\u51fa\u7535\u673a\u91cf\u3002<\/li>\n<li>\u5185\u73af\u5feb\u3001\u5916\u73af\u7a33&#xff0c;\u5957\u5728\u4e00\u8d77\u5c31\u53c8\u5feb\u53c8\u7a33\u3002<\/li>\n<\/ul>\n<p>&#x1f527; \u6574\u5b9a\u53e3\u8bc0&#xff1a;\u5148\u5185\u73af&#xff0c;\u540e\u5916\u73af\u3002 \u2460 \u5185\u73af\u53ea\u52a0 P \u2192 \u52a0\u5230\u51fa\u73b0\u9ad8\u9891\u6296\u52a8\u518d\u9000\u4e00\u70b9&#xff1b;\u2461 \u52a0 D \u6291\u5236\u8d85\u8c03&#xff1b;\u2462 \u5185\u73af\u7a33\u4e86\u518d\u52a0\u5916\u73af P&#xff1b;\u2463 \u6700\u540e\u52a0 I \u6d88\u7a33\u6001\u8bef\u5dee\u3002\u6bcf\u6b21\u53ea\u6539\u4e00\u4e2a\u53c2\u6570&#xff0c;\u7528\u4e32\u53e3\u753b\u6ce2\u5f62\u5224\u65ad\u3002<\/p>\n<hr \/>\n<h3>8. \u7535\u673a\u8f93\u51fa&#xff1a;PID \u7b97\u51fa\u7684\u6570\u600e\u4e48\u53d8\u6210&#034;\u8f6c\u591a\u5feb&#034;<\/h3>\n<h4>&#x1f4f6; PWM&#xff1a;\u9760&#034;\u5360\u7a7a\u6bd4&#034;\u8bf4\u8bdd<\/h4>\n<p>\u56db\u8f74\u7535\u673a&#xff08;\u65e0\u5237\u7535\u673a &#043; \u7535\u8c03 ESC&#xff09;\u9760 PWM \u4fe1\u53f7\u8c03\u901f\u3002PWM \u5c31\u50cf\u7528&#034;\u624b\u7535\u7b52\u5feb\u901f\u95ea\u706f&#034;&#xff1a;\u9ad8\u7535\u5e73\u5360\u7684\u6bd4\u4f8b&#xff08;\u5360\u7a7a\u6bd4&#xff09;\u8d8a\u5927&#xff0c;\u7535\u673a\u8f6c\u5f97\u8d8a\u5feb\u3002<\/p>\n<p>\u4f4e\u901f (\u5360\u7a7a\u6bd425%)   \u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591  \u9ad8\u7535\u5e73\u77ed \u2192 \u8f6c\u901f\u4f4e<br \/>\n\u9ad8\u901f (\u5360\u7a7a\u6bd475%)   \u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591  \u9ad8\u7535\u5e73\u957f \u2192 \u8f6c\u901f\u9ad8<\/p>\n<ul>\n<li>\u5e38\u89c1\u7535\u8c03&#034;\u6cb9\u95e8\u8109\u5bbd&#034;\u8303\u56f4&#xff1a;1000~2000 \u03bcs\u3002<\/li>\n<li>STM32 \u7528\u5b9a\u65f6\u5668\u8f93\u51fa PWM \u5373\u53ef&#xff0c;\u5360\u7a7a\u6bd4\u5c31\u662f&#034;\u63a7\u5236\u91cf \/ \u6ee1\u91cf\u7a0b&#034;\u3002<\/li>\n<\/ul>\n<h4>&#x1f500; \u52a8\u529b\u5206\u914d&#xff08;Mixer&#xff09;&#xff1a;\u4e00\u4e2a\u63a7\u5236\u91cf\u600e\u4e48\u5206\u7ed9 4 \u4e2a\u7535\u673a&#xff1f;<\/h4>\n<p>PID \u7b97\u51fa\u6765\u7684\u662f&#034;\u4fee\u6b63\u91cf&#034;&#xff0c;\u5f97\u53e0\u52a0\u5230 4 \u4e2a\u7535\u673a\u4e0a\u3002\u4ee5 X \u578b\u673a\u67b6\u4e3a\u4f8b&#xff08;\u7b26\u53f7\u53d6\u51b3\u4e8e\u673a\u67b6\u548c\u8f6c\u5411\u7ea6\u5b9a&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\">\/\/ thr&#061;\u57fa\u7840\u6cb9\u95e8&#xff1b;roll\/pitch\/yaw &#061; \u4e09\u4e2a\u59ff\u6001\u73af\u7684\u8f93\u51fa<\/span><br \/>\nM1 <span class=\"token operator\">&#061;<\/span> thr <span class=\"token operator\">&#043;<\/span> pidRoll<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#043;<\/span> pidPitch<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#043;<\/span> pidYaw<span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">;<\/span><br \/>\nM2 <span class=\"token operator\">&#061;<\/span> thr <span class=\"token operator\">&#8211;<\/span> pidRoll<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#043;<\/span> pidPitch<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#8211;<\/span> pidYaw<span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">;<\/span><br \/>\nM3 <span class=\"token operator\">&#061;<\/span> thr <span class=\"token operator\">&#8211;<\/span> pidRoll<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#8211;<\/span> pidPitch<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#043;<\/span> pidYaw<span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">;<\/span><br \/>\nM4 <span class=\"token operator\">&#061;<\/span> thr <span class=\"token operator\">&#043;<\/span> pidRoll<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#8211;<\/span> pidPitch<span class=\"token punctuation\">.<\/span>out <span class=\"token operator\">&#8211;<\/span> pidYaw<span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token comment\">\/\/ \u6700\u540e\u9650\u5e45\u5230 [\u6cb9\u95e8\u4e0b\u9650, \u4e0a\u9650]&#xff0c;\u9632\u6b62\u67d0\u8def\u8d8a\u754c<\/span><\/p>\n<h4>&#x1f504; \u4e3a\u4ec0\u4e48\u76f8\u90bb\u7535\u673a\u8981\u53cd\u7740\u8f6c&#xff1f;<\/h4>\n<p>\u5148\u770b\u771f\u5b9e\u56db\u8f74\u7684\u673a\u67b6\u5e03\u5c40&#xff08;X \u578b&#xff09;&#xff0c;4 \u4e2a\u7535\u673a\u5206\u5e03\u5728\u56db\u89d2&#xff1a;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055712-6a9baf384ed83.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u25b2 \u56fe 6 \u00b7 X \u578b\u56db\u8f74\u673a\u67b6\u5e03\u5c40\u793a\u610f&#xff1a;\u76f8\u90bb\u7535\u673a\u53cd\u65b9\u5411\u65cb\u8f6c&#xff0c;\u5bf9\u89d2\u7535\u673a\u540c\u5411&#xff0c;\u7528\u4e8e\u62b5\u6d88\u53cd\u626d\u77e9<\/p>\n<p>        M1(\u987a)        M3(\u9006)<br \/>\n           \\\\          \/<br \/>\n            \u98de\u63a7\/IMU<br \/>\n           \/          \\\\<br \/>\n        M2(\u9006)        M4(\u987a)<\/p>\n<p>\u56e0\u4e3a\u8981\u8ba9 4 \u4e2a\u7535\u673a\u7684&#034;\u53cd\u626d\u77e9&#034;\u4e92\u76f8\u62b5\u6d88&#xff0c;\u98de\u673a\u624d\u4e0d\u4f1a\u81ea\u5df1\u539f\u5730\u6253\u8f6c\u3002\u6240\u8c13&#034;\u504f\u822a&#034;\u63a7\u5236&#xff0c;\u6b63\u662f\u9760&#034;\u6545\u610f\u6253\u7834\u8fd9\u79cd\u5e73\u8861&#034;\u2014\u2014\u8ba9\u5bf9\u89d2\u7535\u673a\u4e00\u589e\u4e00\u51cf&#xff0c;\u98de\u673a\u5c31\u8f6c\u8d77\u6765\u4e86\u3002<\/p>\n<hr \/>\n<h3>9. \u5149\u6d41\u4f20\u611f\u5668&#xff1a;\u5ba4\u5185\u6ca1 GPS \u65f6\u9760&#034;\u770b\u56fe&#034;\u5b9a\u4f4d<\/h3>\n<h4>&#x1f5b1;\ufe0f \u5b83\u5176\u5b9e\u5c31\u662f\u4e2a&#034;\u5012\u7740\u653e\u7684\u5149\u5b66\u9f20\u6807&#034;<\/h4>\n<p>GPS \u5728\u5ba4\u5185\u6ca1\u4fe1\u53f7&#xff0c;\u90a3\u600e\u4e48\u77e5\u9053\u98de\u673a\u6709\u6ca1\u6709\u6c34\u5e73\u6f02\u79fb&#xff1f;\u7b54\u6848&#xff1a;\u5149\u6d41\u4f20\u611f\u5668\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055712-6a9baf388eece.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u25b2 \u56fe 7 \u00b7 PMW3901 \u5149\u6d41\u4f20\u611f\u5668\u6a21\u5757&#xff08;\u5e38\u642d\u914d\u6fc0\u5149\u6d4b\u8ddd VL53L1X \u4e00\u8d77\u7528&#xff09;&#xff0c;\u9762\u5411\u5730\u9762\u5b89\u88c5&#xff0c;\u539f\u7406\u7c7b\u4f3c\u5149\u5b66\u9f20\u6807<\/p>\n<p>\u5149\u6d41\u4f20\u611f\u5668 &#061; \u671d\u4e0b\u7684\u5fae\u578b\u6444\u50cf\u5934 &#043; \u56fe\u50cf\u534f\u5904\u7406\u5668&#xff0c;\u539f\u7406\u8ddf\u5149\u5b66\u9f20\u6807\u4e00\u6a21\u4e00\u6837&#xff1a;<\/p>\n<p>  \u5149\u6d41\u4f20\u611f\u5668(\u671d\u4e0b) \u2500\u2500\u25b6 \u8fde\u7eed\u62cd\u5730\u9762 \u2500\u2500\u25b6 \u6bd4\u8f83\u76f8\u90bb\u4e24\u5e27\u7684&#034;\u82b1\u7eb9\u4f4d\u7f6e&#034;<br \/>\n                                         \u2502<br \/>\n                                         \u25bc<br \/>\n                              \u50cf\u7d20\u4f4d\u79fb \u0394x, \u0394y&#xff08;\u82b1\u7eb9\u52a8\u4e86\u51e0\u683c&#xff09;<\/p>\n<h4>&#x1f4d0; \u50cf\u7d20\u4f4d\u79fb\u600e\u4e48\u53d8\u6210&#034;\u901f\u5ea6&#034;&#xff1f;<\/h4>\n<p>\u5173\u952e\u516c\u5f0f&#xff08;\u4e00\u5b9a\u8981\u7406\u89e3&#xff09;&#xff1a;<\/p>\n<p>\u7ebf\u901f\u5ea6 \u2248 \u50cf\u7d20\u4f4d\u79fb \u00d7 \u5bf9\u5730\u9ad8\u5ea6 \u00d7 \u6bd4\u4f8b\u56e0\u5b50 \u00f7 \u5e27\u95f4\u9694<\/p>\n<p>\u4e3a\u4ec0\u4e48\u8981\u6709\u9ad8\u5ea6&#xff1f; \u56e0\u4e3a\u5149\u6d41\u6d4b\u7684\u5176\u5b9e\u662f&#034;\u89d2\u53d8\u5316&#034;\u3002\u540c\u6837\u4e00\u4e2a\u50cf\u7d20\u4f4d\u79fb&#xff0c;\u98de\u673a\u98de\u5f97\u8d8a\u9ad8&#xff0c;\u5b9e\u9645\u79fb\u52a8\u5f97\u8d8a\u8fdc\u3002\u6240\u4ee5\u5149\u6d41\u6a21\u5757\u51e0\u4e4e\u90fd\u8981\u642d\u914d\u6d4b\u8ddd\u4f20\u611f\u5668&#xff08;TOF\/\u6fc0\u5149&#xff09;&#xff0c;\u5426\u5219\u6d4b\u51fa\u7684\u901f\u5ea6\u4f1a\u6709&#034;\u9ad8\u5ea6\u8bef\u5dee\u88ab\u653e\u5927&#034;\u7684\u95ee\u9898\u3002<\/p>\n<h4>&#x1f91d; \u4e3a\u4ec0\u4e48\u8fd8\u8981\u878d\u5408 IMU&#xff08;\u9640\u87ba\u4eea&#xff09;&#xff1f;<\/h4>\n<p>\u5355\u770b\u5149\u6d41&#xff0c;\u6570\u636e\u5f88&#034;\u6296&#034;&#xff0c;\u800c\u4e14\u6709\u4e2a\u5927\u9ebb\u70e6&#xff1a;\u98de\u673a\u6643\u52a8\/\u503e\u659c\u65f6&#xff0c;\u5730\u9762\u753b\u9762\u4e5f\u4f1a&#034;\u5047\u52a8&#034;&#xff08;\u673a\u4f53\u539f\u5730\u6446&#xff0c;\u5730\u9762\u660e\u660e\u6ca1\u52a8&#xff0c;\u56fe\u50cf\u5374\u53d8\u4e86&#xff09;\u3002<\/p>\n<p>\u6240\u4ee5\u6807\u51c6\u505a\u6cd5\u662f\u628a\u4e09\u8005\u878d\u5408&#xff08;\u4e92\u8865\u6ee4\u6ce2\u6216 EKF&#xff09;&#xff1a;<\/p>\n<p>\u5149\u6d41 \u0394x,\u0394y \u2500\u2500\u2510<br \/>\n\u6d4b\u8ddd \u9ad8\u5ea6 h \u2500\u2500\u253c\u2500\u2500\u25b6 [\u878d\u5408: \u62b5\u6d88\u6643\u52a8 &#043; \u5c3a\u5ea6\u6362\u7b97] \u2500\u2500\u25b6 \u6c34\u5e73\u901f\u5ea6 vx,vy \u2500\u2500\u25b6 [\u4f4d\u7f6e\u73afPID] \u2500\u2500\u25b6 \u5b9a\u70b9\u60ac\u505c<br \/>\nIMU \u89d2\u901f\u5ea6 \u2500\u2500\u2518<\/p>\n<ul>\n<li>\u7528\u9640\u87ba\u4eea\u89d2\u901f\u5ea6\u62b5\u6d88\u673a\u8eab\u6643\u52a8\u5e26\u6765\u7684\u865a\u5047\u5149\u6d41&#xff1b;<\/li>\n<li>\u7528\u9ad8\u5ea6\u628a\u50cf\u7d20\u6362\u7b97\u6210\u771f\u5b9e\u901f\u5ea6&#xff1b;<\/li>\n<li>\u5f97\u5230\u7a33\u5b9a\u7684\u6c34\u5e73\u901f\u5ea6\/\u4f4d\u7f6e\u540e&#xff0c;\u5582\u7ed9\u4f4d\u7f6e\u73af PID&#xff0c;\u5b9e\u73b0\u5ba4\u5185&#034;\u5b9a\u70b9\u60ac\u505c&#034;\u3002<\/li>\n<\/ul>\n<h4>&#x1f4ca; \u4e3b\u6d41\u5149\u6d41\u4f20\u611f\u5668\u5bf9\u6bd4&#xff08;\u636e PX4 \u6587\u6863&#xff09;<\/h4>\n<table>\n<tr>\u4f20\u611f\u5668\u5206\u8fa8\u7387\u5e27\u7387\u6709\u6548\u9ad8\u5ea6\u63a5\u53e3\u7279\u70b9<\/tr>\n<tbody>\n<tr>\n<td>PMW3901<\/td>\n<td>30\u00d730<\/td>\n<td>~10000fps<\/td>\n<td>80mm~\u221e<\/td>\n<td>SPI\/UART<\/td>\n<td>\u4f4e\u529f\u8017\u3001\u6700\u6d41\u884c&#xff0c;DJI Tello \u540c\u7cfb<\/td>\n<\/tr>\n<tr>\n<td>ADNS-9800<\/td>\n<td>30\u00d730<\/td>\n<td>~6400fps<\/td>\n<td>2~30mm<\/td>\n<td>SPI<\/td>\n<td>\u4f4e\u7a7a\u8fd1\u8ddd\u79bb<\/td>\n<\/tr>\n<tr>\n<td>OV7725&#043;MCU<\/td>\n<td>640\u00d7480<\/td>\n<td>~500fps<\/td>\n<td>10cm~5m<\/td>\n<td>SPI\/I2C<\/td>\n<td>\u9ad8\u5ea6\u8303\u56f4\u5927\u3001\u9700\u8ba1\u7b97<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>10. \u98de\u63a7\u5168\u8c8c&#xff1a;\u628a\u524d\u9762\u4e32\u6210\u4e00\u6761\u5b8c\u6574\u95ed\u73af<\/h3>\n<p>\u628a 1~9 \u7ae0\u4e32\u8d77\u6765&#xff0c;\u5c31\u662f\u4e00\u6761\u5b8c\u6574\u7684\u98de\u63a7\u6570\u636e\u94fe\u8def&#xff1a;<\/p>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 MPU6050     \u2502    \u2502 \u59ff\u6001\u89e3\u7b97\u00b7\u6ee4\u6ce2      \u2502    \u2502 \u4e32\u7ea7PID             \u2502    \u2502 \u52a8\u529b\u5206\u914d     \u2502<br \/>\n\u2502 (\u52a0\u901f\u5ea6&#043;\u9640\u87ba)\u2502\u2500\u2500\u25b6\u2502 Mahony\/DMP\/\u5361\u5c14\u66fc \u2502\u2500\u2500\u25b6\u2502 \u89d2\u5ea6\u73af&#043;\u89d2\u901f\u5ea6\u73af&#043;\u4f4d\u7f6e\u73af\u2502\u2500\u2500\u25b6\u2502 Mixer\u21924\u8defPWM\u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510          \u25b2                        \u2502                          \u2502<br \/>\n\u2502 \u5149\u6d41&#043;\u6d4b\u8ddd    \u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                        \u25bc                          \u25bc<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                              \u673a\u4f53\u59ff\u6001\/\u4f4d\u7f6e\/\u901f\u5ea6 \u25c0\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 4\u4e2a\u7535\u673a<br \/>\n       \u2502                                              \u2502<br \/>\n       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u53cd\u9988\u56de\u4f20\u611f\u5668 \u25c0\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<p>\u95ed\u73af\u4e00\u53e5\u8bdd&#xff1a;\u4f20\u611f\u5668\u611f\u53d7\u72b6\u6001 \u2192 \u89e3\u7b97\/\u6ee4\u6ce2\u7b97\u51fa\u59ff\u6001 \u2192 \u4e32\u7ea7 PID \u51b3\u5b9a\u600e\u4e48\u4fee\u6b63 \u2192 \u52a8\u529b\u5206\u914d\u628a\u4fee\u6b63\u91cf\u5206\u7ed9 4 \u4e2a\u7535\u673a \u2192 \u7535\u673a\u6539\u53d8\u673a\u4f53 \u2192 \u4f20\u611f\u5668\u518d\u611f\u53d7\u65b0\u72b6\u6001\u2026\u2026\u5982\u6b64\u5faa\u73af&#xff0c;\u98de\u673a\u624d\u7a33\u5f97\u4f4f\u3002<\/p>\n<hr \/>\n<h3>11. \u65b0\u624b\u5b66\u4e60\u8def\u7ebf &amp; \u53c2\u8003\u8d44\u6e90<\/h3>\n<h4>&#x1f5fa;\ufe0f \u7531\u6d45\u5165\u6df1\u7684\u5b66\u4e60\u987a\u5e8f<\/h4>\n<li>\u5148\u70b9\u4eae MPU6050&#xff1a;I2C \u8bfb\u51fa\u539f\u59cb\u6570\u636e&#xff0c;\u4e32\u53e3\u6253\u5370&#xff0c;\u786e\u8ba4\u901a\u4fe1 OK&#xff08;\u7b2c 2 \u7ae0&#xff09;\u3002<\/li>\n<li>\u6807\u5b9a &#043; \u6362\u7b97&#xff1a;\u505a\u96f6\u504f\u6821\u51c6&#xff0c;\u628a\u6570\u636e\u53d8\u6210 g \u548c \u00b0\/s&#xff08;\u7b2c 3 \u7ae0&#xff09;\u3002<\/li>\n<li>\u5148\u7b97\u5355\u8f74\u89d2\u5ea6&#xff1a;\u52a0\u901f\u5ea6\u7b97\u89d2\u5ea6\u3001\u9640\u87ba\u4eea\u79ef\u5206&#xff0c;\u505a\u4e00\u9636\u4e92\u8865\/\u5361\u5c14\u66fc&#xff0c;\u5148\u51fa Pitch \u6216 Roll&#xff08;\u7b2c 5\u30016 \u7ae0&#xff09;\u3002<\/li>\n<li>\u4e0a\u56db\u5143\u6570\u89e3\u7b97&#xff1a;\u8dd1\u901a Mahony&#xff0c;\u6216\u76f4\u63a5 DMP&#xff0c;\u62ff\u5230\u5b8c\u6574 Pitch\/Roll\/Yaw&#xff08;\u7b2c 4\u30016 \u7ae0&#xff09;\u3002<\/li>\n<li>\u4e0a PID&#xff1a;\u5148\u5355\u73af\u8c03\u7a33\u4e00\u4e2a\u89d2\u5ea6&#xff0c;\u518d\u5347\u7ea7\u4e32\u7ea7 PID&#xff08;\u7b2c 7 \u7ae0&#xff09;\u3002<\/li>\n<li>\u63a5\u7535\u673a&#xff1a;PWM \u9a71\u52a8\u7535\u8c03&#xff0c;\u7406\u89e3 Mixer \u548c\u7535\u673a\u8f6c\u5411&#xff08;\u7b2c 8 \u7ae0&#xff09;\u3002<\/li>\n<li>\u52a0\u5149\u6d41&#xff1a;\u8bfb\u50cf\u7d20\u4f4d\u79fb&#xff0c;\u4e0e IMU \u878d\u5408\u51fa\u901f\u5ea6\/\u4f4d\u7f6e&#xff0c;\u5ba4\u5185\u5b9a\u70b9\u60ac\u505c&#xff08;\u7b2c 9 \u7ae0&#xff09;\u3002<\/li>\n<h4>&#x1f4da; \u53c2\u8003\u7684\u4f18\u79c0\u7f51\u4e0a\u6559\u7a0b<\/h4>\n<li>STM32Cube HAL \u5e93 MPU6050 DMP \u59ff\u6001\u89e3\u7b97&#xff08;CSDN&#xff09;\u2014 \u5bc4\u5b58\u5668\u8bfb\u53d6\u4e0e DMP \u79fb\u690d https:\/\/blog.csdn.net\/weixin_52916289\/article\/details\/135142374<\/li>\n<li>STM32 \u9a71\u52a8 MPU6050 \u53ca\u56db\u5143\u6570\u59ff\u6001\u89e3\u7b97&#xff08;Zeeklog&#xff09;\u2014 \u9a71\u52a8\u4e0e\u8bfb\u53d6\u4ee3\u7801 https:\/\/zeeklog.com\/stm32-wan-zhuan-iiczhi-qu-dong-mpu6050ji-zi-tai-jie-suan<\/li>\n<li>MPU6050 \u59ff\u6001\u89e3\u7b97\u2014\u2014Mahony \u4e92\u8865\u6ee4\u6ce2&#xff08;CSDN&#xff09;\u2014 \u7b97\u6cd5\u539f\u7406\u63a8\u5bfc https:\/\/blog.csdn.net\/lqj11\/article\/details\/107423334<\/li>\n<li>MPU6050 \u6ee4\u6ce2\u3001\u59ff\u6001\u878d\u5408&#xff08;\u4e00\u9636\u4e92\u8865\u3001\u5361\u5c14\u66fc&#xff09;&#xff08;\u535a\u5ba2\u56ed&#xff09;\u2014 \u5355\u8f74\u6ee4\u6ce2\u4ee3\u7801 https:\/\/www.cnblogs.com\/qsyll0916\/p\/8030379.html<\/li>\n<li>\u8c08\u8c08 MPU6050 \u7684\u6570\u636e\u878d\u5408&#xff1a;\u4e00\u9636\u6ee4\u6ce2\u4e0e\u5361\u5c14\u66fc\u6ee4\u6ce2&#xff08;CSDN&#xff09;\u2014 \u4e09\u79cd\u878d\u5408\u5bf9\u6bd4 https:\/\/blog.csdn.net\/zsn15702422216\/article\/details\/52223799<\/li>\n<li>STM32 MPU6050 \u59ff\u6001\u89e3\u7b97 Mahony \u4e92\u8865\u6ee4\u6ce2\u7b97\u6cd5&#xff08;CSDN&#xff09;\u2014 C \u8bed\u8a00\u5b9e\u73b0 https:\/\/blog.csdn.net\/weixin_44821644\/article\/details\/116893943<\/li>\n<li>\u65e0\u4eba\u673a\u7b97\u6cd5\u4e4b PID&#xff08;CSDN&#xff09;\u2014 \u5355\u7ea7\/\u4e32\u7ea7 PID \u4e0e\u8c03\u8bd5 https:\/\/blog.csdn.net\/u012320127\/article\/details\/104579607<\/li>\n<li>\u56db\u8f74\u65e0\u4eba\u673a\u98de\u884c\u63a7\u5236\u539f\u7406&#xff08;PID&#xff09;&#xff08;CSDN&#xff09;\u2014 \u7535\u673a PWM \u4e0e\u52a8\u529b\u5206\u914d https:\/\/blog.csdn.net\/weixin_46697509\/article\/details\/133017111<\/li>\n<li>\u56db\u8f74 PID \u63a7\u5236\u7b97\u6cd5\u8be6\u89e3&#xff08;\u5355\u73af PID\u3001\u4e32\u7ea7 PID&#xff09;&#xff08;CSDN&#xff09;\u2014 \u53c2\u6570\u6574\u5b9a https:\/\/blog.csdn.net\/lovely_yoshino\/article\/details\/92789955<\/li>\n<li>PX4 \u5b98\u65b9\u6587\u6863&#xff1a;PMW3901 \u5149\u6d41\u4f20\u611f\u5668 \u2014 \u539f\u7406\u3001\u53c2\u6570\u4e0e\u63a5\u7ebf https:\/\/docs.px4.io\/main\/zh\/sensor\/pmw3901<\/li>\n<li>PX4 \u5149\u6d41\u6280\u672f\u5b9e\u6218\u6559\u5b66&#xff08;openvela\/CSDN&#xff09;\u2014 \u5149\u6d41\u4e0e IMU\/EKF \u878d\u5408 https:\/\/openvela.csdn.net\/694b91185b9f5f31781a3769.html<\/li>\n<li>\u65e0\u4eba\u673a\u5149\u6d41\u6a21\u5757 Optical Flow \u8bbe\u7f6e&#xff08;CSDN&#xff09;\u2014 PMW3901 \u914d\u7f6e https:\/\/blog.csdn.net\/weixin_60324241\/article\/details\/147270687<\/li>\n<hr \/>\n<p>\u26a0\ufe0f \u5b89\u5168\u63d0\u9192&#xff1a;\u6d89\u53ca\u98de\u884c\u5668\u7684\u5b9e\u9a8c&#xff0c;\u8bf7\u5728\u5408\u89c4\u573a\u5730\u3001\u786e\u4fdd\u5b89\u5168\u7684\u524d\u63d0\u4e0b\u8fdb\u884c&#xff0c;\u5e76\u9075\u5b88\u5f53\u5730\u65e0\u4eba\u673a\u6cd5\u89c4\u3002\u6559\u7a0b\u4e2d\u7684\u4ee3\u7801\u4e0e\u539f\u7406\u56fe\u4e3a\u6559\u5b66\u793a\u610f&#xff0c;\u6b63\u5f0f\u9879\u76ee\u8bf7\u4ee5\u82af\u7247\u5b98\u65b9\u6570\u636e\u624b\u518c&#xff08;MPU6050 \/ PMW3901 \/ STM32 \u53c2\u8003\u624b\u518c&#xff09;\u4e3a\u51c6\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#x1f681; STM32  MPU6050 \u4ece\u96f6\u5230\u56db\u8f74&#xff1a;\u4e00\u5957\u8ba9\u4f60\u771f\u7684\\&#8221;\u770b\u61c2\\&#8221;\u98de\u63a7\u7684\u6559\u7a0b \u4e00\u53e5\u8bdd\u8bf4\u6e05\u8fd9\u7bc7\u6559\u7a0b\u5728\u5e72\u561b&#xff1a;\u6211\u4eec\u7528\u4e00\u5757 STM32\u3001\u4e00\u4e2a MPU6050&#xff08;\u5c0f\u9640\u87ba\u5c0f\u52a0\u901f\u5ea6\u8ba1&#xff09;&#xff0c;\u4e00\u6b65\u6b65\u505a\u51fa\u4e00\u4e2a\\&#8221;\u77e5\u9053\u81ea\u5df1\u5728\u54ea\u3001\u600e\u4e48\u4fdd\u6301\u5e73\u8861\u3001\u600e\u4e48\u98de\u7a33\\&#8221;\u7684\u56db\u8f74\u98de\u63a7\u6838\u5fc3\u3002\u4ece\u8bfb\u53d6\u4f20\u611f\u5668\u539f\u59cb\u6570\u636e&#xff0c;\u5230\u7b97\u51fa\u59ff\u6001\u89d2&#xff0c;\u5230\u7528 PID \u53bb\u63a7\u5236\u7535\u673a&#xff0c;\u518d\u5230\u7528\u5149\u6d41\u4f20\u611f\u5668\u5b9e\u73b0\u5ba4\u5185\u5b9a\u70b9\u2014\u2014\u6bcf\u4e00\u6b65\u90fd\u8bb2\u6e05\u695a\\&#8221;\u4e3a<\/p>\n","protected":false},"author":2,"featured_media":100851,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[217,270,269],"topic":[],"class_list":["post-100863","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-stm32","tag-270","tag-269"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/100863.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"&#x1f681; STM32 MPU6050 \u4ece\u96f6\u5230\u56db\u8f74&#xff1a;\u4e00\u5957\u8ba9\u4f60\u771f\u7684&quot;\u770b\u61c2&quot;\u98de\u63a7\u7684\u6559\u7a0b \u4e00\u53e5\u8bdd\u8bf4\u6e05\u8fd9\u7bc7\u6559\u7a0b\u5728\u5e72\u561b&#xff1a;\u6211\u4eec\u7528\u4e00\u5757 STM32\u3001\u4e00\u4e2a MPU6050&#xff08;\u5c0f\u9640\u87ba\u5c0f\u52a0\u901f\u5ea6\u8ba1&#xff09;&#xff0c;\u4e00\u6b65\u6b65\u505a\u51fa\u4e00\u4e2a&quot;\u77e5\u9053\u81ea\u5df1\u5728\u54ea\u3001\u600e\u4e48\u4fdd\u6301\u5e73\u8861\u3001\u600e\u4e48\u98de\u7a33&quot;\u7684\u56db\u8f74\u98de\u63a7\u6838\u5fc3\u3002\u4ece\u8bfb\u53d6\u4f20\u611f\u5668\u539f\u59cb\u6570\u636e&#xff0c;\u5230\u7b97\u51fa\u59ff\u6001\u89d2&#xff0c;\u5230\u7528 PID \u53bb\u63a7\u5236\u7535\u673a&#xff0c;\u518d\u5230\u7528\u5149\u6d41\u4f20\u611f\u5668\u5b9e\u73b0\u5ba4\u5185\u5b9a\u70b9\u2014\u2014\u6bcf\u4e00\u6b65\u90fd\u8bb2\u6e05\u695a&quot;\u4e3a\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/100863.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-05T05:57:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055709-6a9baf3532450.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/100863.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/100863.html\",\"name\":\"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-05T05:57:13+00:00\",\"dateModified\":\"2026-09-05T05:57:13+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/100863.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/100863.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/100863.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/100863.html","og_locale":"zh_CN","og_type":"article","og_title":"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"&#x1f681; STM32 MPU6050 \u4ece\u96f6\u5230\u56db\u8f74&#xff1a;\u4e00\u5957\u8ba9\u4f60\u771f\u7684\"\u770b\u61c2\"\u98de\u63a7\u7684\u6559\u7a0b \u4e00\u53e5\u8bdd\u8bf4\u6e05\u8fd9\u7bc7\u6559\u7a0b\u5728\u5e72\u561b&#xff1a;\u6211\u4eec\u7528\u4e00\u5757 STM32\u3001\u4e00\u4e2a MPU6050&#xff08;\u5c0f\u9640\u87ba\u5c0f\u52a0\u901f\u5ea6\u8ba1&#xff09;&#xff0c;\u4e00\u6b65\u6b65\u505a\u51fa\u4e00\u4e2a\"\u77e5\u9053\u81ea\u5df1\u5728\u54ea\u3001\u600e\u4e48\u4fdd\u6301\u5e73\u8861\u3001\u600e\u4e48\u98de\u7a33\"\u7684\u56db\u8f74\u98de\u63a7\u6838\u5fc3\u3002\u4ece\u8bfb\u53d6\u4f20\u611f\u5668\u539f\u59cb\u6570\u636e&#xff0c;\u5230\u7b97\u51fa\u59ff\u6001\u89d2&#xff0c;\u5230\u7528 PID \u53bb\u63a7\u5236\u7535\u673a&#xff0c;\u518d\u5230\u7528\u5149\u6d41\u4f20\u611f\u5668\u5b9e\u73b0\u5ba4\u5185\u5b9a\u70b9\u2014\u2014\u6bcf\u4e00\u6b65\u90fd\u8bb2\u6e05\u695a\"\u4e3a","og_url":"https:\/\/www.wsisp.com\/helps\/100863.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-05T05:57:13+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/09\/20260905055709-6a9baf3532450.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"22 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/100863.html","url":"https:\/\/www.wsisp.com\/helps\/100863.html","name":"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-05T05:57:13+00:00","dateModified":"2026-09-05T05:57:13+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/100863.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/100863.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/100863.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"stm32_mpu6050_\u6ee4\u6ce2\u6559\u7a0b"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/100863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=100863"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/100863\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/100851"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=100863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=100863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=100863"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=100863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}