From 8c619d8dd8e6c4dc49bb016249e4c9b4c94b4fad Mon Sep 17 00:00:00 2001 From: Haotian Hang Date: Sat, 27 Jan 2024 22:47:56 -0800 Subject: [PATCH] bug fix according to "https://github.com/haotianh9/DengFOC_on_STM32/issues/2" --- .metadata/.ide.log | 2664 +++++------------ .metadata/.ide.log-2023-12-25.log | 1937 ++++++++++++ .metadata/.log | 26 + .metadata/.plugins/org.eclipse.cdt.core/.log | 2 + .../SVPWM.1703571019738.pdom | Bin 5783552 -> 5783552 bytes .../org.eclipse.cdt.ui/SVPWM.build.log | 29 +- .../org.eclipse.cdt.ui/global-build.log | 25 + .../10/4017c669b2a3001e1b4082bf61e237c7 | 94 - .../12/80baf1d8b6a3001e1e298100ab8cd7a4 | 101 - .../12/90c2c2617ca3001e1b4082bf61e237c7 | 545 ---- .../14/108b2fe47ba3001e1b4082bf61e237c7 | 561 ---- .../14/804db58f7ca3001e1b4082bf61e237c7 | 27 - .../14/a07980f91aa2001e1ab2edb23f9b017a | 0 .../14/e0db68da8fa3001e1b4082bf61e237c7 | 104 - .../15/10233b69b7a3001e1e298100ab8cd7a4 | 144 - .../15/f02e5aa9b2a3001e1b4082bf61e237c7 | 29 - .../16/d08ca96b7ca3001e1b4082bf61e237c7 | 27 - .../19/00a07c901aa2001e1ab2edb23f9b017a | 0 .../19/405dc1eb85a3001e1b4082bf61e237c7 | 69 - .../1e/a0528b19b7a2001e164b9bfe65a5b807 | 13 - .../1e/b0f3c81fb7a3001e1e298100ab8cd7a4 | 104 - .../1f/0086984ab2a3001e1b4082bf61e237c7 | 85 - .../1f/c0a3b7471ea2001e1ab2edb23f9b017a | 77 - .../21/a0b33d4e1aa2001e1ab2edb23f9b017a | 8 - .../23/20aaaaa17da3001e1b4082bf61e237c7 | 546 ---- .../24/b0e811d78fa3001e1b4082bf61e237c7 | 96 - .../2a/e05b414a1ea2001e1ab2edb23f9b017a | 13 - .../2d/c06d33b67ca3001e1b4082bf61e237c7 | 546 ---- .../30/a00907a57fa3001e1b4082bf61e237c7 | 548 ---- .../30/a042680891a3001e1b4082bf61e237c7 | 74 - .../32/d0e0a8dc8fa3001e1b4082bf61e237c7 | 104 - .../33/203a2945b2a3001e1b4082bf61e237c7 | 106 - .../36/80ff39b5b1a3001e1b4082bf61e237c7 | 559 ---- .../38/90a1de57e6a2001e164b9bfe65a5b807 | 14 - .../3b/603e70fdafa3001e1b4082bf61e237c7 | 553 ---- .../3c/709a6b2891a3001e1b4082bf61e237c7 | 74 - .../3d/70310357b1a3001e1b4082bf61e237c7 | 559 ---- .../3d/d0b0ab3f1aa2001e1ab2edb23f9b017a | 8 - .../3e/301017f87ba3001e1b4082bf61e237c7 | 8 - .../3f/4041eacab2a3001e1b4082bf61e237c7 | 571 ---- .../4/90b1dc69b7a2001e164b9bfe65a5b807 | 14 - .../41/102c80c914a2001e1ab2edb23f9b017a | 2 - .../44/b072edf77ca3001e1b4082bf61e237c7 | 22 - .../44/c02b7ef0b6a3001e1e298100ab8cd7a4 | 103 - .../47/303335b17ca3001e1b4082bf61e237c7 | 546 ---- .../48/b0f203f0b6a3001e1e298100ab8cd7a4 | 102 - .../4a/207ac0aeb2a3001e1b4082bf61e237c7 | 571 ---- .../4a/709a6ee47ca3001e1b4082bf61e237c7 | 27 - .../4a/b07f482ab0a3001e1b4082bf61e237c7 | 553 ---- .../4b/f0f6e708b2a3001e1b4082bf61e237c7 | 559 ---- .../4d/80d499d9bda2001e164b9bfe65a5b807 | 13 - .../54/f0fecb8e7ca3001e1b4082bf61e237c7 | 27 - .../55/c06d8be6bda2001e164b9bfe65a5b807 | 0 .../56/2090204cb3a3001e1b4082bf61e237c7 | 571 ---- .../56/400400a0b5a2001e164b9bfe65a5b807 | 0 .../57/f015aad57ca3001e1b4082bf61e237c7 | 27 - .../5a/30a15dca7ca3001e1b4082bf61e237c7 | 27 - .../5b/406c56d8b3a3001e1b4082bf61e237c7 | 577 ---- .../5e/7041746491a3001e1b4082bf61e237c7 | 82 - .../5e/802ba7311ba2001e1ab2edb23f9b017a | 13 - .../5e/d0c56ed091a3001e1b4082bf61e237c7 | 85 - .../5f/c0b6e3c3b6a3001e1e298100ab8cd7a4 | 98 - .../6/b0ab41f9b6a3001e1e298100ab8cd7a4 | 104 - .../61/9061eeddbda2001e164b9bfe65a5b807 | 8 - .../62/70104909b7a3001e1e298100ab8cd7a4 | 104 - .../65/50c67ab390a3001e1b4082bf61e237c7 | 104 - .../69/209c35f1caa2001e164b9bfe65a5b807 | 14 - .../69/60794154b1a3001e1b4082bf61e237c7 | 557 ---- .../69/a0a1accfbda2001e164b9bfe65a5b807 | 0 .../6c/30932b321aa2001e1ab2edb23f9b017a | 0 .../6c/a04092021ba2001e1ab2edb23f9b017a | 0 .../6c/f0801466b2a3001e1b4082bf61e237c7 | 29 - .../6d/c06ad6d6e9a2001e164b9bfe65a5b807 | 493 --- .../6d/e03096b9b5a3001e1e298100ab8cd7a4 | 98 - .../7/00d9e5dfb3a3001e1b4082bf61e237c7 | 577 ---- .../70/c0a13cd5b6a3001e1e298100ab8cd7a4 | 101 - .../71/1066ed46b7a3001e1e298100ab8cd7a4 | 104 - .../71/c0bbda141ba2001e1ab2edb23f9b017a | 13 - .../76/10a9caf290a3001e1b4082bf61e237c7 | 28 - .../76/30cb1dc2b3a3001e1b4082bf61e237c7 | 577 ---- .../7b/a0857150b1a3001e1b4082bf61e237c7 | 555 ---- .../7d/402ef78990a3001e1b4082bf61e237c7 | 104 - .../7f/50655cbc7fa3001e1b4082bf61e237c7 | 548 ---- .../80/2070fb7385a3001e1b4082bf61e237c7 | 69 - .../80/909a7afe90a3001e1b4082bf61e237c7 | 72 - .../81/2082344ab4a3001e1b4082bf61e237c7 | 577 ---- .../82/9063c7d085a3001e1b4082bf61e237c7 | 69 - .../82/e0c0e0a3b5a2001e164b9bfe65a5b807 | 0 .../84/0097fa13b2a3001e1b4082bf61e237c7 | 560 ---- .../85/c0017655b1a3001e1b4082bf61e237c7 | 557 ---- .../85/c0cd4434b0a3001e1b4082bf61e237c7 | 554 ---- .../87/6077ee6185a3001e1b4082bf61e237c7 | 26 - .../89/609763cf91a3001e1b4082bf61e237c7 | 86 - .../89/8032fae191a3001e1b4082bf61e237c7 | 85 - .../8c/00a43bacb2a3001e1b4082bf61e237c7 | 570 ---- .../8c/20c7264cb2a3001e1b4082bf61e237c7 | 29 - .../8c/8072d2d891a3001e1b4082bf61e237c7 | 84 - .../8d/202a55951aa2001e1ab2edb23f9b017a | 8 - .../8e/5050197c7ca3001e1b4082bf61e237c7 | 20 - .../92/604257d8bda2001e164b9bfe65a5b807 | 14 - .../93/c05ad2a885a3001e1b4082bf61e237c7 | 69 - .../99/a04bd32a91a3001e1b4082bf61e237c7 | 82 - .../99/e00a4264b2a3001e1b4082bf61e237c7 | 29 - .../9a/f0bdddb37ca3001e1b4082bf61e237c7 | 546 ---- .../9b/f0ebdd57afa3001e1b4082bf61e237c7 | 552 ---- .../9d/60e44bb5b2a3001e1b4082bf61e237c7 | 571 ---- .../a1/a09463dde7a2001e164b9bfe65a5b807 | 492 --- .../a2/00d9a543b3a3001e1b4082bf61e237c7 | 29 - .../a3/b007c986afa3001e1b4082bf61e237c7 | 552 ---- .../a5/90187cd5b2a3001e1b4082bf61e237c7 | 571 ---- .../a6/6036e39a7fa3001e1b4082bf61e237c7 | 26 - .../a9/9014b686b2a3001e1b4082bf61e237c7 | 570 ---- .../ab/802e503b91a3001e1b4082bf61e237c7 | 82 - .../ad/c0b8fe6390a3001e1b4082bf61e237c7 | 28 - .../af/1023440d1ba2001e1ab2edb23f9b017a | 0 .../b/c019673cb2a3001e1b4082bf61e237c7 | 560 ---- .../b1/6011eaf4b6a3001e1e298100ab8cd7a4 | 104 - .../b1/a034277785a3001e1b4082bf61e237c7 | 28 - .../b4/006ac10991a3001e1b4082bf61e237c7 | 74 - .../b4/e0b71cb37ca3001e1b4082bf61e237c7 | 546 ---- .../b6/30b0dc337ba3001e1b4082bf61e237c7 | 559 ---- .../b6/f012cd1a1ea2001e1ab2edb23f9b017a | 0 .../b7/600dc5857ca3001e1b4082bf61e237c7 | 27 - .../b8/0050ce1286a3001e1b4082bf61e237c7 | 78 - .../b8/50b20b4a91a3001e1b4082bf61e237c7 | 29 - .../bb/3083715385a3001e1b4082bf61e237c7 | 27 - .../c/003a5bd8bda2001e164b9bfe65a5b807 | 0 .../c/f07c67c57ca3001e1b4082bf61e237c7 | 546 ---- .../c0/102db39a7ca3001e1b4082bf61e237c7 | 27 - .../c1/f0e415f9afa3001e1b4082bf61e237c7 | 552 ---- .../c2/d07ed26373a3001e1f4188b4f6511e49 | 15 - .../c2/f02ccbfb1aa2001e1ab2edb23f9b017a | 8 - .../c4/a0dcedb8e9a2001e164b9bfe65a5b807 | 492 --- .../c6/50656f4eb7a3001e1e298100ab8cd7a4 | 144 - .../c6/f05af97d7ca3001e1b4082bf61e237c7 | 29 - .../c7/2015d38c7ca3001e1b4082bf61e237c7 | 27 - .../c9/00a203cb78a3001e1b4082bf61e237c7 | 15 - .../c9/d04486451ea2001e1ab2edb23f9b017a | 13 - .../cb/70786ab57ca3001e1b4082bf61e237c7 | 546 ---- .../cb/906614481aa2001e1ab2edb23f9b017a | 0 .../ce/10b6999e7ca3001e1b4082bf61e237c7 | 27 - .../cf/707f5054afa3001e1b4082bf61e237c7 | 552 ---- .../d1/908f5bbdb0a3001e1b4082bf61e237c7 | 554 ---- .../d4/00bf13ceb6a3001e1e298100ab8cd7a4 | 99 - .../d5/400d938e7fa3001e1b4082bf61e237c7 | 548 ---- .../d6/9006f27f90a3001e1b4082bf61e237c7 | 28 - .../d6/9096a010b2a3001e1b4082bf61e237c7 | 559 ---- .../d7/10006abeb5a3001e1e298100ab8cd7a4 | 577 ---- .../de/104c528b7da3001e1b4082bf61e237c7 | 26 - .../df/902c375cb2a3001e1b4082bf61e237c7 | 29 - .../e0/4055d0797da3001e1b4082bf61e237c7 | 25 - .../e1/5039ae40b2a3001e1b4082bf61e237c7 | 561 ---- .../e2/006b806eb2a3001e1b4082bf61e237c7 | 561 ---- .../e2/a036ab197ba3001e1b4082bf61e237c7 | 558 ---- .../e4/60fd2f8b85a3001e1b4082bf61e237c7 | 548 ---- .../e5/40884b6fb7a2001e164b9bfe65a5b807 | 14 - .../e7/50e4a77b91a3001e1b4082bf61e237c7 | 83 - .../e7/9014c9c38fa3001e1b4082bf61e237c7 | 22 - .../ec/30362f7eb7a3001e1e298100ab8cd7a4 | 144 - .../ed/b067264eb2a3001e1b4082bf61e237c7 | 29 - .../f/60a28cfb90a3001e1b4082bf61e237c7 | 71 - .../f/f03ab22b86a3001e1b4082bf61e237c7 | 78 - .../f2/d029c91ab7a2001e164b9bfe65a5b807 | 13 - .../f9/f085a20ab7a3001e1e298100ab8cd7a4 | 104 - .../fa/70aadd1f86a3001e1b4082bf61e237c7 | 548 ---- .../fa/f006690886a3001e1b4082bf61e237c7 | 78 - .../fb/e0a2386591a3001e1b4082bf61e237c7 | 83 - .../fe/30368b291ba2001e1ab2edb23f9b017a | 0 .../fe/80432c64b3a3001e1b4082bf61e237c7 | 3 - .../fe/90f89a7b7ca3001e1b4082bf61e237c7 | 16 - .../.projects/SVPWM/.indexes/af/history.index | Bin 94 -> 0 bytes .../SVPWM/.indexes/bf/be/history.index | Bin 1067 -> 0 bytes .../SVPWM/.indexes/bf/c4/history.index | Bin 2891 -> 0 bytes .../.projects/SVPWM/.markers | Bin 934 -> 794 bytes .../.indexes/af/history.index | Bin 94 -> 0 bytes .../.indexes/bf/be/history.index | Bin 1067 -> 0 bytes .../.indexes/bf/c4/history.index | Bin 2507 -> 0 bytes .../.indexes/bf/be/history.index | Bin 202 -> 0 bytes .../.indexes/bf/c4/history.index | Bin 82 -> 0 bytes .../.root/{8.tree => 10.tree} | Bin 84406 -> 84406 bytes .../.safetable/org.eclipse.core.resources | Bin 501 -> 506 bytes .../org.eclipse.e4.workbench/workbench.xmi | 42 +- .../dialog_settings.xml | 6 +- .metadata/version.ini | 2 +- SVPWM/Core/Src/main.c | 2 +- SVPWM/Core/Src/pid.c | 2 +- SVPWM/Debug/Core/Src/main.o | Bin 840232 -> 840232 bytes SVPWM/Debug/Core/Src/pid.o | Bin 799516 -> 799516 bytes SVPWM/Debug/SVPWM.elf | Bin 1121808 -> 1121808 bytes SVPWM/Debug/SVPWM.list | 4 +- SVPWM/Debug/closed_current_loop.list | 2 +- Test_codes/ADC_read/Core/Src/main.c | 2 +- .../Core/Src/main.c | 2 +- closed_current_loop/Core/Src/main.c | 2 +- closed_current_loop/Core/Src/pid.c | 2 +- .../Debug/closed_current_loop.list | 2 +- closedloop_position_control/Core/Src/main.c | 2 +- closedloop_speed_control/Core/Src/main.c | 2 +- closedloop_speed_control/Core/Src/pid.c | 2 +- .../Debug/closedloop_speed_control.list | 2 +- openloop_speedcontrol/Core/Src/main.c | 2 +- 201 files changed, 2785 insertions(+), 35045 deletions(-) create mode 100644 .metadata/.ide.log-2023-12-25.log delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/10/4017c669b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/12/80baf1d8b6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/12/90c2c2617ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/14/108b2fe47ba3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/14/804db58f7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/14/a07980f91aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/14/e0db68da8fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/10233b69b7a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/f02e5aa9b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/16/d08ca96b7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/19/00a07c901aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/19/405dc1eb85a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/a0528b19b7a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/b0f3c81fb7a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1f/0086984ab2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1f/c0a3b7471ea2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/21/a0b33d4e1aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/23/20aaaaa17da3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/24/b0e811d78fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2a/e05b414a1ea2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2d/c06d33b67ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/30/a00907a57fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/30/a042680891a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/d0e0a8dc8fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/33/203a2945b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/36/80ff39b5b1a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/90a1de57e6a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3b/603e70fdafa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3c/709a6b2891a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3d/70310357b1a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3d/d0b0ab3f1aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3e/301017f87ba3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/4041eacab2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4/90b1dc69b7a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/41/102c80c914a2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/44/b072edf77ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/44/c02b7ef0b6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/47/303335b17ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/48/b0f203f0b6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4a/207ac0aeb2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4a/709a6ee47ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4a/b07f482ab0a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4b/f0f6e708b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4d/80d499d9bda2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/54/f0fecb8e7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/55/c06d8be6bda2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/56/2090204cb3a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/56/400400a0b5a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/57/f015aad57ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5a/30a15dca7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/406c56d8b3a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5e/7041746491a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5e/802ba7311ba2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5e/d0c56ed091a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b6e3c3b6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/b0ab41f9b6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/61/9061eeddbda2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/62/70104909b7a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/65/50c67ab390a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/69/209c35f1caa2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/69/60794154b1a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/69/a0a1accfbda2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/30932b321aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/a04092021ba2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/f0801466b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6d/c06ad6d6e9a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6d/e03096b9b5a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7/00d9e5dfb3a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/70/c0a13cd5b6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/71/1066ed46b7a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/71/c0bbda141ba2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/10a9caf290a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/76/30cb1dc2b3a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7b/a0857150b1a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7d/402ef78990a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7f/50655cbc7fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/80/2070fb7385a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/80/909a7afe90a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/81/2082344ab4a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/82/9063c7d085a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/82/e0c0e0a3b5a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/84/0097fa13b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/85/c0017655b1a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/85/c0cd4434b0a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/87/6077ee6185a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/89/609763cf91a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/89/8032fae191a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8c/00a43bacb2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8c/20c7264cb2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8c/8072d2d891a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8d/202a55951aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8e/5050197c7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/92/604257d8bda2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/93/c05ad2a885a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/99/a04bd32a91a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/99/e00a4264b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9a/f0bdddb37ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9b/f0ebdd57afa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9d/60e44bb5b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/a09463dde7a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a2/00d9a543b3a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a3/b007c986afa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a5/90187cd5b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a6/6036e39a7fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a9/9014b686b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/802e503b91a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/c0b8fe6390a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/af/1023440d1ba2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b/c019673cb2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b1/6011eaf4b6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b1/a034277785a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b4/006ac10991a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b4/e0b71cb37ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/30b0dc337ba3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/f012cd1a1ea2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b7/600dc5857ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b8/0050ce1286a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b8/50b20b4a91a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/3083715385a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c/003a5bd8bda2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c/f07c67c57ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c0/102db39a7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c1/f0e415f9afa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c2/d07ed26373a3001e1f4188b4f6511e49 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c2/f02ccbfb1aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c4/a0dcedb8e9a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c6/50656f4eb7a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c6/f05af97d7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c7/2015d38c7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c9/00a203cb78a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c9/d04486451ea2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cb/70786ab57ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cb/906614481aa2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ce/10b6999e7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cf/707f5054afa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d1/908f5bbdb0a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d4/00bf13ceb6a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d5/400d938e7fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d6/9006f27f90a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d6/9096a010b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d7/10006abeb5a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/de/104c528b7da3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/df/902c375cb2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e0/4055d0797da3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e1/5039ae40b2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e2/006b806eb2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e2/a036ab197ba3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e4/60fd2f8b85a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e5/40884b6fb7a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e7/50e4a77b91a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e7/9014c9c38fa3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ec/30362f7eb7a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ed/b067264eb2a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f/60a28cfb90a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f/f03ab22b86a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f2/d029c91ab7a2001e164b9bfe65a5b807 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f9/f085a20ab7a3001e1e298100ab8cd7a4 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fa/70aadd1f86a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fa/f006690886a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fb/e0a2386591a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fe/30368b291ba2001e1ab2edb23f9b017a delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fe/80432c64b3a3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fe/90f89a7b7ca3001e1b4082bf61e237c7 delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/SVPWM/.indexes/af/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/SVPWM/.indexes/bf/be/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/SVPWM/.indexes/bf/c4/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/closed_current_loop/.indexes/af/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/closed_current_loop/.indexes/bf/be/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/closed_current_loop/.indexes/bf/c4/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/closedloop_speed_control/.indexes/bf/be/history.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/closedloop_speed_control/.indexes/bf/c4/history.index rename .metadata/.plugins/org.eclipse.core.resources/.root/{8.tree => 10.tree} (98%) diff --git a/.metadata/.ide.log b/.metadata/.ide.log index 3f6ad57..2dd5a4d 100644 --- a/.metadata/.ide.log +++ b/.metadata/.ide.log @@ -1,1937 +1,735 @@ -2023-12-25 14:04:42,542 [INFO] Activator:176 - +2024-01-27 22:36:37,333 [INFO] Activator:176 - -2023-12-25 14:04:42,548 [INFO] Activator:177 - !SESSION log4j initialized -2023-12-25 14:04:46,696 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] -2023-12-25 14:04:47,327 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 14:04:49,731 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 14:04:51,149 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 14:04:51,167 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 14:04:51,168 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 14:04:51,168 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 14:04:51,183 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:04:51,184 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:04:51,187 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 14:04:51,329 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) -2023-12-25 14:04:51,439 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 14:04:51,439 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 14:04:51,442 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 14:04:51,442 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,443 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:04:51,447 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,448 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:04:51,449 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,449 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,450 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 14:04:51,562 [INFO] MainPanel:262 - HeapMemory: 268435456 -2023-12-25 14:04:51,711 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 14:04:51,712 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 14:04:51,712 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 14:04:51,712 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,713 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:04:51,713 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,713 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:04:51,713 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,713 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:04:51,713 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 14:04:51,737 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 14:04:51,738 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] -2023-12-25 14:04:51,739 [INFO] PluginManage:310 - Check plugin analytics -2023-12-25 14:04:51,952 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: -2023-12-25 14:04:51,952 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: -2023-12-25 14:04:51,952 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: -2023-12-25 14:04:51,956 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) -2023-12-25 14:04:51,956 [INFO] PluginManage:310 - Check plugin cadmodel -2023-12-25 14:04:52,611 [INFO] CADModel:105 - Init CAD model plugin -2023-12-25 14:04:52,612 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) -2023-12-25 14:04:52,612 [INFO] PluginManage:310 - Check plugin clock -2023-12-25 14:04:52,624 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) -2023-12-25 14:04:52,624 [INFO] PluginManage:310 - Check plugin ddr -2023-12-25 14:04:52,626 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) -2023-12-25 14:04:52,626 [INFO] PluginManage:310 - Check plugin filemanager -2023-12-25 14:04:52,826 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) -2023-12-25 14:04:52,826 [INFO] PluginManage:310 - Check plugin ipmanager -2023-12-25 14:04:52,839 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) -2023-12-25 14:04:52,840 [INFO] PluginManage:310 - Check plugin lpbam -2023-12-25 14:04:52,856 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) -2023-12-25 14:04:52,856 [INFO] PluginManage:310 - Check plugin memorymap -2023-12-25 14:04:52,878 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) -2023-12-25 14:04:52,878 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration -2023-12-25 14:04:52,890 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) -2023-12-25 14:04:52,890 [INFO] PluginManage:310 - Check plugin pinoutconfig -2023-12-25 14:04:53,014 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. -2023-12-25 14:04:53,220 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) -2023-12-25 14:04:53,220 [INFO] PluginManage:310 - Check plugin power -2023-12-25 14:04:53,232 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) -2023-12-25 14:04:53,232 [INFO] PluginManage:310 - Check plugin projectmanager -2023-12-25 14:04:53,246 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) -2023-12-25 14:04:53,247 [INFO] PluginManage:310 - Check plugin thirdparty -2023-12-25 14:04:53,393 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) -2023-12-25 14:04:53,393 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] -2023-12-25 14:04:53,393 [INFO] PluginManage:310 - Check plugin tools -2023-12-25 14:04:53,393 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] -2023-12-25 14:04:53,394 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] -2023-12-25 14:04:53,396 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) -2023-12-25 14:04:53,396 [INFO] PluginManage:310 - Check plugin tutovideos -2023-12-25 14:04:53,623 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) -2023-12-25 14:04:53,623 [INFO] PluginManage:310 - Check plugin updater -2023-12-25 14:04:53,637 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) -2023-12-25 14:04:53,638 [INFO] PluginManage:310 - Check plugin userauth -2023-12-25 14:04:53,644 [INFO] UserAuth:113 - Init User Auth plugin -2023-12-25 14:04:53,645 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) -2023-12-25 14:04:53,645 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] -2023-12-25 14:04:53,923 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 14:04:54,099 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 14:04:54,100 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 14:04:54,116 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,116 [INFO] PluginManager:220 - loadIPPluginJar : add mdma -2023-12-25 14:04:54,125 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,125 [INFO] PluginManager:220 - loadIPPluginJar : add freertos -2023-12-25 14:04:54,131 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,131 [INFO] PluginManager:220 - loadIPPluginJar : add gic -2023-12-25 14:04:54,155 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,156 [INFO] PluginManager:220 - loadIPPluginJar : add adc -2023-12-25 14:04:54,159 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,159 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc -2023-12-25 14:04:54,161 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,161 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi -2023-12-25 14:04:54,163 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,164 [INFO] PluginManager:220 - loadIPPluginJar : add aes -2023-12-25 14:04:54,167 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,167 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm -2023-12-25 14:04:54,169 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,170 [INFO] PluginManager:220 - loadIPPluginJar : add hash -2023-12-25 14:04:54,171 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,172 [INFO] PluginManager:220 - loadIPPluginJar : add tim -2023-12-25 14:04:54,173 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,173 [INFO] PluginManager:220 - loadIPPluginJar : add tsc -2023-12-25 14:04:54,175 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,175 [INFO] PluginManager:220 - loadIPPluginJar : add ts -2023-12-25 14:04:54,177 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,178 [INFO] PluginManager:220 - loadIPPluginJar : add can -2023-12-25 14:04:54,180 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,180 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 -2023-12-25 14:04:54,182 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,182 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm -2023-12-25 14:04:54,184 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,184 [INFO] PluginManager:220 - loadIPPluginJar : add spi -2023-12-25 14:04:54,187 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,187 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu -2023-12-25 14:04:54,188 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,188 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin -2023-12-25 14:04:54,191 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,191 [INFO] PluginManager:220 - loadIPPluginJar : add cryp -2023-12-25 14:04:54,195 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,195 [INFO] PluginManager:220 - loadIPPluginJar : add gpio -2023-12-25 14:04:54,197 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,197 [INFO] PluginManager:220 - loadIPPluginJar : add comp -2023-12-25 14:04:54,199 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,199 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb -2023-12-25 14:04:54,202 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,202 [INFO] PluginManager:220 - loadIPPluginJar : add openamp -2023-12-25 14:04:54,207 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,207 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan -2023-12-25 14:04:54,214 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,218 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings -2023-12-25 14:04:54,224 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,224 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr -2023-12-25 14:04:54,228 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,228 [INFO] PluginManager:220 - loadIPPluginJar : add usart -2023-12-25 14:04:54,229 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,229 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc -2023-12-25 14:04:54,234 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,234 [INFO] PluginManager:220 - loadIPPluginJar : add nvic -2023-12-25 14:04:54,237 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,237 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs -2023-12-25 14:04:54,247 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,247 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist -2023-12-25 14:04:54,257 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,258 [INFO] PluginManager:220 - loadIPPluginJar : add dma -2023-12-25 14:04:54,264 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,265 [INFO] PluginManager:220 - loadIPPluginJar : add fmc -2023-12-25 14:04:54,268 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,268 [INFO] PluginManager:220 - loadIPPluginJar : add i2s -2023-12-25 14:04:54,270 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,271 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd -2023-12-25 14:04:54,274 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,274 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan -2023-12-25 14:04:54,278 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,278 [INFO] PluginManager:220 - loadIPPluginJar : add opamp -2023-12-25 14:04:54,281 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,281 [INFO] PluginManager:220 - loadIPPluginJar : add i3c -2023-12-25 14:04:54,285 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,285 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing -2023-12-25 14:04:54,289 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,289 [INFO] PluginManager:220 - loadIPPluginJar : add i2c -2023-12-25 14:04:54,294 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,294 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility -2023-12-25 14:04:54,298 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,298 [INFO] PluginManager:220 - loadIPPluginJar : add sai -2023-12-25 14:04:54,301 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:04:54,301 [INFO] PluginManager:220 - loadIPPluginJar : add usbx -2023-12-25 14:04:54,407 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 14:04:54,408 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 14:04:54,408 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,408 [ERROR] CADModel:125 - Updater not yet initialized, retry later -2023-12-25 14:04:54,614 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 14:04:54,614 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 14:04:54,615 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,615 [ERROR] CADModel:125 - Updater not yet initialized, retry later -2023-12-25 14:04:54,619 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,698 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,706 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) -2023-12-25 14:04:54,706 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,789 [WARN] DetailPanel:346 - Failed to get advertising image, set to default -2023-12-25 14:04:54,933 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,935 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,935 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,936 [WARN] DetailPanel:346 - Failed to get advertising image, set to default -2023-12-25 14:04:54,937 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:04:54,990 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. -2023-12-25 14:04:55,037 [INFO] Updater:1056 - Updater Version found : 6.9.2 -2023-12-25 14:04:55,064 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 14:04:55,264 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 14:04:55,265 [INFO] MainUpdater:285 - Updater Check For Update Now. -2023-12-25 14:04:55,265 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 14:04:55,274 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) -2023-12-25 14:04:55,274 [INFO] UserAuth:179 - activating auth plugin -2023-12-25 14:04:55,278 [INFO] UserAuth:393 - Internet connection configuration mode: 1 -2023-12-25 14:04:55,303 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder -2023-12-25 14:04:55,493 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread -2023-12-25 14:04:56,661 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 -2023-12-25 14:04:56,707 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 -2023-12-25 14:04:56,777 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 -2023-12-25 14:04:56,829 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 -2023-12-25 14:04:56,925 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 -2023-12-25 14:04:56,978 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 -2023-12-25 14:04:57,008 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 -2023-12-25 14:04:57,143 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 -2023-12-25 14:04:57,193 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 -2023-12-25 14:04:57,255 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:04:57,261 [INFO] WebApp:157 - Instantiating new browser for Auth -2023-12-25 14:04:57,273 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:04:57,309 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:04:57,310 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:04:57,330 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:04:57,346 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 -2023-12-25 14:04:57,439 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 -2023-12-25 14:04:57,552 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 -2023-12-25 14:04:57,611 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 -2023-12-25 14:04:57,734 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 -2023-12-25 14:04:57,784 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 -2023-12-25 14:04:57,844 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 -2023-12-25 14:04:57,894 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 -2023-12-25 14:04:58,018 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 -2023-12-25 14:04:58,093 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 -2023-12-25 14:04:58,112 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 -2023-12-25 14:04:58,120 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 -2023-12-25 14:04:58,146 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 -2023-12-25 14:04:58,158 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 -2023-12-25 14:04:58,168 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 -2023-12-25 14:04:58,177 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 -2023-12-25 14:04:58,186 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 -2023-12-25 14:04:58,200 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 -2023-12-25 14:04:58,211 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 -2023-12-25 14:04:58,286 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:04:58,289 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 -2023-12-25 14:04:58,291 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:04:58,292 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:04:58,293 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:04:58,310 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 -2023-12-25 14:04:58,323 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 -2023-12-25 14:04:58,376 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:04:58,376 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:04:58,380 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 -2023-12-25 14:04:58,382 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:04:58,382 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:04:58,383 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:04:58,384 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:04:58,384 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:04:58,402 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 -2023-12-25 14:04:58,428 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 -2023-12-25 14:04:58,455 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 -2023-12-25 14:04:58,469 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 -2023-12-25 14:04:58,478 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 -2023-12-25 14:04:58,482 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 -2023-12-25 14:04:58,488 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 -2023-12-25 14:04:58,492 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 -2023-12-25 14:04:58,496 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 -2023-12-25 14:04:58,500 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 -2023-12-25 14:04:58,512 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 -2023-12-25 14:04:58,578 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 -2023-12-25 14:04:58,584 [INFO] ThirdParty:978 - Integrity check success = true -2023-12-25 14:04:58,584 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] -2023-12-25 14:04:58,584 [INFO] IntegrityCheckThread:103 - End integrity checks thread -2023-12-25 14:04:58,607 [INFO] WebApp:753 - Register for checkConnection events -2023-12-25 14:04:58,608 [INFO] WebApp:390 - Apply proxy settings -2023-12-25 14:04:58,612 [INFO] WebApp:455 - Chromium authenticates against System proxy -2023-12-25 14:04:58,905 [INFO] WebApp:188 - Starting web application -2023-12-25 14:04:58,905 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html -2023-12-25 14:05:19,838 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". -2023-12-25 14:05:19,839 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation -2023-12-25 14:05:19,839 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. -2023-12-25 14:17:59,855 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] -2023-12-25 14:55:44,490 [INFO] Activator:176 - +2024-01-27 22:36:37,338 [INFO] Activator:177 - !SESSION log4j initialized +2024-01-27 22:36:40,861 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2024-01-27 22:36:41,625 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2024-01-27 22:36:43,261 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2024-01-27 22:36:44,020 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2024-01-27 22:36:44,037 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2024-01-27 22:36:44,037 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2024-01-27 22:36:44,037 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2024-01-27 22:36:44,050 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:36:44,052 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:36:44,054 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2024-01-27 22:36:44,161 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) +2024-01-27 22:36:44,231 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2024-01-27 22:36:44,231 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2024-01-27 22:36:44,231 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2024-01-27 22:36:44,231 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,231 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:36:44,231 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,231 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:36:44,231 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,232 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,232 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2024-01-27 22:36:44,308 [INFO] MainPanel:262 - HeapMemory: 268435456 +2024-01-27 22:36:44,399 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2024-01-27 22:36:44,399 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2024-01-27 22:36:44,399 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2024-01-27 22:36:44,400 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,400 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:36:44,400 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,400 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:36:44,401 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,401 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:36:44,401 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2024-01-27 22:36:44,418 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2024-01-27 22:36:44,419 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] +2024-01-27 22:36:44,421 [INFO] PluginManage:310 - Check plugin analytics +2024-01-27 22:36:44,589 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: +2024-01-27 22:36:44,589 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: +2024-01-27 22:36:44,590 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: +2024-01-27 22:36:44,592 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) +2024-01-27 22:36:44,592 [INFO] PluginManage:310 - Check plugin cadmodel +2024-01-27 22:36:45,069 [INFO] CADModel:105 - Init CAD model plugin +2024-01-27 22:36:45,069 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) +2024-01-27 22:36:45,069 [INFO] PluginManage:310 - Check plugin clock +2024-01-27 22:36:45,081 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) +2024-01-27 22:36:45,081 [INFO] PluginManage:310 - Check plugin ddr +2024-01-27 22:36:45,084 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) +2024-01-27 22:36:45,084 [INFO] PluginManage:310 - Check plugin filemanager +2024-01-27 22:36:45,229 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) +2024-01-27 22:36:45,230 [INFO] PluginManage:310 - Check plugin ipmanager +2024-01-27 22:36:45,237 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) +2024-01-27 22:36:45,237 [INFO] PluginManage:310 - Check plugin lpbam +2024-01-27 22:36:45,246 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) +2024-01-27 22:36:45,247 [INFO] PluginManage:310 - Check plugin memorymap +2024-01-27 22:36:45,259 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) +2024-01-27 22:36:45,260 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration +2024-01-27 22:36:45,266 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) +2024-01-27 22:36:45,266 [INFO] PluginManage:310 - Check plugin pinoutconfig +2024-01-27 22:36:45,348 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. +2024-01-27 22:36:45,475 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) +2024-01-27 22:36:45,475 [INFO] PluginManage:310 - Check plugin power +2024-01-27 22:36:45,486 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) +2024-01-27 22:36:45,486 [INFO] PluginManage:310 - Check plugin projectmanager +2024-01-27 22:36:45,497 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) +2024-01-27 22:36:45,497 [INFO] PluginManage:310 - Check plugin thirdparty +2024-01-27 22:36:45,629 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) +2024-01-27 22:36:45,629 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] +2024-01-27 22:36:45,629 [INFO] PluginManage:310 - Check plugin tools +2024-01-27 22:36:45,629 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] +2024-01-27 22:36:45,630 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] +2024-01-27 22:36:45,632 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) +2024-01-27 22:36:45,632 [INFO] PluginManage:310 - Check plugin tutovideos +2024-01-27 22:36:45,822 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) +2024-01-27 22:36:45,822 [INFO] PluginManage:310 - Check plugin updater +2024-01-27 22:36:45,833 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) +2024-01-27 22:36:45,833 [INFO] PluginManage:310 - Check plugin userauth +2024-01-27 22:36:45,839 [INFO] UserAuth:113 - Init User Auth plugin +2024-01-27 22:36:45,839 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) +2024-01-27 22:36:45,839 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] +2024-01-27 22:36:46,023 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2024-01-27 22:36:46,120 [INFO] CADModel:165 - CPN selected for project level +2024-01-27 22:36:46,120 [INFO] CADModel:114 - Register for checkConnection events +2024-01-27 22:36:46,134 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,134 [INFO] PluginManager:220 - loadIPPluginJar : add mdma +2024-01-27 22:36:46,142 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,142 [INFO] PluginManager:220 - loadIPPluginJar : add freertos +2024-01-27 22:36:46,147 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,148 [INFO] PluginManager:220 - loadIPPluginJar : add gic +2024-01-27 22:36:46,156 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,157 [INFO] PluginManager:220 - loadIPPluginJar : add adc +2024-01-27 22:36:46,159 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,159 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc +2024-01-27 22:36:46,161 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,161 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi +2024-01-27 22:36:46,163 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,163 [INFO] PluginManager:220 - loadIPPluginJar : add aes +2024-01-27 22:36:46,166 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,166 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm +2024-01-27 22:36:46,168 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,168 [INFO] PluginManager:220 - loadIPPluginJar : add hash +2024-01-27 22:36:46,170 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,170 [INFO] PluginManager:220 - loadIPPluginJar : add tim +2024-01-27 22:36:46,171 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,172 [INFO] PluginManager:220 - loadIPPluginJar : add tsc +2024-01-27 22:36:46,174 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,174 [INFO] PluginManager:220 - loadIPPluginJar : add ts +2024-01-27 22:36:46,177 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,177 [INFO] PluginManager:220 - loadIPPluginJar : add can +2024-01-27 22:36:46,179 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,179 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 +2024-01-27 22:36:46,181 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,181 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm +2024-01-27 22:36:46,183 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,183 [INFO] PluginManager:220 - loadIPPluginJar : add spi +2024-01-27 22:36:46,184 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,184 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu +2024-01-27 22:36:46,185 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,186 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin +2024-01-27 22:36:46,187 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,187 [INFO] PluginManager:220 - loadIPPluginJar : add cryp +2024-01-27 22:36:46,191 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,191 [INFO] PluginManager:220 - loadIPPluginJar : add gpio +2024-01-27 22:36:46,193 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,193 [INFO] PluginManager:220 - loadIPPluginJar : add comp +2024-01-27 22:36:46,194 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,194 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb +2024-01-27 22:36:46,197 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,197 [INFO] PluginManager:220 - loadIPPluginJar : add openamp +2024-01-27 22:36:46,201 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,201 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan +2024-01-27 22:36:46,206 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,209 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings +2024-01-27 22:36:46,212 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,213 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr +2024-01-27 22:36:46,215 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,215 [INFO] PluginManager:220 - loadIPPluginJar : add usart +2024-01-27 22:36:46,216 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,216 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc +2024-01-27 22:36:46,219 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,220 [INFO] PluginManager:220 - loadIPPluginJar : add nvic +2024-01-27 22:36:46,221 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,221 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs +2024-01-27 22:36:46,228 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,228 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist +2024-01-27 22:36:46,232 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,233 [INFO] PluginManager:220 - loadIPPluginJar : add dma +2024-01-27 22:36:46,236 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,236 [INFO] PluginManager:220 - loadIPPluginJar : add fmc +2024-01-27 22:36:46,238 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,238 [INFO] PluginManager:220 - loadIPPluginJar : add i2s +2024-01-27 22:36:46,239 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,240 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd +2024-01-27 22:36:46,241 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,241 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan +2024-01-27 22:36:46,243 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,244 [INFO] PluginManager:220 - loadIPPluginJar : add opamp +2024-01-27 22:36:46,246 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,246 [INFO] PluginManager:220 - loadIPPluginJar : add i3c +2024-01-27 22:36:46,249 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,249 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing +2024-01-27 22:36:46,251 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,251 [INFO] PluginManager:220 - loadIPPluginJar : add i2c +2024-01-27 22:36:46,254 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,254 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility +2024-01-27 22:36:46,256 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,256 [INFO] PluginManager:220 - loadIPPluginJar : add sai +2024-01-27 22:36:46,259 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:36:46,259 [INFO] PluginManager:220 - loadIPPluginJar : add usbx +2024-01-27 22:36:46,357 [INFO] CADModel:165 - CPN selected for project level +2024-01-27 22:36:46,357 [INFO] CADModel:114 - Register for checkConnection events +2024-01-27 22:36:46,358 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,358 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2024-01-27 22:36:46,526 [INFO] CADModel:165 - CPN selected for project level +2024-01-27 22:36:46,527 [INFO] CADModel:114 - Register for checkConnection events +2024-01-27 22:36:46,527 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,527 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2024-01-27 22:36:46,545 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,659 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,669 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) +2024-01-27 22:36:46,669 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,782 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2024-01-27 22:36:46,899 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,902 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,902 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,902 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2024-01-27 22:36:46,903 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:36:46,934 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. +2024-01-27 22:36:46,965 [INFO] Updater:1056 - Updater Version found : 6.9.2 +2024-01-27 22:36:46,986 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2024-01-27 22:36:47,177 [INFO] MainUpdater:2868 - connection check result : 10 +2024-01-27 22:36:47,177 [INFO] MainUpdater:3562 - Updater definition file requires update +2024-01-27 22:36:47,178 [INFO] MainUpdater:285 - Updater Check For Update Now. +2024-01-27 22:36:47,178 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2024-01-27 22:36:47,184 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2024-01-27 22:36:47,184 [INFO] UserAuth:179 - activating auth plugin +2024-01-27 22:36:47,186 [INFO] UserAuth:393 - Internet connection configuration mode: 1 +2024-01-27 22:36:47,203 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder +2024-01-27 22:36:47,244 [INFO] ServerAccessManage:473 - Download File updaters.zip +2024-01-27 22:36:47,319 [INFO] FileExtend:240 - Unzip File : updaters.zip +2024-01-27 22:36:47,320 [INFO] FileExtend:255 - Standard Zip Deflate +2024-01-27 22:36:47,550 [INFO] ServerAccessManage:473 - Download File PacksControlFlags.xml +2024-01-27 22:36:47,596 [INFO] ServerAccessManage:473 - Download File cubemx.pidx +2024-01-27 22:36:48,198 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-EEPRMA1.pdsc +2024-01-27 22:36:48,634 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2024-01-27 22:36:48,659 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [1/15] +2024-01-27 22:36:49,062 [INFO] WebApp:157 - Instantiating new browser for Auth +2024-01-27 22:36:49,220 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2024-01-27 22:36:50,098 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2024-01-27 22:36:50,141 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2024-01-27 22:36:50,661 [INFO] WebApp:753 - Register for checkConnection events +2024-01-27 22:36:50,662 [INFO] WebApp:390 - Apply proxy settings +2024-01-27 22:36:50,665 [INFO] WebApp:455 - Chromium authenticates against System proxy +2024-01-27 22:36:50,911 [INFO] WebApp:188 - Starting web application +2024-01-27 22:36:50,911 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html +2024-01-27 22:36:51,223 [ERROR] ServerAccessManage:1096 - Problem, Http access forbiden +2024-01-27 22:36:51,224 [ERROR] ServerAccessManage:651 - Problem, Http access forbiden : RoweBots.I-CUBE-UNISONRTOS.pdsc. +2024-01-27 22:36:51,388 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.5.1.0 +2024-01-27 22:36:51,393 [INFO] PopulateThirdPartyThread:66 - Ending populate Thread +2024-01-27 22:36:51,394 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 5.1.0 +2024-01-27 22:36:51,395 [INFO] LoadServerUpdatesThread:373 - End of LoadServerUpdate Thread +2024-01-27 22:36:51,515 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread +2024-01-27 22:36:51,771 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 +2024-01-27 22:36:51,775 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 +2024-01-27 22:36:51,801 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 +2024-01-27 22:36:51,811 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 +2024-01-27 22:36:51,816 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 +2024-01-27 22:36:51,824 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 +2024-01-27 22:36:51,835 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 +2024-01-27 22:36:51,839 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 +2024-01-27 22:36:51,842 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 +2024-01-27 22:36:51,851 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:36:51,851 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:36:51,852 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:36:51,852 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:36:51,852 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:36:51,856 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 +2024-01-27 22:36:51,864 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 +2024-01-27 22:36:51,869 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 +2024-01-27 22:36:51,875 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 +2024-01-27 22:36:51,892 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 +2024-01-27 22:36:51,899 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 +2024-01-27 22:36:51,906 [INFO] MainUpdater:2868 - connection check result : 10 +2024-01-27 22:36:51,907 [INFO] MainUpdater:2868 - connection check result : 10 +2024-01-27 22:36:51,910 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 +2024-01-27 22:36:51,919 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 +2024-01-27 22:36:51,926 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.5.1.0 +2024-01-27 22:36:51,980 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 +2024-01-27 22:36:52,069 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 +2024-01-27 22:36:52,120 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 +2024-01-27 22:36:52,137 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 +2024-01-27 22:36:52,165 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 +2024-01-27 22:36:52,173 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 +2024-01-27 22:36:52,178 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 +2024-01-27 22:36:52,191 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 +2024-01-27 22:36:52,202 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 +2024-01-27 22:36:52,208 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 +2024-01-27 22:36:52,214 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 +2024-01-27 22:36:52,240 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:36:52,241 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 +2024-01-27 22:36:52,259 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:36:52,260 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:36:52,261 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:36:52,294 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 +2024-01-27 22:36:52,347 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 +2024-01-27 22:36:52,367 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:36:52,368 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:36:52,373 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 +2024-01-27 22:36:52,374 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:36:52,375 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:36:52,375 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:36:52,376 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:36:52,376 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:36:52,398 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 +2024-01-27 22:36:52,702 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 +2024-01-27 22:36:52,965 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 +2024-01-27 22:36:52,999 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 +2024-01-27 22:36:53,009 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 +2024-01-27 22:36:53,016 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 +2024-01-27 22:36:53,023 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 +2024-01-27 22:36:53,028 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 +2024-01-27 22:36:53,033 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 +2024-01-27 22:36:53,044 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 +2024-01-27 22:36:53,261 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 +2024-01-27 22:36:53,336 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 +2024-01-27 22:36:53,344 [INFO] ThirdParty:978 - Integrity check success = true +2024-01-27 22:36:53,344 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] +2024-01-27 22:36:53,344 [INFO] IntegrityCheckThread:103 - End integrity checks thread +2024-01-27 22:36:53,619 [INFO] MicroXplorer:468 - Change Database Path : +2024-01-27 22:36:53,636 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2024-01-27 22:36:53,661 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] +2024-01-27 22:36:53,677 [INFO] ThirdParty:873 - entering critical section [close project] +2024-01-27 22:36:53,698 [INFO] ThirdParty:883 - exiting critical section [close project] +2024-01-27 22:36:53,720 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2024-01-27 22:36:53,745 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 278529104 Bytes (591396864) +2024-01-27 22:36:53,758 [INFO] MicroXplorer:468 - Change Database Path : +2024-01-27 22:36:53,778 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2024-01-27 22:36:53,814 [INFO] OpenFileManager:308 - Change cursor +2024-01-27 22:36:54,157 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 +2024-01-27 22:36:55,145 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden +2024-01-27 22:36:55,524 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS +2024-01-27 22:36:55,524 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS +2024-01-27 22:36:55,525 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS +2024-01-27 22:36:55,525 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS +2024-01-27 22:36:55,525 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: +2024-01-27 22:36:55,556 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,556 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,556 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,556 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,556 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,556 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,557 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,558 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,559 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,559 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,559 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,559 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2024-01-27 22:36:55,599 [INFO] ThirdPartyModel:298 - Start build external matchings +2024-01-27 22:36:55,826 [INFO] ThirdPartyModel:316 - End build external matchings +2024-01-27 22:36:55,838 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) +2024-01-27 22:36:55,838 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) +2024-01-27 22:36:56,073 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 260028824 Bytes (591396864) +2024-01-27 22:36:56,519 [INFO] ApiDb:581 - Connected to CubeFinder SQLite database (/Users/haotian/.stmcufinder/plugins/mcufinder/mcu/cube-finder-db.db) +2024-01-27 22:36:56,585 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 +2024-01-27 22:36:56,585 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.39 +2024-01-27 22:36:56,585 [INFO] ApiDb:670 - CubeFinder database generation date=2023-12-08 (1702028721) +2024-01-27 22:36:56,586 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-MOTENVWB1_V1.3.1, FP-SNS-SMARTAG2_V1.2.0, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.28.0, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H5_V1.2.0RC2, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_U5_V1.4.0, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.2.0, STM32Cube_FW_WBA_V1.2.0RC2, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.18.0, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V3.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-EEPRMA1_V4.2.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.4.0] +2024-01-27 22:36:58,848 [INFO] ApiDb:240 - Found 323 in-development CPN: [B-G473E-ZEST1S, B-WB1M-WPAN1, B-WL5M-SUBG1, NUCLEO-C031C6, NUCLEO-H503RB, NUCLEO-H563ZI, NUCLEO-U545RE-Q, NUCLEO-U5A5ZJ-Q, NUCLEO-WBA52CG, STEVAL-PROTEUS1, STEVAL-SMARTAG2, STEVAL-STWINBX1, STM320518-EVAL, STM32C0116-DK, STM32C011D6Y3TR, STM32C011D6Y6TR, STM32C011F4P3, STM32C011F4P6, STM32C011F4U3, STM32C011F4U6TR, STM32C011F6P3, STM32C011F6P6, STM32C011F6U3, STM32C011F6U6TR, STM32C011J4M3, STM32C011J4M6, STM32C011J6M3, STM32C011J6M6, STM32C0316-DK, STM32C031C4T3, STM32C031C4T6, STM32C031C4U3, STM32C031C4U6, STM32C031C6T3, STM32C031C6T6, STM32C031C6U3, STM32C031C6U6, STM32C031F4P3, STM32C031F4P6, STM32C031F6P3, STM32C031F6P6, STM32C031G4U3, STM32C031G4U6, STM32C031G6U3, STM32C031G6U6, STM32C031K4T3, STM32C031K4T6, STM32C031K4U3, STM32C031K4U6, STM32C031K6T3, STM32C031K6T6, STM32C031K6U3, STM32C031K6U6, STM32G071K8TXN, STM32G071K8UXN, STM32G081GBU6N, STM32G081KBT6N, STM32G081KBUXN, STM32G0B1CCT6N, STM32G0B1KCT6, STM32G0B1NEY6TR, STM32G0B1RCT6N, STM32G0C1CCT6, STM32G0C1CCT6N, STM32G0C1CCU6N, STM32G0C1CET6N, STM32G0C1CEU6N, STM32G0C1KCT6, STM32G0C1NEY6TR, STM32G0C1RCI6N, STM32G0C1RCT6N, STM32G0C1REI6N, STM32G0C1RET6N, STM32G0C1VCI6, STM32G0C1VEI6, STM32G471CCT6, STM32G471CCU6, STM32G471CET3, STM32G471CET6, STM32G471CEU3, STM32G471CEU6, STM32G471MCT6, STM32G471MET3, STM32G471MET6, STM32G471MEY6TR, STM32G471QCT6, STM32G471QET3, STM32G471RCT6, STM32G471RET3, STM32G471RET6, STM32G471VCH6, STM32G471VCI6, STM32G471VCT6, STM32G471VEH3, STM32G471VEH6, STM32G471VEI3, STM32G471VEI6, STM32G471VET3, STM32G471VET6, STM32G474CCT6, STM32H503CBT6, STM32H503CBU6, STM32H503EBY6TR, STM32H503KBU6, STM32H503RBT6, STM32H562AGI6, STM32H562AII6, STM32H562IGK6, STM32H562IGT6, STM32H562IIK6, STM32H562IIT6, STM32H562RGT6, STM32H562RGV6, STM32H562RIT6, STM32H562RIV6, STM32H562VGT6, STM32H562VIT6, STM32H562ZGT6, STM32H562ZIT6, STM32H563AGI6, STM32H563AII3Q, STM32H563AII6, STM32H563IGK6, STM32H563IGT6, STM32H563IIK3Q, STM32H563IIK6, STM32H563IIT3Q, STM32H563IIT6, STM32H563MIY3QTR, STM32H563RGT6, STM32H563RGV6, STM32H563RIT6, STM32H563RIV6, STM32H563VGT6, STM32H563VIT3Q, STM32H563VIT6, STM32H563ZGT6, STM32H563ZIT3Q, STM32H563ZIT6, STM32H573AII3Q, STM32H573AII6, STM32H573I-DK, STM32H573IIK3Q, STM32H573IIK6, STM32H573IIT3Q, STM32H573IIT6, STM32H573MIY3QTR, STM32H573RIT6, STM32H573RIV6, STM32H573VIT3Q, STM32H573VIT6, STM32H573ZIT3Q, STM32H573ZIT6, STM32L4R5QGI6STR, STM32MP131AAE3, STM32MP131AAF3, STM32MP131AAG3, STM32MP131CAE3, STM32MP131CAF3, STM32MP131CAG3, STM32MP131DAE7, STM32MP131DAF7, STM32MP131DAG7, STM32MP131FAE7, STM32MP131FAF7, STM32MP131FAG7, STM32MP133AAE3, STM32MP133AAF3, STM32MP133AAG3, STM32MP133CAE3, STM32MP133CAF3, STM32MP133CAG3, STM32MP133DAE7, STM32MP133DAF7, STM32MP133DAG7, STM32MP133FAE7, STM32MP133FAF7, STM32MP133FAG7, STM32MP135AAE3, STM32MP135AAF3, STM32MP135AAG3, STM32MP135CAE3, STM32MP135CAF3, STM32MP135CAG3, STM32MP135DAE7, STM32MP135DAF7, STM32MP135DAG7, STM32MP135F-DK, STM32MP135FAE7, STM32MP135FAF7, STM32MP135FAF7T, STM32MP135FAF7U, STM32MP135FAG7, STM32U535CBT6, STM32U535CBT6Q, STM32U535CBU6, STM32U535CBU6Q, STM32U535CCT6, STM32U535CCT6Q, STM32U535CCU6, STM32U535CCU6Q, STM32U535CET6, STM32U535CET6Q, STM32U535CEU6, STM32U535CEU6Q, STM32U535JEY6QTR, STM32U535NCY6QTR, STM32U535NEY6QTR, STM32U535RBI6, STM32U535RBI6Q, STM32U535RBT6, STM32U535RBT6Q, STM32U535RCI6, STM32U535RCI6Q, STM32U535RCT6, STM32U535RCT6Q, STM32U535REI6, STM32U535REI6Q, STM32U535RET6, STM32U535RET6Q, STM32U535VCI6, STM32U535VCI6Q, STM32U535VCT6, STM32U535VCT6Q, STM32U535VEI6, STM32U535VEI6Q, STM32U535VET6, STM32U535VET6Q, STM32U545CET6, STM32U545CET6Q, STM32U545CEU6, STM32U545CEU6Q, STM32U545JEY6QTR, STM32U545NEY6QTR, STM32U545REI6, STM32U545REI6Q, STM32U545RET6, STM32U545RET6Q, STM32U545VEI6, STM32U545VEI6Q, STM32U545VET6, STM32U545VET6Q, STM32U595AIH6, STM32U595AIH6Q, STM32U595AJH6, STM32U595AJH6Q, STM32U595QII6, STM32U595QII6Q, STM32U595QJI6, STM32U595QJI6Q, STM32U595RIT6, STM32U595RIT6Q, STM32U595RJT6, STM32U595RJT6Q, STM32U595VIT6, STM32U595VIT6Q, STM32U595VJT6, STM32U595VJT6Q, STM32U595ZIT6, STM32U595ZIT6Q, STM32U595ZIY6QTR, STM32U595ZJT6, STM32U595ZJT6Q, STM32U595ZJY6QTR, STM32U599BJY6QTR, STM32U599NIH6Q, STM32U599NJH6Q, STM32U599VIT6Q, STM32U599VJT6, STM32U599VJT6Q, STM32U599ZIT6Q, STM32U599ZIY6QTR, STM32U599ZJT6Q, STM32U599ZJY6QTR, STM32U5A5AJH6, STM32U5A5AJH6Q, STM32U5A5QJI6, STM32U5A5QJI6Q, STM32U5A5RJT6, STM32U5A5RJT6Q, STM32U5A5VJT6, STM32U5A5VJT6Q, STM32U5A5ZJT6, STM32U5A5ZJT6Q, STM32U5A5ZJY6QTR, STM32U5A9BJY6QTR, STM32U5A9J-DK, STM32U5A9NJH6Q, STM32U5A9VJT6Q, STM32U5A9ZJT6Q, STM32U5A9ZJY6QTR, STM32U5F7VIT6, STM32U5F7VIT6Q, STM32U5F7VJT6, STM32U5F7VJT6Q, STM32U5F9BJY6QTR, STM32U5F9NJH6Q, STM32U5F9VIT6Q, STM32U5F9VJT6Q, STM32U5F9ZIJ6QTR, STM32U5F9ZIT6Q, STM32U5F9ZJJ6QTR, STM32U5F9ZJT6Q, STM32U5G7VJT6, STM32U5G7VJT6Q, STM32U5G9BJY6QTR, STM32U5G9J-DK1, STM32U5G9J-DK2, STM32U5G9NJH6Q, STM32U5G9VJT6Q, STM32U5G9ZJJ6QTR, STM32U5G9ZJT6Q, STM32WB1MMCH6, STM32WBA52CEU6, STM32WBA52CEU6T, STM32WBA52CGU6, STM32WBA52CGU6T, STM32WBA52KEU6, STM32WBA52KEU6T, STM32WBA52KGU6, STM32WBA52KGU6T, STM32WL5MOCH6, STM32WL5MOCH6TR] +2024-01-27 22:36:58,852 [INFO] DbMcus:217 - Found 3882 MCUs, 3882 are supported +2024-01-27 22:36:58,853 [INFO] ApiDb:423 - Load user favorites file /Users/haotian/.stm32cubeide/favorites.mcus.txt: 0 item(s) +2024-01-27 22:36:58,853 [INFO] ApiDb:427 - User favorites MCUs=[] +2024-01-27 22:36:58,854 [INFO] DbMcus:223 - Set 0 / 0 favorites MCUs +2024-01-27 22:36:59,194 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] +2024-01-27 22:36:59,194 [INFO] ThirdParty:835 - entering critical section [change project] +2024-01-27 22:36:59,194 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 +2024-01-27 22:36:59,194 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 +2024-01-27 22:36:59,194 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 +2024-01-27 22:36:59,195 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 5.1.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 +2024-01-27 22:36:59,196 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 +2024-01-27 22:36:59,197 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 +2024-01-27 22:36:59,198 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 +2024-01-27 22:36:59,198 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 +2024-01-27 22:36:59,198 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 +2024-01-27 22:36:59,198 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 +2024-01-27 22:36:59,198 [INFO] ThirdParty:841 - exiting critical section [change project] +2024-01-27 22:36:59,486 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2024-01-27 22:36:59,487 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) +2024-01-27 22:37:00,082 [INFO] UtilMem:75 - Before build in PCC Used Memory: 201868288 Bytes (591396864) +2024-01-27 22:37:00,773 [INFO] UtilMem:75 - After build in PCC Used Memory: 323232568 Bytes (591396864) +2024-01-27 22:37:00,864 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE +2024-01-27 22:37:00,887 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,888 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,888 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,888 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,889 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,889 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,889 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,889 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,890 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,890 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,890 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,890 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,891 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,891 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,891 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,892 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,892 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,892 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,892 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,892 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,892 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,893 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,893 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,893 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,893 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,893 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:00,894 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:37:01,100 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 +2024-01-27 22:37:01,100 [INFO] CADModel:114 - Register for checkConnection events +2024-01-27 22:37:01,142 [INFO] OpenFileManager:328 - Restore cursor +2024-01-27 22:37:12,579 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". +2024-01-27 22:37:12,579 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation +2024-01-27 22:37:12,579 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. +2024-01-27 22:41:31,629 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2024-01-27 22:45:36,012 [INFO] Activator:176 - -2023-12-25 14:55:44,492 [INFO] Activator:177 - !SESSION log4j initialized -2023-12-25 14:55:48,665 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] -2023-12-25 14:55:49,324 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 14:55:51,691 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 14:55:52,445 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 14:55:52,470 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 14:55:52,470 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 14:55:52,471 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 14:55:52,487 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:55:52,489 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:55:52,491 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 14:55:52,634 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) -2023-12-25 14:55:52,708 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 14:55:52,708 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 14:55:52,708 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 14:55:52,708 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,708 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:55:52,709 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,709 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:55:52,709 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,709 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,709 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 14:55:52,796 [INFO] MainPanel:262 - HeapMemory: 268435456 -2023-12-25 14:55:52,903 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 14:55:52,903 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 14:55:52,903 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,904 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,904 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 14:55:52,904 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 14:55:52,925 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 14:55:52,927 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] -2023-12-25 14:55:52,929 [INFO] PluginManage:310 - Check plugin analytics -2023-12-25 14:55:53,102 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: -2023-12-25 14:55:53,102 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: -2023-12-25 14:55:53,102 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: -2023-12-25 14:55:53,105 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) -2023-12-25 14:55:53,105 [INFO] PluginManage:310 - Check plugin cadmodel -2023-12-25 14:55:53,437 [INFO] CADModel:105 - Init CAD model plugin -2023-12-25 14:55:53,437 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) -2023-12-25 14:55:53,437 [INFO] PluginManage:310 - Check plugin clock -2023-12-25 14:55:53,449 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) -2023-12-25 14:55:53,449 [INFO] PluginManage:310 - Check plugin ddr -2023-12-25 14:55:53,452 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) -2023-12-25 14:55:53,452 [INFO] PluginManage:310 - Check plugin filemanager -2023-12-25 14:55:53,599 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) -2023-12-25 14:55:53,600 [INFO] PluginManage:310 - Check plugin ipmanager -2023-12-25 14:55:53,605 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) -2023-12-25 14:55:53,606 [INFO] PluginManage:310 - Check plugin lpbam -2023-12-25 14:55:53,618 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) -2023-12-25 14:55:53,618 [INFO] PluginManage:310 - Check plugin memorymap -2023-12-25 14:55:53,635 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) -2023-12-25 14:55:53,635 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration -2023-12-25 14:55:53,643 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) -2023-12-25 14:55:53,643 [INFO] PluginManage:310 - Check plugin pinoutconfig -2023-12-25 14:55:53,740 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. -2023-12-25 14:55:53,893 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) -2023-12-25 14:55:53,893 [INFO] PluginManage:310 - Check plugin power -2023-12-25 14:55:53,905 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) -2023-12-25 14:55:53,905 [INFO] PluginManage:310 - Check plugin projectmanager -2023-12-25 14:55:53,919 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) -2023-12-25 14:55:53,919 [INFO] PluginManage:310 - Check plugin thirdparty -2023-12-25 14:55:54,058 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) -2023-12-25 14:55:54,057 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] -2023-12-25 14:55:54,058 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] -2023-12-25 14:55:54,058 [INFO] PluginManage:310 - Check plugin tools -2023-12-25 14:55:54,058 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] -2023-12-25 14:55:54,060 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) -2023-12-25 14:55:54,061 [INFO] PluginManage:310 - Check plugin tutovideos -2023-12-25 14:55:54,257 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) -2023-12-25 14:55:54,258 [INFO] PluginManage:310 - Check plugin updater -2023-12-25 14:55:54,270 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) -2023-12-25 14:55:54,270 [INFO] PluginManage:310 - Check plugin userauth -2023-12-25 14:55:54,276 [INFO] UserAuth:113 - Init User Auth plugin -2023-12-25 14:55:54,277 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) -2023-12-25 14:55:54,277 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] -2023-12-25 14:55:54,483 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 14:55:54,588 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 14:55:54,588 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 14:55:54,601 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,601 [INFO] PluginManager:220 - loadIPPluginJar : add mdma -2023-12-25 14:55:54,609 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,610 [INFO] PluginManager:220 - loadIPPluginJar : add freertos -2023-12-25 14:55:54,615 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,615 [INFO] PluginManager:220 - loadIPPluginJar : add gic -2023-12-25 14:55:54,627 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,627 [INFO] PluginManager:220 - loadIPPluginJar : add adc -2023-12-25 14:55:54,630 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,631 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc -2023-12-25 14:55:54,632 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,632 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi -2023-12-25 14:55:54,634 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,635 [INFO] PluginManager:220 - loadIPPluginJar : add aes -2023-12-25 14:55:54,637 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,638 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm -2023-12-25 14:55:54,640 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,640 [INFO] PluginManager:220 - loadIPPluginJar : add hash -2023-12-25 14:55:54,641 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,641 [INFO] PluginManager:220 - loadIPPluginJar : add tim -2023-12-25 14:55:54,643 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,643 [INFO] PluginManager:220 - loadIPPluginJar : add tsc -2023-12-25 14:55:54,645 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,645 [INFO] PluginManager:220 - loadIPPluginJar : add ts -2023-12-25 14:55:54,647 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,647 [INFO] PluginManager:220 - loadIPPluginJar : add can -2023-12-25 14:55:54,650 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,650 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 -2023-12-25 14:55:54,652 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,652 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm -2023-12-25 14:55:54,654 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,654 [INFO] PluginManager:220 - loadIPPluginJar : add spi -2023-12-25 14:55:54,656 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,656 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu -2023-12-25 14:55:54,657 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,657 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin -2023-12-25 14:55:54,659 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,660 [INFO] PluginManager:220 - loadIPPluginJar : add cryp -2023-12-25 14:55:54,664 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,664 [INFO] PluginManager:220 - loadIPPluginJar : add gpio -2023-12-25 14:55:54,665 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,666 [INFO] PluginManager:220 - loadIPPluginJar : add comp -2023-12-25 14:55:54,668 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,668 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb -2023-12-25 14:55:54,671 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,671 [INFO] PluginManager:220 - loadIPPluginJar : add openamp -2023-12-25 14:55:54,677 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,677 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan -2023-12-25 14:55:54,684 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,686 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings -2023-12-25 14:55:54,690 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,690 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr -2023-12-25 14:55:54,692 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,692 [INFO] PluginManager:220 - loadIPPluginJar : add usart -2023-12-25 14:55:54,694 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,694 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc -2023-12-25 14:55:54,697 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,698 [INFO] PluginManager:220 - loadIPPluginJar : add nvic -2023-12-25 14:55:54,699 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,699 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs -2023-12-25 14:55:54,706 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,706 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist -2023-12-25 14:55:54,713 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,713 [INFO] PluginManager:220 - loadIPPluginJar : add dma -2023-12-25 14:55:54,718 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,718 [INFO] PluginManager:220 - loadIPPluginJar : add fmc -2023-12-25 14:55:54,721 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,721 [INFO] PluginManager:220 - loadIPPluginJar : add i2s -2023-12-25 14:55:54,723 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,723 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd -2023-12-25 14:55:54,726 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,726 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan -2023-12-25 14:55:54,729 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,729 [INFO] PluginManager:220 - loadIPPluginJar : add opamp -2023-12-25 14:55:54,732 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,732 [INFO] PluginManager:220 - loadIPPluginJar : add i3c -2023-12-25 14:55:54,735 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,735 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing -2023-12-25 14:55:54,738 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,738 [INFO] PluginManager:220 - loadIPPluginJar : add i2c -2023-12-25 14:55:54,742 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,742 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility -2023-12-25 14:55:54,745 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,745 [INFO] PluginManager:220 - loadIPPluginJar : add sai -2023-12-25 14:55:54,747 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 14:55:54,747 [INFO] PluginManager:220 - loadIPPluginJar : add usbx -2023-12-25 14:55:54,846 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 14:55:54,846 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 14:55:54,847 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:54,847 [ERROR] CADModel:125 - Updater not yet initialized, retry later -2023-12-25 14:55:55,052 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 14:55:55,052 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 14:55:55,053 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,053 [ERROR] CADModel:125 - Updater not yet initialized, retry later -2023-12-25 14:55:55,057 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,143 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,149 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) -2023-12-25 14:55:55,149 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,231 [WARN] DetailPanel:346 - Failed to get advertising image, set to default -2023-12-25 14:55:55,338 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,340 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,340 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,340 [WARN] DetailPanel:346 - Failed to get advertising image, set to default -2023-12-25 14:55:55,341 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 14:55:55,369 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. -2023-12-25 14:55:55,397 [INFO] Updater:1056 - Updater Version found : 6.9.2 -2023-12-25 14:55:55,417 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 14:55:55,554 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 14:55:55,555 [INFO] MainUpdater:285 - Updater Check For Update Now. -2023-12-25 14:55:55,555 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 14:55:55,561 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) -2023-12-25 14:55:55,562 [INFO] UserAuth:179 - activating auth plugin -2023-12-25 14:55:55,565 [INFO] UserAuth:393 - Internet connection configuration mode: 1 -2023-12-25 14:55:55,582 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder -2023-12-25 14:55:55,745 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread -2023-12-25 14:55:57,122 [INFO] WebApp:157 - Instantiating new browser for Auth -2023-12-25 14:55:58,072 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 -2023-12-25 14:55:58,081 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 -2023-12-25 14:55:58,116 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 -2023-12-25 14:55:58,152 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 -2023-12-25 14:55:58,178 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 -2023-12-25 14:55:58,188 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 -2023-12-25 14:55:58,203 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 -2023-12-25 14:55:58,208 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 -2023-12-25 14:55:58,211 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 -2023-12-25 14:55:58,214 [INFO] WebApp:753 - Register for checkConnection events -2023-12-25 14:55:58,215 [INFO] WebApp:390 - Apply proxy settings -2023-12-25 14:55:58,218 [INFO] WebApp:455 - Chromium authenticates against System proxy -2023-12-25 14:55:58,227 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:55:58,228 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:55:58,228 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:55:58,229 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:55:58,229 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 14:55:58,235 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 -2023-12-25 14:55:58,246 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 -2023-12-25 14:55:58,252 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 -2023-12-25 14:55:58,262 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 -2023-12-25 14:55:58,288 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 -2023-12-25 14:55:58,296 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 -2023-12-25 14:55:58,306 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 -2023-12-25 14:55:58,312 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 -2023-12-25 14:55:58,365 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 -2023-12-25 14:55:58,451 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 -2023-12-25 14:55:58,495 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 -2023-12-25 14:55:58,504 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 -2023-12-25 14:55:58,537 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 -2023-12-25 14:55:58,546 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 -2023-12-25 14:55:58,551 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 -2023-12-25 14:55:58,557 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 -2023-12-25 14:55:58,560 [INFO] WebApp:188 - Starting web application -2023-12-25 14:55:58,560 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html -2023-12-25 14:55:58,564 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 -2023-12-25 14:55:58,571 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 -2023-12-25 14:55:58,577 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 -2023-12-25 14:55:58,602 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:55:58,602 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 -2023-12-25 14:55:58,603 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:55:58,603 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:55:58,604 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 14:55:58,610 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 -2023-12-25 14:55:58,614 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 -2023-12-25 14:55:58,632 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:55:58,632 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:55:58,635 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 -2023-12-25 14:55:58,636 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:55:58,636 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:55:58,636 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:55:58,637 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:55:58,637 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 14:55:58,648 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 -2023-12-25 14:55:58,663 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 -2023-12-25 14:55:58,698 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 -2023-12-25 14:55:58,712 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 -2023-12-25 14:55:58,727 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 -2023-12-25 14:55:58,733 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 -2023-12-25 14:55:58,757 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 -2023-12-25 14:55:58,768 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 -2023-12-25 14:55:58,773 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 -2023-12-25 14:55:58,779 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 -2023-12-25 14:55:58,796 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 -2023-12-25 14:55:58,858 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 -2023-12-25 14:55:58,867 [INFO] ThirdParty:978 - Integrity check success = true -2023-12-25 14:55:58,867 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] -2023-12-25 14:55:58,867 [INFO] IntegrityCheckThread:103 - End integrity checks thread -2023-12-25 14:56:19,489 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". -2023-12-25 14:56:19,489 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation -2023-12-25 14:56:19,490 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. -2023-12-25 16:31:38,733 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) -2023-12-25 16:31:38,743 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 16:31:38,744 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 16:31:39,697 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 16:31:39,697 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 16:31:39,703 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] -2023-12-25 16:31:39,703 [INFO] ThirdParty:873 - entering critical section [close project] -2023-12-25 16:31:39,705 [INFO] ThirdParty:883 - exiting critical section [close project] -2023-12-25 16:31:39,710 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 16:31:39,724 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 756852256 Bytes (1045430272) -2023-12-25 16:31:39,727 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 16:31:39,727 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 16:31:39,727 [INFO] OpenFileManager:308 - Change cursor -2023-12-25 16:31:39,776 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 -2023-12-25 16:31:41,412 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden -2023-12-25 16:31:41,939 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 16:31:41,940 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 16:31:41,940 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 16:31:41,940 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 16:31:41,940 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: -2023-12-25 16:31:41,971 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 16:31:42,034 [INFO] ThirdPartyModel:298 - Start build external matchings -2023-12-25 16:31:42,429 [INFO] ThirdPartyModel:316 - End build external matchings -2023-12-25 16:31:42,444 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) -2023-12-25 16:31:42,444 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) -2023-12-25 16:31:42,729 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 670639176 Bytes (1073741824) -2023-12-25 16:31:43,078 [INFO] ApiDb:581 - Connected to CubeFinder SQLite database (/Users/haotian/.stmcufinder/plugins/mcufinder/mcu/cube-finder-db.db) -2023-12-25 16:31:43,190 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 -2023-12-25 16:31:43,191 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.39 -2023-12-25 16:31:43,193 [INFO] ApiDb:670 - CubeFinder database generation date=2023-12-08 (1702028721) -2023-12-25 16:31:43,194 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-MOTENVWB1_V1.3.1, FP-SNS-SMARTAG2_V1.2.0, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.28.0, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H5_V1.2.0RC2, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_U5_V1.4.0, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.2.0, STM32Cube_FW_WBA_V1.2.0RC2, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.18.0, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V3.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-EEPRMA1_V4.2.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.4.0] -2023-12-25 16:31:46,080 [INFO] ApiDb:240 - Found 323 in-development CPN: [B-G473E-ZEST1S, B-WB1M-WPAN1, B-WL5M-SUBG1, NUCLEO-C031C6, NUCLEO-H503RB, NUCLEO-H563ZI, NUCLEO-U545RE-Q, NUCLEO-U5A5ZJ-Q, NUCLEO-WBA52CG, STEVAL-PROTEUS1, STEVAL-SMARTAG2, STEVAL-STWINBX1, STM320518-EVAL, STM32C0116-DK, STM32C011D6Y3TR, STM32C011D6Y6TR, STM32C011F4P3, STM32C011F4P6, STM32C011F4U3, STM32C011F4U6TR, STM32C011F6P3, STM32C011F6P6, STM32C011F6U3, STM32C011F6U6TR, STM32C011J4M3, STM32C011J4M6, STM32C011J6M3, STM32C011J6M6, STM32C0316-DK, STM32C031C4T3, STM32C031C4T6, STM32C031C4U3, STM32C031C4U6, STM32C031C6T3, STM32C031C6T6, STM32C031C6U3, STM32C031C6U6, STM32C031F4P3, STM32C031F4P6, STM32C031F6P3, STM32C031F6P6, STM32C031G4U3, STM32C031G4U6, STM32C031G6U3, STM32C031G6U6, STM32C031K4T3, STM32C031K4T6, STM32C031K4U3, STM32C031K4U6, STM32C031K6T3, STM32C031K6T6, STM32C031K6U3, STM32C031K6U6, STM32G071K8TXN, STM32G071K8UXN, STM32G081GBU6N, STM32G081KBT6N, STM32G081KBUXN, STM32G0B1CCT6N, STM32G0B1KCT6, STM32G0B1NEY6TR, STM32G0B1RCT6N, STM32G0C1CCT6, STM32G0C1CCT6N, STM32G0C1CCU6N, STM32G0C1CET6N, STM32G0C1CEU6N, STM32G0C1KCT6, STM32G0C1NEY6TR, STM32G0C1RCI6N, STM32G0C1RCT6N, STM32G0C1REI6N, STM32G0C1RET6N, STM32G0C1VCI6, STM32G0C1VEI6, STM32G471CCT6, STM32G471CCU6, STM32G471CET3, STM32G471CET6, STM32G471CEU3, STM32G471CEU6, STM32G471MCT6, STM32G471MET3, STM32G471MET6, STM32G471MEY6TR, STM32G471QCT6, STM32G471QET3, STM32G471RCT6, STM32G471RET3, STM32G471RET6, STM32G471VCH6, STM32G471VCI6, STM32G471VCT6, STM32G471VEH3, STM32G471VEH6, STM32G471VEI3, STM32G471VEI6, STM32G471VET3, STM32G471VET6, STM32G474CCT6, STM32H503CBT6, STM32H503CBU6, STM32H503EBY6TR, STM32H503KBU6, STM32H503RBT6, STM32H562AGI6, STM32H562AII6, STM32H562IGK6, STM32H562IGT6, STM32H562IIK6, STM32H562IIT6, STM32H562RGT6, STM32H562RGV6, STM32H562RIT6, STM32H562RIV6, STM32H562VGT6, STM32H562VIT6, STM32H562ZGT6, STM32H562ZIT6, STM32H563AGI6, STM32H563AII3Q, STM32H563AII6, STM32H563IGK6, STM32H563IGT6, STM32H563IIK3Q, STM32H563IIK6, STM32H563IIT3Q, STM32H563IIT6, STM32H563MIY3QTR, STM32H563RGT6, STM32H563RGV6, STM32H563RIT6, STM32H563RIV6, STM32H563VGT6, STM32H563VIT3Q, STM32H563VIT6, STM32H563ZGT6, STM32H563ZIT3Q, STM32H563ZIT6, STM32H573AII3Q, STM32H573AII6, STM32H573I-DK, STM32H573IIK3Q, STM32H573IIK6, STM32H573IIT3Q, STM32H573IIT6, STM32H573MIY3QTR, STM32H573RIT6, STM32H573RIV6, STM32H573VIT3Q, STM32H573VIT6, STM32H573ZIT3Q, STM32H573ZIT6, STM32L4R5QGI6STR, STM32MP131AAE3, STM32MP131AAF3, STM32MP131AAG3, STM32MP131CAE3, STM32MP131CAF3, STM32MP131CAG3, STM32MP131DAE7, STM32MP131DAF7, STM32MP131DAG7, STM32MP131FAE7, STM32MP131FAF7, STM32MP131FAG7, STM32MP133AAE3, STM32MP133AAF3, STM32MP133AAG3, STM32MP133CAE3, STM32MP133CAF3, STM32MP133CAG3, STM32MP133DAE7, STM32MP133DAF7, STM32MP133DAG7, STM32MP133FAE7, STM32MP133FAF7, STM32MP133FAG7, STM32MP135AAE3, STM32MP135AAF3, STM32MP135AAG3, STM32MP135CAE3, STM32MP135CAF3, STM32MP135CAG3, STM32MP135DAE7, STM32MP135DAF7, STM32MP135DAG7, STM32MP135F-DK, STM32MP135FAE7, STM32MP135FAF7, STM32MP135FAF7T, STM32MP135FAF7U, STM32MP135FAG7, STM32U535CBT6, STM32U535CBT6Q, STM32U535CBU6, STM32U535CBU6Q, STM32U535CCT6, STM32U535CCT6Q, STM32U535CCU6, STM32U535CCU6Q, STM32U535CET6, STM32U535CET6Q, STM32U535CEU6, STM32U535CEU6Q, STM32U535JEY6QTR, STM32U535NCY6QTR, STM32U535NEY6QTR, STM32U535RBI6, STM32U535RBI6Q, STM32U535RBT6, STM32U535RBT6Q, STM32U535RCI6, STM32U535RCI6Q, STM32U535RCT6, STM32U535RCT6Q, STM32U535REI6, STM32U535REI6Q, STM32U535RET6, STM32U535RET6Q, STM32U535VCI6, STM32U535VCI6Q, STM32U535VCT6, STM32U535VCT6Q, STM32U535VEI6, STM32U535VEI6Q, STM32U535VET6, STM32U535VET6Q, STM32U545CET6, STM32U545CET6Q, STM32U545CEU6, STM32U545CEU6Q, STM32U545JEY6QTR, STM32U545NEY6QTR, STM32U545REI6, STM32U545REI6Q, STM32U545RET6, STM32U545RET6Q, STM32U545VEI6, STM32U545VEI6Q, STM32U545VET6, STM32U545VET6Q, STM32U595AIH6, STM32U595AIH6Q, STM32U595AJH6, STM32U595AJH6Q, STM32U595QII6, STM32U595QII6Q, STM32U595QJI6, STM32U595QJI6Q, STM32U595RIT6, STM32U595RIT6Q, STM32U595RJT6, STM32U595RJT6Q, STM32U595VIT6, STM32U595VIT6Q, STM32U595VJT6, STM32U595VJT6Q, STM32U595ZIT6, STM32U595ZIT6Q, STM32U595ZIY6QTR, STM32U595ZJT6, STM32U595ZJT6Q, STM32U595ZJY6QTR, STM32U599BJY6QTR, STM32U599NIH6Q, STM32U599NJH6Q, STM32U599VIT6Q, STM32U599VJT6, STM32U599VJT6Q, STM32U599ZIT6Q, STM32U599ZIY6QTR, STM32U599ZJT6Q, STM32U599ZJY6QTR, STM32U5A5AJH6, STM32U5A5AJH6Q, STM32U5A5QJI6, STM32U5A5QJI6Q, STM32U5A5RJT6, STM32U5A5RJT6Q, STM32U5A5VJT6, STM32U5A5VJT6Q, STM32U5A5ZJT6, STM32U5A5ZJT6Q, STM32U5A5ZJY6QTR, STM32U5A9BJY6QTR, STM32U5A9J-DK, STM32U5A9NJH6Q, STM32U5A9VJT6Q, STM32U5A9ZJT6Q, STM32U5A9ZJY6QTR, STM32U5F7VIT6, STM32U5F7VIT6Q, STM32U5F7VJT6, STM32U5F7VJT6Q, STM32U5F9BJY6QTR, STM32U5F9NJH6Q, STM32U5F9VIT6Q, STM32U5F9VJT6Q, STM32U5F9ZIJ6QTR, STM32U5F9ZIT6Q, STM32U5F9ZJJ6QTR, STM32U5F9ZJT6Q, STM32U5G7VJT6, STM32U5G7VJT6Q, STM32U5G9BJY6QTR, STM32U5G9J-DK1, STM32U5G9J-DK2, STM32U5G9NJH6Q, STM32U5G9VJT6Q, STM32U5G9ZJJ6QTR, STM32U5G9ZJT6Q, STM32WB1MMCH6, STM32WBA52CEU6, STM32WBA52CEU6T, STM32WBA52CGU6, STM32WBA52CGU6T, STM32WBA52KEU6, STM32WBA52KEU6T, STM32WBA52KGU6, STM32WBA52KGU6T, STM32WL5MOCH6, STM32WL5MOCH6TR] -2023-12-25 16:31:46,085 [INFO] DbMcus:217 - Found 3882 MCUs, 3882 are supported -2023-12-25 16:31:46,086 [INFO] ApiDb:423 - Load user favorites file /Users/haotian/.stm32cubeide/favorites.mcus.txt: 0 item(s) -2023-12-25 16:31:46,087 [INFO] ApiDb:427 - User favorites MCUs=[] -2023-12-25 16:31:46,087 [INFO] DbMcus:223 - Set 0 / 0 favorites MCUs -2023-12-25 16:31:46,603 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] -2023-12-25 16:31:46,603 [INFO] ThirdParty:835 - entering critical section [change project] -2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 -2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 -2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 -2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 -2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 -2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 -2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 -2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 -2023-12-25 16:31:46,608 [INFO] ThirdParty:841 - exiting critical section [change project] -2023-12-25 16:31:47,029 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 16:31:47,031 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) -2023-12-25 16:31:47,981 [INFO] UtilMem:75 - Before build in PCC Used Memory: 621641272 Bytes (1073741824) -2023-12-25 16:31:49,087 [INFO] UtilMem:75 - After build in PCC Used Memory: 734887480 Bytes (1073741824) -2023-12-25 16:31:49,225 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE -2023-12-25 16:31:49,268 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,269 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,269 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,270 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,270 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,272 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,273 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,273 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,273 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,274 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,274 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,274 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,277 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,277 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,279 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,279 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,280 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,280 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 16:31:49,591 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 -2023-12-25 16:31:49,591 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 16:31:49,635 [INFO] OpenFileManager:328 - Restore cursor -2023-12-25 16:31:57,171 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 574018408 Bytes (1073741824) -2023-12-25 16:31:58,023 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI -2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC -2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE -2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB -2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS -2023-12-25 16:31:58,025 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO -2023-12-25 16:31:58,026 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC -2023-12-25 16:31:58,026 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC -2023-12-25 16:31:58,029 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ -2023-12-25 16:31:58,650 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save -2023-12-25 16:31:59,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp -2023-12-25 16:31:59,526 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save -2023-12-25 16:31:59,728 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp -2023-12-25 16:31:59,855 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save -2023-12-25 16:31:59,988 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp -2023-12-25 16:31:59,991 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save -2023-12-25 16:32:00,109 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp -2023-12-25 16:32:00,113 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save -2023-12-25 16:32:00,276 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp -2023-12-25 16:32:00,279 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save -2023-12-25 16:32:00,440 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp -2023-12-25 16:32:00,821 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 16:32:00,834 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 16:32:00,845 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save -2023-12-25 16:32:00,987 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c -2023-12-25 16:32:00,991 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save -2023-12-25 16:32:01,098 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h -2023-12-25 16:32:01,108 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save -2023-12-25 16:32:01,230 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h -2023-12-25 16:32:01,238 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save -2023-12-25 16:32:01,365 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c -2023-12-25 16:32:01,372 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save -2023-12-25 16:32:01,492 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h -2023-12-25 16:32:01,498 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save -2023-12-25 16:32:01,646 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c -2023-12-25 16:32:01,733 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save -2023-12-25 16:32:01,869 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h -2023-12-25 16:32:01,875 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save -2023-12-25 16:32:02,065 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c -2023-12-25 16:32:02,081 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save -2023-12-25 16:32:02,250 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c -2023-12-25 16:32:02,255 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save -2023-12-25 16:32:02,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h -2023-12-25 16:32:02,442 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save -2023-12-25 16:32:02,622 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c -2023-12-25 16:32:02,629 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save -2023-12-25 16:32:02,723 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp -2023-12-25 16:32:02,730 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save -2023-12-25 16:32:02,830 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h -2023-12-25 16:32:02,868 [WARN] IPConfigManager:3431 - IP not found : TIM -2023-12-25 16:32:02,869 [WARN] CodeGenerator:3764 - IP not found : null -2023-12-25 16:32:02,875 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save -2023-12-25 16:32:03,011 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h -2023-12-25 16:32:03,015 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save -2023-12-25 16:32:03,262 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c -2023-12-25 16:32:04,310 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 240mS. -2023-12-25 16:32:04,323 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 -2023-12-25 16:32:04,737 [INFO] ConfigFileManager:1457 - The Die is : DIE410 -2023-12-25 16:32:04,745 [INFO] ApiDbMcu:507 - Load IP Config File for FATFS -2023-12-25 16:32:04,752 [INFO] ApiDbMcu:507 - Load IP Config File for FREERTOS -2023-12-25 16:32:06,382 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 16:32:07,718 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 3395mS. -2023-12-25 16:32:07,719 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 16:32:07,723 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 21:57:22,462 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 693533904 Bytes (1073741824) -2023-12-25 21:57:22,877 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI -2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC -2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE -2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB -2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS -2023-12-25 21:57:22,879 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO -2023-12-25 21:57:22,880 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC -2023-12-25 21:57:22,880 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC -2023-12-25 21:57:22,881 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ -2023-12-25 21:57:23,178 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save -2023-12-25 21:57:23,310 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp -2023-12-25 21:57:23,336 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save -2023-12-25 21:57:23,425 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp -2023-12-25 21:57:23,481 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save -2023-12-25 21:57:23,562 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp -2023-12-25 21:57:23,564 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save -2023-12-25 21:57:23,626 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp -2023-12-25 21:57:23,629 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save -2023-12-25 21:57:23,837 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp -2023-12-25 21:57:23,839 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save -2023-12-25 21:57:23,932 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp -2023-12-25 21:57:24,328 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:57:24,343 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:57:24,349 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save -2023-12-25 21:57:24,430 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c -2023-12-25 21:57:24,433 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save -2023-12-25 21:57:24,501 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h -2023-12-25 21:57:24,505 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save -2023-12-25 21:57:24,583 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h -2023-12-25 21:57:24,586 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save -2023-12-25 21:57:24,734 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c -2023-12-25 21:57:24,741 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save -2023-12-25 21:57:24,846 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h -2023-12-25 21:57:24,849 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save -2023-12-25 21:57:24,926 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c -2023-12-25 21:57:24,929 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save -2023-12-25 21:57:24,996 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h -2023-12-25 21:57:25,000 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save -2023-12-25 21:57:25,067 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c -2023-12-25 21:57:25,075 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save -2023-12-25 21:57:25,260 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c -2023-12-25 21:57:25,263 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save -2023-12-25 21:57:25,324 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h -2023-12-25 21:57:25,331 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save -2023-12-25 21:57:25,424 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c -2023-12-25 21:57:25,427 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save -2023-12-25 21:57:25,632 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp -2023-12-25 21:57:25,642 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save -2023-12-25 21:57:25,742 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h -2023-12-25 21:57:25,767 [WARN] IPConfigManager:3431 - IP not found : TIM -2023-12-25 21:57:25,768 [WARN] CodeGenerator:3764 - IP not found : null -2023-12-25 21:57:25,778 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save -2023-12-25 21:57:25,922 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h -2023-12-25 21:57:25,927 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save -2023-12-25 21:57:26,223 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c -2023-12-25 21:57:27,326 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 243mS. -2023-12-25 21:57:27,331 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 -2023-12-25 21:57:27,915 [INFO] ConfigFileManager:1457 - The Die is : DIE410 -2023-12-25 21:57:29,904 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2571mS. -2023-12-25 21:57:29,905 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 21:57:29,924 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 21:57:30,034 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] -2023-12-25 21:57:53,135 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 687053200 Bytes (1073741824) -2023-12-25 21:58:15,009 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 667460064 Bytes (1073741824) -2023-12-25 21:58:15,398 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI -2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC -2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE -2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB -2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS -2023-12-25 21:58:15,400 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO -2023-12-25 21:58:15,400 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC -2023-12-25 21:58:15,400 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC -2023-12-25 21:58:15,401 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ -2023-12-25 21:58:15,626 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save -2023-12-25 21:58:15,708 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp -2023-12-25 21:58:15,730 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save -2023-12-25 21:58:15,822 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp -2023-12-25 21:58:15,887 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save -2023-12-25 21:58:15,974 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp -2023-12-25 21:58:15,976 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save -2023-12-25 21:58:16,055 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp -2023-12-25 21:58:16,056 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save -2023-12-25 21:58:16,123 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp -2023-12-25 21:58:16,124 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save -2023-12-25 21:58:16,251 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp -2023-12-25 21:58:16,444 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:58:16,452 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:58:16,457 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save -2023-12-25 21:58:16,522 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c -2023-12-25 21:58:16,524 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save -2023-12-25 21:58:16,584 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h -2023-12-25 21:58:16,586 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save -2023-12-25 21:58:16,648 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h -2023-12-25 21:58:16,651 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save -2023-12-25 21:58:16,720 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c -2023-12-25 21:58:16,724 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save -2023-12-25 21:58:16,784 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h -2023-12-25 21:58:16,787 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save -2023-12-25 21:58:16,854 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c -2023-12-25 21:58:16,860 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save -2023-12-25 21:58:16,925 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h -2023-12-25 21:58:16,928 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save -2023-12-25 21:58:17,004 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c -2023-12-25 21:58:17,013 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save -2023-12-25 21:58:17,084 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c -2023-12-25 21:58:17,087 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save -2023-12-25 21:58:17,148 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h -2023-12-25 21:58:17,155 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save -2023-12-25 21:58:17,246 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c -2023-12-25 21:58:17,248 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save -2023-12-25 21:58:17,346 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp -2023-12-25 21:58:17,352 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save -2023-12-25 21:58:17,440 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h -2023-12-25 21:58:17,459 [WARN] IPConfigManager:3431 - IP not found : TIM -2023-12-25 21:58:17,460 [WARN] CodeGenerator:3764 - IP not found : null -2023-12-25 21:58:17,464 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save -2023-12-25 21:58:17,556 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h -2023-12-25 21:58:17,559 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save -2023-12-25 21:58:17,722 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c -2023-12-25 21:58:18,461 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 158mS. -2023-12-25 21:58:18,467 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 -2023-12-25 21:58:18,868 [INFO] ConfigFileManager:1457 - The Die is : DIE410 -2023-12-25 21:58:20,525 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2059mS. -2023-12-25 21:58:20,526 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 1mS. -2023-12-25 21:58:20,529 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 21:59:19,200 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 719282688 Bytes (1073741824) -2023-12-25 21:59:19,561 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI -2023-12-25 21:59:19,561 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC -2023-12-25 21:59:19,561 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE -2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB -2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS -2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO -2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC -2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC -2023-12-25 21:59:19,563 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ -2023-12-25 21:59:19,900 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save -2023-12-25 21:59:19,961 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp -2023-12-25 21:59:19,984 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save -2023-12-25 21:59:20,062 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp -2023-12-25 21:59:20,117 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save -2023-12-25 21:59:20,201 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp -2023-12-25 21:59:20,203 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save -2023-12-25 21:59:20,316 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp -2023-12-25 21:59:20,319 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save -2023-12-25 21:59:20,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp -2023-12-25 21:59:20,430 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save -2023-12-25 21:59:20,520 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp -2023-12-25 21:59:20,783 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:59:20,793 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:59:20,800 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save -2023-12-25 21:59:20,885 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c -2023-12-25 21:59:20,888 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save -2023-12-25 21:59:20,958 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h -2023-12-25 21:59:20,960 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save -2023-12-25 21:59:21,032 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h -2023-12-25 21:59:21,036 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save -2023-12-25 21:59:21,110 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c -2023-12-25 21:59:21,114 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save -2023-12-25 21:59:21,179 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h -2023-12-25 21:59:21,184 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save -2023-12-25 21:59:21,281 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c -2023-12-25 21:59:21,286 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save -2023-12-25 21:59:21,355 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h -2023-12-25 21:59:21,358 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save -2023-12-25 21:59:21,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c -2023-12-25 21:59:21,439 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save -2023-12-25 21:59:21,510 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c -2023-12-25 21:59:21,513 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save -2023-12-25 21:59:21,573 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h -2023-12-25 21:59:21,579 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save -2023-12-25 21:59:21,671 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c -2023-12-25 21:59:21,673 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save -2023-12-25 21:59:21,725 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp -2023-12-25 21:59:21,730 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save -2023-12-25 21:59:21,791 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h -2023-12-25 21:59:21,806 [WARN] IPConfigManager:3431 - IP not found : TIM -2023-12-25 21:59:21,806 [WARN] CodeGenerator:3764 - IP not found : null -2023-12-25 21:59:21,811 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save -2023-12-25 21:59:21,878 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h -2023-12-25 21:59:21,881 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save -2023-12-25 21:59:22,026 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c -2023-12-25 21:59:22,833 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 154mS. -2023-12-25 21:59:22,837 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 -2023-12-25 21:59:23,275 [INFO] ConfigFileManager:1457 - The Die is : DIE410 -2023-12-25 21:59:24,946 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2109mS. -2023-12-25 21:59:24,946 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 21:59:24,955 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 21:59:25,121 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] -2023-12-25 21:59:32,071 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 804819112 Bytes (1073741824) -2023-12-25 21:59:33,399 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 824546368 Bytes (1073741824) -2023-12-25 21:59:33,694 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 759901248 Bytes (1073741824) -2023-12-25 21:59:33,895 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC -2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC -2023-12-25 21:59:33,897 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ -2023-12-25 21:59:34,074 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save -2023-12-25 21:59:34,135 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp -2023-12-25 21:59:34,155 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save -2023-12-25 21:59:34,255 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp -2023-12-25 21:59:34,291 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save -2023-12-25 21:59:34,366 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp -2023-12-25 21:59:34,368 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save -2023-12-25 21:59:34,444 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp -2023-12-25 21:59:34,446 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save -2023-12-25 21:59:34,512 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp -2023-12-25 21:59:34,513 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save -2023-12-25 21:59:34,579 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp -2023-12-25 21:59:34,747 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:59:34,751 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 21:59:34,756 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save -2023-12-25 21:59:34,829 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c -2023-12-25 21:59:34,831 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save -2023-12-25 21:59:34,880 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h -2023-12-25 21:59:34,882 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save -2023-12-25 21:59:34,935 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h -2023-12-25 21:59:34,937 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save -2023-12-25 21:59:35,002 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c -2023-12-25 21:59:35,005 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save -2023-12-25 21:59:35,057 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h -2023-12-25 21:59:35,059 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save -2023-12-25 21:59:35,115 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c -2023-12-25 21:59:35,117 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save -2023-12-25 21:59:35,167 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h -2023-12-25 21:59:35,169 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save -2023-12-25 21:59:35,225 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c -2023-12-25 21:59:35,230 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save -2023-12-25 21:59:35,309 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c -2023-12-25 21:59:35,311 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save -2023-12-25 21:59:35,366 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h -2023-12-25 21:59:35,372 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save -2023-12-25 21:59:35,451 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c -2023-12-25 21:59:35,454 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save -2023-12-25 21:59:35,508 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp -2023-12-25 21:59:35,512 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save -2023-12-25 21:59:35,578 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h -2023-12-25 21:59:35,588 [WARN] IPConfigManager:3431 - IP not found : TIM -2023-12-25 21:59:35,589 [WARN] CodeGenerator:3764 - IP not found : null -2023-12-25 21:59:35,592 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save -2023-12-25 21:59:35,652 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h -2023-12-25 21:59:35,654 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save -2023-12-25 21:59:35,750 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c -2023-12-25 21:59:36,297 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 101mS. -2023-12-25 21:59:36,299 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 -2023-12-25 21:59:36,639 [INFO] ConfigFileManager:1457 - The Die is : DIE410 -2023-12-25 21:59:38,205 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 1906mS. -2023-12-25 21:59:38,206 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 21:59:38,209 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 22:00:56,961 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 22:00:56,961 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 22:00:57,696 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 22:00:57,696 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 22:00:57,716 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] -2023-12-25 22:00:57,717 [INFO] ThirdParty:873 - entering critical section [close project] -2023-12-25 22:00:57,717 [INFO] ThirdParty:883 - exiting critical section [close project] -2023-12-25 22:00:57,718 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 22:00:57,725 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 727295200 Bytes (1073741824) -2023-12-25 22:00:57,725 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 22:00:57,725 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 22:00:57,725 [INFO] OpenFileManager:308 - Change cursor -2023-12-25 22:00:57,741 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) -2023-12-25 22:00:57,745 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 -2023-12-25 22:00:58,447 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden -2023-12-25 22:00:58,658 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 22:00:58,658 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 22:00:58,659 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 22:00:58,659 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 22:00:58,659 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: -2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:00:58,691 [INFO] ThirdPartyModel:298 - Start build external matchings -2023-12-25 22:00:58,864 [INFO] ThirdPartyModel:316 - End build external matchings -2023-12-25 22:00:58,870 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) -2023-12-25 22:00:58,870 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) -2023-12-25 22:00:59,017 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 641139208 Bytes (1073741824) -2023-12-25 22:00:59,063 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] -2023-12-25 22:00:59,063 [INFO] ThirdParty:835 - entering critical section [change project] -2023-12-25 22:00:59,063 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 -2023-12-25 22:00:59,063 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 -2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 -2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 -2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 -2023-12-25 22:00:59,067 [INFO] ThirdParty:841 - exiting critical section [change project] -2023-12-25 22:00:59,199 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 22:00:59,199 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) -2023-12-25 22:00:59,630 [INFO] UtilMem:75 - Before build in PCC Used Memory: 669455600 Bytes (1073741824) -2023-12-25 22:00:59,924 [INFO] UtilMem:75 - After build in PCC Used Memory: 711924976 Bytes (1073741824) -2023-12-25 22:00:59,931 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE -2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,955 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,955 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,955 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,957 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,957 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,957 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,958 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,958 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:00:59,958 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:00,000 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 -2023-12-25 22:01:00,001 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 22:01:00,043 [INFO] OpenFileManager:328 - Restore cursor -2023-12-25 22:01:24,168 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 22:01:24,169 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 22:01:24,428 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 22:01:24,428 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 22:01:24,493 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] -2023-12-25 22:01:24,493 [INFO] ThirdParty:873 - entering critical section [close project] -2023-12-25 22:01:24,494 [INFO] ThirdParty:883 - exiting critical section [close project] -2023-12-25 22:01:24,497 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 22:01:24,501 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 737346232 Bytes (1073741824) -2023-12-25 22:01:24,502 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 22:01:24,502 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 22:01:24,503 [INFO] OpenFileManager:308 - Change cursor -2023-12-25 22:01:24,513 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 -2023-12-25 22:01:25,210 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden -2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 22:01:25,396 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:01:25,432 [INFO] ThirdPartyModel:298 - Start build external matchings -2023-12-25 22:01:25,730 [INFO] ThirdPartyModel:316 - End build external matchings -2023-12-25 22:01:25,735 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (ADCFreqValue) has invalid value (36000000) -2023-12-25 22:01:25,736 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) -2023-12-25 22:01:25,736 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) -2023-12-25 22:01:25,944 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 849407520 Bytes (1073741824) -2023-12-25 22:01:26,003 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] -2023-12-25 22:01:26,003 [INFO] ThirdParty:835 - entering critical section [change project] -2023-12-25 22:01:26,003 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 -2023-12-25 22:01:26,003 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 -2023-12-25 22:01:26,003 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 -2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 -2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 -2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 -2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 -2023-12-25 22:01:26,007 [INFO] ThirdParty:841 - exiting critical section [change project] -2023-12-25 22:01:26,170 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 22:01:26,171 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) -2023-12-25 22:01:26,415 [INFO] UtilMem:75 - Before build in PCC Used Memory: 651797328 Bytes (1073741824) -2023-12-25 22:01:26,663 [INFO] UtilMem:75 - After build in PCC Used Memory: 694262608 Bytes (1073741824) -2023-12-25 22:01:26,671 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE -2023-12-25 22:01:26,692 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,697 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,697 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,697 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,698 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:01:26,741 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 -2023-12-25 22:01:26,741 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 22:01:26,777 [INFO] OpenFileManager:328 - Restore cursor -2023-12-25 22:04:12,617 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] -2023-12-25 22:09:23,769 [INFO] Activator:176 - - - -2023-12-25 22:09:23,771 [INFO] Activator:177 - !SESSION log4j initialized -2023-12-25 22:09:27,240 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] -2023-12-25 22:09:27,795 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 22:09:29,832 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 22:09:30,596 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 22:09:30,615 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 22:09:30,616 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 22:09:30,616 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 22:09:30,627 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 22:09:30,628 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 22:09:30,631 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 22:09:30,930 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) -2023-12-25 22:09:31,060 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 22:09:31,060 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 22:09:31,060 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,061 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,061 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,061 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 22:09:31,146 [INFO] MainPanel:262 - HeapMemory: 268435456 -2023-12-25 22:09:31,277 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ -2023-12-25 22:09:31,278 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ -2023-12-25 22:09:31,278 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ -2023-12-25 22:09:31,282 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,282 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 22:09:31,283 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,283 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ -2023-12-25 22:09:31,283 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,283 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder -2023-12-25 22:09:31,283 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ -2023-12-25 22:09:31,365 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 22:09:31,370 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] -2023-12-25 22:09:31,372 [INFO] PluginManage:310 - Check plugin analytics -2023-12-25 22:09:31,687 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: -2023-12-25 22:09:31,688 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: -2023-12-25 22:09:31,688 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: -2023-12-25 22:09:31,694 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) -2023-12-25 22:09:31,695 [INFO] PluginManage:310 - Check plugin cadmodel -2023-12-25 22:09:32,597 [INFO] CADModel:105 - Init CAD model plugin -2023-12-25 22:09:32,597 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) -2023-12-25 22:09:32,598 [INFO] PluginManage:310 - Check plugin clock -2023-12-25 22:09:32,614 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) -2023-12-25 22:09:32,614 [INFO] PluginManage:310 - Check plugin ddr -2023-12-25 22:09:32,617 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) -2023-12-25 22:09:32,617 [INFO] PluginManage:310 - Check plugin filemanager -2023-12-25 22:09:32,801 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) -2023-12-25 22:09:32,802 [INFO] PluginManage:310 - Check plugin ipmanager -2023-12-25 22:09:32,811 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) -2023-12-25 22:09:32,812 [INFO] PluginManage:310 - Check plugin lpbam -2023-12-25 22:09:32,824 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) -2023-12-25 22:09:32,824 [INFO] PluginManage:310 - Check plugin memorymap -2023-12-25 22:09:32,842 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) -2023-12-25 22:09:32,842 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration -2023-12-25 22:09:32,851 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) -2023-12-25 22:09:32,851 [INFO] PluginManage:310 - Check plugin pinoutconfig -2023-12-25 22:09:32,960 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. -2023-12-25 22:09:33,170 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) -2023-12-25 22:09:33,171 [INFO] PluginManage:310 - Check plugin power -2023-12-25 22:09:33,184 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) -2023-12-25 22:09:33,185 [INFO] PluginManage:310 - Check plugin projectmanager -2023-12-25 22:09:33,202 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) -2023-12-25 22:09:33,202 [INFO] PluginManage:310 - Check plugin thirdparty -2023-12-25 22:09:33,365 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) -2023-12-25 22:09:33,365 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] -2023-12-25 22:09:33,365 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] -2023-12-25 22:09:33,365 [INFO] PluginManage:310 - Check plugin tools -2023-12-25 22:09:33,366 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] -2023-12-25 22:09:33,368 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) -2023-12-25 22:09:33,368 [INFO] PluginManage:310 - Check plugin tutovideos -2023-12-25 22:09:33,683 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) -2023-12-25 22:09:33,684 [INFO] PluginManage:310 - Check plugin updater -2023-12-25 22:09:33,713 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) -2023-12-25 22:09:33,713 [INFO] PluginManage:310 - Check plugin userauth -2023-12-25 22:09:33,724 [INFO] UserAuth:113 - Init User Auth plugin -2023-12-25 22:09:33,725 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) -2023-12-25 22:09:33,727 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] -2023-12-25 22:09:34,059 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 22:09:34,251 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 22:09:34,251 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 22:09:34,266 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,268 [INFO] PluginManager:220 - loadIPPluginJar : add mdma -2023-12-25 22:09:34,280 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,280 [INFO] PluginManager:220 - loadIPPluginJar : add freertos -2023-12-25 22:09:34,287 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,287 [INFO] PluginManager:220 - loadIPPluginJar : add gic -2023-12-25 22:09:34,302 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,303 [INFO] PluginManager:220 - loadIPPluginJar : add adc -2023-12-25 22:09:34,308 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,308 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc -2023-12-25 22:09:34,310 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,311 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi -2023-12-25 22:09:34,316 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,317 [INFO] PluginManager:220 - loadIPPluginJar : add aes -2023-12-25 22:09:34,321 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,321 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm -2023-12-25 22:09:34,325 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,326 [INFO] PluginManager:220 - loadIPPluginJar : add hash -2023-12-25 22:09:34,330 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,330 [INFO] PluginManager:220 - loadIPPluginJar : add tim -2023-12-25 22:09:34,332 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,332 [INFO] PluginManager:220 - loadIPPluginJar : add tsc -2023-12-25 22:09:34,335 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,335 [INFO] PluginManager:220 - loadIPPluginJar : add ts -2023-12-25 22:09:34,341 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,341 [INFO] PluginManager:220 - loadIPPluginJar : add can -2023-12-25 22:09:34,347 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,348 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 -2023-12-25 22:09:34,352 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,352 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm -2023-12-25 22:09:34,358 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,359 [INFO] PluginManager:220 - loadIPPluginJar : add spi -2023-12-25 22:09:34,366 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,367 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu -2023-12-25 22:09:34,369 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,369 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin -2023-12-25 22:09:34,377 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,377 [INFO] PluginManager:220 - loadIPPluginJar : add cryp -2023-12-25 22:09:34,413 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,414 [INFO] PluginManager:220 - loadIPPluginJar : add gpio -2023-12-25 22:09:34,419 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,419 [INFO] PluginManager:220 - loadIPPluginJar : add comp -2023-12-25 22:09:34,427 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,430 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb -2023-12-25 22:09:34,436 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,437 [INFO] PluginManager:220 - loadIPPluginJar : add openamp -2023-12-25 22:09:34,454 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,454 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan -2023-12-25 22:09:34,468 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,473 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings -2023-12-25 22:09:34,479 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,479 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr -2023-12-25 22:09:34,482 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,483 [INFO] PluginManager:220 - loadIPPluginJar : add usart -2023-12-25 22:09:34,484 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,484 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc -2023-12-25 22:09:34,488 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,489 [INFO] PluginManager:220 - loadIPPluginJar : add nvic -2023-12-25 22:09:34,490 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,490 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs -2023-12-25 22:09:34,500 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,500 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist -2023-12-25 22:09:34,505 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,505 [INFO] PluginManager:220 - loadIPPluginJar : add dma -2023-12-25 22:09:34,510 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,510 [INFO] PluginManager:220 - loadIPPluginJar : add fmc -2023-12-25 22:09:34,512 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,513 [INFO] PluginManager:220 - loadIPPluginJar : add i2s -2023-12-25 22:09:34,515 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,515 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd -2023-12-25 22:09:34,517 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,517 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan -2023-12-25 22:09:34,520 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,520 [INFO] PluginManager:220 - loadIPPluginJar : add opamp -2023-12-25 22:09:34,523 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,523 [INFO] PluginManager:220 - loadIPPluginJar : add i3c -2023-12-25 22:09:34,528 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,528 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing -2023-12-25 22:09:34,530 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,530 [INFO] PluginManager:220 - loadIPPluginJar : add i2c -2023-12-25 22:09:34,535 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,535 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility -2023-12-25 22:09:34,537 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,538 [INFO] PluginManager:220 - loadIPPluginJar : add sai -2023-12-25 22:09:34,540 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:09:34,540 [INFO] PluginManager:220 - loadIPPluginJar : add usbx -2023-12-25 22:09:34,641 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 22:09:34,641 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 22:09:34,641 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:34,642 [ERROR] CADModel:125 - Updater not yet initialized, retry later -2023-12-25 22:09:34,925 [INFO] CADModel:165 - CPN selected for project level -2023-12-25 22:09:34,925 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 22:09:34,925 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:34,925 [ERROR] CADModel:125 - Updater not yet initialized, retry later -2023-12-25 22:09:34,929 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:35,100 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:35,112 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) -2023-12-25 22:09:35,113 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:35,247 [WARN] DetailPanel:346 - Failed to get advertising image, set to default -2023-12-25 22:09:35,407 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:35,410 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:35,410 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:35,410 [WARN] DetailPanel:346 - Failed to get advertising image, set to default -2023-12-25 22:09:35,411 [FATAL] Updater:308 - Updater called before beeing initialized -2023-12-25 22:09:35,445 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. -2023-12-25 22:09:35,484 [INFO] Updater:1056 - Updater Version found : 6.9.2 -2023-12-25 22:09:35,506 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 -2023-12-25 22:09:35,698 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 22:09:35,698 [INFO] MainUpdater:285 - Updater Check For Update Now. -2023-12-25 22:09:35,698 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 22:09:35,703 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) -2023-12-25 22:09:35,704 [INFO] UserAuth:179 - activating auth plugin -2023-12-25 22:09:35,710 [INFO] UserAuth:393 - Internet connection configuration mode: 1 -2023-12-25 22:09:35,732 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder -2023-12-25 22:09:35,948 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread -2023-12-25 22:09:36,759 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 -2023-12-25 22:09:36,769 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 -2023-12-25 22:09:36,858 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 -2023-12-25 22:09:36,877 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 -2023-12-25 22:09:36,888 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 -2023-12-25 22:09:36,904 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 -2023-12-25 22:09:36,929 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 -2023-12-25 22:09:36,945 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 -2023-12-25 22:09:36,951 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 -2023-12-25 22:09:36,996 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 22:09:36,998 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 22:09:36,999 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 22:09:37,000 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 22:09:37,000 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null -2023-12-25 22:09:37,016 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 -2023-12-25 22:09:37,041 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 -2023-12-25 22:09:37,052 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 -2023-12-25 22:09:37,067 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 -2023-12-25 22:09:37,116 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 -2023-12-25 22:09:37,131 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 -2023-12-25 22:09:37,154 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 -2023-12-25 22:09:37,166 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 -2023-12-25 22:09:37,266 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 -2023-12-25 22:09:37,445 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 -2023-12-25 22:09:37,566 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 -2023-12-25 22:09:37,576 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 -2023-12-25 22:09:37,610 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 -2023-12-25 22:09:37,628 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 -2023-12-25 22:09:37,640 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 -2023-12-25 22:09:37,649 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 -2023-12-25 22:09:37,661 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 -2023-12-25 22:09:37,687 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 -2023-12-25 22:09:37,732 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 -2023-12-25 22:09:37,815 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 22:09:37,839 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 -2023-12-25 22:09:37,861 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 22:09:37,880 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 22:09:37,881 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null -2023-12-25 22:09:37,971 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 -2023-12-25 22:09:38,010 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 -2023-12-25 22:09:38,060 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 22:09:38,073 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 22:09:38,096 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 -2023-12-25 22:09:38,114 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 22:09:38,142 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 22:09:38,143 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 22:09:38,164 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 22:09:38,184 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null -2023-12-25 22:09:38,197 [INFO] WebApp:157 - Instantiating new browser for Auth -2023-12-25 22:09:38,213 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 -2023-12-25 22:09:38,310 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 -2023-12-25 22:09:38,426 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 -2023-12-25 22:09:38,545 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 -2023-12-25 22:09:38,598 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 -2023-12-25 22:09:38,661 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 -2023-12-25 22:09:38,725 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 -2023-12-25 22:09:38,804 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 -2023-12-25 22:09:38,883 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 -2023-12-25 22:09:38,905 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 -2023-12-25 22:09:38,973 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 -2023-12-25 22:09:39,088 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 -2023-12-25 22:09:39,094 [INFO] ThirdParty:978 - Integrity check success = true -2023-12-25 22:09:39,094 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] -2023-12-25 22:09:39,094 [INFO] IntegrityCheckThread:103 - End integrity checks thread -2023-12-25 22:09:39,874 [INFO] WebApp:753 - Register for checkConnection events -2023-12-25 22:09:39,874 [INFO] WebApp:390 - Apply proxy settings -2023-12-25 22:09:39,877 [INFO] WebApp:455 - Chromium authenticates against System proxy -2023-12-25 22:09:40,097 [INFO] WebApp:188 - Starting web application -2023-12-25 22:09:40,098 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html -2023-12-25 22:10:00,883 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". -2023-12-25 22:10:00,884 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation -2023-12-25 22:10:00,884 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. -2023-12-25 22:12:43,849 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) -2023-12-25 22:12:43,855 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 22:12:43,855 [INFO] MainUpdater:2868 - connection check result : 10 -2023-12-25 22:12:44,407 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 22:12:44,407 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 22:12:44,412 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] -2023-12-25 22:12:44,412 [INFO] ThirdParty:873 - entering critical section [close project] -2023-12-25 22:12:44,413 [INFO] ThirdParty:883 - exiting critical section [close project] -2023-12-25 22:12:44,416 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 22:12:44,425 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 858483552 Bytes (1073741824) -2023-12-25 22:12:44,427 [INFO] MicroXplorer:468 - Change Database Path : -2023-12-25 22:12:44,427 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 -2023-12-25 22:12:44,427 [INFO] OpenFileManager:308 - Change cursor -2023-12-25 22:12:44,453 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 -2023-12-25 22:12:45,145 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden -2023-12-25 22:12:45,485 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 22:12:45,485 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 22:12:45,485 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS -2023-12-25 22:12:45,486 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS -2023-12-25 22:12:45,486 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: -2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null -2023-12-25 22:12:45,561 [INFO] ThirdPartyModel:298 - Start build external matchings -2023-12-25 22:12:46,109 [INFO] ThirdPartyModel:316 - End build external matchings -2023-12-25 22:12:46,117 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) -2023-12-25 22:12:46,118 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) -2023-12-25 22:12:46,317 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 629329112 Bytes (1073741824) -2023-12-25 22:12:46,733 [INFO] ApiDb:581 - Connected to CubeFinder SQLite database (/Users/haotian/.stmcufinder/plugins/mcufinder/mcu/cube-finder-db.db) -2023-12-25 22:12:46,810 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 -2023-12-25 22:12:46,810 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.39 -2023-12-25 22:12:46,811 [INFO] ApiDb:670 - CubeFinder database generation date=2023-12-08 (1702028721) -2023-12-25 22:12:46,811 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-MOTENVWB1_V1.3.1, FP-SNS-SMARTAG2_V1.2.0, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.28.0, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H5_V1.2.0RC2, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_U5_V1.4.0, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.2.0, STM32Cube_FW_WBA_V1.2.0RC2, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.18.0, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V3.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-EEPRMA1_V4.2.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.4.0] -2023-12-25 22:12:50,063 [INFO] ApiDb:240 - Found 323 in-development CPN: [B-G473E-ZEST1S, B-WB1M-WPAN1, B-WL5M-SUBG1, NUCLEO-C031C6, NUCLEO-H503RB, NUCLEO-H563ZI, NUCLEO-U545RE-Q, NUCLEO-U5A5ZJ-Q, NUCLEO-WBA52CG, STEVAL-PROTEUS1, STEVAL-SMARTAG2, STEVAL-STWINBX1, STM320518-EVAL, STM32C0116-DK, STM32C011D6Y3TR, STM32C011D6Y6TR, STM32C011F4P3, STM32C011F4P6, STM32C011F4U3, STM32C011F4U6TR, STM32C011F6P3, STM32C011F6P6, STM32C011F6U3, STM32C011F6U6TR, STM32C011J4M3, STM32C011J4M6, STM32C011J6M3, STM32C011J6M6, STM32C0316-DK, STM32C031C4T3, STM32C031C4T6, STM32C031C4U3, STM32C031C4U6, STM32C031C6T3, STM32C031C6T6, STM32C031C6U3, STM32C031C6U6, STM32C031F4P3, STM32C031F4P6, STM32C031F6P3, STM32C031F6P6, STM32C031G4U3, STM32C031G4U6, STM32C031G6U3, STM32C031G6U6, STM32C031K4T3, STM32C031K4T6, STM32C031K4U3, STM32C031K4U6, STM32C031K6T3, STM32C031K6T6, STM32C031K6U3, STM32C031K6U6, STM32G071K8TXN, STM32G071K8UXN, STM32G081GBU6N, STM32G081KBT6N, STM32G081KBUXN, STM32G0B1CCT6N, STM32G0B1KCT6, STM32G0B1NEY6TR, STM32G0B1RCT6N, STM32G0C1CCT6, STM32G0C1CCT6N, STM32G0C1CCU6N, STM32G0C1CET6N, STM32G0C1CEU6N, STM32G0C1KCT6, STM32G0C1NEY6TR, STM32G0C1RCI6N, STM32G0C1RCT6N, STM32G0C1REI6N, STM32G0C1RET6N, STM32G0C1VCI6, STM32G0C1VEI6, STM32G471CCT6, STM32G471CCU6, STM32G471CET3, STM32G471CET6, STM32G471CEU3, STM32G471CEU6, STM32G471MCT6, STM32G471MET3, STM32G471MET6, STM32G471MEY6TR, STM32G471QCT6, STM32G471QET3, STM32G471RCT6, STM32G471RET3, STM32G471RET6, STM32G471VCH6, STM32G471VCI6, STM32G471VCT6, STM32G471VEH3, STM32G471VEH6, STM32G471VEI3, STM32G471VEI6, STM32G471VET3, STM32G471VET6, STM32G474CCT6, STM32H503CBT6, STM32H503CBU6, STM32H503EBY6TR, STM32H503KBU6, STM32H503RBT6, STM32H562AGI6, STM32H562AII6, STM32H562IGK6, STM32H562IGT6, STM32H562IIK6, STM32H562IIT6, STM32H562RGT6, STM32H562RGV6, STM32H562RIT6, STM32H562RIV6, STM32H562VGT6, STM32H562VIT6, STM32H562ZGT6, STM32H562ZIT6, STM32H563AGI6, STM32H563AII3Q, STM32H563AII6, STM32H563IGK6, STM32H563IGT6, STM32H563IIK3Q, STM32H563IIK6, STM32H563IIT3Q, STM32H563IIT6, STM32H563MIY3QTR, STM32H563RGT6, STM32H563RGV6, STM32H563RIT6, STM32H563RIV6, STM32H563VGT6, STM32H563VIT3Q, STM32H563VIT6, STM32H563ZGT6, STM32H563ZIT3Q, STM32H563ZIT6, STM32H573AII3Q, STM32H573AII6, STM32H573I-DK, STM32H573IIK3Q, STM32H573IIK6, STM32H573IIT3Q, STM32H573IIT6, STM32H573MIY3QTR, STM32H573RIT6, STM32H573RIV6, STM32H573VIT3Q, STM32H573VIT6, STM32H573ZIT3Q, STM32H573ZIT6, STM32L4R5QGI6STR, STM32MP131AAE3, STM32MP131AAF3, STM32MP131AAG3, STM32MP131CAE3, STM32MP131CAF3, STM32MP131CAG3, STM32MP131DAE7, STM32MP131DAF7, STM32MP131DAG7, STM32MP131FAE7, STM32MP131FAF7, STM32MP131FAG7, STM32MP133AAE3, STM32MP133AAF3, STM32MP133AAG3, STM32MP133CAE3, STM32MP133CAF3, STM32MP133CAG3, STM32MP133DAE7, STM32MP133DAF7, STM32MP133DAG7, STM32MP133FAE7, STM32MP133FAF7, STM32MP133FAG7, STM32MP135AAE3, STM32MP135AAF3, STM32MP135AAG3, STM32MP135CAE3, STM32MP135CAF3, STM32MP135CAG3, STM32MP135DAE7, STM32MP135DAF7, STM32MP135DAG7, STM32MP135F-DK, STM32MP135FAE7, STM32MP135FAF7, STM32MP135FAF7T, STM32MP135FAF7U, STM32MP135FAG7, STM32U535CBT6, STM32U535CBT6Q, STM32U535CBU6, STM32U535CBU6Q, STM32U535CCT6, STM32U535CCT6Q, STM32U535CCU6, STM32U535CCU6Q, STM32U535CET6, STM32U535CET6Q, STM32U535CEU6, STM32U535CEU6Q, STM32U535JEY6QTR, STM32U535NCY6QTR, STM32U535NEY6QTR, STM32U535RBI6, STM32U535RBI6Q, STM32U535RBT6, STM32U535RBT6Q, STM32U535RCI6, STM32U535RCI6Q, STM32U535RCT6, STM32U535RCT6Q, STM32U535REI6, STM32U535REI6Q, STM32U535RET6, STM32U535RET6Q, STM32U535VCI6, STM32U535VCI6Q, STM32U535VCT6, STM32U535VCT6Q, STM32U535VEI6, STM32U535VEI6Q, STM32U535VET6, STM32U535VET6Q, STM32U545CET6, STM32U545CET6Q, STM32U545CEU6, STM32U545CEU6Q, STM32U545JEY6QTR, STM32U545NEY6QTR, STM32U545REI6, STM32U545REI6Q, STM32U545RET6, STM32U545RET6Q, STM32U545VEI6, STM32U545VEI6Q, STM32U545VET6, STM32U545VET6Q, STM32U595AIH6, STM32U595AIH6Q, STM32U595AJH6, STM32U595AJH6Q, STM32U595QII6, STM32U595QII6Q, STM32U595QJI6, STM32U595QJI6Q, STM32U595RIT6, STM32U595RIT6Q, STM32U595RJT6, STM32U595RJT6Q, STM32U595VIT6, STM32U595VIT6Q, STM32U595VJT6, STM32U595VJT6Q, STM32U595ZIT6, STM32U595ZIT6Q, STM32U595ZIY6QTR, STM32U595ZJT6, STM32U595ZJT6Q, STM32U595ZJY6QTR, STM32U599BJY6QTR, STM32U599NIH6Q, STM32U599NJH6Q, STM32U599VIT6Q, STM32U599VJT6, STM32U599VJT6Q, STM32U599ZIT6Q, STM32U599ZIY6QTR, STM32U599ZJT6Q, STM32U599ZJY6QTR, STM32U5A5AJH6, STM32U5A5AJH6Q, STM32U5A5QJI6, STM32U5A5QJI6Q, STM32U5A5RJT6, STM32U5A5RJT6Q, STM32U5A5VJT6, STM32U5A5VJT6Q, STM32U5A5ZJT6, STM32U5A5ZJT6Q, STM32U5A5ZJY6QTR, STM32U5A9BJY6QTR, STM32U5A9J-DK, STM32U5A9NJH6Q, STM32U5A9VJT6Q, STM32U5A9ZJT6Q, STM32U5A9ZJY6QTR, STM32U5F7VIT6, STM32U5F7VIT6Q, STM32U5F7VJT6, STM32U5F7VJT6Q, STM32U5F9BJY6QTR, STM32U5F9NJH6Q, STM32U5F9VIT6Q, STM32U5F9VJT6Q, STM32U5F9ZIJ6QTR, STM32U5F9ZIT6Q, STM32U5F9ZJJ6QTR, STM32U5F9ZJT6Q, STM32U5G7VJT6, STM32U5G7VJT6Q, STM32U5G9BJY6QTR, STM32U5G9J-DK1, STM32U5G9J-DK2, STM32U5G9NJH6Q, STM32U5G9VJT6Q, STM32U5G9ZJJ6QTR, STM32U5G9ZJT6Q, STM32WB1MMCH6, STM32WBA52CEU6, STM32WBA52CEU6T, STM32WBA52CGU6, STM32WBA52CGU6T, STM32WBA52KEU6, STM32WBA52KEU6T, STM32WBA52KGU6, STM32WBA52KGU6T, STM32WL5MOCH6, STM32WL5MOCH6TR] -2023-12-25 22:12:50,071 [INFO] DbMcus:217 - Found 3882 MCUs, 3882 are supported -2023-12-25 22:12:50,072 [INFO] ApiDb:423 - Load user favorites file /Users/haotian/.stm32cubeide/favorites.mcus.txt: 0 item(s) -2023-12-25 22:12:50,072 [INFO] ApiDb:427 - User favorites MCUs=[] -2023-12-25 22:12:50,073 [INFO] DbMcus:223 - Set 0 / 0 favorites MCUs -2023-12-25 22:12:50,921 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] -2023-12-25 22:12:50,921 [INFO] ThirdParty:835 - entering critical section [change project] -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 -2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 -2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 -2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 -2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 -2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 -2023-12-25 22:12:50,926 [INFO] ThirdParty:841 - exiting critical section [change project] -2023-12-25 22:12:51,456 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) -2023-12-25 22:12:51,458 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) -2023-12-25 22:12:52,726 [INFO] UtilMem:75 - Before build in PCC Used Memory: 856596480 Bytes (1073741824) -2023-12-25 22:12:54,200 [INFO] UtilMem:75 - After build in PCC Used Memory: 694491080 Bytes (1073741824) -2023-12-25 22:12:54,398 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE -2023-12-25 22:12:54,462 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,462 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,463 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,464 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,464 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,465 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,467 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,467 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,469 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,469 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,470 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,470 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,471 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,471 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,472 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,472 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,472 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,474 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,474 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,475 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,475 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,476 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,476 [INFO] IPUIPlugin:80 - create IPUIPlugin -2023-12-25 22:12:54,860 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 -2023-12-25 22:12:54,860 [INFO] CADModel:114 - Register for checkConnection events -2023-12-25 22:12:54,904 [INFO] OpenFileManager:328 - Restore cursor -2023-12-25 22:13:07,871 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 675653296 Bytes (1073741824) -2023-12-25 22:13:08,764 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI -2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC -2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE -2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB -2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS -2023-12-25 22:13:08,766 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO -2023-12-25 22:13:08,766 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC -2023-12-25 22:13:08,766 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC -2023-12-25 22:13:08,767 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ -2023-12-25 22:13:09,359 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp_save -2023-12-25 22:13:09,946 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp -2023-12-25 22:13:10,017 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp_save -2023-12-25 22:13:10,177 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp -2023-12-25 22:13:10,303 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp_save -2023-12-25 22:13:10,444 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp -2023-12-25 22:13:10,447 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp_save -2023-12-25 22:13:10,562 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp -2023-12-25 22:13:10,564 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp_save -2023-12-25 22:13:10,693 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp -2023-12-25 22:13:10,695 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp_save -2023-12-25 22:13:10,841 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp -2023-12-25 22:13:11,748 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 22:13:11,760 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 22:13:11,769 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c_save -2023-12-25 22:13:12,006 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c -2023-12-25 22:13:12,011 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h_save -2023-12-25 22:13:12,173 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h -2023-12-25 22:13:12,178 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h_save -2023-12-25 22:13:12,326 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h -2023-12-25 22:13:12,331 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c_save -2023-12-25 22:13:12,518 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c -2023-12-25 22:13:12,524 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h_save -2023-12-25 22:13:12,626 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h -2023-12-25 22:13:12,631 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c_save -2023-12-25 22:13:12,824 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c -2023-12-25 22:13:12,832 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h_save -2023-12-25 22:13:13,045 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h -2023-12-25 22:13:13,052 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c_save -2023-12-25 22:13:13,222 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c -2023-12-25 22:13:13,236 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c_save -2023-12-25 22:13:13,371 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c -2023-12-25 22:13:13,376 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h_save -2023-12-25 22:13:13,468 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h -2023-12-25 22:13:13,477 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c_save -2023-12-25 22:13:13,619 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c -2023-12-25 22:13:13,622 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp_save -2023-12-25 22:13:13,703 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp -2023-12-25 22:13:13,709 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h_save -2023-12-25 22:13:13,798 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h -2023-12-25 22:13:13,835 [WARN] IPConfigManager:3431 - IP not found : TIM -2023-12-25 22:13:13,836 [WARN] CodeGenerator:3764 - IP not found : null -2023-12-25 22:13:13,840 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h_save -2023-12-25 22:13:13,933 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h -2023-12-25 22:13:13,936 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c_save -2023-12-25 22:13:14,124 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c -2023-12-25 22:13:14,948 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 176mS. -2023-12-25 22:13:14,974 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 -2023-12-25 22:13:15,558 [INFO] ConfigFileManager:1457 - The Die is : DIE410 -2023-12-25 22:13:15,582 [INFO] ApiDbMcu:507 - Load IP Config File for FATFS -2023-12-25 22:13:15,667 [INFO] ApiDbMcu:507 - Load IP Config File for FREERTOS -2023-12-25 22:13:17,095 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] -2023-12-25 22:13:18,229 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 3254mS. -2023-12-25 22:13:18,230 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 1mS. -2023-12-25 22:13:18,232 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 22:13:18,380 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] -2023-12-25 22:13:22,975 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 776797712 Bytes (1073741824) -2023-12-25 22:13:24,105 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 796562160 Bytes (1073741824) -2023-12-25 22:13:24,354 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 717187344 Bytes (1073741824) -2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI -2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC -2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 -2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE -2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB -2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS -2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO -2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC -2023-12-25 22:13:24,906 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC -2023-12-25 22:13:24,906 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ -2023-12-25 22:13:25,133 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp_save -2023-12-25 22:13:25,232 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp -2023-12-25 22:13:25,274 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp_save -2023-12-25 22:13:25,369 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp -2023-12-25 22:13:25,487 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp_save -2023-12-25 22:13:25,612 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp -2023-12-25 22:13:25,615 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp_save -2023-12-25 22:13:25,707 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp -2023-12-25 22:13:25,709 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp_save -2023-12-25 22:13:25,810 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp -2023-12-25 22:13:25,812 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp_save -2023-12-25 22:13:25,918 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp -2023-12-25 22:13:26,461 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 22:13:26,469 [INFO] Middleware:1439 - No code input for Bsp Dependency -2023-12-25 22:13:26,474 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c_save -2023-12-25 22:13:26,553 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c -2023-12-25 22:13:26,555 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h_save -2023-12-25 22:13:26,621 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h -2023-12-25 22:13:26,624 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h_save -2023-12-25 22:13:26,691 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h -2023-12-25 22:13:26,694 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c_save -2023-12-25 22:13:26,766 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c -2023-12-25 22:13:26,769 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h_save -2023-12-25 22:13:26,834 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h -2023-12-25 22:13:26,837 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c_save -2023-12-25 22:13:26,913 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c -2023-12-25 22:13:26,917 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h_save -2023-12-25 22:13:26,984 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h -2023-12-25 22:13:26,987 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c_save -2023-12-25 22:13:27,062 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c -2023-12-25 22:13:27,070 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c_save -2023-12-25 22:13:27,141 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c -2023-12-25 22:13:27,144 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h_save -2023-12-25 22:13:27,203 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h -2023-12-25 22:13:27,210 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c_save -2023-12-25 22:13:27,302 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c -2023-12-25 22:13:27,304 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp_save -2023-12-25 22:13:27,362 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp -2023-12-25 22:13:27,366 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h_save -2023-12-25 22:13:27,433 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h -2023-12-25 22:13:27,459 [WARN] IPConfigManager:3431 - IP not found : TIM -2023-12-25 22:13:27,460 [WARN] CodeGenerator:3764 - IP not found : null -2023-12-25 22:13:27,464 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h_save -2023-12-25 22:13:27,536 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h -2023-12-25 22:13:27,539 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c_save -2023-12-25 22:13:27,688 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c -2023-12-25 22:13:28,809 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 156mS. -2023-12-25 22:13:28,819 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 -2023-12-25 22:13:29,268 [INFO] ConfigFileManager:1457 - The Die is : DIE410 -2023-12-25 22:13:31,751 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2932mS. -2023-12-25 22:13:31,752 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 1mS. -2023-12-25 22:13:31,755 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. -2023-12-25 22:25:48,102 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2024-01-27 22:45:36,014 [INFO] Activator:177 - !SESSION log4j initialized +2024-01-27 22:45:39,597 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2024-01-27 22:45:40,550 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2024-01-27 22:45:42,472 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2024-01-27 22:45:43,211 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2024-01-27 22:45:43,228 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2024-01-27 22:45:43,228 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2024-01-27 22:45:43,228 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2024-01-27 22:45:43,237 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:45:43,239 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:45:43,241 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2024-01-27 22:45:43,344 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) +2024-01-27 22:45:43,415 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2024-01-27 22:45:43,415 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2024-01-27 22:45:43,415 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2024-01-27 22:45:43,415 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,416 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:45:43,416 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,416 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:45:43,416 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,416 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,416 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2024-01-27 22:45:43,488 [INFO] MainPanel:262 - HeapMemory: 268435456 +2024-01-27 22:45:43,575 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2024-01-27 22:45:43,575 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2024-01-27 22:45:43,576 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2024-01-27 22:45:43,576 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,576 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:45:43,576 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,576 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2024-01-27 22:45:43,576 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,577 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2024-01-27 22:45:43,577 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2024-01-27 22:45:43,592 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2024-01-27 22:45:43,593 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] +2024-01-27 22:45:43,594 [INFO] PluginManage:310 - Check plugin analytics +2024-01-27 22:45:43,736 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: +2024-01-27 22:45:43,736 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: +2024-01-27 22:45:43,736 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: +2024-01-27 22:45:43,738 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) +2024-01-27 22:45:43,739 [INFO] PluginManage:310 - Check plugin cadmodel +2024-01-27 22:45:44,046 [INFO] CADModel:105 - Init CAD model plugin +2024-01-27 22:45:44,047 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) +2024-01-27 22:45:44,047 [INFO] PluginManage:310 - Check plugin clock +2024-01-27 22:45:44,061 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) +2024-01-27 22:45:44,062 [INFO] PluginManage:310 - Check plugin ddr +2024-01-27 22:45:44,064 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) +2024-01-27 22:45:44,064 [INFO] PluginManage:310 - Check plugin filemanager +2024-01-27 22:45:44,213 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) +2024-01-27 22:45:44,213 [INFO] PluginManage:310 - Check plugin ipmanager +2024-01-27 22:45:44,219 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) +2024-01-27 22:45:44,219 [INFO] PluginManage:310 - Check plugin lpbam +2024-01-27 22:45:44,230 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) +2024-01-27 22:45:44,230 [INFO] PluginManage:310 - Check plugin memorymap +2024-01-27 22:45:44,244 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) +2024-01-27 22:45:44,244 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration +2024-01-27 22:45:44,251 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) +2024-01-27 22:45:44,252 [INFO] PluginManage:310 - Check plugin pinoutconfig +2024-01-27 22:45:44,344 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. +2024-01-27 22:45:44,486 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) +2024-01-27 22:45:44,486 [INFO] PluginManage:310 - Check plugin power +2024-01-27 22:45:44,497 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) +2024-01-27 22:45:44,497 [INFO] PluginManage:310 - Check plugin projectmanager +2024-01-27 22:45:44,509 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) +2024-01-27 22:45:44,509 [INFO] PluginManage:310 - Check plugin thirdparty +2024-01-27 22:45:44,626 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) +2024-01-27 22:45:44,626 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] +2024-01-27 22:45:44,626 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] +2024-01-27 22:45:44,626 [INFO] PluginManage:310 - Check plugin tools +2024-01-27 22:45:44,626 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] +2024-01-27 22:45:44,628 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) +2024-01-27 22:45:44,628 [INFO] PluginManage:310 - Check plugin tutovideos +2024-01-27 22:45:44,801 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) +2024-01-27 22:45:44,801 [INFO] PluginManage:310 - Check plugin updater +2024-01-27 22:45:44,813 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) +2024-01-27 22:45:44,813 [INFO] PluginManage:310 - Check plugin userauth +2024-01-27 22:45:44,818 [INFO] UserAuth:113 - Init User Auth plugin +2024-01-27 22:45:44,818 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) +2024-01-27 22:45:44,818 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] +2024-01-27 22:45:44,991 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2024-01-27 22:45:45,079 [INFO] CADModel:165 - CPN selected for project level +2024-01-27 22:45:45,080 [INFO] CADModel:114 - Register for checkConnection events +2024-01-27 22:45:45,091 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,092 [INFO] PluginManager:220 - loadIPPluginJar : add mdma +2024-01-27 22:45:45,099 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,099 [INFO] PluginManager:220 - loadIPPluginJar : add freertos +2024-01-27 22:45:45,104 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,104 [INFO] PluginManager:220 - loadIPPluginJar : add gic +2024-01-27 22:45:45,114 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,114 [INFO] PluginManager:220 - loadIPPluginJar : add adc +2024-01-27 22:45:45,117 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,117 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc +2024-01-27 22:45:45,118 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,118 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi +2024-01-27 22:45:45,121 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,121 [INFO] PluginManager:220 - loadIPPluginJar : add aes +2024-01-27 22:45:45,123 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,123 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm +2024-01-27 22:45:45,125 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,126 [INFO] PluginManager:220 - loadIPPluginJar : add hash +2024-01-27 22:45:45,127 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,127 [INFO] PluginManager:220 - loadIPPluginJar : add tim +2024-01-27 22:45:45,128 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,128 [INFO] PluginManager:220 - loadIPPluginJar : add tsc +2024-01-27 22:45:45,130 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,130 [INFO] PluginManager:220 - loadIPPluginJar : add ts +2024-01-27 22:45:45,132 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,132 [INFO] PluginManager:220 - loadIPPluginJar : add can +2024-01-27 22:45:45,134 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,135 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 +2024-01-27 22:45:45,137 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,137 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm +2024-01-27 22:45:45,138 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,139 [INFO] PluginManager:220 - loadIPPluginJar : add spi +2024-01-27 22:45:45,140 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,141 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu +2024-01-27 22:45:45,142 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,142 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin +2024-01-27 22:45:45,144 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,144 [INFO] PluginManager:220 - loadIPPluginJar : add cryp +2024-01-27 22:45:45,147 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,148 [INFO] PluginManager:220 - loadIPPluginJar : add gpio +2024-01-27 22:45:45,149 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,149 [INFO] PluginManager:220 - loadIPPluginJar : add comp +2024-01-27 22:45:45,151 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,151 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb +2024-01-27 22:45:45,154 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,154 [INFO] PluginManager:220 - loadIPPluginJar : add openamp +2024-01-27 22:45:45,158 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,158 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan +2024-01-27 22:45:45,164 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,166 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings +2024-01-27 22:45:45,170 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,170 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr +2024-01-27 22:45:45,173 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,173 [INFO] PluginManager:220 - loadIPPluginJar : add usart +2024-01-27 22:45:45,174 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,174 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc +2024-01-27 22:45:45,177 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,177 [INFO] PluginManager:220 - loadIPPluginJar : add nvic +2024-01-27 22:45:45,179 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,179 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs +2024-01-27 22:45:45,185 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,186 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist +2024-01-27 22:45:45,190 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,191 [INFO] PluginManager:220 - loadIPPluginJar : add dma +2024-01-27 22:45:45,194 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,194 [INFO] PluginManager:220 - loadIPPluginJar : add fmc +2024-01-27 22:45:45,196 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,196 [INFO] PluginManager:220 - loadIPPluginJar : add i2s +2024-01-27 22:45:45,198 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,198 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd +2024-01-27 22:45:45,200 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,200 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan +2024-01-27 22:45:45,202 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,202 [INFO] PluginManager:220 - loadIPPluginJar : add opamp +2024-01-27 22:45:45,204 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,204 [INFO] PluginManager:220 - loadIPPluginJar : add i3c +2024-01-27 22:45:45,206 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,207 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing +2024-01-27 22:45:45,208 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,208 [INFO] PluginManager:220 - loadIPPluginJar : add i2c +2024-01-27 22:45:45,212 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,212 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility +2024-01-27 22:45:45,214 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,214 [INFO] PluginManager:220 - loadIPPluginJar : add sai +2024-01-27 22:45:45,217 [INFO] IPUIPlugin:80 - create IPUIPlugin +2024-01-27 22:45:45,217 [INFO] PluginManager:220 - loadIPPluginJar : add usbx +2024-01-27 22:45:45,312 [INFO] CADModel:165 - CPN selected for project level +2024-01-27 22:45:45,312 [INFO] CADModel:114 - Register for checkConnection events +2024-01-27 22:45:45,312 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,312 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2024-01-27 22:45:45,466 [INFO] CADModel:165 - CPN selected for project level +2024-01-27 22:45:45,466 [INFO] CADModel:114 - Register for checkConnection events +2024-01-27 22:45:45,467 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,467 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2024-01-27 22:45:45,470 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,534 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,540 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) +2024-01-27 22:45:45,540 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,602 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2024-01-27 22:45:45,714 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,717 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,717 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,717 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2024-01-27 22:45:45,718 [FATAL] Updater:308 - Updater called before beeing initialized +2024-01-27 22:45:45,742 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. +2024-01-27 22:45:45,765 [INFO] Updater:1056 - Updater Version found : 6.9.2 +2024-01-27 22:45:45,783 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2024-01-27 22:45:45,956 [INFO] MainUpdater:2868 - connection check result : 10 +2024-01-27 22:45:45,956 [INFO] MainUpdater:285 - Updater Check For Update Now. +2024-01-27 22:45:45,956 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2024-01-27 22:45:45,961 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2024-01-27 22:45:45,961 [INFO] UserAuth:179 - activating auth plugin +2024-01-27 22:45:45,963 [INFO] UserAuth:393 - Internet connection configuration mode: 1 +2024-01-27 22:45:45,982 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder +2024-01-27 22:45:46,122 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread +2024-01-27 22:45:47,220 [INFO] WebApp:157 - Instantiating new browser for Auth +2024-01-27 22:45:48,162 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 +2024-01-27 22:45:48,173 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 +2024-01-27 22:45:48,365 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 +2024-01-27 22:45:48,442 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 +2024-01-27 22:45:48,451 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 +2024-01-27 22:45:48,465 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 +2024-01-27 22:45:48,489 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 +2024-01-27 22:45:48,496 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 +2024-01-27 22:45:48,500 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 +2024-01-27 22:45:48,540 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:45:48,542 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:45:48,542 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:45:48,543 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:45:48,543 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2024-01-27 22:45:48,561 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 +2024-01-27 22:45:48,575 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 +2024-01-27 22:45:48,582 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 +2024-01-27 22:45:48,593 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 +2024-01-27 22:45:48,667 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 +2024-01-27 22:45:48,694 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 +2024-01-27 22:45:48,721 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 +2024-01-27 22:45:48,733 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 +2024-01-27 22:45:48,742 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.5.1.0 +2024-01-27 22:45:48,822 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 +2024-01-27 22:45:48,898 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 +2024-01-27 22:45:48,936 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 +2024-01-27 22:45:48,946 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 +2024-01-27 22:45:48,975 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 +2024-01-27 22:45:48,984 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 +2024-01-27 22:45:48,991 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 +2024-01-27 22:45:48,999 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 +2024-01-27 22:45:49,011 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 +2024-01-27 22:45:49,020 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 +2024-01-27 22:45:49,025 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 +2024-01-27 22:45:49,060 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:45:49,061 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 +2024-01-27 22:45:49,062 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:45:49,063 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:45:49,063 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2024-01-27 22:45:49,083 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 +2024-01-27 22:45:49,094 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 +2024-01-27 22:45:49,122 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:45:49,122 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:45:49,126 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 +2024-01-27 22:45:49,128 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:45:49,128 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:45:49,129 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:45:49,130 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:45:49,130 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2024-01-27 22:45:49,147 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 +2024-01-27 22:45:49,195 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 +2024-01-27 22:45:49,231 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 +2024-01-27 22:45:49,239 [INFO] WebApp:753 - Register for checkConnection events +2024-01-27 22:45:49,239 [INFO] WebApp:390 - Apply proxy settings +2024-01-27 22:45:49,243 [INFO] WebApp:455 - Chromium authenticates against System proxy +2024-01-27 22:45:49,246 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 +2024-01-27 22:45:49,253 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 +2024-01-27 22:45:49,258 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 +2024-01-27 22:45:49,265 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 +2024-01-27 22:45:49,272 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 +2024-01-27 22:45:49,276 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 +2024-01-27 22:45:49,281 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 +2024-01-27 22:45:49,292 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 +2024-01-27 22:45:49,336 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 +2024-01-27 22:45:49,340 [INFO] ThirdParty:978 - Integrity check success = true +2024-01-27 22:45:49,340 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] +2024-01-27 22:45:49,340 [INFO] IntegrityCheckThread:103 - End integrity checks thread +2024-01-27 22:45:49,517 [INFO] WebApp:188 - Starting web application +2024-01-27 22:45:49,517 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html +2024-01-27 22:46:10,337 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". +2024-01-27 22:46:10,338 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation +2024-01-27 22:46:10,338 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. +2024-01-27 22:47:35,443 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] diff --git a/.metadata/.ide.log-2023-12-25.log b/.metadata/.ide.log-2023-12-25.log new file mode 100644 index 0000000..3f6ad57 --- /dev/null +++ b/.metadata/.ide.log-2023-12-25.log @@ -0,0 +1,1937 @@ +2023-12-25 14:04:42,542 [INFO] Activator:176 - + + +2023-12-25 14:04:42,548 [INFO] Activator:177 - !SESSION log4j initialized +2023-12-25 14:04:46,696 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2023-12-25 14:04:47,327 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 14:04:49,731 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 14:04:51,149 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 14:04:51,167 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 14:04:51,168 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 14:04:51,168 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 14:04:51,183 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:04:51,184 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:04:51,187 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 14:04:51,329 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) +2023-12-25 14:04:51,439 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 14:04:51,439 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 14:04:51,442 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 14:04:51,442 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,443 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:04:51,447 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,448 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:04:51,449 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,449 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,450 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 14:04:51,562 [INFO] MainPanel:262 - HeapMemory: 268435456 +2023-12-25 14:04:51,711 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 14:04:51,712 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 14:04:51,712 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 14:04:51,712 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,713 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:04:51,713 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,713 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:04:51,713 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,713 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:04:51,713 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 14:04:51,737 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 14:04:51,738 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] +2023-12-25 14:04:51,739 [INFO] PluginManage:310 - Check plugin analytics +2023-12-25 14:04:51,952 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: +2023-12-25 14:04:51,952 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: +2023-12-25 14:04:51,952 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: +2023-12-25 14:04:51,956 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) +2023-12-25 14:04:51,956 [INFO] PluginManage:310 - Check plugin cadmodel +2023-12-25 14:04:52,611 [INFO] CADModel:105 - Init CAD model plugin +2023-12-25 14:04:52,612 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) +2023-12-25 14:04:52,612 [INFO] PluginManage:310 - Check plugin clock +2023-12-25 14:04:52,624 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) +2023-12-25 14:04:52,624 [INFO] PluginManage:310 - Check plugin ddr +2023-12-25 14:04:52,626 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) +2023-12-25 14:04:52,626 [INFO] PluginManage:310 - Check plugin filemanager +2023-12-25 14:04:52,826 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) +2023-12-25 14:04:52,826 [INFO] PluginManage:310 - Check plugin ipmanager +2023-12-25 14:04:52,839 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) +2023-12-25 14:04:52,840 [INFO] PluginManage:310 - Check plugin lpbam +2023-12-25 14:04:52,856 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) +2023-12-25 14:04:52,856 [INFO] PluginManage:310 - Check plugin memorymap +2023-12-25 14:04:52,878 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) +2023-12-25 14:04:52,878 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration +2023-12-25 14:04:52,890 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) +2023-12-25 14:04:52,890 [INFO] PluginManage:310 - Check plugin pinoutconfig +2023-12-25 14:04:53,014 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. +2023-12-25 14:04:53,220 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) +2023-12-25 14:04:53,220 [INFO] PluginManage:310 - Check plugin power +2023-12-25 14:04:53,232 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) +2023-12-25 14:04:53,232 [INFO] PluginManage:310 - Check plugin projectmanager +2023-12-25 14:04:53,246 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) +2023-12-25 14:04:53,247 [INFO] PluginManage:310 - Check plugin thirdparty +2023-12-25 14:04:53,393 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) +2023-12-25 14:04:53,393 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] +2023-12-25 14:04:53,393 [INFO] PluginManage:310 - Check plugin tools +2023-12-25 14:04:53,393 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] +2023-12-25 14:04:53,394 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] +2023-12-25 14:04:53,396 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) +2023-12-25 14:04:53,396 [INFO] PluginManage:310 - Check plugin tutovideos +2023-12-25 14:04:53,623 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) +2023-12-25 14:04:53,623 [INFO] PluginManage:310 - Check plugin updater +2023-12-25 14:04:53,637 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) +2023-12-25 14:04:53,638 [INFO] PluginManage:310 - Check plugin userauth +2023-12-25 14:04:53,644 [INFO] UserAuth:113 - Init User Auth plugin +2023-12-25 14:04:53,645 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) +2023-12-25 14:04:53,645 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] +2023-12-25 14:04:53,923 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 14:04:54,099 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 14:04:54,100 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 14:04:54,116 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,116 [INFO] PluginManager:220 - loadIPPluginJar : add mdma +2023-12-25 14:04:54,125 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,125 [INFO] PluginManager:220 - loadIPPluginJar : add freertos +2023-12-25 14:04:54,131 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,131 [INFO] PluginManager:220 - loadIPPluginJar : add gic +2023-12-25 14:04:54,155 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,156 [INFO] PluginManager:220 - loadIPPluginJar : add adc +2023-12-25 14:04:54,159 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,159 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc +2023-12-25 14:04:54,161 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,161 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi +2023-12-25 14:04:54,163 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,164 [INFO] PluginManager:220 - loadIPPluginJar : add aes +2023-12-25 14:04:54,167 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,167 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm +2023-12-25 14:04:54,169 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,170 [INFO] PluginManager:220 - loadIPPluginJar : add hash +2023-12-25 14:04:54,171 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,172 [INFO] PluginManager:220 - loadIPPluginJar : add tim +2023-12-25 14:04:54,173 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,173 [INFO] PluginManager:220 - loadIPPluginJar : add tsc +2023-12-25 14:04:54,175 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,175 [INFO] PluginManager:220 - loadIPPluginJar : add ts +2023-12-25 14:04:54,177 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,178 [INFO] PluginManager:220 - loadIPPluginJar : add can +2023-12-25 14:04:54,180 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,180 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 +2023-12-25 14:04:54,182 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,182 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm +2023-12-25 14:04:54,184 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,184 [INFO] PluginManager:220 - loadIPPluginJar : add spi +2023-12-25 14:04:54,187 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,187 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu +2023-12-25 14:04:54,188 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,188 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin +2023-12-25 14:04:54,191 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,191 [INFO] PluginManager:220 - loadIPPluginJar : add cryp +2023-12-25 14:04:54,195 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,195 [INFO] PluginManager:220 - loadIPPluginJar : add gpio +2023-12-25 14:04:54,197 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,197 [INFO] PluginManager:220 - loadIPPluginJar : add comp +2023-12-25 14:04:54,199 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,199 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb +2023-12-25 14:04:54,202 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,202 [INFO] PluginManager:220 - loadIPPluginJar : add openamp +2023-12-25 14:04:54,207 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,207 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan +2023-12-25 14:04:54,214 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,218 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings +2023-12-25 14:04:54,224 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,224 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr +2023-12-25 14:04:54,228 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,228 [INFO] PluginManager:220 - loadIPPluginJar : add usart +2023-12-25 14:04:54,229 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,229 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc +2023-12-25 14:04:54,234 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,234 [INFO] PluginManager:220 - loadIPPluginJar : add nvic +2023-12-25 14:04:54,237 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,237 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs +2023-12-25 14:04:54,247 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,247 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist +2023-12-25 14:04:54,257 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,258 [INFO] PluginManager:220 - loadIPPluginJar : add dma +2023-12-25 14:04:54,264 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,265 [INFO] PluginManager:220 - loadIPPluginJar : add fmc +2023-12-25 14:04:54,268 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,268 [INFO] PluginManager:220 - loadIPPluginJar : add i2s +2023-12-25 14:04:54,270 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,271 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd +2023-12-25 14:04:54,274 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,274 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan +2023-12-25 14:04:54,278 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,278 [INFO] PluginManager:220 - loadIPPluginJar : add opamp +2023-12-25 14:04:54,281 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,281 [INFO] PluginManager:220 - loadIPPluginJar : add i3c +2023-12-25 14:04:54,285 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,285 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing +2023-12-25 14:04:54,289 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,289 [INFO] PluginManager:220 - loadIPPluginJar : add i2c +2023-12-25 14:04:54,294 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,294 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility +2023-12-25 14:04:54,298 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,298 [INFO] PluginManager:220 - loadIPPluginJar : add sai +2023-12-25 14:04:54,301 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:04:54,301 [INFO] PluginManager:220 - loadIPPluginJar : add usbx +2023-12-25 14:04:54,407 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 14:04:54,408 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 14:04:54,408 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,408 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-12-25 14:04:54,614 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 14:04:54,614 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 14:04:54,615 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,615 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-12-25 14:04:54,619 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,698 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,706 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) +2023-12-25 14:04:54,706 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,789 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-12-25 14:04:54,933 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,935 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,935 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,936 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-12-25 14:04:54,937 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:04:54,990 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. +2023-12-25 14:04:55,037 [INFO] Updater:1056 - Updater Version found : 6.9.2 +2023-12-25 14:04:55,064 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 14:04:55,264 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 14:04:55,265 [INFO] MainUpdater:285 - Updater Check For Update Now. +2023-12-25 14:04:55,265 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 14:04:55,274 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-12-25 14:04:55,274 [INFO] UserAuth:179 - activating auth plugin +2023-12-25 14:04:55,278 [INFO] UserAuth:393 - Internet connection configuration mode: 1 +2023-12-25 14:04:55,303 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder +2023-12-25 14:04:55,493 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread +2023-12-25 14:04:56,661 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 +2023-12-25 14:04:56,707 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 +2023-12-25 14:04:56,777 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 +2023-12-25 14:04:56,829 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 +2023-12-25 14:04:56,925 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 +2023-12-25 14:04:56,978 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 +2023-12-25 14:04:57,008 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 +2023-12-25 14:04:57,143 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 +2023-12-25 14:04:57,193 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 +2023-12-25 14:04:57,255 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:04:57,261 [INFO] WebApp:157 - Instantiating new browser for Auth +2023-12-25 14:04:57,273 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:04:57,309 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:04:57,310 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:04:57,330 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:04:57,346 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 +2023-12-25 14:04:57,439 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 +2023-12-25 14:04:57,552 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 +2023-12-25 14:04:57,611 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 +2023-12-25 14:04:57,734 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 +2023-12-25 14:04:57,784 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 +2023-12-25 14:04:57,844 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 +2023-12-25 14:04:57,894 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 +2023-12-25 14:04:58,018 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 +2023-12-25 14:04:58,093 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 +2023-12-25 14:04:58,112 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 +2023-12-25 14:04:58,120 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 +2023-12-25 14:04:58,146 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 +2023-12-25 14:04:58,158 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 +2023-12-25 14:04:58,168 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 +2023-12-25 14:04:58,177 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 +2023-12-25 14:04:58,186 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 +2023-12-25 14:04:58,200 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 +2023-12-25 14:04:58,211 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 +2023-12-25 14:04:58,286 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:04:58,289 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 +2023-12-25 14:04:58,291 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:04:58,292 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:04:58,293 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:04:58,310 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 +2023-12-25 14:04:58,323 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 +2023-12-25 14:04:58,376 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:04:58,376 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:04:58,380 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 +2023-12-25 14:04:58,382 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:04:58,382 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:04:58,383 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:04:58,384 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:04:58,384 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:04:58,402 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 +2023-12-25 14:04:58,428 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 +2023-12-25 14:04:58,455 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 +2023-12-25 14:04:58,469 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 +2023-12-25 14:04:58,478 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 +2023-12-25 14:04:58,482 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 +2023-12-25 14:04:58,488 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 +2023-12-25 14:04:58,492 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 +2023-12-25 14:04:58,496 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 +2023-12-25 14:04:58,500 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 +2023-12-25 14:04:58,512 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 +2023-12-25 14:04:58,578 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 +2023-12-25 14:04:58,584 [INFO] ThirdParty:978 - Integrity check success = true +2023-12-25 14:04:58,584 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] +2023-12-25 14:04:58,584 [INFO] IntegrityCheckThread:103 - End integrity checks thread +2023-12-25 14:04:58,607 [INFO] WebApp:753 - Register for checkConnection events +2023-12-25 14:04:58,608 [INFO] WebApp:390 - Apply proxy settings +2023-12-25 14:04:58,612 [INFO] WebApp:455 - Chromium authenticates against System proxy +2023-12-25 14:04:58,905 [INFO] WebApp:188 - Starting web application +2023-12-25 14:04:58,905 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html +2023-12-25 14:05:19,838 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". +2023-12-25 14:05:19,839 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation +2023-12-25 14:05:19,839 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. +2023-12-25 14:17:59,855 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2023-12-25 14:55:44,490 [INFO] Activator:176 - + + +2023-12-25 14:55:44,492 [INFO] Activator:177 - !SESSION log4j initialized +2023-12-25 14:55:48,665 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2023-12-25 14:55:49,324 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 14:55:51,691 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 14:55:52,445 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 14:55:52,470 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 14:55:52,470 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 14:55:52,471 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 14:55:52,487 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:55:52,489 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:55:52,491 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 14:55:52,634 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) +2023-12-25 14:55:52,708 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 14:55:52,708 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 14:55:52,708 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 14:55:52,708 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,708 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:55:52,709 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,709 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:55:52,709 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,709 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,709 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 14:55:52,796 [INFO] MainPanel:262 - HeapMemory: 268435456 +2023-12-25 14:55:52,903 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 14:55:52,903 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 14:55:52,903 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,904 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,904 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,904 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 14:55:52,904 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 14:55:52,925 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 14:55:52,927 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] +2023-12-25 14:55:52,929 [INFO] PluginManage:310 - Check plugin analytics +2023-12-25 14:55:53,102 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: +2023-12-25 14:55:53,102 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: +2023-12-25 14:55:53,102 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: +2023-12-25 14:55:53,105 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) +2023-12-25 14:55:53,105 [INFO] PluginManage:310 - Check plugin cadmodel +2023-12-25 14:55:53,437 [INFO] CADModel:105 - Init CAD model plugin +2023-12-25 14:55:53,437 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) +2023-12-25 14:55:53,437 [INFO] PluginManage:310 - Check plugin clock +2023-12-25 14:55:53,449 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) +2023-12-25 14:55:53,449 [INFO] PluginManage:310 - Check plugin ddr +2023-12-25 14:55:53,452 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) +2023-12-25 14:55:53,452 [INFO] PluginManage:310 - Check plugin filemanager +2023-12-25 14:55:53,599 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) +2023-12-25 14:55:53,600 [INFO] PluginManage:310 - Check plugin ipmanager +2023-12-25 14:55:53,605 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) +2023-12-25 14:55:53,606 [INFO] PluginManage:310 - Check plugin lpbam +2023-12-25 14:55:53,618 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) +2023-12-25 14:55:53,618 [INFO] PluginManage:310 - Check plugin memorymap +2023-12-25 14:55:53,635 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) +2023-12-25 14:55:53,635 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration +2023-12-25 14:55:53,643 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) +2023-12-25 14:55:53,643 [INFO] PluginManage:310 - Check plugin pinoutconfig +2023-12-25 14:55:53,740 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. +2023-12-25 14:55:53,893 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) +2023-12-25 14:55:53,893 [INFO] PluginManage:310 - Check plugin power +2023-12-25 14:55:53,905 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) +2023-12-25 14:55:53,905 [INFO] PluginManage:310 - Check plugin projectmanager +2023-12-25 14:55:53,919 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) +2023-12-25 14:55:53,919 [INFO] PluginManage:310 - Check plugin thirdparty +2023-12-25 14:55:54,058 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) +2023-12-25 14:55:54,057 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] +2023-12-25 14:55:54,058 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] +2023-12-25 14:55:54,058 [INFO] PluginManage:310 - Check plugin tools +2023-12-25 14:55:54,058 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] +2023-12-25 14:55:54,060 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) +2023-12-25 14:55:54,061 [INFO] PluginManage:310 - Check plugin tutovideos +2023-12-25 14:55:54,257 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) +2023-12-25 14:55:54,258 [INFO] PluginManage:310 - Check plugin updater +2023-12-25 14:55:54,270 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) +2023-12-25 14:55:54,270 [INFO] PluginManage:310 - Check plugin userauth +2023-12-25 14:55:54,276 [INFO] UserAuth:113 - Init User Auth plugin +2023-12-25 14:55:54,277 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) +2023-12-25 14:55:54,277 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] +2023-12-25 14:55:54,483 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 14:55:54,588 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 14:55:54,588 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 14:55:54,601 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,601 [INFO] PluginManager:220 - loadIPPluginJar : add mdma +2023-12-25 14:55:54,609 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,610 [INFO] PluginManager:220 - loadIPPluginJar : add freertos +2023-12-25 14:55:54,615 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,615 [INFO] PluginManager:220 - loadIPPluginJar : add gic +2023-12-25 14:55:54,627 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,627 [INFO] PluginManager:220 - loadIPPluginJar : add adc +2023-12-25 14:55:54,630 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,631 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc +2023-12-25 14:55:54,632 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,632 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi +2023-12-25 14:55:54,634 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,635 [INFO] PluginManager:220 - loadIPPluginJar : add aes +2023-12-25 14:55:54,637 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,638 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm +2023-12-25 14:55:54,640 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,640 [INFO] PluginManager:220 - loadIPPluginJar : add hash +2023-12-25 14:55:54,641 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,641 [INFO] PluginManager:220 - loadIPPluginJar : add tim +2023-12-25 14:55:54,643 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,643 [INFO] PluginManager:220 - loadIPPluginJar : add tsc +2023-12-25 14:55:54,645 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,645 [INFO] PluginManager:220 - loadIPPluginJar : add ts +2023-12-25 14:55:54,647 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,647 [INFO] PluginManager:220 - loadIPPluginJar : add can +2023-12-25 14:55:54,650 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,650 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 +2023-12-25 14:55:54,652 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,652 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm +2023-12-25 14:55:54,654 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,654 [INFO] PluginManager:220 - loadIPPluginJar : add spi +2023-12-25 14:55:54,656 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,656 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu +2023-12-25 14:55:54,657 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,657 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin +2023-12-25 14:55:54,659 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,660 [INFO] PluginManager:220 - loadIPPluginJar : add cryp +2023-12-25 14:55:54,664 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,664 [INFO] PluginManager:220 - loadIPPluginJar : add gpio +2023-12-25 14:55:54,665 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,666 [INFO] PluginManager:220 - loadIPPluginJar : add comp +2023-12-25 14:55:54,668 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,668 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb +2023-12-25 14:55:54,671 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,671 [INFO] PluginManager:220 - loadIPPluginJar : add openamp +2023-12-25 14:55:54,677 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,677 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan +2023-12-25 14:55:54,684 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,686 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings +2023-12-25 14:55:54,690 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,690 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr +2023-12-25 14:55:54,692 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,692 [INFO] PluginManager:220 - loadIPPluginJar : add usart +2023-12-25 14:55:54,694 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,694 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc +2023-12-25 14:55:54,697 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,698 [INFO] PluginManager:220 - loadIPPluginJar : add nvic +2023-12-25 14:55:54,699 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,699 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs +2023-12-25 14:55:54,706 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,706 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist +2023-12-25 14:55:54,713 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,713 [INFO] PluginManager:220 - loadIPPluginJar : add dma +2023-12-25 14:55:54,718 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,718 [INFO] PluginManager:220 - loadIPPluginJar : add fmc +2023-12-25 14:55:54,721 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,721 [INFO] PluginManager:220 - loadIPPluginJar : add i2s +2023-12-25 14:55:54,723 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,723 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd +2023-12-25 14:55:54,726 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,726 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan +2023-12-25 14:55:54,729 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,729 [INFO] PluginManager:220 - loadIPPluginJar : add opamp +2023-12-25 14:55:54,732 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,732 [INFO] PluginManager:220 - loadIPPluginJar : add i3c +2023-12-25 14:55:54,735 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,735 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing +2023-12-25 14:55:54,738 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,738 [INFO] PluginManager:220 - loadIPPluginJar : add i2c +2023-12-25 14:55:54,742 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,742 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility +2023-12-25 14:55:54,745 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,745 [INFO] PluginManager:220 - loadIPPluginJar : add sai +2023-12-25 14:55:54,747 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 14:55:54,747 [INFO] PluginManager:220 - loadIPPluginJar : add usbx +2023-12-25 14:55:54,846 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 14:55:54,846 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 14:55:54,847 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:54,847 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-12-25 14:55:55,052 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 14:55:55,052 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 14:55:55,053 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,053 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-12-25 14:55:55,057 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,143 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,149 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) +2023-12-25 14:55:55,149 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,231 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-12-25 14:55:55,338 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,340 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,340 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,340 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-12-25 14:55:55,341 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 14:55:55,369 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. +2023-12-25 14:55:55,397 [INFO] Updater:1056 - Updater Version found : 6.9.2 +2023-12-25 14:55:55,417 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 14:55:55,554 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 14:55:55,555 [INFO] MainUpdater:285 - Updater Check For Update Now. +2023-12-25 14:55:55,555 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 14:55:55,561 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-12-25 14:55:55,562 [INFO] UserAuth:179 - activating auth plugin +2023-12-25 14:55:55,565 [INFO] UserAuth:393 - Internet connection configuration mode: 1 +2023-12-25 14:55:55,582 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder +2023-12-25 14:55:55,745 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread +2023-12-25 14:55:57,122 [INFO] WebApp:157 - Instantiating new browser for Auth +2023-12-25 14:55:58,072 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 +2023-12-25 14:55:58,081 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 +2023-12-25 14:55:58,116 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 +2023-12-25 14:55:58,152 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 +2023-12-25 14:55:58,178 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 +2023-12-25 14:55:58,188 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 +2023-12-25 14:55:58,203 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 +2023-12-25 14:55:58,208 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 +2023-12-25 14:55:58,211 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 +2023-12-25 14:55:58,214 [INFO] WebApp:753 - Register for checkConnection events +2023-12-25 14:55:58,215 [INFO] WebApp:390 - Apply proxy settings +2023-12-25 14:55:58,218 [INFO] WebApp:455 - Chromium authenticates against System proxy +2023-12-25 14:55:58,227 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:55:58,228 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:55:58,228 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:55:58,229 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:55:58,229 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 14:55:58,235 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 +2023-12-25 14:55:58,246 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 +2023-12-25 14:55:58,252 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 +2023-12-25 14:55:58,262 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 +2023-12-25 14:55:58,288 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 +2023-12-25 14:55:58,296 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 +2023-12-25 14:55:58,306 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 +2023-12-25 14:55:58,312 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 +2023-12-25 14:55:58,365 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 +2023-12-25 14:55:58,451 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 +2023-12-25 14:55:58,495 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 +2023-12-25 14:55:58,504 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 +2023-12-25 14:55:58,537 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 +2023-12-25 14:55:58,546 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 +2023-12-25 14:55:58,551 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 +2023-12-25 14:55:58,557 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 +2023-12-25 14:55:58,560 [INFO] WebApp:188 - Starting web application +2023-12-25 14:55:58,560 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html +2023-12-25 14:55:58,564 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 +2023-12-25 14:55:58,571 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 +2023-12-25 14:55:58,577 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 +2023-12-25 14:55:58,602 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:55:58,602 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 +2023-12-25 14:55:58,603 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:55:58,603 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:55:58,604 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 14:55:58,610 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 +2023-12-25 14:55:58,614 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 +2023-12-25 14:55:58,632 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:55:58,632 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:55:58,635 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 +2023-12-25 14:55:58,636 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:55:58,636 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:55:58,636 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:55:58,637 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:55:58,637 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 14:55:58,648 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 +2023-12-25 14:55:58,663 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 +2023-12-25 14:55:58,698 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 +2023-12-25 14:55:58,712 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 +2023-12-25 14:55:58,727 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 +2023-12-25 14:55:58,733 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 +2023-12-25 14:55:58,757 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 +2023-12-25 14:55:58,768 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 +2023-12-25 14:55:58,773 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 +2023-12-25 14:55:58,779 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 +2023-12-25 14:55:58,796 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 +2023-12-25 14:55:58,858 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 +2023-12-25 14:55:58,867 [INFO] ThirdParty:978 - Integrity check success = true +2023-12-25 14:55:58,867 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] +2023-12-25 14:55:58,867 [INFO] IntegrityCheckThread:103 - End integrity checks thread +2023-12-25 14:56:19,489 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". +2023-12-25 14:56:19,489 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation +2023-12-25 14:56:19,490 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. +2023-12-25 16:31:38,733 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-12-25 16:31:38,743 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 16:31:38,744 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 16:31:39,697 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 16:31:39,697 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 16:31:39,703 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] +2023-12-25 16:31:39,703 [INFO] ThirdParty:873 - entering critical section [close project] +2023-12-25 16:31:39,705 [INFO] ThirdParty:883 - exiting critical section [close project] +2023-12-25 16:31:39,710 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 16:31:39,724 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 756852256 Bytes (1045430272) +2023-12-25 16:31:39,727 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 16:31:39,727 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 16:31:39,727 [INFO] OpenFileManager:308 - Change cursor +2023-12-25 16:31:39,776 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 +2023-12-25 16:31:41,412 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden +2023-12-25 16:31:41,939 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 16:31:41,940 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 16:31:41,940 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 16:31:41,940 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 16:31:41,940 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: +2023-12-25 16:31:41,971 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,972 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,973 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,974 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:41,975 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 16:31:42,034 [INFO] ThirdPartyModel:298 - Start build external matchings +2023-12-25 16:31:42,429 [INFO] ThirdPartyModel:316 - End build external matchings +2023-12-25 16:31:42,444 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) +2023-12-25 16:31:42,444 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) +2023-12-25 16:31:42,729 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 670639176 Bytes (1073741824) +2023-12-25 16:31:43,078 [INFO] ApiDb:581 - Connected to CubeFinder SQLite database (/Users/haotian/.stmcufinder/plugins/mcufinder/mcu/cube-finder-db.db) +2023-12-25 16:31:43,190 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 +2023-12-25 16:31:43,191 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.39 +2023-12-25 16:31:43,193 [INFO] ApiDb:670 - CubeFinder database generation date=2023-12-08 (1702028721) +2023-12-25 16:31:43,194 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-MOTENVWB1_V1.3.1, FP-SNS-SMARTAG2_V1.2.0, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.28.0, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H5_V1.2.0RC2, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_U5_V1.4.0, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.2.0, STM32Cube_FW_WBA_V1.2.0RC2, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.18.0, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V3.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-EEPRMA1_V4.2.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.4.0] +2023-12-25 16:31:46,080 [INFO] ApiDb:240 - Found 323 in-development CPN: [B-G473E-ZEST1S, B-WB1M-WPAN1, B-WL5M-SUBG1, NUCLEO-C031C6, NUCLEO-H503RB, NUCLEO-H563ZI, NUCLEO-U545RE-Q, NUCLEO-U5A5ZJ-Q, NUCLEO-WBA52CG, STEVAL-PROTEUS1, STEVAL-SMARTAG2, STEVAL-STWINBX1, STM320518-EVAL, STM32C0116-DK, STM32C011D6Y3TR, STM32C011D6Y6TR, STM32C011F4P3, STM32C011F4P6, STM32C011F4U3, STM32C011F4U6TR, STM32C011F6P3, STM32C011F6P6, STM32C011F6U3, STM32C011F6U6TR, STM32C011J4M3, STM32C011J4M6, STM32C011J6M3, STM32C011J6M6, STM32C0316-DK, STM32C031C4T3, STM32C031C4T6, STM32C031C4U3, STM32C031C4U6, STM32C031C6T3, STM32C031C6T6, STM32C031C6U3, STM32C031C6U6, STM32C031F4P3, STM32C031F4P6, STM32C031F6P3, STM32C031F6P6, STM32C031G4U3, STM32C031G4U6, STM32C031G6U3, STM32C031G6U6, STM32C031K4T3, STM32C031K4T6, STM32C031K4U3, STM32C031K4U6, STM32C031K6T3, STM32C031K6T6, STM32C031K6U3, STM32C031K6U6, STM32G071K8TXN, STM32G071K8UXN, STM32G081GBU6N, STM32G081KBT6N, STM32G081KBUXN, STM32G0B1CCT6N, STM32G0B1KCT6, STM32G0B1NEY6TR, STM32G0B1RCT6N, STM32G0C1CCT6, STM32G0C1CCT6N, STM32G0C1CCU6N, STM32G0C1CET6N, STM32G0C1CEU6N, STM32G0C1KCT6, STM32G0C1NEY6TR, STM32G0C1RCI6N, STM32G0C1RCT6N, STM32G0C1REI6N, STM32G0C1RET6N, STM32G0C1VCI6, STM32G0C1VEI6, STM32G471CCT6, STM32G471CCU6, STM32G471CET3, STM32G471CET6, STM32G471CEU3, STM32G471CEU6, STM32G471MCT6, STM32G471MET3, STM32G471MET6, STM32G471MEY6TR, STM32G471QCT6, STM32G471QET3, STM32G471RCT6, STM32G471RET3, STM32G471RET6, STM32G471VCH6, STM32G471VCI6, STM32G471VCT6, STM32G471VEH3, STM32G471VEH6, STM32G471VEI3, STM32G471VEI6, STM32G471VET3, STM32G471VET6, STM32G474CCT6, STM32H503CBT6, STM32H503CBU6, STM32H503EBY6TR, STM32H503KBU6, STM32H503RBT6, STM32H562AGI6, STM32H562AII6, STM32H562IGK6, STM32H562IGT6, STM32H562IIK6, STM32H562IIT6, STM32H562RGT6, STM32H562RGV6, STM32H562RIT6, STM32H562RIV6, STM32H562VGT6, STM32H562VIT6, STM32H562ZGT6, STM32H562ZIT6, STM32H563AGI6, STM32H563AII3Q, STM32H563AII6, STM32H563IGK6, STM32H563IGT6, STM32H563IIK3Q, STM32H563IIK6, STM32H563IIT3Q, STM32H563IIT6, STM32H563MIY3QTR, STM32H563RGT6, STM32H563RGV6, STM32H563RIT6, STM32H563RIV6, STM32H563VGT6, STM32H563VIT3Q, STM32H563VIT6, STM32H563ZGT6, STM32H563ZIT3Q, STM32H563ZIT6, STM32H573AII3Q, STM32H573AII6, STM32H573I-DK, STM32H573IIK3Q, STM32H573IIK6, STM32H573IIT3Q, STM32H573IIT6, STM32H573MIY3QTR, STM32H573RIT6, STM32H573RIV6, STM32H573VIT3Q, STM32H573VIT6, STM32H573ZIT3Q, STM32H573ZIT6, STM32L4R5QGI6STR, STM32MP131AAE3, STM32MP131AAF3, STM32MP131AAG3, STM32MP131CAE3, STM32MP131CAF3, STM32MP131CAG3, STM32MP131DAE7, STM32MP131DAF7, STM32MP131DAG7, STM32MP131FAE7, STM32MP131FAF7, STM32MP131FAG7, STM32MP133AAE3, STM32MP133AAF3, STM32MP133AAG3, STM32MP133CAE3, STM32MP133CAF3, STM32MP133CAG3, STM32MP133DAE7, STM32MP133DAF7, STM32MP133DAG7, STM32MP133FAE7, STM32MP133FAF7, STM32MP133FAG7, STM32MP135AAE3, STM32MP135AAF3, STM32MP135AAG3, STM32MP135CAE3, STM32MP135CAF3, STM32MP135CAG3, STM32MP135DAE7, STM32MP135DAF7, STM32MP135DAG7, STM32MP135F-DK, STM32MP135FAE7, STM32MP135FAF7, STM32MP135FAF7T, STM32MP135FAF7U, STM32MP135FAG7, STM32U535CBT6, STM32U535CBT6Q, STM32U535CBU6, STM32U535CBU6Q, STM32U535CCT6, STM32U535CCT6Q, STM32U535CCU6, STM32U535CCU6Q, STM32U535CET6, STM32U535CET6Q, STM32U535CEU6, STM32U535CEU6Q, STM32U535JEY6QTR, STM32U535NCY6QTR, STM32U535NEY6QTR, STM32U535RBI6, STM32U535RBI6Q, STM32U535RBT6, STM32U535RBT6Q, STM32U535RCI6, STM32U535RCI6Q, STM32U535RCT6, STM32U535RCT6Q, STM32U535REI6, STM32U535REI6Q, STM32U535RET6, STM32U535RET6Q, STM32U535VCI6, STM32U535VCI6Q, STM32U535VCT6, STM32U535VCT6Q, STM32U535VEI6, STM32U535VEI6Q, STM32U535VET6, STM32U535VET6Q, STM32U545CET6, STM32U545CET6Q, STM32U545CEU6, STM32U545CEU6Q, STM32U545JEY6QTR, STM32U545NEY6QTR, STM32U545REI6, STM32U545REI6Q, STM32U545RET6, STM32U545RET6Q, STM32U545VEI6, STM32U545VEI6Q, STM32U545VET6, STM32U545VET6Q, STM32U595AIH6, STM32U595AIH6Q, STM32U595AJH6, STM32U595AJH6Q, STM32U595QII6, STM32U595QII6Q, STM32U595QJI6, STM32U595QJI6Q, STM32U595RIT6, STM32U595RIT6Q, STM32U595RJT6, STM32U595RJT6Q, STM32U595VIT6, STM32U595VIT6Q, STM32U595VJT6, STM32U595VJT6Q, STM32U595ZIT6, STM32U595ZIT6Q, STM32U595ZIY6QTR, STM32U595ZJT6, STM32U595ZJT6Q, STM32U595ZJY6QTR, STM32U599BJY6QTR, STM32U599NIH6Q, STM32U599NJH6Q, STM32U599VIT6Q, STM32U599VJT6, STM32U599VJT6Q, STM32U599ZIT6Q, STM32U599ZIY6QTR, STM32U599ZJT6Q, STM32U599ZJY6QTR, STM32U5A5AJH6, STM32U5A5AJH6Q, STM32U5A5QJI6, STM32U5A5QJI6Q, STM32U5A5RJT6, STM32U5A5RJT6Q, STM32U5A5VJT6, STM32U5A5VJT6Q, STM32U5A5ZJT6, STM32U5A5ZJT6Q, STM32U5A5ZJY6QTR, STM32U5A9BJY6QTR, STM32U5A9J-DK, STM32U5A9NJH6Q, STM32U5A9VJT6Q, STM32U5A9ZJT6Q, STM32U5A9ZJY6QTR, STM32U5F7VIT6, STM32U5F7VIT6Q, STM32U5F7VJT6, STM32U5F7VJT6Q, STM32U5F9BJY6QTR, STM32U5F9NJH6Q, STM32U5F9VIT6Q, STM32U5F9VJT6Q, STM32U5F9ZIJ6QTR, STM32U5F9ZIT6Q, STM32U5F9ZJJ6QTR, STM32U5F9ZJT6Q, STM32U5G7VJT6, STM32U5G7VJT6Q, STM32U5G9BJY6QTR, STM32U5G9J-DK1, STM32U5G9J-DK2, STM32U5G9NJH6Q, STM32U5G9VJT6Q, STM32U5G9ZJJ6QTR, STM32U5G9ZJT6Q, STM32WB1MMCH6, STM32WBA52CEU6, STM32WBA52CEU6T, STM32WBA52CGU6, STM32WBA52CGU6T, STM32WBA52KEU6, STM32WBA52KEU6T, STM32WBA52KGU6, STM32WBA52KGU6T, STM32WL5MOCH6, STM32WL5MOCH6TR] +2023-12-25 16:31:46,085 [INFO] DbMcus:217 - Found 3882 MCUs, 3882 are supported +2023-12-25 16:31:46,086 [INFO] ApiDb:423 - Load user favorites file /Users/haotian/.stm32cubeide/favorites.mcus.txt: 0 item(s) +2023-12-25 16:31:46,087 [INFO] ApiDb:427 - User favorites MCUs=[] +2023-12-25 16:31:46,087 [INFO] DbMcus:223 - Set 0 / 0 favorites MCUs +2023-12-25 16:31:46,603 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] +2023-12-25 16:31:46,603 [INFO] ThirdParty:835 - entering critical section [change project] +2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 +2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 +2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 +2023-12-25 16:31:46,603 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 +2023-12-25 16:31:46,604 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 +2023-12-25 16:31:46,605 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 +2023-12-25 16:31:46,606 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 +2023-12-25 16:31:46,607 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 +2023-12-25 16:31:46,608 [INFO] ThirdParty:841 - exiting critical section [change project] +2023-12-25 16:31:47,029 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 16:31:47,031 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) +2023-12-25 16:31:47,981 [INFO] UtilMem:75 - Before build in PCC Used Memory: 621641272 Bytes (1073741824) +2023-12-25 16:31:49,087 [INFO] UtilMem:75 - After build in PCC Used Memory: 734887480 Bytes (1073741824) +2023-12-25 16:31:49,225 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE +2023-12-25 16:31:49,268 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,269 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,269 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,270 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,270 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,272 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,273 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,273 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,273 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,274 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,274 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,274 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,275 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,276 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,277 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,277 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,279 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,279 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,280 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,280 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 16:31:49,591 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 +2023-12-25 16:31:49,591 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 16:31:49,635 [INFO] OpenFileManager:328 - Restore cursor +2023-12-25 16:31:57,171 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 574018408 Bytes (1073741824) +2023-12-25 16:31:58,023 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI +2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE +2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB +2023-12-25 16:31:58,024 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-12-25 16:31:58,025 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-12-25 16:31:58,026 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC +2023-12-25 16:31:58,026 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-12-25 16:31:58,029 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-12-25 16:31:58,650 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save +2023-12-25 16:31:59,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp +2023-12-25 16:31:59,526 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save +2023-12-25 16:31:59,728 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp +2023-12-25 16:31:59,855 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save +2023-12-25 16:31:59,988 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp +2023-12-25 16:31:59,991 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save +2023-12-25 16:32:00,109 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp +2023-12-25 16:32:00,113 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save +2023-12-25 16:32:00,276 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp +2023-12-25 16:32:00,279 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save +2023-12-25 16:32:00,440 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp +2023-12-25 16:32:00,821 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 16:32:00,834 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 16:32:00,845 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save +2023-12-25 16:32:00,987 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c +2023-12-25 16:32:00,991 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save +2023-12-25 16:32:01,098 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h +2023-12-25 16:32:01,108 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save +2023-12-25 16:32:01,230 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h +2023-12-25 16:32:01,238 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save +2023-12-25 16:32:01,365 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c +2023-12-25 16:32:01,372 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save +2023-12-25 16:32:01,492 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h +2023-12-25 16:32:01,498 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save +2023-12-25 16:32:01,646 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c +2023-12-25 16:32:01,733 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save +2023-12-25 16:32:01,869 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h +2023-12-25 16:32:01,875 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save +2023-12-25 16:32:02,065 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c +2023-12-25 16:32:02,081 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save +2023-12-25 16:32:02,250 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c +2023-12-25 16:32:02,255 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save +2023-12-25 16:32:02,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h +2023-12-25 16:32:02,442 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save +2023-12-25 16:32:02,622 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c +2023-12-25 16:32:02,629 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save +2023-12-25 16:32:02,723 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp +2023-12-25 16:32:02,730 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save +2023-12-25 16:32:02,830 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h +2023-12-25 16:32:02,868 [WARN] IPConfigManager:3431 - IP not found : TIM +2023-12-25 16:32:02,869 [WARN] CodeGenerator:3764 - IP not found : null +2023-12-25 16:32:02,875 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save +2023-12-25 16:32:03,011 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h +2023-12-25 16:32:03,015 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save +2023-12-25 16:32:03,262 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c +2023-12-25 16:32:04,310 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 240mS. +2023-12-25 16:32:04,323 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-12-25 16:32:04,737 [INFO] ConfigFileManager:1457 - The Die is : DIE410 +2023-12-25 16:32:04,745 [INFO] ApiDbMcu:507 - Load IP Config File for FATFS +2023-12-25 16:32:04,752 [INFO] ApiDbMcu:507 - Load IP Config File for FREERTOS +2023-12-25 16:32:06,382 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 16:32:07,718 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 3395mS. +2023-12-25 16:32:07,719 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 16:32:07,723 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 21:57:22,462 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 693533904 Bytes (1073741824) +2023-12-25 21:57:22,877 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI +2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE +2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB +2023-12-25 21:57:22,878 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-12-25 21:57:22,879 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-12-25 21:57:22,880 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC +2023-12-25 21:57:22,880 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-12-25 21:57:22,881 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-12-25 21:57:23,178 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save +2023-12-25 21:57:23,310 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp +2023-12-25 21:57:23,336 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save +2023-12-25 21:57:23,425 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp +2023-12-25 21:57:23,481 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save +2023-12-25 21:57:23,562 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp +2023-12-25 21:57:23,564 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save +2023-12-25 21:57:23,626 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp +2023-12-25 21:57:23,629 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save +2023-12-25 21:57:23,837 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp +2023-12-25 21:57:23,839 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save +2023-12-25 21:57:23,932 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp +2023-12-25 21:57:24,328 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:57:24,343 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:57:24,349 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save +2023-12-25 21:57:24,430 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c +2023-12-25 21:57:24,433 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save +2023-12-25 21:57:24,501 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h +2023-12-25 21:57:24,505 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save +2023-12-25 21:57:24,583 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h +2023-12-25 21:57:24,586 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save +2023-12-25 21:57:24,734 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c +2023-12-25 21:57:24,741 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save +2023-12-25 21:57:24,846 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h +2023-12-25 21:57:24,849 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save +2023-12-25 21:57:24,926 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c +2023-12-25 21:57:24,929 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save +2023-12-25 21:57:24,996 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h +2023-12-25 21:57:25,000 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save +2023-12-25 21:57:25,067 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c +2023-12-25 21:57:25,075 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save +2023-12-25 21:57:25,260 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c +2023-12-25 21:57:25,263 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save +2023-12-25 21:57:25,324 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h +2023-12-25 21:57:25,331 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save +2023-12-25 21:57:25,424 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c +2023-12-25 21:57:25,427 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save +2023-12-25 21:57:25,632 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp +2023-12-25 21:57:25,642 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save +2023-12-25 21:57:25,742 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h +2023-12-25 21:57:25,767 [WARN] IPConfigManager:3431 - IP not found : TIM +2023-12-25 21:57:25,768 [WARN] CodeGenerator:3764 - IP not found : null +2023-12-25 21:57:25,778 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save +2023-12-25 21:57:25,922 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h +2023-12-25 21:57:25,927 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save +2023-12-25 21:57:26,223 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c +2023-12-25 21:57:27,326 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 243mS. +2023-12-25 21:57:27,331 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-12-25 21:57:27,915 [INFO] ConfigFileManager:1457 - The Die is : DIE410 +2023-12-25 21:57:29,904 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2571mS. +2023-12-25 21:57:29,905 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 21:57:29,924 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 21:57:30,034 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] +2023-12-25 21:57:53,135 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 687053200 Bytes (1073741824) +2023-12-25 21:58:15,009 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 667460064 Bytes (1073741824) +2023-12-25 21:58:15,398 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI +2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE +2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB +2023-12-25 21:58:15,399 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-12-25 21:58:15,400 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-12-25 21:58:15,400 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC +2023-12-25 21:58:15,400 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-12-25 21:58:15,401 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-12-25 21:58:15,626 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save +2023-12-25 21:58:15,708 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp +2023-12-25 21:58:15,730 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save +2023-12-25 21:58:15,822 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp +2023-12-25 21:58:15,887 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save +2023-12-25 21:58:15,974 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp +2023-12-25 21:58:15,976 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save +2023-12-25 21:58:16,055 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp +2023-12-25 21:58:16,056 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save +2023-12-25 21:58:16,123 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp +2023-12-25 21:58:16,124 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save +2023-12-25 21:58:16,251 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp +2023-12-25 21:58:16,444 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:58:16,452 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:58:16,457 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save +2023-12-25 21:58:16,522 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c +2023-12-25 21:58:16,524 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save +2023-12-25 21:58:16,584 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h +2023-12-25 21:58:16,586 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save +2023-12-25 21:58:16,648 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h +2023-12-25 21:58:16,651 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save +2023-12-25 21:58:16,720 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c +2023-12-25 21:58:16,724 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save +2023-12-25 21:58:16,784 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h +2023-12-25 21:58:16,787 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save +2023-12-25 21:58:16,854 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c +2023-12-25 21:58:16,860 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save +2023-12-25 21:58:16,925 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h +2023-12-25 21:58:16,928 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save +2023-12-25 21:58:17,004 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c +2023-12-25 21:58:17,013 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save +2023-12-25 21:58:17,084 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c +2023-12-25 21:58:17,087 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save +2023-12-25 21:58:17,148 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h +2023-12-25 21:58:17,155 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save +2023-12-25 21:58:17,246 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c +2023-12-25 21:58:17,248 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save +2023-12-25 21:58:17,346 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp +2023-12-25 21:58:17,352 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save +2023-12-25 21:58:17,440 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h +2023-12-25 21:58:17,459 [WARN] IPConfigManager:3431 - IP not found : TIM +2023-12-25 21:58:17,460 [WARN] CodeGenerator:3764 - IP not found : null +2023-12-25 21:58:17,464 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save +2023-12-25 21:58:17,556 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h +2023-12-25 21:58:17,559 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save +2023-12-25 21:58:17,722 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c +2023-12-25 21:58:18,461 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 158mS. +2023-12-25 21:58:18,467 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-12-25 21:58:18,868 [INFO] ConfigFileManager:1457 - The Die is : DIE410 +2023-12-25 21:58:20,525 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2059mS. +2023-12-25 21:58:20,526 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 1mS. +2023-12-25 21:58:20,529 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 21:59:19,200 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 719282688 Bytes (1073741824) +2023-12-25 21:59:19,561 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI +2023-12-25 21:59:19,561 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-12-25 21:59:19,561 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE +2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB +2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC +2023-12-25 21:59:19,562 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-12-25 21:59:19,563 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-12-25 21:59:19,900 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save +2023-12-25 21:59:19,961 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp +2023-12-25 21:59:19,984 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save +2023-12-25 21:59:20,062 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp +2023-12-25 21:59:20,117 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save +2023-12-25 21:59:20,201 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp +2023-12-25 21:59:20,203 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save +2023-12-25 21:59:20,316 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp +2023-12-25 21:59:20,319 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save +2023-12-25 21:59:20,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp +2023-12-25 21:59:20,430 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save +2023-12-25 21:59:20,520 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp +2023-12-25 21:59:20,783 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:59:20,793 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:59:20,800 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save +2023-12-25 21:59:20,885 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c +2023-12-25 21:59:20,888 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save +2023-12-25 21:59:20,958 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h +2023-12-25 21:59:20,960 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save +2023-12-25 21:59:21,032 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h +2023-12-25 21:59:21,036 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save +2023-12-25 21:59:21,110 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c +2023-12-25 21:59:21,114 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save +2023-12-25 21:59:21,179 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h +2023-12-25 21:59:21,184 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save +2023-12-25 21:59:21,281 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c +2023-12-25 21:59:21,286 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save +2023-12-25 21:59:21,355 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h +2023-12-25 21:59:21,358 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save +2023-12-25 21:59:21,427 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c +2023-12-25 21:59:21,439 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save +2023-12-25 21:59:21,510 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c +2023-12-25 21:59:21,513 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save +2023-12-25 21:59:21,573 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h +2023-12-25 21:59:21,579 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save +2023-12-25 21:59:21,671 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c +2023-12-25 21:59:21,673 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save +2023-12-25 21:59:21,725 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp +2023-12-25 21:59:21,730 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save +2023-12-25 21:59:21,791 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h +2023-12-25 21:59:21,806 [WARN] IPConfigManager:3431 - IP not found : TIM +2023-12-25 21:59:21,806 [WARN] CodeGenerator:3764 - IP not found : null +2023-12-25 21:59:21,811 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save +2023-12-25 21:59:21,878 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h +2023-12-25 21:59:21,881 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save +2023-12-25 21:59:22,026 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c +2023-12-25 21:59:22,833 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 154mS. +2023-12-25 21:59:22,837 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-12-25 21:59:23,275 [INFO] ConfigFileManager:1457 - The Die is : DIE410 +2023-12-25 21:59:24,946 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2109mS. +2023-12-25 21:59:24,946 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 21:59:24,955 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 21:59:25,121 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] +2023-12-25 21:59:32,071 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 804819112 Bytes (1073741824) +2023-12-25 21:59:33,399 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 824546368 Bytes (1073741824) +2023-12-25 21:59:33,694 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 759901248 Bytes (1073741824) +2023-12-25 21:59:33,895 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC +2023-12-25 21:59:33,896 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-12-25 21:59:33,897 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-12-25 21:59:34,074 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp_save +2023-12-25 21:59:34,135 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/license.tmp +2023-12-25 21:59:34,155 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp_save +2023-12-25 21:59:34,255 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/gpio.tmp +2023-12-25 21:59:34,291 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp_save +2023-12-25 21:59:34,366 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_vars.tmp +2023-12-25 21:59:34,368 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp_save +2023-12-25 21:59:34,444 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_inc.tmp +2023-12-25 21:59:34,446 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp_save +2023-12-25 21:59:34,512 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_HalInit.tmp +2023-12-25 21:59:34,513 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp_save +2023-12-25 21:59:34,579 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/usb_Msp.tmp +2023-12-25 21:59:34,747 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:59:34,751 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 21:59:34,756 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c_save +2023-12-25 21:59:34,829 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.c +2023-12-25 21:59:34,831 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h_save +2023-12-25 21:59:34,880 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usb_device.h +2023-12-25 21:59:34,882 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h_save +2023-12-25 21:59:34,935 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.h +2023-12-25 21:59:34,937 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c_save +2023-12-25 21:59:35,002 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/Target/usbd_conf.c +2023-12-25 21:59:35,005 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h_save +2023-12-25 21:59:35,057 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.h +2023-12-25 21:59:35,059 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c_save +2023-12-25 21:59:35,115 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_desc.c +2023-12-25 21:59:35,117 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h_save +2023-12-25 21:59:35,167 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.h +2023-12-25 21:59:35,169 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c_save +2023-12-25 21:59:35,225 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/USB_DEVICE/App/usbd_cdc_if.c +2023-12-25 21:59:35,230 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c_save +2023-12-25 21:59:35,309 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_it.c +2023-12-25 21:59:35,311 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h_save +2023-12-25 21:59:35,366 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_it.h +2023-12-25 21:59:35,372 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c_save +2023-12-25 21:59:35,451 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/stm32f1xx_hal_msp.c +2023-12-25 21:59:35,454 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp_save +2023-12-25 21:59:35,508 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/MXTmpFiles/system.tmp +2023-12-25 21:59:35,512 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h_save +2023-12-25 21:59:35,578 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/stm32f1xx_hal_conf.h +2023-12-25 21:59:35,588 [WARN] IPConfigManager:3431 - IP not found : TIM +2023-12-25 21:59:35,589 [WARN] CodeGenerator:3764 - IP not found : null +2023-12-25 21:59:35,592 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h_save +2023-12-25 21:59:35,652 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Inc/main.h +2023-12-25 21:59:35,654 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c_save +2023-12-25 21:59:35,750 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/closed_current_loop/Core/Src/main.c +2023-12-25 21:59:36,297 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 101mS. +2023-12-25 21:59:36,299 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-12-25 21:59:36,639 [INFO] ConfigFileManager:1457 - The Die is : DIE410 +2023-12-25 21:59:38,205 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 1906mS. +2023-12-25 21:59:38,206 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 21:59:38,209 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 22:00:56,961 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 22:00:56,961 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 22:00:57,696 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 22:00:57,696 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 22:00:57,716 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] +2023-12-25 22:00:57,717 [INFO] ThirdParty:873 - entering critical section [close project] +2023-12-25 22:00:57,717 [INFO] ThirdParty:883 - exiting critical section [close project] +2023-12-25 22:00:57,718 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 22:00:57,725 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 727295200 Bytes (1073741824) +2023-12-25 22:00:57,725 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 22:00:57,725 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 22:00:57,725 [INFO] OpenFileManager:308 - Change cursor +2023-12-25 22:00:57,741 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) +2023-12-25 22:00:57,745 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 +2023-12-25 22:00:58,447 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden +2023-12-25 22:00:58,658 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 22:00:58,658 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 22:00:58,659 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 22:00:58,659 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 22:00:58,659 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: +2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,671 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,672 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,673 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:00:58,691 [INFO] ThirdPartyModel:298 - Start build external matchings +2023-12-25 22:00:58,864 [INFO] ThirdPartyModel:316 - End build external matchings +2023-12-25 22:00:58,870 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) +2023-12-25 22:00:58,870 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) +2023-12-25 22:00:59,017 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 641139208 Bytes (1073741824) +2023-12-25 22:00:59,063 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] +2023-12-25 22:00:59,063 [INFO] ThirdParty:835 - entering critical section [change project] +2023-12-25 22:00:59,063 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 +2023-12-25 22:00:59,063 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 +2023-12-25 22:00:59,064 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 +2023-12-25 22:00:59,065 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 +2023-12-25 22:00:59,066 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 +2023-12-25 22:00:59,067 [INFO] ThirdParty:841 - exiting critical section [change project] +2023-12-25 22:00:59,199 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 22:00:59,199 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) +2023-12-25 22:00:59,630 [INFO] UtilMem:75 - Before build in PCC Used Memory: 669455600 Bytes (1073741824) +2023-12-25 22:00:59,924 [INFO] UtilMem:75 - After build in PCC Used Memory: 711924976 Bytes (1073741824) +2023-12-25 22:00:59,931 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE +2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,952 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,953 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,954 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,955 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,955 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,955 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,956 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,957 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,957 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,957 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,958 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,958 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:00:59,958 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:00,000 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 +2023-12-25 22:01:00,001 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 22:01:00,043 [INFO] OpenFileManager:328 - Restore cursor +2023-12-25 22:01:24,168 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 22:01:24,169 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 22:01:24,428 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 22:01:24,428 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 22:01:24,493 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] +2023-12-25 22:01:24,493 [INFO] ThirdParty:873 - entering critical section [close project] +2023-12-25 22:01:24,494 [INFO] ThirdParty:883 - exiting critical section [close project] +2023-12-25 22:01:24,497 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 22:01:24,501 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 737346232 Bytes (1073741824) +2023-12-25 22:01:24,502 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 22:01:24,502 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 22:01:24,503 [INFO] OpenFileManager:308 - Change cursor +2023-12-25 22:01:24,513 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 +2023-12-25 22:01:25,210 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden +2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 22:01:25,396 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 22:01:25,396 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,411 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,412 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,413 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:01:25,432 [INFO] ThirdPartyModel:298 - Start build external matchings +2023-12-25 22:01:25,730 [INFO] ThirdPartyModel:316 - End build external matchings +2023-12-25 22:01:25,735 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (ADCFreqValue) has invalid value (36000000) +2023-12-25 22:01:25,736 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) +2023-12-25 22:01:25,736 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) +2023-12-25 22:01:25,944 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 849407520 Bytes (1073741824) +2023-12-25 22:01:26,003 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] +2023-12-25 22:01:26,003 [INFO] ThirdParty:835 - entering critical section [change project] +2023-12-25 22:01:26,003 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 +2023-12-25 22:01:26,003 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 +2023-12-25 22:01:26,003 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 +2023-12-25 22:01:26,004 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 +2023-12-25 22:01:26,005 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 +2023-12-25 22:01:26,006 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 +2023-12-25 22:01:26,007 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 +2023-12-25 22:01:26,007 [INFO] ThirdParty:841 - exiting critical section [change project] +2023-12-25 22:01:26,170 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 22:01:26,171 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) +2023-12-25 22:01:26,415 [INFO] UtilMem:75 - Before build in PCC Used Memory: 651797328 Bytes (1073741824) +2023-12-25 22:01:26,663 [INFO] UtilMem:75 - After build in PCC Used Memory: 694262608 Bytes (1073741824) +2023-12-25 22:01:26,671 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE +2023-12-25 22:01:26,692 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,693 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,694 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,695 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,696 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,697 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,697 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,697 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,698 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:01:26,741 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 +2023-12-25 22:01:26,741 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 22:01:26,777 [INFO] OpenFileManager:328 - Restore cursor +2023-12-25 22:04:12,617 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2023-12-25 22:09:23,769 [INFO] Activator:176 - + + +2023-12-25 22:09:23,771 [INFO] Activator:177 - !SESSION log4j initialized +2023-12-25 22:09:27,240 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] +2023-12-25 22:09:27,795 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 22:09:29,832 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 22:09:30,596 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 22:09:30,615 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 22:09:30,616 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 22:09:30,616 [WARN] ApiDb:259 - Overriding images path with different value: => /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 22:09:30,627 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 22:09:30,628 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 22:09:30,631 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 22:09:30,930 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) +2023-12-25 22:09:31,060 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 22:09:31,060 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 22:09:31,060 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,061 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,061 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,061 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,061 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 22:09:31,146 [INFO] MainPanel:262 - HeapMemory: 268435456 +2023-12-25 22:09:31,277 [INFO] DbMcusXml:78 - Set database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-12-25 22:09:31,278 [INFO] ApiDb:274 - Set plugin database path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-12-25 22:09:31,278 [INFO] ApiDb:261 - Set plugin images path to: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-12-25 22:09:31,282 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,282 [INFO] ApiDb:250 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 22:09:31,283 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,283 [INFO] DbMcusAds:125 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/ +2023-12-25 22:09:31,283 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,283 [WARN] DbFile:41 - Overriding database path with different value: /Users/haotian/.stmcufinder/plugins/mcufinder/ => /Users/haotian/.stmcufinder/plugins/mcufinder +2023-12-25 22:09:31,283 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /Users/haotian/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-12-25 22:09:31,365 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 22:09:31,370 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] +2023-12-25 22:09:31,372 [INFO] PluginManage:310 - Check plugin analytics +2023-12-25 22:09:31,687 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: +2023-12-25 22:09:31,688 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: +2023-12-25 22:09:31,688 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: +2023-12-25 22:09:31,694 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) +2023-12-25 22:09:31,695 [INFO] PluginManage:310 - Check plugin cadmodel +2023-12-25 22:09:32,597 [INFO] CADModel:105 - Init CAD model plugin +2023-12-25 22:09:32,597 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) +2023-12-25 22:09:32,598 [INFO] PluginManage:310 - Check plugin clock +2023-12-25 22:09:32,614 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) +2023-12-25 22:09:32,614 [INFO] PluginManage:310 - Check plugin ddr +2023-12-25 22:09:32,617 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) +2023-12-25 22:09:32,617 [INFO] PluginManage:310 - Check plugin filemanager +2023-12-25 22:09:32,801 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) +2023-12-25 22:09:32,802 [INFO] PluginManage:310 - Check plugin ipmanager +2023-12-25 22:09:32,811 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) +2023-12-25 22:09:32,812 [INFO] PluginManage:310 - Check plugin lpbam +2023-12-25 22:09:32,824 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) +2023-12-25 22:09:32,824 [INFO] PluginManage:310 - Check plugin memorymap +2023-12-25 22:09:32,842 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) +2023-12-25 22:09:32,842 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration +2023-12-25 22:09:32,851 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) +2023-12-25 22:09:32,851 [INFO] PluginManage:310 - Check plugin pinoutconfig +2023-12-25 22:09:32,960 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. +2023-12-25 22:09:33,170 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) +2023-12-25 22:09:33,171 [INFO] PluginManage:310 - Check plugin power +2023-12-25 22:09:33,184 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) +2023-12-25 22:09:33,185 [INFO] PluginManage:310 - Check plugin projectmanager +2023-12-25 22:09:33,202 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) +2023-12-25 22:09:33,202 [INFO] PluginManage:310 - Check plugin thirdparty +2023-12-25 22:09:33,365 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) +2023-12-25 22:09:33,365 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] +2023-12-25 22:09:33,365 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] +2023-12-25 22:09:33,365 [INFO] PluginManage:310 - Check plugin tools +2023-12-25 22:09:33,366 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] +2023-12-25 22:09:33,368 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) +2023-12-25 22:09:33,368 [INFO] PluginManage:310 - Check plugin tutovideos +2023-12-25 22:09:33,683 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) +2023-12-25 22:09:33,684 [INFO] PluginManage:310 - Check plugin updater +2023-12-25 22:09:33,713 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) +2023-12-25 22:09:33,713 [INFO] PluginManage:310 - Check plugin userauth +2023-12-25 22:09:33,724 [INFO] UserAuth:113 - Init User Auth plugin +2023-12-25 22:09:33,725 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) +2023-12-25 22:09:33,727 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] +2023-12-25 22:09:34,059 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 22:09:34,251 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 22:09:34,251 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 22:09:34,266 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,268 [INFO] PluginManager:220 - loadIPPluginJar : add mdma +2023-12-25 22:09:34,280 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,280 [INFO] PluginManager:220 - loadIPPluginJar : add freertos +2023-12-25 22:09:34,287 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,287 [INFO] PluginManager:220 - loadIPPluginJar : add gic +2023-12-25 22:09:34,302 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,303 [INFO] PluginManager:220 - loadIPPluginJar : add adc +2023-12-25 22:09:34,308 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,308 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc +2023-12-25 22:09:34,310 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,311 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi +2023-12-25 22:09:34,316 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,317 [INFO] PluginManager:220 - loadIPPluginJar : add aes +2023-12-25 22:09:34,321 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,321 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm +2023-12-25 22:09:34,325 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,326 [INFO] PluginManager:220 - loadIPPluginJar : add hash +2023-12-25 22:09:34,330 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,330 [INFO] PluginManager:220 - loadIPPluginJar : add tim +2023-12-25 22:09:34,332 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,332 [INFO] PluginManager:220 - loadIPPluginJar : add tsc +2023-12-25 22:09:34,335 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,335 [INFO] PluginManager:220 - loadIPPluginJar : add ts +2023-12-25 22:09:34,341 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,341 [INFO] PluginManager:220 - loadIPPluginJar : add can +2023-12-25 22:09:34,347 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,348 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 +2023-12-25 22:09:34,352 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,352 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm +2023-12-25 22:09:34,358 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,359 [INFO] PluginManager:220 - loadIPPluginJar : add spi +2023-12-25 22:09:34,366 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,367 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu +2023-12-25 22:09:34,369 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,369 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin +2023-12-25 22:09:34,377 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,377 [INFO] PluginManager:220 - loadIPPluginJar : add cryp +2023-12-25 22:09:34,413 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,414 [INFO] PluginManager:220 - loadIPPluginJar : add gpio +2023-12-25 22:09:34,419 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,419 [INFO] PluginManager:220 - loadIPPluginJar : add comp +2023-12-25 22:09:34,427 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,430 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb +2023-12-25 22:09:34,436 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,437 [INFO] PluginManager:220 - loadIPPluginJar : add openamp +2023-12-25 22:09:34,454 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,454 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan +2023-12-25 22:09:34,468 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,473 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings +2023-12-25 22:09:34,479 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,479 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr +2023-12-25 22:09:34,482 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,483 [INFO] PluginManager:220 - loadIPPluginJar : add usart +2023-12-25 22:09:34,484 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,484 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc +2023-12-25 22:09:34,488 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,489 [INFO] PluginManager:220 - loadIPPluginJar : add nvic +2023-12-25 22:09:34,490 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,490 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs +2023-12-25 22:09:34,500 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,500 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist +2023-12-25 22:09:34,505 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,505 [INFO] PluginManager:220 - loadIPPluginJar : add dma +2023-12-25 22:09:34,510 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,510 [INFO] PluginManager:220 - loadIPPluginJar : add fmc +2023-12-25 22:09:34,512 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,513 [INFO] PluginManager:220 - loadIPPluginJar : add i2s +2023-12-25 22:09:34,515 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,515 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd +2023-12-25 22:09:34,517 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,517 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan +2023-12-25 22:09:34,520 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,520 [INFO] PluginManager:220 - loadIPPluginJar : add opamp +2023-12-25 22:09:34,523 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,523 [INFO] PluginManager:220 - loadIPPluginJar : add i3c +2023-12-25 22:09:34,528 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,528 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing +2023-12-25 22:09:34,530 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,530 [INFO] PluginManager:220 - loadIPPluginJar : add i2c +2023-12-25 22:09:34,535 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,535 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility +2023-12-25 22:09:34,537 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,538 [INFO] PluginManager:220 - loadIPPluginJar : add sai +2023-12-25 22:09:34,540 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:09:34,540 [INFO] PluginManager:220 - loadIPPluginJar : add usbx +2023-12-25 22:09:34,641 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 22:09:34,641 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 22:09:34,641 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:34,642 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-12-25 22:09:34,925 [INFO] CADModel:165 - CPN selected for project level +2023-12-25 22:09:34,925 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 22:09:34,925 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:34,925 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-12-25 22:09:34,929 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:35,100 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:35,112 [INFO] DbMcusAds:53 - JSON generation date=Wed Nov 29 02:52:27 PST 2023 (1701255147349) +2023-12-25 22:09:35,113 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:35,247 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-12-25 22:09:35,407 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:35,410 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:35,410 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:35,410 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-12-25 22:09:35,411 [FATAL] Updater:308 - Updater called before beeing initialized +2023-12-25 22:09:35,445 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. +2023-12-25 22:09:35,484 [INFO] Updater:1056 - Updater Version found : 6.9.2 +2023-12-25 22:09:35,506 [INFO] ApplicationProperties:184 - Using Application install path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-12-25 22:09:35,698 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 22:09:35,698 [INFO] MainUpdater:285 - Updater Check For Update Now. +2023-12-25 22:09:35,698 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 22:09:35,703 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-12-25 22:09:35,704 [INFO] UserAuth:179 - activating auth plugin +2023-12-25 22:09:35,710 [INFO] UserAuth:393 - Internet connection configuration mode: 1 +2023-12-25 22:09:35,732 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder +2023-12-25 22:09:35,948 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread +2023-12-25 22:09:36,759 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 +2023-12-25 22:09:36,769 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.23.0 +2023-12-25 22:09:36,858 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 +2023-12-25 22:09:36,877 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 +2023-12-25 22:09:36,888 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 +2023-12-25 22:09:36,904 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 +2023-12-25 22:09:36,929 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 +2023-12-25 22:09:36,945 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 +2023-12-25 22:09:36,951 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 +2023-12-25 22:09:36,996 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 22:09:36,998 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 22:09:36,999 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 22:09:37,000 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 22:09:37,000 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-12-25 22:09:37,016 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 +2023-12-25 22:09:37,041 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 +2023-12-25 22:09:37,052 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 +2023-12-25 22:09:37,067 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 +2023-12-25 22:09:37,116 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 +2023-12-25 22:09:37,131 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 +2023-12-25 22:09:37,154 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 +2023-12-25 22:09:37,166 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 +2023-12-25 22:09:37,266 [WARN] PackLoader:240 - Cannot read IP mode file for SEGGER.I-CUBE-embOS.1.3.1 +2023-12-25 22:09:37,445 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 +2023-12-25 22:09:37,566 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 +2023-12-25 22:09:37,576 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.6 +2023-12-25 22:09:37,610 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 +2023-12-25 22:09:37,628 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 +2023-12-25 22:09:37,640 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 +2023-12-25 22:09:37,649 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.2.0.0 +2023-12-25 22:09:37,661 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 +2023-12-25 22:09:37,687 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.1.0 +2023-12-25 22:09:37,732 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 +2023-12-25 22:09:37,815 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 22:09:37,839 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 +2023-12-25 22:09:37,861 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 22:09:37,880 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 22:09:37,881 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-12-25 22:09:37,971 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 +2023-12-25 22:09:38,010 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 +2023-12-25 22:09:38,060 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 22:09:38,073 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 22:09:38,096 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 +2023-12-25 22:09:38,114 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 22:09:38,142 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 22:09:38,143 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 22:09:38,164 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 22:09:38,184 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-12-25 22:09:38,197 [INFO] WebApp:157 - Instantiating new browser for Auth +2023-12-25 22:09:38,213 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 +2023-12-25 22:09:38,310 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 +2023-12-25 22:09:38,426 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 +2023-12-25 22:09:38,545 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 +2023-12-25 22:09:38,598 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENVWB1.1.3.1 +2023-12-25 22:09:38,661 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.2.0.0 +2023-12-25 22:09:38,725 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 +2023-12-25 22:09:38,804 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 +2023-12-25 22:09:38,883 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 +2023-12-25 22:09:38,905 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 +2023-12-25 22:09:38,973 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.4.0 +2023-12-25 22:09:39,088 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.2.0 +2023-12-25 22:09:39,094 [INFO] ThirdParty:978 - Integrity check success = true +2023-12-25 22:09:39,094 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] +2023-12-25 22:09:39,094 [INFO] IntegrityCheckThread:103 - End integrity checks thread +2023-12-25 22:09:39,874 [INFO] WebApp:753 - Register for checkConnection events +2023-12-25 22:09:39,874 [INFO] WebApp:390 - Apply proxy settings +2023-12-25 22:09:39,877 [INFO] WebApp:455 - Chromium authenticates against System proxy +2023-12-25 22:09:40,097 [INFO] WebApp:188 - Starting web application +2023-12-25 22:09:40,098 [INFO] WebApp:520 - Web application path used /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html +2023-12-25 22:10:00,883 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". +2023-12-25 22:10:00,884 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation +2023-12-25 22:10:00,884 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. +2023-12-25 22:12:43,849 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-12-25 22:12:43,855 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 22:12:43,855 [INFO] MainUpdater:2868 - connection check result : 10 +2023-12-25 22:12:44,407 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 22:12:44,407 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 22:12:44,412 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] +2023-12-25 22:12:44,412 [INFO] ThirdParty:873 - entering critical section [close project] +2023-12-25 22:12:44,413 [INFO] ThirdParty:883 - exiting critical section [close project] +2023-12-25 22:12:44,416 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 22:12:44,425 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 858483552 Bytes (1073741824) +2023-12-25 22:12:44,427 [INFO] MicroXplorer:468 - Change Database Path : +2023-12-25 22:12:44,427 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-12-25 22:12:44,427 [INFO] OpenFileManager:308 - Change cursor +2023-12-25 22:12:44,453 [INFO] Mcu:1946 - Initializing MCU STM32F103C(8-B)Tx STM32F103C8Tx STM32F103C8T6 +2023-12-25 22:12:45,145 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden +2023-12-25 22:12:45,485 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 22:12:45,485 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 22:12:45,485 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS +2023-12-25 22:12:45,486 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS +2023-12-25 22:12:45,486 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: +2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,519 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,520 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,521 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,522 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-12-25 22:12:45,561 [INFO] ThirdPartyModel:298 - Start build external matchings +2023-12-25 22:12:46,109 [INFO] ThirdPartyModel:316 - End build external matchings +2023-12-25 22:12:46,117 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) +2023-12-25 22:12:46,118 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Parameter (MCOFreq_Value) has invalid value (72000000) +2023-12-25 22:12:46,317 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 629329112 Bytes (1073741824) +2023-12-25 22:12:46,733 [INFO] ApiDb:581 - Connected to CubeFinder SQLite database (/Users/haotian/.stmcufinder/plugins/mcufinder/mcu/cube-finder-db.db) +2023-12-25 22:12:46,810 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 +2023-12-25 22:12:46,810 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.39 +2023-12-25 22:12:46,811 [INFO] ApiDb:670 - CubeFinder database generation date=2023-12-08 (1702028721) +2023-12-25 22:12:46,811 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-MOTENVWB1_V1.3.1, FP-SNS-SMARTAG2_V1.2.0, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.28.0, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H5_V1.2.0RC2, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_U5_V1.4.0, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.2.0, STM32Cube_FW_WBA_V1.2.0RC2, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.18.0, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V3.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-EEPRMA1_V4.2.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.4.0] +2023-12-25 22:12:50,063 [INFO] ApiDb:240 - Found 323 in-development CPN: [B-G473E-ZEST1S, B-WB1M-WPAN1, B-WL5M-SUBG1, NUCLEO-C031C6, NUCLEO-H503RB, NUCLEO-H563ZI, NUCLEO-U545RE-Q, NUCLEO-U5A5ZJ-Q, NUCLEO-WBA52CG, STEVAL-PROTEUS1, STEVAL-SMARTAG2, STEVAL-STWINBX1, STM320518-EVAL, STM32C0116-DK, STM32C011D6Y3TR, STM32C011D6Y6TR, STM32C011F4P3, STM32C011F4P6, STM32C011F4U3, STM32C011F4U6TR, STM32C011F6P3, STM32C011F6P6, STM32C011F6U3, STM32C011F6U6TR, STM32C011J4M3, STM32C011J4M6, STM32C011J6M3, STM32C011J6M6, STM32C0316-DK, STM32C031C4T3, STM32C031C4T6, STM32C031C4U3, STM32C031C4U6, STM32C031C6T3, STM32C031C6T6, STM32C031C6U3, STM32C031C6U6, STM32C031F4P3, STM32C031F4P6, STM32C031F6P3, STM32C031F6P6, STM32C031G4U3, STM32C031G4U6, STM32C031G6U3, STM32C031G6U6, STM32C031K4T3, STM32C031K4T6, STM32C031K4U3, STM32C031K4U6, STM32C031K6T3, STM32C031K6T6, STM32C031K6U3, STM32C031K6U6, STM32G071K8TXN, STM32G071K8UXN, STM32G081GBU6N, STM32G081KBT6N, STM32G081KBUXN, STM32G0B1CCT6N, STM32G0B1KCT6, STM32G0B1NEY6TR, STM32G0B1RCT6N, STM32G0C1CCT6, STM32G0C1CCT6N, STM32G0C1CCU6N, STM32G0C1CET6N, STM32G0C1CEU6N, STM32G0C1KCT6, STM32G0C1NEY6TR, STM32G0C1RCI6N, STM32G0C1RCT6N, STM32G0C1REI6N, STM32G0C1RET6N, STM32G0C1VCI6, STM32G0C1VEI6, STM32G471CCT6, STM32G471CCU6, STM32G471CET3, STM32G471CET6, STM32G471CEU3, STM32G471CEU6, STM32G471MCT6, STM32G471MET3, STM32G471MET6, STM32G471MEY6TR, STM32G471QCT6, STM32G471QET3, STM32G471RCT6, STM32G471RET3, STM32G471RET6, STM32G471VCH6, STM32G471VCI6, STM32G471VCT6, STM32G471VEH3, STM32G471VEH6, STM32G471VEI3, STM32G471VEI6, STM32G471VET3, STM32G471VET6, STM32G474CCT6, STM32H503CBT6, STM32H503CBU6, STM32H503EBY6TR, STM32H503KBU6, STM32H503RBT6, STM32H562AGI6, STM32H562AII6, STM32H562IGK6, STM32H562IGT6, STM32H562IIK6, STM32H562IIT6, STM32H562RGT6, STM32H562RGV6, STM32H562RIT6, STM32H562RIV6, STM32H562VGT6, STM32H562VIT6, STM32H562ZGT6, STM32H562ZIT6, STM32H563AGI6, STM32H563AII3Q, STM32H563AII6, STM32H563IGK6, STM32H563IGT6, STM32H563IIK3Q, STM32H563IIK6, STM32H563IIT3Q, STM32H563IIT6, STM32H563MIY3QTR, STM32H563RGT6, STM32H563RGV6, STM32H563RIT6, STM32H563RIV6, STM32H563VGT6, STM32H563VIT3Q, STM32H563VIT6, STM32H563ZGT6, STM32H563ZIT3Q, STM32H563ZIT6, STM32H573AII3Q, STM32H573AII6, STM32H573I-DK, STM32H573IIK3Q, STM32H573IIK6, STM32H573IIT3Q, STM32H573IIT6, STM32H573MIY3QTR, STM32H573RIT6, STM32H573RIV6, STM32H573VIT3Q, STM32H573VIT6, STM32H573ZIT3Q, STM32H573ZIT6, STM32L4R5QGI6STR, STM32MP131AAE3, STM32MP131AAF3, STM32MP131AAG3, STM32MP131CAE3, STM32MP131CAF3, STM32MP131CAG3, STM32MP131DAE7, STM32MP131DAF7, STM32MP131DAG7, STM32MP131FAE7, STM32MP131FAF7, STM32MP131FAG7, STM32MP133AAE3, STM32MP133AAF3, STM32MP133AAG3, STM32MP133CAE3, STM32MP133CAF3, STM32MP133CAG3, STM32MP133DAE7, STM32MP133DAF7, STM32MP133DAG7, STM32MP133FAE7, STM32MP133FAF7, STM32MP133FAG7, STM32MP135AAE3, STM32MP135AAF3, STM32MP135AAG3, STM32MP135CAE3, STM32MP135CAF3, STM32MP135CAG3, STM32MP135DAE7, STM32MP135DAF7, STM32MP135DAG7, STM32MP135F-DK, STM32MP135FAE7, STM32MP135FAF7, STM32MP135FAF7T, STM32MP135FAF7U, STM32MP135FAG7, STM32U535CBT6, STM32U535CBT6Q, STM32U535CBU6, STM32U535CBU6Q, STM32U535CCT6, STM32U535CCT6Q, STM32U535CCU6, STM32U535CCU6Q, STM32U535CET6, STM32U535CET6Q, STM32U535CEU6, STM32U535CEU6Q, STM32U535JEY6QTR, STM32U535NCY6QTR, STM32U535NEY6QTR, STM32U535RBI6, STM32U535RBI6Q, STM32U535RBT6, STM32U535RBT6Q, STM32U535RCI6, STM32U535RCI6Q, STM32U535RCT6, STM32U535RCT6Q, STM32U535REI6, STM32U535REI6Q, STM32U535RET6, STM32U535RET6Q, STM32U535VCI6, STM32U535VCI6Q, STM32U535VCT6, STM32U535VCT6Q, STM32U535VEI6, STM32U535VEI6Q, STM32U535VET6, STM32U535VET6Q, STM32U545CET6, STM32U545CET6Q, STM32U545CEU6, STM32U545CEU6Q, STM32U545JEY6QTR, STM32U545NEY6QTR, STM32U545REI6, STM32U545REI6Q, STM32U545RET6, STM32U545RET6Q, STM32U545VEI6, STM32U545VEI6Q, STM32U545VET6, STM32U545VET6Q, STM32U595AIH6, STM32U595AIH6Q, STM32U595AJH6, STM32U595AJH6Q, STM32U595QII6, STM32U595QII6Q, STM32U595QJI6, STM32U595QJI6Q, STM32U595RIT6, STM32U595RIT6Q, STM32U595RJT6, STM32U595RJT6Q, STM32U595VIT6, STM32U595VIT6Q, STM32U595VJT6, STM32U595VJT6Q, STM32U595ZIT6, STM32U595ZIT6Q, STM32U595ZIY6QTR, STM32U595ZJT6, STM32U595ZJT6Q, STM32U595ZJY6QTR, STM32U599BJY6QTR, STM32U599NIH6Q, STM32U599NJH6Q, STM32U599VIT6Q, STM32U599VJT6, STM32U599VJT6Q, STM32U599ZIT6Q, STM32U599ZIY6QTR, STM32U599ZJT6Q, STM32U599ZJY6QTR, STM32U5A5AJH6, STM32U5A5AJH6Q, STM32U5A5QJI6, STM32U5A5QJI6Q, STM32U5A5RJT6, STM32U5A5RJT6Q, STM32U5A5VJT6, STM32U5A5VJT6Q, STM32U5A5ZJT6, STM32U5A5ZJT6Q, STM32U5A5ZJY6QTR, STM32U5A9BJY6QTR, STM32U5A9J-DK, STM32U5A9NJH6Q, STM32U5A9VJT6Q, STM32U5A9ZJT6Q, STM32U5A9ZJY6QTR, STM32U5F7VIT6, STM32U5F7VIT6Q, STM32U5F7VJT6, STM32U5F7VJT6Q, STM32U5F9BJY6QTR, STM32U5F9NJH6Q, STM32U5F9VIT6Q, STM32U5F9VJT6Q, STM32U5F9ZIJ6QTR, STM32U5F9ZIT6Q, STM32U5F9ZJJ6QTR, STM32U5F9ZJT6Q, STM32U5G7VJT6, STM32U5G7VJT6Q, STM32U5G9BJY6QTR, STM32U5G9J-DK1, STM32U5G9J-DK2, STM32U5G9NJH6Q, STM32U5G9VJT6Q, STM32U5G9ZJJ6QTR, STM32U5G9ZJT6Q, STM32WB1MMCH6, STM32WBA52CEU6, STM32WBA52CEU6T, STM32WBA52CGU6, STM32WBA52CGU6T, STM32WBA52KEU6, STM32WBA52KEU6T, STM32WBA52KGU6, STM32WBA52KGU6T, STM32WL5MOCH6, STM32WL5MOCH6TR] +2023-12-25 22:12:50,071 [INFO] DbMcus:217 - Found 3882 MCUs, 3882 are supported +2023-12-25 22:12:50,072 [INFO] ApiDb:423 - Load user favorites file /Users/haotian/.stm32cubeide/favorites.mcus.txt: 0 item(s) +2023-12-25 22:12:50,072 [INFO] ApiDb:427 - User favorites MCUs=[] +2023-12-25 22:12:50,073 [INFO] DbMcus:223 - Set 0 / 0 favorites MCUs +2023-12-25 22:12:50,921 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] +2023-12-25 22:12:50,921 [INFO] ThirdParty:835 - entering critical section [change project] +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 +2023-12-25 22:12:50,921 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.6 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.23.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 2.0.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 +2023-12-25 22:12:50,922 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENVWB1 1.3.1 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 +2023-12-25 22:12:50,923 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 2.0.0 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.1.0 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 +2023-12-25 22:12:50,924 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :SEGGER I-CUBE-embOS 1.3.1 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.4.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.2.0 +2023-12-25 22:12:50,925 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 +2023-12-25 22:12:50,926 [INFO] ThirdParty:841 - exiting critical section [change project] +2023-12-25 22:12:51,456 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-12-25 22:12:51,458 [INFO] PinOutPanel:1499 - setPackage(STM32F103C8Tx,LQFP48) +2023-12-25 22:12:52,726 [INFO] UtilMem:75 - Before build in PCC Used Memory: 856596480 Bytes (1073741824) +2023-12-25 22:12:54,200 [INFO] UtilMem:75 - After build in PCC Used Memory: 694491080 Bytes (1073741824) +2023-12-25 22:12:54,398 [INFO] ApiDbMcu:507 - Load IP Config File for USB_DEVICE +2023-12-25 22:12:54,462 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,462 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,463 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,464 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,464 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,465 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,467 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,467 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,469 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,469 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,470 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,470 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,471 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,471 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,472 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,472 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,472 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,473 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,474 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,474 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,475 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,475 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,476 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,476 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-12-25 22:12:54,860 [INFO] CADModel:165 - CPN selected for project levelSTM32F103C8T6 +2023-12-25 22:12:54,860 [INFO] CADModel:114 - Register for checkConnection events +2023-12-25 22:12:54,904 [INFO] OpenFileManager:328 - Restore cursor +2023-12-25 22:13:07,871 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 675653296 Bytes (1073741824) +2023-12-25 22:13:08,764 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI +2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE +2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB +2023-12-25 22:13:08,765 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-12-25 22:13:08,766 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-12-25 22:13:08,766 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC +2023-12-25 22:13:08,766 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-12-25 22:13:08,767 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-12-25 22:13:09,359 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp_save +2023-12-25 22:13:09,946 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp +2023-12-25 22:13:10,017 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp_save +2023-12-25 22:13:10,177 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp +2023-12-25 22:13:10,303 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp_save +2023-12-25 22:13:10,444 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp +2023-12-25 22:13:10,447 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp_save +2023-12-25 22:13:10,562 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp +2023-12-25 22:13:10,564 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp_save +2023-12-25 22:13:10,693 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp +2023-12-25 22:13:10,695 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp_save +2023-12-25 22:13:10,841 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp +2023-12-25 22:13:11,748 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 22:13:11,760 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 22:13:11,769 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c_save +2023-12-25 22:13:12,006 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c +2023-12-25 22:13:12,011 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h_save +2023-12-25 22:13:12,173 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h +2023-12-25 22:13:12,178 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h_save +2023-12-25 22:13:12,326 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h +2023-12-25 22:13:12,331 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c_save +2023-12-25 22:13:12,518 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c +2023-12-25 22:13:12,524 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h_save +2023-12-25 22:13:12,626 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h +2023-12-25 22:13:12,631 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c_save +2023-12-25 22:13:12,824 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c +2023-12-25 22:13:12,832 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h_save +2023-12-25 22:13:13,045 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h +2023-12-25 22:13:13,052 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c_save +2023-12-25 22:13:13,222 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c +2023-12-25 22:13:13,236 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c_save +2023-12-25 22:13:13,371 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c +2023-12-25 22:13:13,376 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h_save +2023-12-25 22:13:13,468 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h +2023-12-25 22:13:13,477 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c_save +2023-12-25 22:13:13,619 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c +2023-12-25 22:13:13,622 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp_save +2023-12-25 22:13:13,703 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp +2023-12-25 22:13:13,709 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h_save +2023-12-25 22:13:13,798 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h +2023-12-25 22:13:13,835 [WARN] IPConfigManager:3431 - IP not found : TIM +2023-12-25 22:13:13,836 [WARN] CodeGenerator:3764 - IP not found : null +2023-12-25 22:13:13,840 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h_save +2023-12-25 22:13:13,933 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h +2023-12-25 22:13:13,936 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c_save +2023-12-25 22:13:14,124 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c +2023-12-25 22:13:14,948 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 176mS. +2023-12-25 22:13:14,974 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-12-25 22:13:15,558 [INFO] ConfigFileManager:1457 - The Die is : DIE410 +2023-12-25 22:13:15,582 [INFO] ApiDbMcu:507 - Load IP Config File for FATFS +2023-12-25 22:13:15,667 [INFO] ApiDbMcu:507 - Load IP Config File for FREERTOS +2023-12-25 22:13:17,095 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-12-25 22:13:18,229 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 3254mS. +2023-12-25 22:13:18,230 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 1mS. +2023-12-25 22:13:18,232 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 22:13:18,380 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] +2023-12-25 22:13:22,975 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 776797712 Bytes (1073741824) +2023-12-25 22:13:24,105 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 796562160 Bytes (1073741824) +2023-12-25 22:13:24,354 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 717187344 Bytes (1073741824) +2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SPI +2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 22:13:24,904 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: TIM1_8F1 +2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB_DEVICE +2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USB +2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-12-25 22:13:24,905 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: ADC +2023-12-25 22:13:24,906 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-12-25 22:13:24,906 [INFO] CodeGenerator:799 - code generatio: config db path: /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-12-25 22:13:25,133 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp_save +2023-12-25 22:13:25,232 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/license.tmp +2023-12-25 22:13:25,274 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp_save +2023-12-25 22:13:25,369 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/gpio.tmp +2023-12-25 22:13:25,487 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp_save +2023-12-25 22:13:25,612 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_vars.tmp +2023-12-25 22:13:25,615 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp_save +2023-12-25 22:13:25,707 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_inc.tmp +2023-12-25 22:13:25,709 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp_save +2023-12-25 22:13:25,810 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_HalInit.tmp +2023-12-25 22:13:25,812 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp_save +2023-12-25 22:13:25,918 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/usb_Msp.tmp +2023-12-25 22:13:26,461 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 22:13:26,469 [INFO] Middleware:1439 - No code input for Bsp Dependency +2023-12-25 22:13:26,474 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c_save +2023-12-25 22:13:26,553 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.c +2023-12-25 22:13:26,555 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h_save +2023-12-25 22:13:26,621 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usb_device.h +2023-12-25 22:13:26,624 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h_save +2023-12-25 22:13:26,691 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.h +2023-12-25 22:13:26,694 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c_save +2023-12-25 22:13:26,766 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/Target/usbd_conf.c +2023-12-25 22:13:26,769 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h_save +2023-12-25 22:13:26,834 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.h +2023-12-25 22:13:26,837 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c_save +2023-12-25 22:13:26,913 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_desc.c +2023-12-25 22:13:26,917 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h_save +2023-12-25 22:13:26,984 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.h +2023-12-25 22:13:26,987 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c_save +2023-12-25 22:13:27,062 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/USB_DEVICE/App/usbd_cdc_if.c +2023-12-25 22:13:27,070 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c_save +2023-12-25 22:13:27,141 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_it.c +2023-12-25 22:13:27,144 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h_save +2023-12-25 22:13:27,203 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_it.h +2023-12-25 22:13:27,210 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c_save +2023-12-25 22:13:27,302 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/stm32f1xx_hal_msp.c +2023-12-25 22:13:27,304 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp_save +2023-12-25 22:13:27,362 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/MXTmpFiles/system.tmp +2023-12-25 22:13:27,366 [INFO] CodeEngine:311 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h_save +2023-12-25 22:13:27,433 [INFO] CodeEngine:335 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/stm32f1xx_hal_conf.h +2023-12-25 22:13:27,459 [WARN] IPConfigManager:3431 - IP not found : TIM +2023-12-25 22:13:27,460 [WARN] CodeGenerator:3764 - IP not found : null +2023-12-25 22:13:27,464 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h_save +2023-12-25 22:13:27,536 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Inc/main.h +2023-12-25 22:13:27,539 [INFO] CodeEngine:255 - oldGeneratedFile, /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c_save +2023-12-25 22:13:27,688 [INFO] CodeEngine:279 - Generated code: /Users/haotian/Documents/DengFOC_on_STM32/SVPWM/Core/Src/main.c +2023-12-25 22:13:28,809 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 156mS. +2023-12-25 22:13:28,819 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-12-25 22:13:29,268 [INFO] ConfigFileManager:1457 - The Die is : DIE410 +2023-12-25 22:13:31,751 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 2932mS. +2023-12-25 22:13:31,752 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 1mS. +2023-12-25 22:13:31,755 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-12-25 22:25:48,102 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] diff --git a/.metadata/.log b/.metadata/.log index fff7451..20ccc9d 100644 --- a/.metadata/.log +++ b/.metadata/.log @@ -570,3 +570,29 @@ Project's 'SVPWM' active one is 'SVPWM.ioc' file !MESSAGE Invalid Input: Must be project's active .ioc file. Project's 'SVPWM' active one is 'SVPWM.ioc' file +!SESSION 2024-01-27 22:36:16.844 ----------------------------------------------- +eclipse.buildId=Version 1.13.2 +java.version=17.0.6 +java.vendor=Eclipse Adoptium +BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US +Framework arguments: -keyring /Users/haotian/.eclipse_keyring +Command-line arguments: -os macosx -ws cocoa -arch x86_64 -keyring /Users/haotian/.eclipse_keyring + +!ENTRY com.st.stm32cube.ide.mcu.informationcenter 1 1 2024-01-27 22:36:36.963 +!MESSAGE Log4j2 initialized with config file /Users/haotian/Documents/DengFOC_on_STM32/.metadata/.log4j2.xml + +!ENTRY com.st.stm32cube.ide.mcu.ide 1 1 2024-01-27 22:36:43.873 +!MESSAGE Started RMI Server, listening on port 41337 +!SESSION 2024-01-27 22:45:29.234 ----------------------------------------------- +eclipse.buildId=Version 1.13.2 +java.version=17.0.6 +java.vendor=Eclipse Adoptium +BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US +Framework arguments: -keyring /Users/haotian/.eclipse_keyring +Command-line arguments: -os macosx -ws cocoa -arch x86_64 -keyring /Users/haotian/.eclipse_keyring + +!ENTRY com.st.stm32cube.ide.mcu.informationcenter 1 1 2024-01-27 22:45:35.661 +!MESSAGE Log4j2 initialized with config file /Users/haotian/Documents/DengFOC_on_STM32/.metadata/.log4j2.xml + +!ENTRY com.st.stm32cube.ide.mcu.ide 1 1 2024-01-27 22:45:43.085 +!MESSAGE Started RMI Server, listening on port 41337 diff --git a/.metadata/.plugins/org.eclipse.cdt.core/.log b/.metadata/.plugins/org.eclipse.cdt.core/.log index 8f1b428..f979fb9 100644 --- a/.metadata/.plugins/org.eclipse.cdt.core/.log +++ b/.metadata/.plugins/org.eclipse.cdt.core/.log @@ -5,3 +5,5 @@ *** SESSION Dec 25, 2023 14:04:42.693 ------------------------------------------ *** SESSION Dec 25, 2023 14:55:44.644 ------------------------------------------ *** SESSION Dec 25, 2023 22:09:23.911 ------------------------------------------ +*** SESSION Jan 27, 2024 22:36:37.501 ------------------------------------------ +*** SESSION Jan 27, 2024 22:45:36.174 ------------------------------------------ diff --git a/.metadata/.plugins/org.eclipse.cdt.core/SVPWM.1703571019738.pdom b/.metadata/.plugins/org.eclipse.cdt.core/SVPWM.1703571019738.pdom index c6b64b130ccbe49b18c49784a5526ecd71f2a5f3..2f4e8afad1f9fb9c2e4baf5771d92a21cbcd23be 100644 GIT binary patch delta 63458 zcmZr(2Y3}l*Pgrg=B7wVf%F0iHv~u{fe;ZwM?^}bNexX95F*k(Hh=>aRduI0T&gEmDC%O0T`_4IM&eYwVIh&tksB#DPeolYykv7L)=azo4Ykd4;E;DnF6Tx?-xL? z^YN#>g1660eP0uVife@kk-XDG#;P%1dIp5%={H^y1phlA^cV8&pT;t6kL`sEA9)Kb_GiW*Kw@o}Hp*-J zM=Mv2me`++A+5xE0ISS%LTudy7U#tn(n{=YU@m^f#E_fVKMiauu)2CysO`2xc#b?1 z=f%^aY-7U7H*weTC#@Hrs}=*#G5uhat({E}s^KRRktX51YNwcY)O}tv#&$vC6@?JO z9m01gnuHrXyoxPH;t&WK!qSr{nrg@uV|-2(+dzq*!nuk97Y4Yz3D*Ow+E!^=$6xea zakllEWc~qWjAe<-MV9E};%(8k`ji(EP3E~xaix8TdEwh6pLf{|6oBN>DXSGbCWE1K4@brA--ngEAUrv5X+72AM|LUXkT z4x31S@i$BxJ%dNrGz!$!3s@5aD+9KO&oZ$$fVG#{0WV;C`C}7%8(1#`3j%h6=hkw| zoC53(1FH(`7k<^mmH~U)z|hRRHt}|ewpAIzPpg1UF)-ML=IETZjwSVA6`KhhesL|6 z_`=tLx8(6jwjt67#lThxOcv*D;luSwZXcZizD?ldL+^+s!iV9>Zk+rMzZyRDj#wak zI32k3A>_H>SAk!J?tEUBZ0jy{KLU2y)a@NGLg*fnVjC#Z#-sdQ!XD<>jj~E!!f&S7 zI*7FKA;2j8BWC}sGh<&LVz#YWyhEx{H{#yjuEoJ)Jz@-d_ z{wux@V~*2jd0K5FU-9rU$sqX$OBnmIH+;H=uQKsrz##*;)^{rN4hm(yU7F~DX|^u1 z9mf9`1PB2^D&RuFgmkxpX+o(~a39~-GUuvl{GN$(oP!K9VBbc@&Q@YJewFvD<4%uW zBOWqL`3Hpjb0)qWIAl=zgCze8A-`!|clrZ32N^>CUdGOhWwr%*e4B}*WNePeb=EfTWuPSA~Sqa|hPTw8pvSfN;@2A4vaV9

KFPq;saoC&KUCMt8<3QrK%>HN?@7~`n|9zYrB;||z!FMRD6DGbG_!xo9 z{J|HP64ZaqwyZvy8rjPdk!N@QlI)Z}7W0ZR4kw~46Om^lf4n4u!MxKRydTvTak|+Y_u=p8tJt@e*p{PrNBg;OnMa< zrFF|4DdhGWV$|WJ0l;432ZtE#Aqluh13fd-AS;Gvz2TPi9x&p&Wi1u5w!Pu@&xgP$ zJ=ut^IB5g(`g|OZ9qP^l_(>##WH)BMn~V9Zp>Ek5aGuh;Wgio=wP9}Adw@}Tx9qQl z>=D34-D{vL3fUcU-LiiGM(N$M{}Hke0++JEPa+v) z_fW`Q!IR%~%l-%FDZP~KUA0umUiGFeOZY!I5*VeIvb|$(2-%O`wB01xf}cb(NcIfK zp2y3E+q%0)6z}lejHOOtTJMP%S#~g1JDk-S&m!%7_*=GYHw!Z@QT+r-Owy8PVRBfTB^5ER{=9gEs&KeqiDr&oO&i^o zC4I@9cAh#?W#vm*)S0C^z#2-vDsSg2M%wyRFwL4pEMA&y3+D-=Y^^L)mRP2cy~&+e zayK%iV3eu^7lt^*%uRd)@f0hk6^>R(n0X{GkyAJ#VH%fGn+3y-qiuaGg%>4@CUSIO zGM6%dh1mI>(YCYZWPl~#6f`m2N(p4%{x@05_spvqFBzk%yf1|vED^G3W|#6K^J&Jj z|D&*wo(!Y8oulX|=6@M1OJ;H)#Y+6_y%9 z3Ws~JkX$H4A<%&-U}`n?9Q@_MLV8nS0c15`sV`9$v;V7VoS!-m$G{?5>_Ea1+U*$!*GU{6SVOG@7_k zwf21@b)8zyQb*#Z1kZn0)rFL%uD>9qfTb=YU3WZK7c5;QEoB``T|>F+GhUT-L$dZ^ zyrScz7fbzw1vKMlJy_5}b|0E8StpLM)Eg|o&Ku|1rkYirYP#F5)LPKEm!e%&5iEMl&y4e?DlUt)R6@gN2|8 zr;{M$KJ7y_H&dh-%8kI&S=vg~=`(oi?=qvpSn3KSp2F<)cM6`@=8Y_UBJ;QNvG3ca zTDe{$SmMGX^(ZDsCs>^b3^b-WXe`D+#8Njh-xuybg`=4WybPavn9tqg0`G68#{g`m zzl`r|1a3niPg44PsJ6tE;QKm3i{rPzGDosh5->$vj zM{1LDDM(B#pqPkp?lPjpz(pOPx`G^v$p$7WtoAGTYryOkH!-$0op~)h%~<8TEEv<_ zIs(tcg)JuR4bf*DL4QC;P%?8c@5=niG~2X1LFx=4xPj{r!dg3oKxl9c=4T4&CKa_r z`L6kj`PSd}6pj{L8!}p+0zMb`?x%2ErPhXwmY)Id1bl~ybMG0ptPU&1PEzq2O%AVOp_q-6~NJ8{SPs=>OLRxfvr#)jwV`r28v)f&L3u8E1@9x zE(Gky#e{DZ{O9 zBR5@uL(oedfxrC>ygTp?%pM4@Eq}?t@3Zn|`W)bp(HeI-mxp=a9Yys@!wf&II|P(t zY}vPx5LQDGfazKqgtYDt{F7(kBZ2p0_IJ^Emv!Uo=h`B8uer7tMD0j>58yziWo-pm zj=&swz7Xd};ykQcdWnb6GwO8OBAkB@jj=AyFJfNbp=Ss?ZPn>C+=oaj1l|nz5ax9m z^*8K$1z!bx5%4#G*O$hIhbVXvaL9Q1Dq~9?dEh){zPm_vfV2ui&_I^_pFwKRB21T} zn9?Aq!AamVnDeh}#v)&!z74l3ssP)EKgf6<^=iq>z}q~97Xyck%;Ais4`NTfCl+D|CDACe9<>SLn1CzrlPyE`db_~obYQs9vBRe8o1{S6$I*(3cu;J2B*!#Ut5nO90D;J=7gmnV%b z1EG}JJ43;u86c2XBthbEcN&CzGZc6a=JOF5sN#=-L&i5%k!cP10#6+0SQ=z})044< zmw}UkB7L58d%6<@2oVDOo*}?b2xi})I2OJM97UiSkdB!H$)NO$BA<~y61X2c{{_<9 zm^d(>3SxZb0$WGXnA59(Qi0ifH(+eR0cQUb)i~;cXiLHe>D7QoGJD_8fzLKX{3)C$ z@dV&ifcF62m)U;-FWSYz+=ZB)0UR>Ey8}Fqd8J=8ao&5OQGL_vg9Jg}?Zjsm^Lf3% zBuOP%I1fSJmEdk2s`)P)p2C{~hYU*3uRkMwOCi_ZyEX8p$Ydp?zbG;pBo(0K(;?*M zA0TMF=^|T}^bV>_IuhT6vuUhbukx-`Viu2jX{ZEV)&XwMY{!8&rPvD*4-G0FP z!*K9o)+*lZ0~|7bvIB>A5|MEOmsKP<~WeZSk+T#_;geOHXMJDQ6GKr{AR#W3K9=B2;)G25Yh5~V`%xjaIvj^ z2a$NZ6d)S?U2631#75c)z{fHBl9bn``8Eeh3O?hWA4PvHxJ&t_UQ^v?Z=Y44(qdZfoyTKat8 z=;G&&1&)r%!1JVGD?wNY!Ws}-gK*s>NPI2urO4P>;N_S$7T%2w#CYw_7zUm6mCQb+ z9Ak4XGp{55z?+~{-1sKoYnc|)9{3XA;7L5s@C+g~S2SC^ZLI)7q zFmc2lz>LR@9|8U;JcK@ab|jW4JcIxhM>mju0Qh%|6|0(=5@FT#_0N)7wj>Iva zF)aKNgwJ8XWe|oL2Ha(+l?MJb@Y4{G1iaxhaLfzRzeF9n0Nfu6Zb5;X{tED~nSE+i z#y*5Gbi`F-d6tW=fq>@+Qz87rrEt+U5ZWqb_#^Nuz+VR57WfF@`3w#>4Ez~5WHj`~ zG>j=NqpPo~ID*f&d}Z^6K7YV$Agr@IVTo z)`yE6(fT~_zkuIm_NAC?))v z3R}Erlyxu`A&Gs}SbWZ6>?dEwsu!a`+~P16QJOyr@i_-LetY17I1d?rV4$c|$eh>F z=soaYoX0@47OkkxB56*-PF4Z(^Mu3dz_oP(L0F2l9_$kVc>3fM59 zCGad}UxmjeMej4`U<^DpudwoYCZRP57(Z9x*+0TXLuG0=ymY0gS!h-N1WNqjVE+vJNgC)?fzzexyN| zLz890fE?gmfPc=|L^Lou67MK@Kj64>SaTEjXA)1UrFdW<@Em6I`5pLssH8*DoNMJN zgdrgG1L1oRI)VTfdI-n`J`ngh;4a`OLl1le@F6e&6?DR%h5^HrN<0QQWW4YW@IB}? zP~TGWa6es8s{kB_KM2Vz00A@kH{fEr-)`dLfkQ|payp?G^KIDYDSU#IA$pCyve)oP zKN!TyRl8GUJrQ(`up!-1tYpmoa+;OwN0k@I0J|pq|~Za6NuQhy%5_ z&OI0~O5muD2EG};G3^*!g3mJM{CLGv_%{58jD~0Md4@Uf!U(!kX{O(W-;hxsLs*@2 z!1Itp55ivjhLFsBd|p5qCOn1j$8QJ`Wqe7Nu}AuYz#*f@i}<{X4C3&>kK#9E^vJ;H zb&>z42q*9xLVA$mo6itHIXlX&QLexHgSIPnUDpNZ&xIV`ac0gX&n_yyiwF!_8l_ zk~{+8o~&eb+ZmNi#UBHQ5OQ(daKpt44zIB~kU=i48x5R1tm01mh79s>Ufl%4#VWxM z2_b|kS=~g##VTF_=OLuWBz&ftIW#j+HxTC`qX&A(x^68J_a0)U?GRP^t+|@?4nVbn3G9d=w6XRWuT1yc`S z7xSCC&5f$JlByn`yx!JSItWt}k|CV_w&8SOuxpySncg z4p#BOI1d@3)=e@TEOEm@!$5$L?zr%%i)U+#dx{Jq1BL-_;XH(NNB2{ACh)FL;iGXL zGP>`>=WO7ep2FY8`L~Q(cfhE1!hk$O0fvma5F$LV_8A^{4>*Jf4}9_r51?w)g$&^V ztZ@^ayXt{yz#&6;V5{PRJa-Off&d}pfo>C@;Q5F%Xsx#40}z*gW8B3yjhaIuQ-1P&R( z#a|jOR`ET+A)`kaKEHNnFi*+BrvM=={YDB2Oip1_46I0}vv6cNPBU@Vw4LYg-{0)B)(qI_~E0}K>NFMlI;1KeBG4LhKYZ7&YYWfFK z2ClvxM}B4E>e~bV3pixJLyjZ2$U~Jp1!TaEx)1odEwskT&R6OTp(j)yz~$6PFN65JCbhyt;y?0FQYpeJum83ha_JU>D0%a)6b;W)5BlDTvvQsyRqk6r=;k zt;1TZmSsRa1+ND@Wu(j5i@1l>{{m&)!2WxD`Nvz+adQ&KvM=EeqfEz0p$s zBNX{=$i}A^W9^xj52f#jhy89N0=D6IDe!=bjP+p^1%Z}AWaRN7Co`k$EMp>{jxTX6 zV~P;x__7+%84!`dyl*fcJBbu2X7Ce|_@PPk4j2zIRzyBhiF3K%DIuEkn)1tH-dcWH z&WFe^tNC<%f!2?uurA{uXfJbg*~@$$D~o3`Ht-W5rm&1HAbbo0y6KFA_*~3L{)T-pMat~(Y-LLIk)_5H2ylH&g-S6~f^{fnQ~QBa|EpuMiFo3j8|r zo1}P9c!h9yP~bP2-z@3D7e%WQZXp6(Cv%+L!D+q``3tU*)0?6hq(DEWHu8QVac zw&Z0#{tMd!yEeESA9L0=Mw{PEFFk83_0l?Z*RNi%1$$`|_VBXrZ1vsiEw#b^vWF#m z&J(n=!J5bH|Gq+!7~At5SSRV> zAXuqaR9Sf9`)_l}+KXYe{w$j2rB2aTT(LE_xea44U_(*{W^Ht|=nL9=^tdW@%C7G{ zSeG%y!t_b7j#@0aLLmu`TuF7f(86O%f%&tt0D?C`)VuC1WjsCP)y8jQh|JqQ(*?iUw zQNr)&&L2ey&)~T?t>R-1a^$R@Y;S}iA@e@nx<$^8-&FIDJkxWh2C%)+CWW>8C)-@q z7JuIEmaTq8x~5`)(F%*KOPT4z1HvKDktt*#Or~mnFMN9N6@fg)&)Es<^!2MaKG9 zm#j7e6jt`{wu_eLo6Mex3k5pbthQKst2;J-r%B85V)p0ZNjjSU3))BQIZ~;QEwdF_ zl{D)lq!~I}U=Eu3A8DE1>LFI}n$j9UT0LCB(9y0kXfNX-2}xV&ntI!6>t^|FB<1ZRKk`Ya|K+D{rIQhJ^EykxD_dquvcwnYyp`=%4Ctm&2BxFiJI# zYB|+Rs(aa0721N)9yC;1>cVKOdL>Gs`TR%q3H5F?G|{m1N|Hi*I98>hdlO?*!v@Ig zAcb~ooT?PVmT22(yxu{`M%`D9w%zp|4{2DwP7{tgixbTf>#{e)lIVhh*rf1n*!(1j3!S#aB* zBzj|(*4%1IR6{BER24d*k9Oag(_0m&xhKa^?kRh-mMOH|vpr~V40cr4hF?2E>w-fc@g=+TEi%}oMsPCY|w5`tqRVlhBaSNR&uhs!g+}%uGqMu#p zLCcUgNr^@`N=;hh#U8ZR!{F*mUz(S$a}VehEc(kR%Mx1V!5|tv2-u_uk&`5 zwnA%c(a7_e`S^#U^A8Fwf2FFlQz9m+XlZnGsie^Etn#4YN{()53mQb5w)I(~?bghy z+6jSQhDa9csw&O=SnH$M28eDhcZ6f;Fs1EYr{g2VE+xOg zF|4avSjF2^rCmD7Cn{uq_vwnX#ydP{@8dG_B_e^gTcH*2^iaA(KHrfW&zI>MI|T4^uPdRIwbXs+MLOy#DhwVKt8TiW66dHH9e&<}hU!msyvq*I zCR@UI$=6yX?bX-#=7#M<_!k#6Z(iwwmaV-yPo8=Ag7&8N>UmyzK|5&nM`$GCX*z0~ z@-!V0c+P$UVI2)&pIwA7$3+P1I7bQ_b`iol7W1nYwWgLZ1W2Ois?;EI?!z+i=pMov ze+yx~V`b8mOAt2dTL|mjN1nOzErj*n!`od_gi(X*(S=$8e0D<-R&)u%dUTLUV=hD3 zjY|;Lqd=Z%`yC#o zc$C~mt*)<9i}c}lRT?}hnjQ@;cxZ15(@XAo(9kNW>Cw=FXa5#0`@ZTAv`VowN;m`m zV456W8ked5$T=*V3u?Od7MhG)p+&>XpB_rll4zk89kf`>q^16)D(#KZrUhSuHeR7s z`CD6Oxvh5}&|WlXlvA;E4@z(S>mhBAEGsIE!Oa!g#V4w5RE$(sR2X;?Z%J!qvkxj~ zmK7Bvl@-A1Hp~Iy4SMs32rR2BXaEu2nzp{NK?p-##h$w*e5MDmS-p%>76Kekr_)WcCnEhO;=@VMGN3DTeH~}+!Q*Yze_On)bk@LyJaG|nNk}})Y zg9hi5hv7nHxgls(vh7NvA-9o-(G--0o1hhRP^H27qB&p`lIvI8l_bBjhcsk?ngi;) zvWyhc?!0P$xZ2DqT8dbXD*T3j$f;}&KL4m5#%fius+DN8vQ@5Xg|xB%s->T|K`xFJ zG_*mvI2N=)PwXXDCCU3)uCXN=*4Y|sY>8%bG`48@H9#vQl3cGVm*RqUTyrQ@F26Gq zOMV4ywjyn}!!g{t5Y3+}R}Kr>XSh!xRt`g2t8xydp1(JViG2%1n}t8Q02#F1MvTEHYNVN^C zuEpwX&^%UW>tic<&}J~P%A2H#Ro=!TZv9qeH49h-E*6WERyvYsu{fg5=odpgr2Q$^ zoP%MlIVW1HFqMWS>0;@+pbavXrW0*NE@oq5+YUGutHv}q!&c|6ARr* zT4=O~w9i2M+)XkT-ycqL|WGm+ODdqPOSPD+XGBiPr3mGVRvF3 z1=c+@>>d!i3``pBG9cQD1XUU~A<$+8I%va!+^j&ff|_a$CSgy)s>Z|u4dbBL^FXF0 zda&LBE6rfN&&1XVp>ueWqm^|VVbXdgc3^;L?Z6KYh#nh!eCVzb)(c*qBFGiM-grJ5Vclf z+k@yU(HUCXtcbR5sE4%KvadvED30o>w95jt&|JqYtA=0`hUhEN8HywROS*LmT9x6d zG<2h)ucXe9j(FNCMzn&r)cQuEU80RtD-w01bmxukInK8$H2={a zv}G7{v4L`MIXnPvqRWtiOq;Y>jYIR_A-h+kN-oPI#JDP!7xaJS8$knCxvnOlRTtt z1Wn!wv9@4B>8>fNd$B=NY~&Qe9x}O+lUUPKS=i<&wu1_#_!mptJt+hE(>-WyK*MYh zhqbMggngi@#HLfRIaRPQF%+9qi8aenVs(|+x+=D~63g7;N~}4mMr?o;8)XH{2eN3V ztuSn^2W=>5?Li`8sBdoCuKB8A*p4fI!L)~% zXyzVbq77f9Ha*&6OnZ?9?QdhNG0{pEd(f~|Il9=Ol_|9Br5;ML^@w&xghE41CK)HXE_UDo7cVnJ!5Ld#t1A#JtnJ*azF zd>b@lE4se>BM%xn7V16dp8XPZ%O)*zomy7ZvCzhK9LmOZ#MsVUujX`qGxQ!9I|Yqw zb1O~V=phZ8+GrcS`w-jc5i?g$-K^S1yXLe-KLl&x1BX#%}=2 zir*lled?ifl@Z2agc8O<&^}WKHBv+&C2&|FC5V=JKy3?%IAN#A6gaHN6huonq}oP- zD=5H)`-q|d7erfk*n@@vm*QmLu;OG0X-Cy8P#BGzFWj;aPJ<$D2-#tbs3EJwlBGX9r{)upQ|z5_xr)PzutFIadtTLv04yR> zi=cHa7cA?+j+0bf9~0=|&6hu?V6(2Y{u7(qjBA}OwnQ2MQ^6k%mV_!&VfQEA_) zIbDoLl@z@OhkaG1LK}X?LmFlSG&iDo(OUF$BEk+S9sa%AHBiS#y&H93pZufH9+s$C zppK8?@!+uH@rW#3SCt}Mj|l4{XxWOiu{S)V!Mzk6$bE#1=s^D0^@l&IIi=u16lutP z$Vfz>-TBEwDQ-wmz#{iy(SBByBA$_mdjy&i_XyI4|KdTzhG+_(M6~ZPfXnbnr1V!+ zDWWTh=u4pa_JiNT2Giz#qLn&^TRrd6OEP$qkcWRJE&qUP0QehpIG0y%N!}{)aZ` zkq7N18Dz_(i6C4g?QgYAm%lAzb^Q;mS?W476g0S06$&3%}( z#?PrrDIOdJjB_6rt-PAkm1~#?IQKua%!*#OtSqejK}N3wO^IGdSqM;VLvTA01W(Wg zyMx?O76LtJ=ttWm3YAJMJ(5;Q%>qL0iI99CdRZa)h!*T2jof=kNb}<7p|qG*{*uxV zHK(iYGZ7e&Y_kFbg0?$Mm4>*1BEX=aHGnh`pb)go2(La?GhN*uv?@ZW5~q-)MR`cW zojwY8h(if?NYY}wlvx>~A&RJpf{1^?B5ERN#Z^>?P*6pRz=%VMz(}-MHKz#BC;~YO z8d{GG1WC44^N@yFSxbyTg0@ek#j9CBxJVIJ5;P^OBxNB%r6KC12w^E`r`;heNofsL z>DqL$0Gquq50}gs^kpQ=fc5(BS{~9y${`D5l5f!t#sV+ma^4%X%p|XMvE~ivwX5Zj zg)zyusK}!2%J%XZXR>H8!__>Sg^e3U3oMqNaKbCws^fH_kE?lx%XQx(m}lx-aMJ6n zLc>;{h9z?O_}=G0!{!xX+SJn?(l*I8#qx3?4ZiR#DgX`A z1#RqEuVPCn6p6LwFCde21lFVIB?0R{?t0Ga?cgURj5Z%=xkYq+$?TAWgO`>#g7x=b zb{@9meEx=H%)BNj^e=8bwjbz&+B&TzMHELE_fD{0=pobILbRgXuB`fG?BmdjvYpws z7(*XB5h!RBNmqLdQI&EBvFf9kQ;+H3e8tjvqOlZ)H~eUCZADb&C9FCE4))gzIy%>B zmM~m<(L1OP&BmSX8^XNmud)FB)h^C26=BCDi$XM~T)-PiYOv~&2+^#!>I%!uB1hzA zA?)CN(5f(Y%7;}CVUA|{?rusxDUP?uCro1}p#M}~Ry_dQJ$ChiFt=ODU?FVZO|pt7 zSM&?W% zf$1BO!{=H20ajiQ8KC;%)N)HB$vwS_#qXmG`n;}Y5Qdm4N$~0YEPfXs@z#s}po>R^PW4l>XF%i>>$ zI^HVZ+11nrBcwLWHB*v#&Le0$mG5kBl`^8Wo7%qknO}VfMuQ2?jn>V3=r=Wyye|*4 z_|}v$pQ+AuRsq5QqEX~|mV6(rG*H}))W4YKtYNA968EC0x*se7>n6W?59+GTaQOmmvG z2{sBf3(=wCa8A3-TA1u2)!y9h+l^NX z=p|d74ZO95we{#d&Mr1>;hTKSUgvmi;bmS%pNo3vWB$+CGFIaw^!-O3E-aXShK7fMv;Lw(Qir_xln?2av zszE{enoRFj{j~fVdg&rcoZp#m9@Z*CzqZ8t?}plx6Z+Ll-d!|p>PEhKW2FfG$`$Ya z+VrD53qSNPuXukoNSo;5AGP!us7>t1E4=74UYq#dlvywO;LjI-e)xM%pY>w7rDN>u zUj8k(u?ODDEF?Nom#G6 zJy0%5vm?mAUg2=LGjp`?1pR84@|$C{kW2ckG37@G+41&;DbDHT@mB$V6?Nxy|AGCr zxi@(3Z~grT)7#t)QVk{;vNnyEeBq&v*d( z+_8Mw1OGAF+>dy088J8V$z?cSaG95u;r#4KKFc>ULVxd1|5}mQUlTkcIcvc!%TW{+3QG?kgHGSBwtwucYPN*SAdz z$~Ai&F{)Bua%w4_CCgk^zsAD!Ml*t5vZP{!cK0XRTX)5PSN$JI61P<&SBcq1!a(M<7ZwCfwMbPht43m_BC?V& zmWp6qfue9k6T!06TL@ASUuSw9marUeA>awKgGx+Uc((v46z?KP?F*I(c2X%J8IRMR`Q5o*4%Le74>wwlKQC%n%@gGK>@}*&wSpz;{3twsKylUlog9C5 zO;A^}(vN}~s;T7o(GIY-vsyM(`WM#*U9&uK-m+_S5K5>8s})Ue+-UVtkh!}^gA&s$ zyaz}_ov8IZnN|FeViuGTOPGcC0BOiftsF9|@y9_W?y*~g7RxL=OG2HfHJmqG7u3VF z94d%H@8G0ELr!YVWMN!i7xblRIW)L!q89>bqt3Hh>&T{cp9GncJ9^WQ+a`Kj3FV~L zX|ieR`k;%J!WpJb^v)7;SFP{is=N(B-&zV6Nvn!6(Z%7Mwu2>>M-$^?H!7|gjp-rT zUR-9dcC*Bnn13^VXQNWxM;jCH16~GeA4{Cf@ammAn^cGXB4r(b%WycS71L|Y@aCZ5 zn}cq-?ZTTm4Hmi+!75^jKcF(}W48n~4$$V7)Atq!RrRqWqJn<)cu>=L8Zu*l4_fA& zi$`4Jzvox)1V#8>m(R{Hir)S`sFViZOLv0eogyx98DDlcD2BW42EFX00K|D3rNJJr zyFoq}nWrqe8-%|~_^Yfhx*J@(%+5My=x2TkIpDOj)I5DoX-Lf=ZRsMu-xivyEghmK zYoR$dZE1admOb<)wom^bzq+A95?}2V`ii!u63=yphU@;$&>MDbp9bKR$IPXzc3?onL}IlEgw^W zGs|DnOAA6jYNmBB<5#B!2J0KohgQ+FF8B2_7eX^ME$?0a_)wrruk|f5spTBjv%U*` zYcg_smNFm3zvvs5jb9h}-W`FFJgZ+AdFWUA6~Q<43+t%)U*cN-u-}kZf61xvTG%V( zhQ1xcL;2gUh2_wXm963JUW?iW^XCSHH5Xnw*CLb;9uSs;lo_%#W-V@8S^s-Ln8OAg zcewU?7!_50{n6`T2in`&3zzl%de{{w_RJUXW&6Xf*jb|#ef(!(r!i@4|gfB+l+QdO@FaD*RCmZJ|w{RThrgym-A{`e(RP(-s`yWq*a|+BhHZDEu?6u)iMv zclgnY+Je4%sb55{U0X1l=TwL&)e7hGb`>LXwfP72{S_k)^wNB{@w>NC0hbPo=m77P z@$SFkSB2b&w>94)Zu=aCvNAU!$4)QRL_Lq-QEx_!!`$vXU-V|gzxZ;459tsd$#)Hp zK+`z%F%Ntz;(^_F`%&&UA_5@|w&Q&ZsQHe#uUL{WP8|3+-W9CG_r-EU^ZoL<_pZu+v@5o2D~=B?(z8Ij}t@POW3 z?QK0GL-d^)k)PSLIhXmE%*b4A_C9_yGxDl7`yGDtdHQUle^fuRokJ@a#&feGqxDLS zB7HRN!_z#v3E&Tx^2be(?8CNtZqvx;t79S^qn7aC$YyqWWuU0l`@6P684rm(YNt2- ziLN02jmTFt-z_|#4eIUuHzF?qnkS)ILnYMruPD@@p^;sP*Y`EJWZ1CC?%)mQCx%7B zQ(In>&7^Z~WCtOuC92$k+{hd|`}`B(d%fYCk&C=g5w7w}qauHVkrnyD(UD7$He2sE zCUU1QsBh@u`H^KVExei@_)%n39BT0Zp7wdj*Hr?X%m0rIq^|9wTYkcmer%i zXcPYA`>RKlX?Z{EyAq;WI<&kE`s2hXYP!4`N$l}20;{W|=?$!)C9mfPA4NStx%m(trGN8x)EzI4rSc{|(V_gBEqWlZzOqIP z(4vPp?DW=dVfAm$=u7yuNVdtF-qBEsH**Vz^?xK_az-sSf>rv zR2Dpm`S6b`M|X42ATVG^k}saGAH=SuO`$9pQSb4(z~E?e@=XX7@-y2q!>VIcQIcR4 z5A+0ILlWZx79*}8SJ<8z7KTB`B$E{+DFlz^niYmbhibT)6dn@Y(miL#=pj@|XB;6f(7WqaghYp+N*w2VL!vVpyR{zD1f6D}_Cu{1UdqZsUc+q9#1R1-KBFnI z{ZKpc(%FzPbS;t^8l7!ga0o99qKpa)4plQOm?rdlZM@Gyhtu@FI8^b?p#+hn!Vb#r zAw;gCl1cp7NOGQq{y-(uCrs5+UnFTKlfYP!1Xq{F5!QqS+4-HY=ss5VU@}-Td(+^@ z$1DuNKdtN`teBa-naHBX!ak(z6@*6*va*NZVw63pc$8G^+efJNx)#a8?eq%4%m_8f zSdpZ{&djh-`=Mz@5?o6fNBBt0&cBa{9^BpZ^h`k_Q+>B%EgniEe1&T2YJpQp_-=0^ zN+Wz5OvP)OP==WE*TA_2Ogr)>b4J|2J7G$;&*S4Vhxa zft_bZM;C}R4Mds}Q?z^w_y!i)9HPw}mkHdC7jF9&6*IhWn?<%}4m6?|h-v&!RR^hN z)o%#Zxx2{R!?HfwedbEmrzZ)LuuSE9mlj*dfW$>)tW0Fw6so z>LbR+yw!-l@tb zlBNYT<=rpDT+lXj($l_)d1TW9ChN)H#&`u_rdh-@ZpRG3msOag#4OUZ@Jf39-(t?# zwGDly_}z`s{q9!reGIju^x)sCj_}a}HuLF!R-L5mKOi{;B$C0aEB= z=Et71!4{5drcx~+N3Xviwl;2SzA#zOT@*VEQ>CKU^s9?wJHUvWJZ)+0e57B(Pb`gX zTfx!shm?*Z`lk%*J2*GFKTlc_8^Iedi#=WyD_|Xa9-|+^^Eh#Y!rOQ*x2X+2ui*?| zxy2R3TP=_EuZg?9be>fkGaz?V@8N^`jvOG8P`#s2d!0r}5gGsC6PCwr=kq^s1*SXp z4hG_si1<(8rV!|J`;iecwNcK9kmWeqn>jY*>El+!R>rKiXt+LSW$azd{5E{RC$EVe zfG=ZtDScrLe0Z0&;!6(SFTOPD#^XPV9foa14S3;4u_LtPeD3#g?C0LTMX)(_qJHV) z*bHB7LsuTSHFmtVp^ZLgYiwuuFJmviy*;)nzHH$Yc8D(rx!+z_1aG?|7Bd0F&=bEt z-4UCNUmJKSksL*}dEn02FL7qIesgE+>|Qu^V#>InIDK4DwaPjs?TPxF6V=vF(>A=O zXLWLoK(Q3^aUuYf@%L^-N9)ylx~6*DeYfW8+xojUJN?Mn9e=>z zFZz%nuB^a5M(cKLSxC2Mnbs>(xX(Mh9BcZJ`YZV;)3>OVz(w>zFucQkSTk?t?ZzEj z4oQ5^>&&qQ&jfK~VVH=+Vrds%5t%x`<)Bxa5=MF)dkUDN2sd_#H-MGzZ`y&^mJ9rK zfjPD;Wmyv-$HZ?M_(Xww2XtXsGg*Z=K6boow@^d9kYmejqVWogGsCoKWIBovK-I9B=#AK2`uYM^Rmgcfk`I9NuC7utrIEbF(|= zMXwlEd@peN*Qgb%(4QZF&s8kcP&e)<>MUvK;OOuUyU!ZsvvQW0;SyIu{x#anf+1!C z99Y!VD5oNfo0R8HDN;;8G;4H*RkXxl#3X$87O2E`ykid$-a1)6nWy0Mz!@cRUNRBZ zlA0dE+64-2fe_^>2JSS}kR1-J1MtM*NW$TIi3hUAnap2*^1ds;*4uO)Vx$NuUmL6> z*0_`E`V#^dPY8*Dr-byt!piJjnZ6%xw&Cy&sKA+trjV_bC25zep5FeCS(6cp-$^iK<*dB@=I#H8 zH9>q(er&4i?L4<7TN4#aQsK3`tjSE(l2nN=Y%eYGzsH))wI(l)t#!=wM4;R>S)``V zH1KPf3Q)%o$(nw_oE6QiZkbO6K8t4t>o=ykwrafma+klp_5;_H0Ikz=Jb9UG2=9vi znEzYe<*n~n=4upRM<7qVY>R6Q2C|-d?sgaM)Ht>V=m&SYn%cAt+1#nSzD2)yk6+ha zxSq^-Bsg_BpI^ZJ5j@-)WMU3|JLYuwX`9*Z?8)8Y^IY5B zwL4t;H~PlH&*q;RvRZI`ix7G5Q`Z1*$5A|jtNDOG`qcF{eq4vY{Q0>3;>T^&z*+o} z{DAObS2zJvSq4@e)~m@UoNx`s zk34jkclf;%&_)4!F9|4mp ze=Nt3QhxBXYZ}sg4ABpHhcm7{_^}@X>hi!ZTnF&u43J;>r7v7Dwrl#MFI;zRIEk30 zMV<9~U%Cd{LMZU4cevX{^l3xS?4ytP3cVcAG;sYC7!|csdA{hps|zpK66x(NX1m+J z;*Za}F4zM2fue}Y`t7e>0lt`WX6uiyx^`lkx4pljF|{~*k-kU?qApV=VGyo!f`MZ3(5Y$6JN*CS#IKi z1i8Cn{seu5Z~RqnE$EKkAt1gBSHfLtTV8N0ceY5nQTIT4w}?LI`u< ztX>ARUt}U86oo0HgC-)(J7^!JKYSj46uWblj8FDI_(k9)VlkU9#x3zSG@9rjeV!D6 z#D{S~Mo+IXXo-OC20`M;_~Bbj1cE}OClLtB1HSnMVb1Oi}(Jm@Hf2VbK;*E5w03@atUsL>S?*Mc_bYM`%yh<8~v<_^X zq6|<@#UbLl$|4kLk6=SBMRcWTu5?gDSF}A*#v<{NN^*f61#%Sx3g+s@{h=UKL`kCv zX^w-aS|W<88?OXB5-wf`lTZ{QJw5=wG8yW2oU5AKv=z+Haju)a*#MCyp zpFv>`^E?P`K_jv`3IL zigb!trdFg=H$E14zKn5-Af~>dd1xvg0^R`uOTM4?W_VtOs6{9v4?G|ER8d4!mZFG6 zSW~xx_kn*PiinC*6p@H$>c*!6FA&Yxf#&YWqjoGJnYsxdfG`gpSclJ0QAVD40nRTl zil~n)A`GThKY_GImKa5Z+oXRy#Mq+Z3xKZ>T{(66d7>}(AS?j^?UP;(f<9mL}Ol4&?Ky5fBx97YZ? zCB(4%zj!h51}3kY$V%GU%V9Qv>sY@6?bL;)3tg&`&OpzFIQ= zO0&}Wr)n4zmy9>`S@q*@rqiwCF}d;4n*U9`FgLz-7%pxr>nEnf;}$FKzVZ6g;;}BE zcAY6Tr^n;3x?Xd7LXEEUC|vJyJ)xnU9)s(JKPJ3OcVuty;Gb~LciYc;m!A?AjnE3u z>G!(Th}N*mRuAl10|Af=d)Ay&J1r3Z!ix<>eU!;GD^YlD_?o9 zZyQ%5x*9FnJ-4hzlQ{91JosRZPjUT?WdIir*Z8+W9G=$Wmj67qq&+J~m-#|O{joTQ z?g@_s?1xJ9vaf3N3Ws%vr*tW;fxnu1m(p6}va}9;`MJczcYzGoJ0vAG#KPFN|JCO- zPCV$)!dLJvEfV)@0ps-GmWk&^)8dia|Cbm|i%IY`A@PkjA_Y2 znAd0L-8z<{JEVLgRNkw4m)xY!yljJb@TjEkZSU~1QAshj;XHUWK8ErPd{iC9 zyrzw1)A4EtQ|M-_T-%I+s6K9MrOwdDj859SEsx$veiVJXJ{z+huOG{i1-Dy?5Dw-W z&5vGu2JRyxG|WLQK8n8mf6`;i=9F^smFh=Jo`F+{jRs8Ll90SI7%Q%MhepX+RSPgs z)6q3dJHotvZtk|`*d4G@Ckpu8#>pXm#}KMizRg@e*C-iJT|R8fS2at{ibbdjaUj-k zMKwL%nQpvaUDui?FSB9&hrX&sa#cKlz>T8_BgEjU|yeJxBZ9! z%c7Z)KRzFWzg^5e>vP=GiO_Gpoc!-|v}i=X`D$_$I)*J>b!U&{0YmX^qn>*#`MN*W zqUjwjCSNT_i_y}4Os*P-8ir!I)|{n&kEfrMx9gZMT=T(S15_A#LfM;-@kv32InDA zd?^Kgsrajnzcjt@rSvdcGx@IPKFpT(2YZP*XH<^O;ZXrL`U3@m|i(o(Q^$UdU78b&5a#+N?~4f zeC>Yi^vde$f9Z!jd^>$?M)l1DBl6Q*QZ@C}<=K}fQVa1nnS%w4XdsF&m$}SSwd*^$ zu<(Zn`^O`(8WYPPffxNwW@qp&!?73>3oZr z3=_x+2hi&TuqYPmG>R8gzolz*-d|9Cb5yK&n5-Y=2T_M);ibDgOmNwP^vX?> zZsvA}Rq59sowRLS1-A9){tZ3&Tiyv&@_PS(-{zyw`yV(K<$G`!PAcvxMPJh^JdOF| z7VVivroxX=co?;Ed+LQd5{nhjr|+oG@F|#hE<6H!M|#S)6W2x}xLYxG*IkKmnROPp zQVZ)W20oK09i4wnXQm_LZ>HU7Ktu-pQ3@hRB=#S@{5MthwWkxMTpA-_QpyfTI;~Tc&^i@f#%yOcsDQ*Q)94L1Aq?- z9$^in0122O7^t}Vu&|fSi_g^!vl$!{3z`CSKf+-duaJVn86Ozkk&3Gmld_|w;A!j* z(G5q2v1vQt(J91>hm{12D3AQgBZ=fC|GAfN?F5g2jFS& z==V+f{c`<&zkVO6-yhWP@9m=eL;C$S{k~1V@7C|z_4_7#=Mti2yAtKOumSF%)Ph}! z;sP$7d2xs)hW>*EG>_kt*y($Tz4&g*O7tod@e0ahz;`90Z#?d|DeP2;ak-vv8^f>JsrZ@iE2&p7UizXzeQ!ThRT4-RO`KoPoZsWNNvA2 zF*5=n_4d7qdi_$fIWZkeX;xw9LE?6}nqNu1zd12equ%egF4DBA0Pl7|EfQrT?6dVn z{ZL>uQ4}9*IBfH<9%}V{phZ=c+Gk(prry6Vu}rTxzbr?*;&b?P=>STl3>wM6d{Wi~4D3j6QaFf-|5Q_)_)L&?RHIo|@qB7T{=&;OEhBC}77W zB%Q!g0IllBiNfJy1bR?{!74Ws1f=n%) zJ7kS7NuOX11lDO1GN~;IDd6L4fv*>xJj5KFx=ED4$JYVhpp%DmN~)XWB78k?H0bc- z=)KJ}kvN)b7X#G(1)H6P&fCalAiz<|3br@{*P4MB;hTYP)jVcdP+#3e_!i)8n#C*& z>Z${t%mlC%0_`r3mRb_VF((@s&<4B%qpJlX)$?>DCh=xYp}PpQ1K**eGpU{n90f9d zWeD#8j{1)0*;da2jsh9aO@;(^Kmcz5{4ktI)`wMV5I`qz%u?$FF}k^YF2cKj_qY_? zXnD+jSQa#oFT(rqJ7%ddL97$W zYG9cEAn?PetiFNqYYS0$viiR%d9bia-{V6NfU>?O$SXdV{7$o=R`J8YF-xuZVTZpI z!jAw)_gL{G4#z1E;5YrFz%fa!_)*1^a>@S=2^@z2UN03mZUo*2;w8;$zzN`|^mkpZ z%!Q43W_QT|UMNakui!LB1Mmg({2J|Bnc;&amlYXxy@E4_qXCUQ)tHpn(`Rgbpb9{_ z;H(N*1A2!xptHEXP;n?1oKrk9^|$C>Cp3UrzeVRwap)GD&lup0<&vXH#i3hp!QtpX z$CLe(U?$frsQ{J51TaGIu-=J}u6a_N%1955AqWtd;#@ODTy>G5#4$pMJq35$;yPV; zr3R{Qf5S0A@RAq}C;?Y)DFK!9O@J*6djE=J`Iq5T9%ML&CF)u)P;p(0r~1?#@8hWdK*lE{K;KDtCxaq7-DJjoR7BYRh%nLRiC;| zhI3VOmlg6E#{_HNnLX59q*H&Kd$k^8d=4k@e3K1TO5uG zX3yJ(@4!@~20-1V4#%29j388>%WoB@?sDSrWa>I#9DjgE*YBzTm0KObX8dh1oa=uT zr}8R?e-VGJ!P0faic@!u;TX1X^MmqNVc4QLb=Ts9l|0cK-bNmsmdIZx%M2Xq9#H`* zuQP)E=YgLwf|#GjR9^3J+;LxWR`Ka){Vb&J2E$o~P~iAX|37{iqV7h#|9p-1zXSrS zNT&Z#axI2bV$6ZF5TU>+K?*|&H4w^$TMWkvcYn>-^d){Nr|wq6dtSy{uwC`1;J7kN z0qVBl{bv9i%%I+8Rm{~f766sol|ZXv)Y}}(aB+&^ZNNGdkMgt&jEVV7!2v!?)IjR) zP+Z5!7!oUv^+~2r-OdIhpaHN}4fr(1$x1-wF2mWFpx##koU~#AbOP%!91}xcKKzTX z9!Wj)NMba5)xItxXwJ&F)mb_DDGat0r*5Bea_m>2E3`m*)lre8c?`~x3KnN^{K!+q=l$_aW0F(=l zI9!0Ya*jm>F3wnT*`0`v<{ zIu3jvjNnDLRXKDlV3r{I-k;L!u(Tivx5y7pQSSB#|JD~Y{)`=bfmxB<{-=Q3AXo2}SG?Ld6rTZnu<7G&`J@pfAOI2-K!>Qtnq<9PUJ0fF2Z`dS zhiYaU0q>SqycRe(6vvw!x5`%UmREcZaH~GJmxU`l`Sd#^$xmoOEvkb6NorA*)Z=fR z3GmK&C76%jNaEwxYtuXD6>m_T3~rUJ-Z`&$BXDw(Hejx!5}w%9s*X|VxgkFMn!9Z8A-HfFz{^}K>j7JvMpK% zoE*^axfJ+AhL`*JdSK)LzH=||2Z<*oe}W&t27n|X!IcoW-w5XU1RH^og!oM0n+(6% z$2S8b2XXX!G4sSHANxBkg|+}A2U37DS3~nLbCq;cSDJ)d0g?pgm~dLP=#*9@93L4$ z8-61R0$^=lbX+Sd4&V%L$8Y3d0GxX}mzjH0{tjT|0FKE+uL$)?k`{9EP6c-0N0J}_ zoJiyqby^HK`KNd%exssK(51M}9xC1ij2ymxx8a<9RJ?Pk}yQ`RIBPA1V#?vn5snwOv4wQt5tzR z07(J?c6^JhOQDm!iXX;rB%uN5Ru);GMJJ0DKZ4)L0i4~^B5QDUvRUz?_>COMVop{U zWAcDQ2Tn6YRNy#3k|2pb01;=l%g0L`MZs`p3rP@wmI3Q>#5psr`X_;r1Nxj=NB4qH z0jJg#KLv~&&_|a;lAj!I0{MOtp9V-0R|tpp*FwmN79%(Vj3my0p?O*e)i zrT{9M;z7nw=YrzrfRO_@QV^3z7fgWO2^BaGkR&8P5*90L-VMbs03!)-W)a3QeAGKa z9P-RIKL8FB6sLPd@hC8IC_e{JR@bY4Mg{U5iOZu3tR+MiaaO$ATdo)R5D8P)df#K+{KripfFz0&p9> z=}8Q#j|dg>{fB_1zz$7;5+1^!0$YKR#7}`vO#wZGLGdHTlLW8O3LFpc zlP4tFdsv2Ubv>fuUSQpdTYG;{_4SYj)$apl9FY}gq5p#9BxItxiyh~{*i-i%>Md>lAQd;?CI0V{n2P5>hZ0#E}^n*nPiY5|-C zMh+Ul6TlBj&h$f4cDocPo-95EkR(WfJS=gfd@z5!=| zk;55KFy9R5@C^W8F*#_!Sr~9sa>}}->`5u20h7Gqa{x(V2E@9MTr}Xv&HxaqQO*Fl zY$OdxA4n$#VB~>suN+8}WO-hE9)HJj*2Ls7UVH)nBe|Vu^f^SPGZC|_-e62ps}uhQ z!l`+^a8IIfPrcHcm|n@BB0rIg%M=Z-HyCbzPX3feRb$+9Sow@^>3Pp3zL2F(RQ1lj zMigaagZ|ZjzK%l7urYkk{z{9Ts`sN+g2R6#YxjT3m}f9}O`m-}(VAz2@KHK`wJ|Kb znQ#d6>36dmWDmjKsoiDzTja)j5hXNP2~=DEat&L0(B-X5~5q!2dmP z@ZspeU*#Sh>Ff6guBmAHg;+GlmGA!~NgIBYP{S7YzKFHyh0{^>y&%tFGPJpo(;skJ1KR55<$(iiq z%p%JIjsT-C=lDu>?*+~zrQ@0LqUe;V*=hu;spT)!uC zA93ENl3EBPoWLFkROt6yG$}?f2lzCHKL>oY;YTIc@H*hN4u2W=IK$EW8IG5^WRAnJ zHVS);@t_i(D*a5L0RnYS;MWkiLce=hdT4kf@cD*w{8NI?`O{}?bAgtDCj8dm^x*|{ z8xg!EehM!F-steZ0iS{I7zBDteSu~OG?~Eu90;IN#^c@U<1N4!IXn(8rM+_AZLY~G zSqi+_;S*5EtY+|1l5G)K4ji=sp6LFofa5jiAk;%GVFIlXSn34oG1v7?{qFVpDYOds za)*BoIJKewhL5iS-fFm}&{|8OQ*MMm3fKMNP_LkT+FgMz9$IR*}+m zA~g>i!Hs?vYyrN}5j+e0QNxpd8QBUP0pp1-#9E^gv_%UKNZ#MwglkC~e%oR={02zD zC-gtD{ysrF1W1Bvav`P(N;>iPVTlz>wl>#_i_pvWshb^PoFi9P8X(2L)?odM^O|JX;zCzkdN=z{=BdQg|6F~aPy;;*>I zsN^6pk`Tx61hd16|J2710W*$h8sjU>4l91##}5N12lYRN_a9TtD)1{eqg!$WAW0}N z19+9;xI@pf;3zPX5T6gc+VBs>=2J_K10x4Z`V?j{0t1>Aw;0v|-=MpKGx{y2k1S;N(e+l-hnJZ8y3!dj_VbYWN8ejb zJF1x=faMNn3>$&BOU*a@7%&2@hHDI)fbWo+d0~8&;ugV0kY6t~mt$}Pe$0N6V2vYS z44XmFCN+3@G6t-5226K(+%6N}l7Sin)n6A1U=2972zLc%@b!vY3bg>=s(WsMC#{}A zl35Bo=K^SxiH~7e5v0IIhhJwn7Vu8|S9mo7d~?Wv^$4ItxM??oZwVQ&0r(D?h&{KF zkCLvUgGIgpUg<^%bjrjDVFTJ6J{{OPcr|uN^k{i3+kK8rTSe*pS03?UCwlNm*r(0$mPAW6kICaf)YB zpgYj_N+CO;O7Y|p_F0GGhcOsbUW)r0d;bgfCq1h79#wtSHAVT%vxDj&)Vc+*`V6^wibJ>bxWn<5z?&VsC5p3PpD>(n2_j@~3Cf?g=2R{{sRH(z zz=e(&>T99|P%b^?2uOxm4F4@r9J-~aodGN(cz;nw^es^wx}|4A{3n!uVv?_k3P8E^ ztO{5mIiyL%t?7nC8SXSof#rLMh#i3hzA!LBLZIb$$ zr~s9bbVy<|z?O>WYoa)nql(+I_p`d}UEdPos+;F@`sVDl;ZX0T3`SpJ0jNR37DUbjlG}Y-(7ax?>gROj@+_tBB#c5I=RtD{lN{ zl9!}~H{(6l0H|E$1Q@^w3jny50adOJ5sWnhft!KUO@#Ev|ARhtrzuVY8JVP77z9A& zS`{!0F-=JWr}+j_d5*(rV6_DR+zg~{ox_=e(*k`nkh=37PW@U88JL6t0hJq6z${Ey z5(YSx8x=PL=U4zkeFLf62=2qcL{fzOr8+~^&J&l}pRRk0oGoUJp~S3Kr= z{X>@nM|+N{nls)!Guazz}0I)gU6nd2?zWLtOt(f+#-PfA7aZGOxWSaU;}>JYy^w}V#^pz_>Lcgjra}i zISs&#OFFZOC`?%4d;-w*hN3wq{v*T|mnm|#bHY__;00Z8D4KIMFnJ#Tfkm{i(6?|a zers0&^@<=iYG9UcU>k6>=Oj=AH>!bEfAtM)2ae{P2K)qL<5w`k$5V9*&AFyv2XHj! z#OLuMMckIiixjJ#bY2fAYm-a?UcPq(EA6+BVufXm6_mZw-jD(9G$8fRTi6*i=2Uv$ zTZz97z=EsS($D-pk%emzUif=@-yajtD7Nqyf&04F3ue=d0e*6`&OJnccDz= zlbB4xfXb^lq4rjExsmRmu~@Bzm!)E}<~U17aBCCeGZGEz$PW}}j$@Rh>8W==DNbEc zT%9zz*lvIf=LJ&9$VX>2u*^RsBw5r5F^?-be^GcWJdj$3l`Kzj-fo3sq7CQmRt!*e z`6htKx6E)BK@_=Q!d>;LOGA^J?Io#zMX*pW`BVWak5U3Hf)y|b298DX632y}W*~K|;Cy4Aq6o6Q26uTX0hOzbfJJchH?;_k!KC(V z#i3l0P}~d{Wd`u}PQ|G^&GdP1CvND>O8rDe|J4<7)vbl|jRqh9TEjBVYdejA%5#*! z0;tviM#IT#crCCx#o1-$``};IX*hM~8?OA*j30gp!>QYV>L*CTS_@#G9{`mbji49P z7^B}p0PbE+jbQ_@Cc`y=Itu_RsVxBNE>hegFyHuj6{qS`H`#0iy$8U&7Xc(?^h#Gx zsd9_q8US`QF@-P>Yy{L@s<;KvWC8Hhh z&};!T_yJIPmEsmaiv_?tH#Gq2u2EdKA&P%dbnY*1=XSzigs=LwY zSAiH?SlqRlroX}RUkf2`%pC0nH)fgumC@AT(YrE_CG`6!-j%5_+zcFrf;A^A8ou** zjrHO|#kb(MHpT5V9-*%>uN*Y~l@XR6*pe8;1=4Jtt!@D9Zzn*redV8#F44ZNW1 zRiLSX0TJFQ{4yr1@#vkxs^0+|c~9Jq6M@U^HmUr9%i<)IJyi6Wx*yh(;88ydI)Qh) z0A9ych?rjZkHu2?Ww9j&(Df>Mf&gfY2C&R8L*2l8L;Ns?{1|`DhJncc9tiZg01hGm zAn#O3VHxI1~y1#xMX}=Vtgp;D;UmKJd3n&gnL(EYU*9 z{6B=xkx&4A7Qi4sfWyF#h5~>w3}B!iz!BibT>wuY04&Zv-60ik`8C~9;3q=-hm{{H zh`^1E!Et;}h5~>wcq(4^12_TvlndbB5WofmuwE+Q%(obxL<{#`C;+Sgc=@*Ul);m~ zo5NG%Uo4w^>o^?qlAWr#X7U@@FMH_jfpwGdnS#$$e5Tt@|? zE<5#`yYHViJAMDOIWx{@KU9`_z543E^IF)~Ctkgc*TSx>!CzbpTQKSB#UAg(T{+|G zZ&f^endI##ldS)HgN$TcJ~}Bpr6TVMq{GkPki#{(1y^1D<5F1l;@!t?yc(am>0>uu zb9;3J!?wE@Zn`GDa8upS6SIYfP12*fV1?-16PRM~`043~{z-@QsD2DTEwUtrJzsaF zSH4vDd``s;xOVVP6z(VvZ*nFn5xpRGZfE+2SL?Q8YxN!J_kUM6YghL6QK=~pTw9*K zy)ku@{#~EG?SX3-&X|QO>SI$Di9GT;3Sg`*pElvx4!zZWE^Ph&5`1s|AMj}+b4LK* zn=W|$+HH|pxF|k0<+#X$Z6LxE5aETJi!$5s0B|JP$M7ED_`Tz2=|8`5?T@i8v#KM# z?^oB}bV>FdH>V4Jf9=2*EAH5j?W0YIZv;F495;?Hi7iB5#!h-o&3by?o7saOOqV}1 zZ(?l(yWG+X|2*&K<&}0&ZXJ%sdO}7^>|c2_QtS&DEq{KLNMfDHm$u_5-|M#JWVJxS@-`%smuBQojBD>!*5OvN)^g!Z8P^>hVV7QeVO`9-Gbr?pTtG@S~MgN8-87z zxRZiI`s={E&G5QQ9gaEti~;LKk1D1}9enfLba_z#Ff7rk1bQj&$MB6B0Sf4)z8}Nc zVcn$qQvW;b8pY9(qb>>nD=sJf)Cr(9vcsBjS91HJ`qY33mVu_GEUU+wm#5F94=k%6 zox>qWY&V0Oqkp5X9>({jV8}(um)tzXqu7Os(y|+=Rf)ZhyIO$v7kN_p8;&)=lAS+W^VB7TbJ`AYYYZyYc?wiS5Fx7c3d*q&472zpi6}jljrAMr;Z;mctVMf7Z4}f;{%Au=fL zS#K?NfFt7&&D}<}Hbe%+JsSm$a)@kQhzyE*He2f)kgZp;frBTPB-uP?(hQ1wwo1jm zFxkcs85H-l2|7`MvxnrWf6w0GVWMiZP>r^s0ie(T1a#c#jWe6bMcYFQ1=m?*tYd-58;U0B9bkok} z9`y%Pi80Ao7a9)KwEXME;o8(4@K`GoXg4{$2{L$Dbq77RWd-;mhohu|LoUI%PQo~9 zcI9sd-UR%mFpg~KYH;;I z16%%&8L$opqS;?C+Zm|GJeYxWYsR|P>p2jzpy=ZQif<4-NaD_&{y`FKt3ol{2)tJ0 zPMnnSr6&I%iV%*e10G~?=K|o!qIh$luWn7AX0NU70i5O0)eM1yY;8jXTkW)z{a;4E z2(7gpwGqP60#89JvmaBS{|hb7$MANSf+(;|?F*FLS>c$(tKKm4M2Y&(ErdvW~S|(td-x*}KHy^MOAu(cT6bhED(N zRNq7OO;-g$ebGtXq_K(i4wCX>ESV4R)r!*x6x+KUxpP{|FU6&i|NL-$a1Ut=anw}# z$~Fk$w6G6umGWz_11WXn;rixO`+Zqn(&Fi-$!^F^mh#2nG+{jbGNQvRACISygG=B4(v)!*b>^0+Z+lwN`47p44o zm;2r#Ua=JT^D+W!Kz&OVK3e}mGLS{D-sN=m3iMj`z91v8qBTercg7*N9{bOTcQQKw zaQbkjTh-0&%QZ6choQQz8yi1#NrhE7DQA*Y$R}4M9%EHPw%S7 hX8}H+#-{+!h(pU>dah|g#7S(rY(>z{{g`EL?LZ*%|v delta 63698 zcmaHU37k#k|NnE(-DbvMX722BXNEiOm@H$=W|C!4l8`;gGDsmN*^OQ08o zv*xW$6VqmEKD_!0mAdOqA!-TWH#Vhb+;}9?OdoQMaqFiZ_%Aj!d!=QN4|Am%SQ=xq zr(6m3Vd3cp)=Xh@Z#jLK=Vt?J$JolH%SM-Be;e47gvmZpmYzN=$!=gTGIr!1Oy$G+ z=~Tk>X3>@_Hebk+Hp}#Q%NSp#DG+AJY9&%g^0vc3%QS6YUwuoG zWo=pc)cT{$6R(%bP#>3UNwCPm8VSw}66c(dBi;-y!n(snRjXNi5GUM9j?h-Cy8NoP zpCgd;MZ)_L@I=`;#d3nxU8Lv>gSQ0eA=&aiOLt#3ye<5!9|8V{{0O+Oz`Tzs>m}ck zZJAKVuQ0v64eSPE)9%5ZRoG5DV|VVsUNkTlWBGOcHK!O@O~%gMgDorI$&yuMo0e^OL$<-Fi6J90mR@Vg0NdVbFO?c24uF7RgBppUW*9_*D5-nx%DF`i6|# z^k0QY9wwZTX)?W`U#5}~WYXVNYUq!Z%kII4F|PHSDx9up=#SFF(kJu8Zy6qond~E?4RkMeuba@PRfG(>K=TPpFTRy{{|iIEqtqJtrKdE8 zzB8@}>37NzjVvq8;&H}q_vt(15QF3|_4FLeRR;|;*4;NmV9|CFxM=_en&voeD*`{h zF5DR+u$7+M+%hPdXwDdnLmL*decJ~egspo=-VYxjs%mooyKkDI^le!HQuEXQHk7EB%>3PB*Z_2p!xp3fvg)^+3 zoC&VIQ*XJ5TuA1|OJ>wPzuHO*x{cuWzgSLYXq9t=mBMf6`z1HA5L?g(tzmztWM!k0M%_Tec_0z5wE{P{(|PXYf+_8j1^KS}9R{iyd7 z{=(&fd+_;;tCIQ)xJNdA%Ce}j*)zjuu3uDA_0b{`kHk)XV{biGlAJ#(i+asu*g#+X zgU6g2W#Np=1KLh%Py2g!ig9Z`az|Ueo^r%JIJG8}Gv$u)LGr>qxKY-~ozpc6>Bq>< z&-m%XV@l8Cl4lO^Npjacc&PG^#wE|Yz~{^KL4NI{KITo>Y{i(ApnWVF)Yw9)$Cb+tqFcw=;!J`B0qZ8KR)lMwA0WB*Z%;2k4w)`|2$9{ z(#~b=X+!ob?h&c zo%8**e^6;z`!@DJkh_4FX;T`~9?IIO&-rT;UuipQUd8_Ba@lj1X1@5Rx>Z_eJ3SY% z|Bbx$oaK_Kt{i1cL`;%Q8)>qjlUitKoe|*_( zN1IZRNyYrbxL%}~P!`jQDT~8Ln{GiS^`zmJ7g-EpgK6)I_#}C4wB@LB9y+O){M>>A z*wWr6w@SyD7NL{+r%#Km6RSCCb$r2OL8n2OpB7RPD~Gg7UN9{}r$G(H;w&!UEH>Ck zWnDDZ&?21%sfJb{tgq!fHW);Ctns4Bf=+`binY3$2;6X!42lMiibw?2$AV6SwuTmp zk#a(;2jSQ3ai$bx8uaizyEwD`Gs?0h#ZD_G|Vhtg!8l4(P7jPa)$L6O6>%}Rrso6Vck=UVMWh8mEVP`=V;V^`Fl3M= zGE1}(rW+)Yp>W8sNy6)*I&ykS+gsslC_VUu*Ft)|c!DL(!ntLMeu}mtS7;+KL}06P zS~!#pNeoo@(HlY=6@e?mOi>4m6e_orcCf-%&PHxptMu6-LZzp)1qw%hqm4eG@KoVI zZU?<;nXcR*iB}DoNsxgow);LbWk_O*PlinrzQS~q(qd$xqFs5HSInF>+lc!{i|Wcv zO1nhiR46DwDwO-sTfmL6lPpt}8ziyZkM^dbq32M!A&J!rU$qo&PK6Ufr2Hvd3a7NF zduBbP=o0>$S!k3N13ck~HWv`^+Anc53SYCd;fl%<`xFg97is-C=(Qh5(B);Y61jv) zh)Nb>%-X70m|DxnCR=8x9Fa_^A|0zGoFV&!ZQTq}J4FPjz>vU2g|DcB^7RVqj-N$s zrwCWLO3Ox8e*!#9I1}24Mynx>hLL4Bjv3E4aipcGftem!j0+P-+JnMEV1Y{R02vv$it;r(9w{F(3ldx9jYf53C zdsv8w>mm~K;mo_nB5cDPVQY&0y{Kbhc|y2S1u`2U@4jw%y}(E6CafU=?4x~dCm|y5 z6G8WgJRwADlnu7P#@j2w(JosbGH^8i3h7?}{+WS)?8Bw=P0PkICtea(0daGSd{WT$ zdRa~i;G}Aa_Bq!fGQFIWXmzb?aO%Luxs~8(b*)1TyonFbC^LZe*4kIjj5%{S8L^$L7g(jRrCeE-- zkZB9rI}1d54yeBwRP?OT>GzgK<1*2+`&t z1K;n5vnw)rrlqZ~DAPMbYbPmWl2n3t35Ha_a6TmF2?STISA1SP_par9_*UqxU$={Qz}vkws>^NZ&5R z{i=F7{%KbUULr)!a3L~=ql4_~!=uUs(5vR;fG`e(jxut#rE^*2E(mL%f62HUH`_mQ zmxTBlJvX+1RizN^!}X|4^9peE{@4Omov8%B3cRX;qfS>y|GThu{)%yX19JKoZhi%2 z25tyzH)X)yfTE%ZW%w;2z8$IztSqerzXQA`GOdY#m2)cMI4{2KWuzwuS-+qx>=_P2 zAV`RG7%T5U2F`zr;=mTL5=B@6#}G^o&_>28;BG|zONGz>`32sZi7-ZBE)_!03N&L-0EW=ZPKdI9H0$zew#Q4{&jBFvkyT-UZVhZh#*_evotG<4yw&11U@5A*y|!nM#8dmJ&^mKSeXAw_@`WSdckmihOEDUm$;%_ zbn}Gx$;!CB9x`s=WmPoeDdhlBGT>wdfkANKFBaf`68DvJ0M)l?1Vgr+^@ON-2n`?G zU1R2h1}z$^zSy=i#l)li2;+>FkKQ4DyIjB07Ae=wx76zFQy6cwe9Sh|OH2hnfr-L8 z8RxNS`c(8{qcd_RrWFVVx4p zxP5O3@D?ZSoFESfJ$TbKUStwZ#Oo>(L_oI|N z&kMNWr~fH%v=(gk{U~P70+dXFKVc^boteP@cy?m`VMf5%RHxQ`*f8eK3M@|?9F2g|i^k;>2s?mQE zE2)+!xHm-SL1?N3_J0II`*LOYBk)HJd<5`9fq?sE;Ab>HCoU{-trgY_x9(cdxa*mI z*KB@hRgHs%ZO?7sJqRx-M?kBhfj0~PQ(LVdfVNNLZYIhXV{b(q6W)cGdS*^!Cq;50 z^$%qZWD4M=z$Y8HJipkI=(`=2>5xH7EXlq`nHeOk%f^B}O^BZYaT#2K0`Zr_fb_>~ z;4^_^zXBcx9HT|%Y~i?oMqdGs6xJ1JMVa%IJ1Lt5t|~nRzJO)Mg0K*TMF!zAO?3S7 zlOU`s(NUY*eQ(m7!VmWd@$bisIwlulIiftC3>+77nRSHY+FK@G;3rTA1l21zCLtSIn$MaXS;$>9!GDG(_aZR&8q~T zX!IJ}&}*P)sgQoM>NQ9q1CAD?rBlCGHmGO5p}Gww{DZZjR}mpR#BkT>*U&#$7a1Kh zx)_o6sYtj7pDDN>q4b#!Ebz3aj@>Uk`Vi_z7!SgrRDpmFf;ti=prfgPH zm*V^l;aIh#68s~K3`cPOh;Up#R0+NXBf}}2{|b1){z?cayPQItKOqA9r&NOPFv|Ee zu<@1PyM%c1VVpmw@`w!Hn}L16vw>eg`4goA;Q$C^*l0=>@FPMSf^=Dt!m+wtCF#*Z zI0CnTt*-<>VMO2#>}Mie6$~I}6oD)a7{XNnN6u($%t8grM6@d4$Qea|woF8;0*;JP z1UUbh2v-Hd6%_#%K)5R4SA}-_Z#d9IIO8j;Bfq1P`So;}P0H1=8>)_F6+8&>mH2B? zu8eM}N|x0D7%F51{EiB7RxB{8Y~|8Z+QlRKO8Aif};|l{3nt0wKr-pRLQbvOutnL zj*M{xFrsE6TD}Zi#uA(zGynUL)+-a%SUkQ-P!=-F^{yW%u<2myb{uz~_OZwq)U! z`1~G~;HXVKw*#L6ylW-+i$<;62@a~La-g7WbjU)^I07p`psH6s2gn&mU=46Ys{)Rk zaRfdDj%ZcDUpFGK5jdj7c!A&Wgq(2%xDFv)6$ECe2r!OlRlreoC<2TlS`~0yU31rV z9u727I7SJ-2rNV$`&J3izZim06a4U{s*bS%>fXket0OB^{bC&Tu>y|BafJ860n{_# z1@3zcAaoq!FF-(XR1iSuIK+p6qc|$yn~e}31CHXTfNw=3i~;ryxkz|Hxg2~7LI4P- zOhP$)Cqj%aDeLV22glX*5Cw@WRLBYrAY&8(+Ok#vFDM^Ewn^ zfFozzkNpJ$h*kw0+7tm!zZs)M1p;zL5n#gBN(4}OC<2TlS{2g&$d$|)f?Q_3R|)>J zuyvh}tLx<~fmyNuTe)>K0R`d zt8d%hUoj7cRt5YYj*xBdW!O3vUXhS3o7jv5641UHtvcvEye$c1ZB{&7#S=OjZ!&>jQ}(^2oPdI z9!0>w9{`T~JP4?*%MBEfs`%CM*aY9FMp}`L*(Tw|cxpJRyKuT{iRzIeJc;!wEjg!f z(jvTC!Otdv5@Ws4M|fBfwwpL5?&61|C?HT}u!&RJ#}y7=oME+ai~A{21?vgQK}!3i zU;4*5eLzNPCQcKFhI_bfxs)K z0hN{_$nPpd&4z=~B5=2;q8y;KFOgBS!Uk|47kdS`oj+Yv*SL&c00AdZC2hrc9vC-# zX$u^0JkvsnvtL#C!+5A8s*b`(n00{CPEq(VJSiNNipQhsiNHa|qaB>~O~$qUxRVwY zCISn3pA>AnZog|(c5s^AcYrW0!hwbE3i*93~=IV zh5@Sg&vAEUA8!g!;;=FS;$yQ97gbu31C3N#%AtzTRgRD?(TEVIjpa19F2~^DJle+t zLcfU+4iOTHMhW;!Mu@0udzSlC>u#ezZG^;)JO+-3#G{tMz`Izx6jqLqk(Sd_f7=Mp zL!rO5VojYR#A)jo4p0QwV*eT3acE~ckc>pB{AbIZ2f}(LTRIDy54pG}7#}G- z#psWb))}hmjp~oLC_Dy_kjcC!+b8Hpwp#1~R@;ucd zoXm*z-OsRJBpg#t3R`s%YLz8ERuStFjowLg#$did`!z``?X0PF1}x}dBQ0&rT%~m% zwDcusEx8tUtO=$hFhd)?%;t;NlWI+k1$Y~e3gfHuk zAGw4-mid>A;%o8;6kv-LdP5yRR<5A(#Wbsdy zSui7Hhs&16*;FT*CV~!OY}C}8F=@Q-7!3MdzqO{On2vn=BCa+D$sI_`#n!Y5(!(65 zMMo8*Lgknus%SF$XUl%YI;pHM3q5{J4ySM|#2bEFu2?47w5+{y@>Nq4t%h`&jlnNQ z?K`%Ja7~t8HA3FZ4izqmPvx|7SVLmYW>}3wqdW#pott9#pK`!m8nX*OLepg4U4zvk2`uO_t2tPM6l*P5`pLVN+&~s<0Z*DkkZJ8f8>(pA zDY!X-+G>lUO-7`kh|RY3NzjJ#zVjQw1J53v}H7w908)`RfTEpJ5S~dYs$T8Uj zbklESYhMMh`8F6?AA$?4yBWIEm2LqwoXgEM)nwavg&+@z)qNbEZykvLw~2r|ctTnp z&DB&rd2|6D&4eDYwtfz+IlLbjOj>PPXn$(yxq7pfT7H0*-dSJYRvV9<{xY?THbzVD zDesJp_UQY&Xwj;ov_tI3F8*xYQI*@b$N%$1Am$LQw)EC)nwGvycK9pGBUAcnhqQ+4 zIlt}8>;Im*4NpA-9UXs%`TO##~{j>)y9E*1E zgJqN$a_NkD7tC!UusL$6w;7-vRWvxlV#u6r>-V6o#vZO5+Ee-G4Aj!>tk(V|&`9xp zs8BUofdAotU-++29inx#C>qwgSdnNmKwE=iXV+V4LltPwe!pu8(6QlB&0 zq&*e~8Wfq<479mW3lf393wtX)-~}@#k39hz6q$xTy3@B%J0}AF6+wvbSRZW)q6$T( z^%SDB9kdG~D3FX^9_KT<7c?j`Z7^t9%Gq~G1VxLgt@Iu*`_wRmJ_bc92$YvI=41HQ zQUqmkT^etyA@Ed`OxyMVXr;U#)KWxhdU1hCL*T_@r1%GymosKN)S8K)-W<0HT8Wdx zi*Qm=DjFWvh$#UrTLe7?nhbbd%Tugp5d$Sih2V_Y16G0vdX~hdzHa6K(WLTGVz_FE z+0TU#G=kzW_D!E_-+~53b`2{DF?endg%I=_6~g7WOf^K4%16=Kfp(M&A!r&E!pUi- z8lp+%qi8)rJFW_00U2#G-AC)k<)dgcr@?fT3gH7PgyI=K+5s*f6@vqDjLswkpVMD?M+HX|xMQM?+Dm z;h1PoklN9?KH5ysNKvUdBOX+=e@HENzK>P{8Wfm@u{T0Z3xaD4ElDq0VAAMp7bs%0 zZJP#~nid4#PjitPi?mV;7k$@ypq22SjTW|W4Mgh_!DDb8q}N!YJp;mE!T=Q_N^N_n66O7X4_T_+ECuFhP7ODtE;p;i=uS_jTC*Mk!hW-YwFL*ZR~pfumCjo6p6NW6O0xrT0=6Lvq2kV;Vg7VY`du}*otu#5iv>8+LBsH zk(q_=I8BOd6qgYZDmWp%nf8&-=*OTzk!iS&h4JTUe$3EJhpg|Ed>jR$(ZA1%U z{WnR3ETSu~lFg=3%y~q2D1xT-cBANPi9q*l5mF=~LDPLS6m@qfl2Mw}_I!h6b&_J#1dkO(AMnRZXXThNs6Z0qF_aPg4Bxlnns^+fo9Z@E_lE)LXFR%BPnh< zpZjR7Kr?CxeJ0}72}*4e-u2Uq_xotC3PFlw6f;q6?Bj~|rl>YR&pBYm?TKBWL6K-! z{}H`Vu2}I3T}-V$=a89&C$518MWSIDNj$j&v`Zp%6Zw{Q#B9zz6F`F^(Xd=4p8OTG zb0YKz^>0hQ^wD~O21U?#&8HU>v1lK98Y?Dx$T721Ma2=M2%7a4-e!$BE}RMVMCe5k zXx;L)PYhw|2|=<+)$Pg7T-`!%QllS!+()~?HIc>sTQ0OQH#r_*L9i)HztO_AtQm5B z)5oIZmnSr*3_qcD)Uw`IXI?p>J*Q>8F0Y=@c5%U@=8K-NOE&3)67MD{u@ID~Jo+t( zomELcI|(t{NfJAy&I~(AV&BMfC$*MJtTV*m9Yq7pN*mdSn^jm8dIp($3Sya;RMG~g zAvWq1#4<0aGiOghEc2Y~aM~1`&h65ShBk60MG;C^PPbr&+$Y$O}pKBMDJD_oeT!d*dDr6X@4p#l>k0z~m z7-&!=HQZRx#$l#}E$o7DqC5S`N9zb06xnERA^KnekZ8DNiE;U|S-mNmq)4>pZ$a%e z(_G=W)1)uCV#cF4mJ@qJk=3y15|Ibrx(HV+4Y)Oa^%=db%79)12)hCs9Kfj^P;6m7VOKy+`I z@#yOT4T_|O^*?dob74DtRJf*4Z(8!VX|!)1Xi&t)gM4Hr?}slHVVa)yk7=~;Rv}0c zf7Sqe2_O>Rg!pj32rr>wxyHZRY8AG=e}j^zX!Wq17TJWp-yy>PN3_fTnQD1nP?VxI z5Yy+#Twy<-BO($+v=!?drf>aFhggw}&H@b|eE4vWh$t1+Fq5@d2L*Fk^+O$EMWSKV zIGwJ!;TUhe(lgdKk2hpiLE# zuaR0>s84OY5Tr=7K#U*#*MSx-A~y;v+I*Ogwhj;!iB=Eul*k^SrHRPRq!tox(gr^W z8Wc^n!ON5y-biSr7e-h|(n98g_@tsWN>+`scEHhCI{FVgFUvmB*59zxM(+?~{VI(! z3juOT*~P>sG7o|&BJxKOh|IRN9#!Qv1cgnu4ZF_Bu533dhU})b_t83l21U*V=0}l( zKnoX9@d6jvH9A_2Ml%EkNs(!1K^uw#yy^M?jq}qx`_yiM21U^L15FdK%o+cuh6{VR2FPqF$ztnGX~74eL6MEV1fyexeceqFg{xCs z!QM6_j63Us6q)uqXfK2Ir-;TB50_&9nWbNNA81fy+8oddLAxlTKNPqs8g$oMYGI>= z-9UpP(^i3oS;e~JBKilaOM@)7T!S`C2vTGk?ukTB1#OSO!Z>LAHJef85CB1nOvB3| zk#7mwVp<3nrp7kgaCK>l0Ej{;g2r*1xRv7;^9seSO|Y$_GCJWpVg*IeIBpaF=D5YY zLvbsvY8stblS9fz1F440K^qJfF<2CCrLV4T%TsC-(XEjp`4*T58lIjx?-sFE5sKx8 zP+N&Xds7HfWE$Qeh+G0%fQUuWqZC}GZ*We8Y0X_Cq3W4o%yOV|}#GK!GA?{CT=bZdP;Gp^Nntx6ilVKv9a; z{A*C#F6=qE!ktD9KRUrwqtvgGqE~2LUj(g01bmRguk2d&sfo587OroTdV)fVhSAqv zRz}eww%StDwE0?y5G;rs&{y|fTPy61Ul#7R!q!T^=CMt;v)F5Bdn^druuov~5NKnC z`!Q+?OHzDlutADslkVQX@fQZvXZgijwB|Zy4q!x(qUqXXR6T5Nd@auiq) z1dCmpyji(6mRuWN-`2*;u1$W3y=L05BXI4Eus7W=+^>i*EODgy)L?@Yp{5PRYD!yPly6^?Z*4l*E-Rx{Hl#>2`j%r|+W(cQ4@twfK4vMr?G=I)P2b+e z1GK1a@c~@j`r2{=ISZ7U6p2RPdaTf606b+-!$oKX2r07KAkbb@ zMtg{0OlyYw)bfQOMbo$G2r;(!r-glhKK*&KzM=mSqzD>!Thp6zw-rBJIM8B7niXl< z5zwGWYBaD-AI9BQ{6y-uLPndkcdCH~Me>clvp9X7uzhk?#N#G&D}DMH)95?xL4zXG z+6ghkjc%)>h{sz(ppCViv~W(Ts7aA&=uPUL0xeu5L{g)lI?k4-CIs&s1`Uej8`Y5M zXSjwW;6-oTzj?*Ui5tWfTDrq)2LX4L$=s0Jela z6t^XXwl)TB7!0YNhT}G4JI5`7o}|(PCi;w`9grfaQQT(YO$$s25++gHroL+Clw3wg z**A*Y%%L1NynBkc6~1PwAx;!hR->HGT%dA_x5cenrkK%1#yAF)QTm+Y%rhL_1U&K7 zYRl_BE#!;z%y7&K=5Qp2Q#cCW@X@w&q}U{dV^&)ZM`B%sW6N8nNo0!y1u>4stg#%8 z#O8>`mT9(9)l(u@0&!w33dSrvUx#4uS1h;8G%Zr5NRQn|Eb4yBu}GZHv6$tfo#8OC z7-FG4x0_=@@1I+@yk|OwTyd1lSkyhpu}J)kVj)c}$`qo+CaG%F{Y%B-JjY^=*^ZGb zL4pvYs-caoqGE9qvCxOlGg}_A#bGjovEWS(Mh)B#!==-FAMGM&P$V^q#sUm$h(-eplBL> zZ=y2#4flU5eY94}A2#}h5by00_AkbXn%|)i^qkdZSy5_IBpQ7}v;II~KX6ObEM?kS zGp9%`-h-lPbas+5`Y#zxTjx{z9W*GKMrY$=YcT4ukXqV$(>F>@ifl9&M&AK#jPN+9 zr!U%I8)V_G2&u(;Q1lu7ij8{E43LG5rqS86gdj!JsKoF?MjLV#Hu;PqH7T;uJ}|mf z*iZf?9MW%MmJ`l)G@QcEbZ zQOu6{G29|9u&B)9(&wp^Iy=QXxg0rtg`tO z<#X%_Q*C}-(4c4XZ$wyqZLH_-R9j^UB^LV)t0XTUSj9At8x@!ArddGcYB1l0P|thb8_pqqsN* zG>Dn@7Qd+MwIzF(Zc$oBpeVsWu>EUP7wJ5nvVeAB0f)TBr>`T+oZuh$~a ziR5lHfDF3jqZNY&Mbqe#NM-aHHu|qwbc=ri4T`4GCEb)!JiygTFa6JK_mmp`D5Kk8 z^sKPVDG~mp-LzZlR3kI_#weEfX{-`iw4DM)8CLXaP{; zLZ{TENVM(W3i0L7vf4lt`k_F3S3_ty7!Wh*=X%hHX3TiV%a1iNYONU z@BkaF9Ysb~gaZpkF{b11Z$jq+MN*@VX8A1c zXlhTUjwUD0Zd`f2j}VX|x%Js7A-?`YSk`|jYJWsiisE=vjeH?Rq8-8&*l~=1*lM4r z3$&a>yD`UtFM<@wDBb5>VO6x-oP`=@Nx~OFilA{8R;a!*C62OC;xTi&{A=B;WRBqQGrzG^H)wY${GRvj8K46iwf@s<}c+FY+xX#YY>d z+%|pN`XPrmtt4A$`8|Z=jZBfUnC{W# z)VHtpaQofb0yHR67D`%!hG)p$2oNbJMDS>fkM9B zJ}Wf?qv4mRr0m1Che3b}`9Qz$RDH#)X0Jr*laAUywoq1_u4_V&3KKBk;OC$mOSg;r z)}URj>hYERMb7XSYsh^rC)>LBMBuvRykE`B59&VZILcyy8#)T{#k2fpTXi2^cNmWW9mvIV`xt((+15QO0&&ZMHpg6g60@kIqoXB}W&;QE@fXH_q(xeqmzYQ!yPM(ql$%Z+ls?Gz`{Eh?~~2xT^y@57CUGMMG4wgO@K{&2XDtg z;rLEO>5q4J98+R6ez9Pf`Wo-iaERpy$G^g9)!X!dXKeG}0vZgJ%~hi~G|qV3PyZPA z()Hpe%zUEr5v&NcwF3J%#^$^(97$Vxo7u$hB}foiW!9HJGbmCxsOHld3uJ_GztWmi{$wID%DyD$7N{1`(*&9^lhD3l{W~Fl5@Qwn7~1i(i}hOa$IX zA?rBA3>gYfkRmqQx)-4Kr&2qHC)V|nXMMCCpg|FTT;}NCsLTU*pfqLLFh>c;AK9YX zz$_|rbZ=DVfoG}AL-HL(c8(cE64ileYw*%v5f;S|ji3ZXAVVG=>5 zHcwm7GbklFsK79Znt-8DX|31|b3+yDIbyXbbo5YKEiqC+kKD%%;lK^U@s}flUZG%= z6q>m_`X6WzB--jzpdiO&@=Xzxq^C`E6x&(tST>DJinf7X%R{z_hHt8&1g1JxtEz#B zV|X%X4e|oMX-NAvU;pQ0G+oMYH z8wywrQ3Vek==x$*uy|_U$5FZ199Sqt>OH6wgG2QdOC4RTtb~+2c#+bIDR5^ynk{D4 zbw#KiwZdTuWES$mYNkDOS7a}^9qct)?|7ZF#sy1y%xa5*#&^R}Q-cRl1WGqLnmDzL zAU$ELqq{}RaL6&+9OJe0JMsqqe?uShiKDeg%V?(WILnO2GV*&cGE(%}-#eOh*D~_- z6Isp^NZVSjZ{!5hOQz;H>uC65TF)G3awxu(Mw_91wZ z*00W^#F;bY`eAM2^z#dx|2EY!>*(iBJG*OIX0lwrE<8?lI_n&uWhTgGIM9!sb$&fa z%N!zCwhnk&%Y0f^dpH2EE%l!=?co6Y1>!FVe^vBp4+k$CW5v`;rtS#-20Mdv$7jJ+ zEmfT!^w@Yqs3VpQlVnKCfN(vtB)GN(lzOty&fr(D^PqliXK;NDd%g5(dxDS5)Lh&3 zbKR@1Pt-io`m`}sN4tQ%HO28pRs2=MUv=H_M#$3xw2T=t|F@8*wT!prj{NQk^3UHw z^0bVJvisGLd@bV}ec#oPEt-~bOdo$eWQ$eHSSYjqBKlmp=&umGQuUsUyg|$_qj>LU3@x&9wQKa^KT!ARz`czjKt+0T_4O0AWuFg0YZ(&)PaH{cjsFb1|(vUG$ikD3RK++6vM ziXXV4hpPDa(tzG~q^qXJEgu6n>oIE-w3cHgbzD^KPlMW$(XNni4d2NA=yg{)2{I#U`jK#J9;C)Ufh1Q?Hw=;t9t35BA0-QIxQktEJcq`$lo_s4 z)*>A|u*R&Sm*G5yaBPi-(5iUKOxOMZMS~C?MPu5U*Fo!{XphoGK*)Sop@nIrG;*1u zaVD>GCh>7eWU^?1;TZ{y++>I$lkk-MzyGwrFL8u)Vy(zUD7v!A`*DSy zB#Rds{*%r~JoQCkrRSkgtW?O#KQ7`iEH5#%SO+&sOuvv5_6yfBR=MBDBAqNl z3%{a(`bNK^a6dlcYL#u4np#SSwNMK+R5+@IIp0x9?)R}sXEHnEj5~`Ws>k~|2kC+M zHp^U>E$luV(nih3$MEp$4^%Bs0cgw7NUY;>(i|! zqcLSLDL7`zNc`fHzS?z+J%@%iy1gQ;T#akl$2e43ztE2ptzP3QQLKhwVQNNF=n#2g zjsLQKp!zU%t?Q&R*d8pb>Je+@T}-C&$^w39Bx{qXE(<D(TId!8*zrd z!9OFCwUQdf*mXvzAft`OdXUd|7yF)-NR8~;I-_AghkrDM4PwGtdnG%cd7OT<=Guow zK%v9G5=<;O&)Eep^AI^de7)naV?r?0t^9T_t~xgi%_ zcO^>ib=RYgjPXJ%&?pVw^1AK{z!*Md-gOuL!tocO&$}Mk@P-xLqkiP4sGSb0Gj6y( z^J-KbmzF+T?yyAXYw7d!R4uv>M&3pGG;8!F>=em!A5^O^-?vA1(i*-X^BvK#dWa+X zqE%~nRKF1zz3YB0GDmJ}75x{+ya#3MqtS8l@PpAkHD{!J{^96&+4>=*#KHA_v2MBf zq38qPb(D3^wQ%c;T1SUs!V>wE{HP7AN9Ib;Bhmli#2k6Rk`O1Gwv9fGqXnc&@=IvP zEmPY?zlfvd`r3BUS5mcxOZ3?lhvkB?la~1DbaZKE{Fa{Hm63nLj;=WeO|{|Exm(& z;?3wqHZ8r695bDG-Sw-}qgS@lvU26QsbP`&y5rF`G%ahce&j@SHYS71II5A^iY>ezV?2+oS#mSh5HP?Rqjgv7iSS%N% zb~@%c%b#+@>6m=YwMV~jIwsL-xu$F9Vw%G9uxonD?_>JwTKZLe|{`ZXBX_ zM!u0BHyWH5RHcu9j!*w8=RFtqA5PoV>CMCAsGL5QVb90?WySAn%C=54gsY?Cs>`eq zaV>G`pd2?MZWxlBl0%-3b?c6iaWgQ7johx!dm%2~0${MdZEV~^4STQYJzt9Z5cAf0 zr}Ut=<7W2O(x28BU5Oj>sFpEaMrOOm2W2ev)p5&{?kIh8w)-<&?W~Yva@@$=W_c;c zeNM~RD)-$_|9`5lZ0zn}(=rar{ATV1J-oR)06{w?6Iu{_R^Dkr$tH+EkG(hPe0P)K+fYGWl6|Cmj7C$6ZI%W{t*`I%Uz@03&CEk_aEcl9EiOodTgQlhF5bH>tQS1@u)Cy zV`cgm?x(fnD1F`+?kyJ0yG(XI=}V~srCb>r zUk8;^eia(uQp;>DBg5kJwam8qzv_z5ucl>okbOMy=d{euvRM+* zy6fwc;@87cPuV9q9+vvZ*0tluXqowPNA36g`%lm~u`uPeL#9FIC3a!sO5 zyXBUjAtqdDa&0lvCtsnX@N}a_T!FOk$O*&HVO0Gk{wu5S{H>rnzr;Ub6-jn(4|4rA zn=>6cfT!cMfhwkUfc-$c(?Gl@tmnli%8%(pLN$Vuu2qbO?zC8sx`Wr z+eNTk6_M}+OOed3ql&Z<9|?FdkS8BCC*V1HStBwbuYe4a%&y};DKbu5&0ZoniE$|G zI;rs0)1fj+1a5vv)O^^)k#-jrCduK|ScDI4tkTo(9CCW3-Sw+4J=x;)q4)|%((I^& zXf3&+jEzcYoy%+}?YibuBg?eaz`Myx4NAN2_^F*?wHhbjja(9y5QVZ^C$~iuvqob?lg*J-h#|Kaaa;nqrXuko7UX1FbV5f~VTEwT!pl+CJ%@3X93m1= z2+Xt)LRP?evVuTUNNG#lK!GlaPRLU#q=27DF#<(FVHQ@uIcvK~0iS$ld@=sllrNJ- z&;XeiWBNi0jSbd^_`jA?dCF8F1$>s>r;?&nI#Z6W#hAX30xp|~wWc|KSPt>UPlYGC zO%+n;Yv6Gx)Rsb6uZTqc!O7{d34>IQNMV3tt?nwUzvSVzNF9-|RsH;&QW&LhToyV* z^AWckk%0GNtuiMrVNi399x06Vu}G0w?}EiRDZH+5y8I7C&BAhFLT6n5e;=1HxF?g8 z0A~pI44k1JkZOp8y11ZXoCMzIP}x32TNoS5`w7kHqbuq+wgf)#Yu!CZXnV1?8+Q@k zQ(P{Wxf90Zar(D`tx~_Oj@52wXe=+K#J_4f`9AOu415&uNM1yVe+G*voPHJXT?$`` z_px437p(CPx@H<1pD;%S^aHT=DHbjSs579=eFql;tg;I@YW$`FC^lSfg`B`e$8zER z0>vgfCL~N(D*M1H_1Pl7SOqV?C>3h0SfnNuvI4&tp9d?lMxv=wipv$eBuK0xDmB<++<&6ZideAa#EYr4c_zY^zNALNWs4SB zPk+OcP`^6*ew)6nVZwN;7Ez=(&Pw?7KC7tpw|=Wnf}O4{rt8|kgnw;;H~Zy3Gjw3z zfkSo2kc5W8N%T6l^>B06RsTfe4Z2;zwhf>A+=NG=yX=xZ$0W>*b8Q!vc`f{SctEYo z4~fEh%dlRF`PzE7oY*Vzl9tg}4(XkU*<3Bzvk(2>LvPzR z(HmnGjk5I-V-ufmPJ8l_o_N5Lp>HfsbYgPkmfN-_dNkKq{oK~XwlP}7a9QW;M2rk| z|I){Qop@T)B96qGSPZxe4>w20|?>ZwF~C}zPSGW$y6KOt3Q1m3YaLx0yJ|5tNFfEF=GzVUa>X@4445OLwe*N5hPiKo3R!^oc^t@-q zC(h)7g`W0_)+1jaN?2a-Z6U(8^$tb0Ws5Ek$?Qd*ujJ*G?&!cHc*wBJdC=t24cF=2Fjf4ObE;<>cia1ZB^!@+$A_jh5Y4(3!pU)LvuH|y#hfl@A%<3=Xe(ob~r)^!97#(*)CLN?)ILV{kq zmv^cYHNBSp(E#syhs<5<3DCAp(}xW4HVdO}$hI*D_vA2O6m`W77QDDo)D7LtH4%gl zrctA`ZNNR+qBaJ8A8>S{@wY|L1l0}lFK2Gpjq`Ijy%W74rFY@g7?M1MeF0ujJZDVgsJQyC$FY6j^fNa1V*pNg|nXQ%{lr<0tZ4k}i4xuNIKK`~Bg>nofFmYB;N(a^mZ zeKr(&w{pCSNB~cslE{h<5D8F5MhTY^A%QG~(?A$=lh+|bfpbndZ6}3OzaCo;Iaw}3 z(ETRK{S&+;x$FulbW^MqwZIA%&frWDg884aLJGqb&hf%JKjIaVj(Exa6TQXCS5m1FAw-VzRb zk)hzTf<;MKsXp7ZLJA8wO12O1&B1OHdB6HvEZ1{h;aw5NORDIofmGY5231=xs_J(q zc|$GA$^x)3UYaZ@GOMdm520WyI>5No{W`2rTN9$1Q;lJi)>d@gz@G+=C0T4$SBdKS zbCbO>mgels0kHluSgpXq{Yzru)lgM>*U>OT4IEXf+bYI`uZn8&^C{k)O5`t)A`FrM zNe#-u_>usNK)|*Ub2Vgz7LIM*HYkzWSepENs`teL@&p35jrd3`li(G73Ikge{L-5e zNdcb5xNQZBJrDOgI_?H5}GY z5{{aRkcpz8K86HpfzXMoV9;h%LA~^K?`BPAE%AiutKRay7OHLfTBa`Y4yh(EWMBxf zZQ9Gj_R2-x_88?pZ>itd;2nc8EkMuTj(zv>?i<4{#OWV`q02j~u8;D_oOi$I%>z-!pCytRDirXK45-I>dr zOSg6#Qq=6dLqpV5(;0R~PW#k5&`Gxdovu;x)~DVVac~<4OXRp6bU>eR^j?v-)B&2b zt4NOf%-gLBeQgmxg^G98N6FKld4H=;A6BG~d^_pK8PoTmdXD6yieeu4GzZ1UFx76(p{9E&)ITUIsS916)`>J zIknSEHrvl<^5mlZ-v5yLDP*9lT=oS!HAq%Fz^)F(*^YAJ0qRio|5T@y!~)62?rhJJasS?2YFIE%xT`jK`+@~9U#iC9&*=V@9Ri22M1GS z=Of;&I9QE?Tp9MIcP9>taqzM{{iQe2vRA+LrT4l8CrfcMNB{kpcd#XjzM|xGO{d5h z8z!nB6zC(qM!yHN2hgr2g#S@dKWr!G9rt#xh6fCI!nUt3wKjR@xc7u5LQZ%mHbTGh zjW;w9^UqK9JLkNcX%X<0zNOTAmi7+nvoCnhT4`BPA9Klje^iof?>c26t`B~c%(iFx z-BNsY>Pun!>|4c*^?A~yT1{xX&W75fB19x zt(^E&zSFhcz_G}TraH~QON6L^pTw=T9EI=sQ;3!~>1W7X1!V$fKp1WiZu$sic&QNg zLl_(VK!7PwhF=u);{pm_QVEV5JNR`1g)cYp0>2#mD(G|b&M<@!zdSBl^g}THb9jw& zfREP#cMFl5R}M$6=+_DMAYyxKRDvT@xc|#r#?J;`;BNq(8-ATo5q_*FfC~WM2mSY* zzy~JJi6DOm_rh^xfIo%bunCNvBM0LK-NiW+A!W+?UniD#hCKxwH$?FwxE~=Hga-`* zZsawdMrGuOW0fWwPwZl|?R^XQ1pEM{KOT+{uQqVBoeFrg5y3x^J`H%jD8S6e&j7;8 zA-oAfCKK+(YoHEnGz{cag4aSFc*npg0{QAU8GI4I*xYrqfupW9&c~Os?s1@=@(|@~ z+na~|KLswk{TzhXJ6!bN~c?>$*i2?3ocDhaM=@jivE5*!r=MS!n;;19LE z(Z_=41ing!V(E|ejV&m64va4NwGzV1C<4_F*yk5lf){cT;YJ-C_!#(G z<%(z$7ZGmq0jKo6%N5a7ZpOGnC~O6LOF_sg*N!pgKs&bWjmF=_O7Q7M5#<3tgeV;; z*H56>xQLztj>=pCpTk`_zUYneryqr>Kv=+ixor=^mxWMPz?Zxa+S?0wQ6>0(RfGj-V(RyDHkIq?P_A5tbAVHr%i}0lZf1kvB=#%d$QU=Xp>V!R zCHP4=cvKW%nFt>4sf2(PQVcdU&^W_}1IHH}?}<<;1gMf?$`>}O5*+2u{RlFWg+VLJ z_Q>Hh{DckF(5(O0*4MyCQC@qWWH*^zM9AloY+?wz5JC(gkR_}!gl`O# zP--zEg63AL$VEzdBNw^o=2|Lf5vk>6D2<2|6(K+hDT5R-DgtsTr4)UsMMW`0m4Z?aG3f6jT%^UO0d&&PSr`Qn=d2gakPHIg4;5HFQq`STyvQv*tF z_hqAx$5Wfsdp`PjmZYs~s!HzlC3v0<+|GfyHYB?fHBt8fXT9@1!TtM>2uW~j4t~?% z3zX6Xw|V(P&p~ti``P1 zPom)`ZU*dL*1sQ9(1;WP0vkW)3SghN{{0up7xUuhJvh?)u||~U#V>l~L)L**Nig=>wrF@GK9G^nu6~c*w@_hJv48|A9f2vX8nX+$zRBR|Q~X z4(GRgq;yb95-;*(0AUA8xE=LR;t>yy^ntP~@DdM>^nnV-6CMF&9)dDe;2RlK*f>f6 zWktcUSh#R&XpoJgf05s*IPys1)i!=FYT%6G`J?FCBteZ$z^>u<2m$?%R{(Aew*kj< z@vkpq>od=eR@Rh6Zxm?%F=fMF|KwU{zF|%6@hLLj@N!y(g z&~JJe+$Wbbp6iFR%xXM${ldD`!GAW7m6tz=x%WNR&Hc-VW@9yAm-XcE@>l(-1%9(} zO!?l_+*T_zw*1)rY?<}RZ_109i5BbFJLL~$L@^`Nwuk2`rhb&!0S z{ZOy9*1U7&MPW8xdos}f8O)7@5H#-Y{-}u1Vsob^TFmNu`ag*3T|{ZyYH8fZi*S7DsjIJ^H#5Hf+%b`PSq3T!2Jg{)H{>Y2~1zOVm3!7Hl(C%3(9q-2c6lQ|86y{ykHUo1y#hbJVQHPp=b{_UHn7>=E+2Lbq5O51-Nc9B0tpFZuwuB^c)^^}GWU20F%ZWWvj>_2f8 zJOCUvr&ZV)xBui-a130RbOrt_@Kaa8u^FJKmaJ{170-mQ`@y_*fs6HsRAt}?~+wgU-6VLsy;bBNcj+!%TY%q_~=M` zV<()LK;{0oT4%mh@lV7^>;HZ0%&isI;Y|@~x6*H~`2K8Md(oP6pyGoJn15O~pQw1Z zE8Bk#`mmx`6gM9?`u)*V`5w0Svg8lYdxZ#g8`={3mUlvzD`z)MIRG%t=GFcgX7X7v~l!^wrYa}2J)D$Ke#X24Ud&YmT!#tpz( ziE|*%LDs5qRrx8Sj4U{aySIr_2K|-BQTk7Epho)orMQM+<9hB1Vq^5ZbFYF=0X_)$ zM(h0es=eJ2AjsT4wFe8v?gZ~uP5Id`sCPQ0jdDu# z3p0l=R4_OP#zi!sep&>=E1&mnp77uwh z7>RAC^e-+^%819Qx06LZs^tre*EqUtY^ybI`H<FJ$OAp?4$tprXK6xQ2lZ<86N<-!Gq50S{oaJ>#emBg3h|jliE! zd@V*=g2ONgGKGH=?p0jl;DpJ-VN8%Z3X!j-7L4L_t$m_ zLC?1>nZez{-v>LmRX*lEk*Oo!_e+eFar8;lIs}@j5Im2$maVN=VLncMS_!KhT*4xp zArOgkXV!@N@{hn z)yOOZ0Sf_v*rh!zc4;Nk9URjtwh;feXOPBl?b-|~`I)Zx8kvJ|jb(uU1q^00t6`}( zf=X=51ODI0WEm{~Vf>E8TI*7{9{DR7qeR0RTx20C!1wV|5zx1*Q$xs5gs=d%%$z7C z>>Hw>@{hzdmH`|J`kw!@DA;$RqaZS5rA0m)0gfl~B|f3PKiB1AzQC4&j)uOoXIMk( zi@Y?0iNIJ0D_DU2k1s#~`1d>fXcHns6%1}}RRyvASos@)vkd0vHng6M1fKKKVuxTV zF0v3N7=~TKnD&GjW9c{tzXKQx;SBzW-+7Wj>3!5iGx#2^u?*(7uri2|3y#ty=%h#u z-wljq0N;cKh|PbYgb}?+rCUi~6q&OCvJfWV$K-7l0PiDF5ikeWSO{?J9>+FP#g94o zJYXyXxL8Pji8d6c(o;?&oezv<0OtZ^jZUb5bB+QF0kRMfNGo41t-K$mt9+usL%`+> zkAEwA_gk7I-R~L7&{qC1aF(&qZsn__mG@ijG~!2qu?*nS$P;U%mG|535IhD@h4`O4 zf($OB*YF+c_l53-H8Ph2XCV-P-BiAPSWFErqB6G;J_(Fvuma=pyGaUAHrOe^DqLG` z7vKi8zio5mpR(U-;722K4G37slXeO4j@?#FWxE{(*8*c9z@-E`r2u8@GeBx+JusEw ze}QX47YMHRId8(}a1GOKIC$bL;m)c}#jKhL*aU+0N&x@g~@{eE$(l%YFBp`P}32P4Xqod<)E5 z736?>Jyd%-L_QJTgYjd@#l?M}!(3!4*5)|!F~8-G;KU@@ckjgSZq4|bfo`;L4ykEm zs>1$VsO27emF6T}n=RTwGb3}q%n1T9KUf~0$i_+>tJ8pTd}xeoTlgi)(NZ6S3f)yP zC?N}nUCygw=G-UZ1AO2#*FO;-f#I;s9yU(~s8&>=ku@3T3Y)--qgr`UU>|yoS$nR6x5%OZF9;Y}omasZLqV+1 z^0FHrtN>Q1JqloCfP2jM*U0KXfSR|jsA6a>3N8Y^>nb>u#yvK&rcnC7&$tSX`;H}e zBWoH38%qRFe6ta)w(rqQ5FG}=zAF@H#W-~$`sw3kOiP(fSKOj?GR~#gSm0<+nN?Td z8)TeIv5~;10Z&g{L4b}T)>r+n@6#&cU_{@jp*B<@8s6&|F!1p&c)MML%P9E0-oO#_ z=o|c~RjI)hl>XOCz!O&zpjvT{*+?Yq#~ZIA0QVgWKSmbzsKDsvUo+^0f>@Jy{iLnn zmGV)e-<9F8;)$+rQve!H`C6ZI*h$;BpcR=M#jErqxdp>r{IHE5 zJZ9WTPXLFZ?Kkk_HqMqXC#fG@^IumG;Kd>Wz|4oSl=1u~v+3c6zW0ckGtAsMTB@K~ z7id%u9i+oxW=8;GHgc3ZQ z%lcgCB|59fZljUEqx7gN?}ClX6admNZCOM9Bz{S8#61yxL%nIl&nP{a-({B{c4tUu z5JsoMpV09nD~ST3^Ay}N8ZYKT8o_%q90jsbJB%Zki)N5VBj&;S)5URn8As?Cn9PG8 z8DKdqiQ|D~eAjgRBCk*>jVKodu-e2m0F8v;d$a8f0yLtxSAiVC*-N6)V-?01!^C(e znL(cNyK%|uY4~Jx?py^66-P)Q*yJNUfriI1h?CVOQJ~lsunh!_NSCs4&g7&3Xd@*6 zp3UjDdb; zJx9`uB)uHzlI#{+#!~#&ikPAQ(6R?LA zTIu9!Z@cDy5PaS(+)BmqW;3$RBE3;ez_2KPuqAm;3!P^C=F?&v=O5)gbB8H;Ns_! zvG0}ZFf1L4G*)|_q^>gX%f_98pG5<|u<1schZ5J4556S>*1D(T2+M>EX6TuCSr=Pj zN;_bUe@HEg%Plb(tr4a88fbXs|9m$%AvcUcct4?YNO)IQSd-98T-P2tpqIF=EI$Bk)#(% z`m1Gpy+zXRN_w%R_ey%Hq}NJ%nWP_*^a@Gefpj8wC8sed{}P@COmjI=OC7~>@j3%8 zPgySZBst+qT^z3#;PMpboi?6fge+y3-mYJ7!YJgH3M>E)<1pE0H{dOD~ z9GcV>uu(IBvs5FuO>vG%>f&u4{&u9-kpv@kalQrxg}(#o4H|`1@p@d~i>Lu8zy~XV ziA#?Hy95^j5w7(%%H+VKZU%c8H@|v}YqQg)#kJ5bk(Y_Z&ZtYfPw^MgPtBg8IL8xp z@q>zUe+qpmJ|vK+iyu~;yDPc+ddlPoqBee$k$Y4LxWALDUmDD?cpj?bf=ib)38zC+fYJdj_k!GZiYQ#+8Pv9*O;%Y$#7-3*{saD|!o)HFyEQ0e8B~+|9 zX7r-20$eNL=OGSe!T5lfNz;}RB=`DKt7DpUfDp|C?s1#m!2H-lou zc>){bEjJRTi{sX@0-|846bPMQkAk?yI0k{(Fst%8_$BzSmoZkTJSl+3TPUT3y>v6E zWZb-CNjw~p4O0-t-KdgiGN`3X8#lvC@JJju=L&G@@(-$43reP&WVp6(1 zqlI=aXcM7&rA5R^KHP|tF6{&x*FLHnYSP6g*?7CnZ^xK)@yRy+TN}57OWJr}7}h9( znBBlB_7*#=q$^+=k7g!Zq;2!2(b+L?1LlpQCZx(Fa{& zEC9+#W*3l#KR^yU=;EIVE}3ObK>7p~Zt!LXnaFG_GOIE|EI>2kYBWNK?DvZ2`yc`| zGrGPP@YB|AD}F6ZrLuclhjz#FQw-tDE`%*){D!{zPcfyp*s=d-<=}M zM8L2HHQ>AR?iz6451M~4@6Nk^FsFIm4`x@~1*BM&n7gY>pa47e(!^!+OG)ID86Hw{T~s#Xf|m!@ zJg81zg6Y=oo_=6{z?`at`XLpVO(M4Pa@;A zSKmd7zo?U9{Eq=U23tP*Z}}}szyf$6gF+i$dIc<29Nlr}2>9TIz%9~J8(-nT6hPp( zB)-hXpGx94BA|irbN?-08T~K5kR-T`{7C^TZ2`#%!vL&olK5)H8?iW@kGDYMZVG(m znZw9$wfPUY@`Eq|5&pa7rmX|xYA|BJk>7^jUr-Ph|L)rcLKXihe(|DcOc30wrzde8 zk@=wjA8>X;!C_tn+RQJ1opRk>%*=b8IU^;6EzX_Zj5=)mr#8Nhf{37z%xITfSEKlo zu*@Gx!56$4?J*bbOyNe=2|>H?{=~9u-e(}Jqu?RWqmDfXio-M+uLb{sY6|||i{r~8 z{CFK=0>*y;kpWJ4aeP?>$NL)-FuYA9_?|oG!Hw#uO;87dN(kseL0G;gOLE-C@$$}% zLBP8d{0BMn4#4oWkqo8+j|2aJx&++}fZ=N+I5xrL)&f66UGkhsm4V!-PPtXZ2_wIQ zy2LzHg<9dmuaoX(=y$f|9K3a~6Buy>BkoKti(ihMZ`;-o@bUWH^Rlr z{|2ea57UP;Y<}G4aBsz7IVVmw3@#CbxEW+@mkdJRaWddq$Wt7*h|(UA8VD_MYJin0 zR2&LWr9N%wNZJaN0*6vk0DQl0!EMA5O28^!OIQv9Xe9(N)5zE@UP91O5icP|xDt4& z;^K{Fl9=xGfPt0r$AFhB&eoCPm}Jo7U5p8(2III^>A^<}p2+L&5Y#FYDw<=_V17cgZOs?s>S@#^D#c`84=X6Z>gU1?zzi_b4!#`4g1?lA{1J z3_~kcKs*o4lnij&)Fvp55{K&*7X_z@g5i4|1t$Zapt#h~T&bZjthZEwDZnRr6qq9U zQ^C(21t2gCtylq6q3^{-qCmkR2X6unCbx!WivooM90g_opQiY;!_fxXguifyQ$sU> zH`(&>2!8w_mme{SYwYJV41wVpN`M-0e3rwXom~ScQ5d!2D$pznT=%J?0RD#z!BGS3 zZ=Nl1ixA;OYhVHJxgP%2Fy_EL?iq3fECNBZEda)a;T5n8>!hA5okrS%YYS`~uimm zRsy^zXkewhD2fM@{UU-w;iaAo+9iYH21>t6_*ZJCtN@G~jqpY(K=DPV0IP9rh0TxN zb2zb1tRs7Mby_J(6ke$W(#SSQ755t9)DY;ys}*Pa&~Tg7KrhF_HVk^yiq-%!U{g?7 zU-tUkkq?D1`g3j}B?jVI#Vv^RaWa5F2+@03z#j`KL1ed6f_C5=T?K-_9w!P!IE<0h zKnHL%Jogstk{XK6b#B2f;HWjm+i#uXjA)Us?q86&|L=Czb9JX;@LOKh4168l1WLE%7N@CG| zBc4BAAWPf2j;bH<4Ccbn8VZQXJ4%y=-AmQuz4!^irN_>t37?f6+ermbDBsS5FO~Mv@93v)r>3`vmU+r-pdq849Wb z$P9}hu|Ij*0MA@=70Ut&GRs{-u{XR5WB^Y>fDp-m4KUX12$l4hN!>RLBk{}1Ot=D%3(hsj z${7WtDOT%Mu-3*|KFdO61mH;phvWGd1y}$RPZENphNEqq1q{bI`3eE`f~$h8Ow$$k z1i@87mNkW91zrUclWYRcfQ3yHf~1C%ZJZUHM1e033Z7JOij6Zry4E*dxPpJ0;HuyR zSZ}=aO*{dOrIlh^Bp+#8+o=LlDMnNkL+?XtZQGosca9&(6V4qD`jQ#-QuU-(G`ueESJ2P2; z{(!5%IxN9_N|pA^ruoZv;=B>d+WAiW@95~qKC!lc8c*TC1aqyOe~IsfbJXM3{4e51 z3fLv!*lTYnOLfg8BB#Z{9fvG8A}5jlf+FpnuPmAZySd|A&v)4k-svV=06xU}7L7&b?`5{D8^@tKvEd*w*g_4-mpU=f+pum>lSL8Tm&)X5^k zHykSLk7?E5uf#TWali8Oy_M_=HAJe52LzXUD|r=@L|O%|wvNzA%D}7Gl38!+d)cc% zhTz=#q@h89z8v_~%^*i{G(H0j&5a-H;(02c6-50Qk(DH2XvMPz_r>6Z-l-(6AS1Gx z`Zjx7U!+)YT_tB_V$_$T;<_2&z0Ng+#s}xxQcHbr^)x;-M#0hejDn4bdEAfs7INcD z*qy;hxe{>eE5SbXNGd%YlMjJf{46&Pe8NykQrQD-QWagk{xJ z3HBt6N;X4$IJgDtX1zTSf0xN+=nytjSaY1GuDu z^@6K>mNkV+5Y9Pit%D4;iZH8Q!l9_~!(pLa1tuvj8L+S>D&gqTEN=4$_lZnX0?B}d&8Cw3ycskJt{Jefxm3cDx7`e8DE}V3C`ukB zH-NW`&s1FGH(|>x#{q|}ZBoE&PX;V(5tVQ}aaX`x!6htt$uKN;_%$rKi#OXDoPq+_ z>GJ3XDygPGl7E3mK4if(q$B|=$Rxoc6@U=ye55~mlKO0+ncx1HO-<7-o%fOS4OaRs5$2+v5?|0pi0H z9p)9*=@GUI_)&`9;1#w{ge_NL2R*_%L41Ou@Ozfb`LIXWKHw)Q+RZEMs0cf!!j5}{ z;m+WT2zef1Cp^NA;uCX@BFDVK@YzD0OIt^Nj_H8^j?S&MTh&N`gKa1O^g!s=E(^5F}qRn<$LtQ}=NSv$J! zQtF^D&111KUvW^?V}r-6<)Etbs`>Y#l{I9{9R^2~omV&Jp~#>!6xdiuDgS#j_2L$R zTf^JP1J6U}KVVV-L1wdtjd_LLy>u>l>$WjC$69aQcGH6~II)?sq;dI8R^#&eKgLI~ zQ@kMj=F-GDB%@tO3YK73Xx?dJ$9VqN7XZ(>3VxQ@F`obRMb^9n^?TDIaQ&9{W3+QW z+^yIui6AVN=oXVs>*n9quMel@uCy+GR6lZa>cBR$=4a!IQU`7{r^@dJYvIqvHP($B zi1@WN(}!AA5nWLMH^bL6kaznz+U)GFFOe(-SIibAXL{P;f>MUAWu?B}V6 zGn?lLu{pla&P;-LZ_qtH@fM=kPI!L(*4p&cLH}i)@A0h{UxHu%x6HRHOUjm9f>}TkZvs9=3Xnc)=~eh=hzu>jBE|n+;}igEZkuP~Y?2amxiDM_ z{;}9og4w`lpayQh?_wKoh5I!=Siu!IZFdhtPq?^#C5ln<0PtqH&VPbi3-Px*rC?S( zKnWHw7bhMNJGO0bYaR$PC}kaGu)#Ak2RAR0Uq8H4IsW5PmcxIX;LO{Ca{e4& zPQhixnRhWxEq!onSKt9kxr+i=@#GAcd8zywy`F;rzPr~_$~ah53(m~gJO&~Do7;eM zQ%$FoYDy0Z&b(X;_=HAR0S63=ZF)g1ww0G_5$)o)hi#YM>3Cq!(}&6SvJ}T{gktko@mAEBODK&+Y#MW;gzS z=WP4`uI9O^4WTmg4*P$u6Wrs*V*Its4*9;nowo5Db1T!cuRf8VM_ku>z%L2cHS5zj z*~SaaIiNR3Pi^RF`F_~&Pk%AjL`Prja>i=`hkpy&OIu9R+5bSi8>@JJLz7=BeA{Fq z1kEPI0Orln!EI=xh^^DDQkMZFV(_*}if{Wq#H4SW+Jy-_mj{us#|wFY8m8NjgtKiHvj8{MCzgiU}py^V!{0LuWu zZLK)t)E)gEEg>4OL~~~aumd0N0{G}|djOCUBaFN7Z^Mhc?YQE+=S2$G0*qyVUutNX z)KG>G(-BI*CDsRmJ#_@zW{ZG~^}0hpxQ$E9LR#z^T8VTqW!O9PgWDibY7My5&}#gT zs1Q4x8p88n%TNV6M1jmi)KP#1E|X0CTM(h3ZJMMrFQchQ30NQt!MF$Ok-=^2a28YM z$4&-ZV=MzWE6@=|I!0OcVw%#c45{Icp1|YqzI?r-zy@4kA$A7Rc8e)%gp~7@ea%fC@KU5 z&u&Ex)T)5rlV1dE?F7z3SOK*14%m;Om1lj80$807HnhmYq=8u`*ufF5!I}qjMdXYw zO}gf$fmtRgj*9ZPW28}3PhBE*Iop+2f-9h+S)Os-WeR@n;LK}3Oq;&K!tQ&bW|wSi zhLbzhJ{bgh_qe7xBnhvr2mWqXG?;_!O~PapwnMdpdY;MDdjO#vn15(bt!CBT!|KG#;@QM|E-y z@nkSpGBEz+WUvVMVowGbETRC$vyS{0;7bKJ3K0rq-E>VSR#7)C0iNb|`(ctQTBI5L zyORN)=5~DvY7Mn$27{dpmH}UBXHbj`?$vaOBYy>OeFcoN&!*%{#Duui(kl)lr+01smO2IZFmtdtDWf8xkr2V7sWDt|T0hrQBd zCj&f*?fL{tAd_|DL|FQ0=N8~eY;X5uuue0`cQR-L-l4eM;|)@PwD%nO?HHAQCb)t1 za^I^zL)yTU91QnU%+4P-6!Vvj`kscEP7PlM*D&%wT*DOnQWvO$?R$XlQydH6{#)uq zWWlXYHsEbPsQ7aMN}X>hUI|C6($vA*epqq5bbPO!QoNMX@n$Vn=Junu0@FaSUslM& zA2|wux&64C0V~5t_%}`l;B7zQX28k_ZZGi*Z~IBb;oXNr2MRuw61`OcFt?ww2{@i$ zjYI+rPbC`%b31B@1H3^1XJ!kqaqzaEb@_vw8Db+Q`N8|^2NZ{K9Y;arsEFb3q*B1T zb4f!7&+HzxLdzPa!`3u^k~RN{hV4cZ*A266|JalDDaktjE4yyCe+c}~o~${mp_KnA zb-9cAnRoj?lKi0OBmWKXn@i1xNyCK-61IPxl)_vr#lr3j!C3GET_aJT(Xd?M7 zEG2Js!_i`)VhQL$2^E&%;gX5nH0960*ToF{yg}j}shpuo#i0;6cp~hc@(b-&EfPj3 zj#snqHN2?s5zJ4wU#&Zscan<-`G4Sfe?u&*zH1t8lLGBv0h5&oj|N9gnYhg+utT z`XwuDo)beIk+6e379lG(gF#e6K6*T=W-!9LN8h7<){G>J6=^X)EQSY*I8(=-RfDyj{Tl&@Ls_Y>hIJRcy~a3 zR^wT8CvO>xH_B-WA?}Z~XXf4Uwuk>!5)72rNzf#U4BD|40z$iaeUR1^d+_hgwL z_laM}eB>-~aPV?Zm~k#37YGH+DWj2g24Lo%E)#GGxkM;oPIspS%B%{agdHdmN(d8^ zET1*ynTEMtmO diff --git a/.metadata/.plugins/org.eclipse.cdt.ui/SVPWM.build.log b/.metadata/.plugins/org.eclipse.cdt.ui/SVPWM.build.log index 1cf41c4..083c261 100644 --- a/.metadata/.plugins/org.eclipse.cdt.ui/SVPWM.build.log +++ b/.metadata/.plugins/org.eclipse.cdt.ui/SVPWM.build.log @@ -1,18 +1,17 @@ -22:25:00 **** Incremental Build of configuration Debug for project SVPWM **** +22:46:59 **** Build of configuration Debug for project SVPWM **** make -j7 all -arm-none-eabi-gcc "../Core/Src/motor_control.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/motor_control.d" -MT"Core/Src/motor_control.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/motor_control.o" -../Core/Src/motor_control.c: In function 'setPhaseVoltage': -../Core/Src/motor_control.c:90:14: warning: implicit declaration of function 'abs' [-Wimplicit-function-declaration] - 90 | Uq=abs(Uq); - | ^~~ -../Core/Src/motor_control.c:9:1: note: include '' or provide a declaration of 'abs' - 8 | #include "motor_control.h" - +++ |+#include - 9 | -../Core/Src/motor_control.c:90:18: warning: 'abs' argument 1 promotes to 'double' where 'int' is expected in a call to built-in function declared without prototype [-Wbuiltin-declaration-mismatch] - 90 | Uq=abs(Uq); - | ^~ -: note: built-in 'abs' declared here +arm-none-eabi-gcc "../Core/Src/main.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/main.d" -MT"Core/Src/main.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/main.o" +arm-none-eabi-gcc "../Core/Src/pid.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/pid.d" -MT"Core/Src/pid.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/pid.o" +../Core/Src/main.c: In function 'main': +../Core/Src/main.c:151:26: warning: passing argument 2 of 'calibrateOffsets' from incompatible pointer type [-Wincompatible-pointer-types] + 151 | calibrateOffsets(hadc1,¤t_offset); + | ^~~~~~~~~~~~~~~ + | | + | uint16_t (*)[3] {aka short unsigned int (*)[3]} +In file included from ../Core/Src/main.c:15: +../Core/Inc/current_sense.h:23:41: note: expected 'uint16_t *' {aka 'short unsigned int *'} but argument is of type 'uint16_t (*)[3]' {aka 'short unsigned int (*)[3]'} + 23 | void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); + | ^~~~~~~~~~ arm-none-eabi-gcc -o "SVPWM.elf" @"objects.list" -mcpu=cortex-m3 -T"/Users/haotian/Documents/DengFOC_on_STM32/SVPWM/STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="SVPWM.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group Finished building target: SVPWM.elf @@ -25,5 +24,5 @@ Finished building: default.size.stdout Finished building: SVPWM.list -22:25:01 Build Finished. 0 errors, 2 warnings. (took 1s.280ms) +22:47:00 Build Finished. 0 errors, 1 warnings. (took 1s.226ms) diff --git a/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log b/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log index 22a0864..034a2a6 100644 --- a/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log +++ b/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log @@ -1234,3 +1234,28 @@ Finished building: default.size.stdout Finished building: SVPWM.list +22:46:59 **** Build of configuration Debug for project SVPWM **** +make -j7 all +arm-none-eabi-gcc "../Core/Src/main.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/main.d" -MT"Core/Src/main.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/main.o" +arm-none-eabi-gcc "../Core/Src/pid.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/pid.d" -MT"Core/Src/pid.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/pid.o" +../Core/Src/main.c: In function 'main': +../Core/Src/main.c:151:26: warning: passing argument 2 of 'calibrateOffsets' from incompatible pointer type [-Wincompatible-pointer-types] + 151 | calibrateOffsets(hadc1,¤t_offset); + | ^~~~~~~~~~~~~~~ + | | + | uint16_t (*)[3] {aka short unsigned int (*)[3]} +In file included from ../Core/Src/main.c:15: +../Core/Inc/current_sense.h:23:41: note: expected 'uint16_t *' {aka 'short unsigned int *'} but argument is of type 'uint16_t (*)[3]' {aka 'short unsigned int (*)[3]'} + 23 | void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); + | ^~~~~~~~~~ +arm-none-eabi-gcc -o "SVPWM.elf" @"objects.list" -mcpu=cortex-m3 -T"/Users/haotian/Documents/DengFOC_on_STM32/SVPWM/STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="SVPWM.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group +Finished building target: SVPWM.elf + +arm-none-eabi-size SVPWM.elf +arm-none-eabi-objdump -h -S SVPWM.elf > "SVPWM.list" + text data bss dec hex filename + 57640 580 6848 65068 fe2c SVPWM.elf +Finished building: default.size.stdout + +Finished building: SVPWM.list + diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/10/4017c669b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/10/4017c669b2a3001e1b4082bf61e237c7 deleted file mode 100644 index 672aca9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/10/4017c669b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,94 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - read_ADC_voltage(hadc1,cal_current); - for (int j=0;j<3;j++){ - offset[j]=(offset[j]*i+cal_current[j])/(i+1); - } - HAL_Delay(1); - } -} - -float cal_Iq(float* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return Iq; -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/12/80baf1d8b6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/12/80baf1d8b6a3001e1e298100ab8cd7a4 deleted file mode 100644 index aeeba61..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/12/80baf1d8b6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,101 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - } - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/12/90c2c2617ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/12/90c2c2617ca3001e1b4082bf61e237c7 deleted file mode 100644 index 075341d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/12/90c2c2617ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,545 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/14/108b2fe47ba3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/14/108b2fe47ba3001e1b4082bf61e237c7 deleted file mode 100644 index f7823ec..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/14/108b2fe47ba3001e1b4082bf61e237c7 +++ /dev/null @@ -1,561 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/14/804db58f7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/14/804db58f7ca3001e1b4082bf61e237c7 deleted file mode 100644 index f3454ec..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/14/804db58f7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1, uint16_t& ){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/14/a07980f91aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/14/a07980f91aa2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/14/e0db68da8fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/14/e0db68da8fa3001e1b4082bf61e237c7 deleted file mode 100644 index 568d1bd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/14/e0db68da8fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - -float cal_Iq(float* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -} -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/10233b69b7a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/10233b69b7a3001e1e298100ab8cd7a4 deleted file mode 100644 index 5e2901c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/15/10233b69b7a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,144 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - int sector = floor(angle_el / M_PI/3) + 1; - // calculate the duty cycles - float T1 = _SQRT3 * sin(sector * _PI_3 - angle_el) * Uq / voltage_power_supply; - float T2 = _SQRT3 * sin(angle_el - (sector - 1.0) * _PI_3) * Uq / voltage_power_supply; - float T0 = 1 - T1 - T2; - - - float Ta, Tb, Tc; - switch (sector) - { - case 1: - Ta = T1 + T2 + T0 / 2; - Tb = T2 + T0 / 2; - Tc = T0 / 2; - break; - case 2: - Ta = T1 + T0 / 2; - Tb = T1 + T2 + T0 / 2; - Tc = T0 / 2; - break; - case 3: - Ta = T0 / 2; - Tb = T1 + T2 + T0 / 2; - Tc = T2 + T0 / 2; - break; - case 4: - Ta = T0 / 2; - Tb = T1 + T0 / 2; - Tc = T1 + T2 + T0 / 2; - break; - case 5: - Ta = T2 + T0 / 2; - Tb = T0 / 2; - Tc = T1 + T2 + T0 / 2; - break; - case 6: - Ta = T1 + T2 + T0 / 2; - Tb = T0 / 2; - Tc = T1 + T0 / 2; - break; - default: - Ta = 0; - Tb = 0; - Tc = 0; - } - // 克拉克逆变换 - float Ua = Ta * voltage_power_supply; - float Ub = Tb * voltage_power_supply; - float Uc = Tc * voltage_power_supply; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/f02e5aa9b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/f02e5aa9b2a3001e1b4082bf61e237c7 deleted file mode 100644 index a8cbe02..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/15/f02e5aa9b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -uint16_t offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/16/d08ca96b7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/16/d08ca96b7ca3001e1b4082bf61e237c7 deleted file mode 100644 index 089df16..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/16/d08ca96b7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - - -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t &ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/19/00a07c901aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/19/00a07c901aa2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/19/405dc1eb85a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/19/405dc1eb85a3001e1b4082bf61e237c7 deleted file mode 100644 index 61c2573..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/19/405dc1eb85a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,69 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/a0528b19b7a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/a0528b19b7a2001e164b9bfe65a5b807 deleted file mode 100644 index d3ac86c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/a0528b19b7a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,13 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - - - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/b0f3c81fb7a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/b0f3c81fb7a3001e1e298100ab8cd7a4 deleted file mode 100644 index 4c2180c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/b0f3c81fb7a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - int sector = floor(angle_el / M_PI/3) + 1; - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/0086984ab2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/1f/0086984ab2a3001e1b4082bf61e237c7 deleted file mode 100644 index a66f81f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/0086984ab2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,85 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - read_ADC_voltage(hadc1,cal_current); - for (int j=0;j<3;j++){ - offset[j]=(offset[j]*i+cal_current[j])/(i+1); - } - HAL_Delay(1); - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/c0a3b7471ea2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/1f/c0a3b7471ea2001e1ab2edb23f9b017a deleted file mode 100644 index ebd8527..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/1f/c0a3b7471ea2001e1ab2edb23f9b017a +++ /dev/null @@ -1,77 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.h - * @brief : Header for main.c file. - * This file contains the common defines of the application. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - -/* Exported functions prototypes ---------------------------------------------*/ -void Error_Handler(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ -#define LED_Pin GPIO_PIN_13 -#define LED_GPIO_Port GPIOC -#define SPI1_CSn_Pin GPIO_PIN_0 -#define SPI1_CSn_GPIO_Port GPIOB -#define Motor_Enable_Pin GPIO_PIN_15 -#define Motor_Enable_GPIO_Port GPIOB - -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/21/a0b33d4e1aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/21/a0b33d4e1aa2001e1ab2edb23f9b017a deleted file mode 100644 index 0c8f72d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/21/a0b33d4e1aa2001e1ab2edb23f9b017a +++ /dev/null @@ -1,8 +0,0 @@ -/* - * as5048a.c - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/23/20aaaaa17da3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/23/20aaaaa17da3001e1b4082bf61e237c7 deleted file mode 100644 index d3c9e9e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/23/20aaaaa17da3001e1b4082bf61e237c7 +++ /dev/null @@ -1,546 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/24/b0e811d78fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/24/b0e811d78fa3001e1b4082bf61e237c7 deleted file mode 100644 index b491831..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/24/b0e811d78fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,96 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2a/e05b414a1ea2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/e05b414a1ea2001e1ab2edb23f9b017a deleted file mode 100644 index 5a184bc..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2a/e05b414a1ea2001e1ab2edb23f9b017a +++ /dev/null @@ -1,13 +0,0 @@ -/* - * pid.h - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - -#ifndef INC_PID_H_ -#define INC_PID_H_ - - - -#endif /* INC_PID_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2d/c06d33b67ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/2d/c06d33b67ca3001e1b4082bf61e237c7 deleted file mode 100644 index e246572..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/2d/c06d33b67ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,546 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(adc1,ADC_VAL); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/30/a00907a57fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/30/a00907a57fa3001e1b4082bf61e237c7 deleted file mode 100644 index cc7f7e2..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/30/a00907a57fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,548 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] = float(ADC_VAL[i])/adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/30/a042680891a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/30/a042680891a3001e1b4082bf61e237c7 deleted file mode 100644 index a26c93d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/30/a042680891a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,74 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ -} -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/d0e0a8dc8fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/32/d0e0a8dc8fa3001e1b4082bf61e237c7 deleted file mode 100644 index 5125424..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/32/d0e0a8dc8fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - -float cal_Iq(float* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/33/203a2945b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/33/203a2945b2a3001e1b4082bf61e237c7 deleted file mode 100644 index b8f03ad..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/33/203a2945b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,106 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - -float cal_Iq(float* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return Iq; -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/36/80ff39b5b1a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/36/80ff39b5b1a3001e1b4082bf61e237c7 deleted file mode 100644 index d0f6579..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/36/80ff39b5b1a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,559 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/90a1de57e6a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/38/90a1de57e6a2001e164b9bfe65a5b807 deleted file mode 100644 index 04e9688..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/38/90a1de57e6a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,14 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3b/603e70fdafa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3b/603e70fdafa3001e1b4082bf61e237c7 deleted file mode 100644 index 864b922..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3b/603e70fdafa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,553 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/709a6b2891a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3c/709a6b2891a3001e1b4082bf61e237c7 deleted file mode 100644 index c0793c0..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/709a6b2891a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,74 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3d/70310357b1a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3d/70310357b1a3001e1b4082bf61e237c7 deleted file mode 100644 index 74c13f0..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3d/70310357b1a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,559 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3d/d0b0ab3f1aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/3d/d0b0ab3f1aa2001e1ab2edb23f9b017a deleted file mode 100644 index b87e2b8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3d/d0b0ab3f1aa2001e1ab2edb23f9b017a +++ /dev/null @@ -1,8 +0,0 @@ -/* - * lowpass_filter.c - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/301017f87ba3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/301017f87ba3001e1b4082bf61e237c7 deleted file mode 100644 index 42e9593..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/301017f87ba3001e1b4082bf61e237c7 +++ /dev/null @@ -1,8 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/4041eacab2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/4041eacab2a3001e1b4082bf61e237c7 deleted file mode 100644 index 17e86fa..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/4041eacab2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,571 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return Iq; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4/90b1dc69b7a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/4/90b1dc69b7a2001e164b9bfe65a5b807 deleted file mode 100644 index 8818b61..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4/90b1dc69b7a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,14 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; - - - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/41/102c80c914a2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/41/102c80c914a2001e1ab2edb23f9b017a deleted file mode 100644 index 8058dd4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/41/102c80c914a2001e1ab2edb23f9b017a +++ /dev/null @@ -1,2 +0,0 @@ -DC22A860405A8BF2F2C095E5B6529F12=815F5664497909C3119F341D1E08B35D -eclipse.preferences.version=1 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/44/b072edf77ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/44/b072edf77ca3001e1b4082bf61e237c7 deleted file mode 100644 index 18bb68d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/44/b072edf77ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,22 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double ia,ib,ic; -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/44/c02b7ef0b6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/44/c02b7ef0b6a3001e1e298100ab8cd7a4 deleted file mode 100644 index 598cae9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/44/c02b7ef0b6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,103 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/3); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/47/303335b17ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/47/303335b17ca3001e1b4082bf61e237c7 deleted file mode 100644 index 5b2d66d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/47/303335b17ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,546 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/48/b0f203f0b6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/48/b0f203f0b6a3001e1e298100ab8cd7a4 deleted file mode 100644 index 77d6c4a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/48/b0f203f0b6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,102 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/207ac0aeb2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/207ac0aeb2a3001e1b4082bf61e237c7 deleted file mode 100644 index 29bce4b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/207ac0aeb2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,571 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t offset[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return Iq; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/709a6ee47ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/709a6ee47ca3001e1b4082bf61e237c7 deleted file mode 100644 index 92d7909..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/709a6ee47ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/b07f482ab0a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/b07f482ab0a3001e1b4082bf61e237c7 deleted file mode 100644 index e27e694..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/b07f482ab0a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,553 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/f0f6e708b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/f0f6e708b2a3001e1b4082bf61e237c7 deleted file mode 100644 index d0f6579..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/f0f6e708b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,559 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/80d499d9bda2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/4d/80d499d9bda2001e164b9bfe65a5b807 deleted file mode 100644 index d3ac86c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/80d499d9bda2001e164b9bfe65a5b807 +++ /dev/null @@ -1,13 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - - - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/54/f0fecb8e7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/54/f0fecb8e7ca3001e1b4082bf61e237c7 deleted file mode 100644 index cd59da4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/54/f0fecb8e7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1, , uint16_t& ){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/55/c06d8be6bda2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/55/c06d8be6bda2001e164b9bfe65a5b807 deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/56/2090204cb3a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/56/2090204cb3a3001e1b4082bf61e237c7 deleted file mode 100644 index eb13f92..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/56/2090204cb3a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,571 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -// float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return -sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(Iq,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/56/400400a0b5a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/56/400400a0b5a2001e164b9bfe65a5b807 deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/57/f015aad57ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/57/f015aad57ca3001e1b4082bf61e237c7 deleted file mode 100644 index e4c2e40..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/57/f015aad57ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t& ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -}; diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5a/30a15dca7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5a/30a15dca7ca3001e1b4082bf61e237c7 deleted file mode 100644 index ce83a3e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5a/30a15dca7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t& ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/406c56d8b3a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/406c56d8b3a3001e1b4082bf61e237c7 deleted file mode 100644 index d109cd0..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/406c56d8b3a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,577 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=2.5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -double current_phase[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) - -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -// float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return -sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 2000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(Iq,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/7041746491a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5e/7041746491a3001e1b4082bf61e237c7 deleted file mode 100644 index cc19f4c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/7041746491a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,82 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - offset_ia = 0; - offset_ib = 0; - offset_ic = 0; - for (int i = 0; i < calibration_rounds; i++) { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/802ba7311ba2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/5e/802ba7311ba2001e1ab2edb23f9b017a deleted file mode 100644 index 6540f01..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/802ba7311ba2001e1ab2edb23f9b017a +++ /dev/null @@ -1,13 +0,0 @@ -/* - * lowpass_filter.h - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - -#ifndef INC_LOWPASS_FILTER_H_ -#define INC_LOWPASS_FILTER_H_ - - - -#endif /* INC_LOWPASS_FILTER_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/d0c56ed091a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5e/d0c56ed091a3001e1b4082bf61e237c7 deleted file mode 100644 index 6caaa67..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/d0c56ed091a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,85 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - read_ADC_voltage(hadc1,cal_current); - for (int j=0;j<3;j++){ - offset[j]=(offset[j]*i+cal_current[j])/(i+1); - - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b6e3c3b6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b6e3c3b6a3001e1e298100ab8cd7a4 deleted file mode 100644 index 0c20bdc..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/c0b6e3c3b6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,98 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/b0ab41f9b6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/6/b0ab41f9b6a3001e1e298100ab8cd7a4 deleted file mode 100644 index 10d5345..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6/b0ab41f9b6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/61/9061eeddbda2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/61/9061eeddbda2001e164b9bfe65a5b807 deleted file mode 100644 index 42e9593..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/61/9061eeddbda2001e164b9bfe65a5b807 +++ /dev/null @@ -1,8 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/62/70104909b7a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/62/70104909b7a3001e1e298100ab8cd7a4 deleted file mode 100644 index 4c2180c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/62/70104909b7a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - int sector = floor(angle_el / M_PI/3) + 1; - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/65/50c67ab390a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/65/50c67ab390a3001e1b4082bf61e237c7 deleted file mode 100644 index 5125424..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/65/50c67ab390a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - -float cal_Iq(float* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/69/209c35f1caa2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/69/209c35f1caa2001e164b9bfe65a5b807 deleted file mode 100644 index 9a60976..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/69/209c35f1caa2001e164b9bfe65a5b807 +++ /dev/null @@ -1,14 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; - - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/69/60794154b1a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/69/60794154b1a3001e1b4082bf61e237c7 deleted file mode 100644 index 418ae3f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/69/60794154b1a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,557 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Tq=LowPassFilter_operator(angular_vel,&filter_current); - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/69/a0a1accfbda2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/69/a0a1accfbda2001e164b9bfe65a5b807 deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/30932b321aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/30932b321aa2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/a04092021ba2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/a04092021ba2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/f0801466b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/f0801466b2a3001e1b4082bf61e237c7 deleted file mode 100644 index 9e4e9c9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/f0801466b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -uint16_t offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); -float cal_Iq(float* , float ); -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6d/c06ad6d6e9a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/6d/c06ad6d6e9a2001e164b9bfe65a5b807 deleted file mode 100644 index c155fd3..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6d/c06ad6d6e9a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,493 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6d/e03096b9b5a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/6d/e03096b9b5a3001e1e298100ab8cd7a4 deleted file mode 100644 index 1fdda6c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/6d/e03096b9b5a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,98 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7/00d9e5dfb3a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/7/00d9e5dfb3a3001e1b4082bf61e237c7 deleted file mode 100644 index 0bc529c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7/00d9e5dfb3a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,577 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=2.5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -double current_phase[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -//const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) - -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -// float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return -sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 2000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(Iq,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/70/c0a13cd5b6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/70/c0a13cd5b6a3001e1e298100ab8cd7a4 deleted file mode 100644 index 3e251d6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/70/c0a13cd5b6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,101 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - - } - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/71/1066ed46b7a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/71/1066ed46b7a3001e1e298100ab8cd7a4 deleted file mode 100644 index b5ade4d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/71/1066ed46b7a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - int sector = floor(angle_el / M_PI/3) + 1; - // calculate the duty cycles - float T1 = _SQRT3 * sin(sector * _PI_3 - angle_el) * Uq / voltage_power_supply; - float T2 = _SQRT3 * sin(angle_el - (sector - 1.0) * _PI_3) * Uq / voltage_power_supply; - float T0 = 1 - T1 - T2; - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/71/c0bbda141ba2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/71/c0bbda141ba2001e1ab2edb23f9b017a deleted file mode 100644 index b54088d..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/71/c0bbda141ba2001e1ab2edb23f9b017a +++ /dev/null @@ -1,13 +0,0 @@ -/* - * as5048a.h - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - -#ifndef INC_AS5048A_H_ -#define INC_AS5048A_H_ - - - -#endif /* INC_AS5048A_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/10a9caf290a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/76/10a9caf290a3001e1b4082bf61e237c7 deleted file mode 100644 index 10cb31c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/76/10a9caf290a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,28 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/76/30cb1dc2b3a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/76/30cb1dc2b3a3001e1b4082bf61e237c7 deleted file mode 100644 index 2110d06..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/76/30cb1dc2b3a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,577 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -double current_phase[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) - -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -// float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return -sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(Iq,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7b/a0857150b1a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/7b/a0857150b1a3001e1b4082bf61e237c7 deleted file mode 100644 index 6580292..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7b/a0857150b1a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,555 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7d/402ef78990a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/7d/402ef78990a3001e1b4082bf61e237c7 deleted file mode 100644 index 5125424..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7d/402ef78990a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - -float cal_Iq(float* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7f/50655cbc7fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/7f/50655cbc7fa3001e1b4082bf61e237c7 deleted file mode 100644 index 805a2c7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/7f/50655cbc7fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,548 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] = float(ADC_VAL[i]-offset[i])/adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/80/2070fb7385a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/80/2070fb7385a3001e1b4082bf61e237c7 deleted file mode 100644 index 859e90c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/80/2070fb7385a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,69 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - - -void ADC_Select_CH0 (void) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (void) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (void) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/80/909a7afe90a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/80/909a7afe90a3001e1b4082bf61e237c7 deleted file mode 100644 index c0983d4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/80/909a7afe90a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,72 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL) diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/81/2082344ab4a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/81/2082344ab4a3001e1b4082bf61e237c7 deleted file mode 100644 index 8ee160e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/81/2082344ab4a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,577 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -double current_phase[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -//const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) - -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -// float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return -sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(Iq,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/82/9063c7d085a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/82/9063c7d085a3001e1b4082bf61e237c7 deleted file mode 100644 index 85fd9ec..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/82/9063c7d085a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,69 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/82/e0c0e0a3b5a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/82/e0c0e0a3b5a2001e164b9bfe65a5b807 deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/84/0097fa13b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/84/0097fa13b2a3001e1b4082bf61e237c7 deleted file mode 100644 index 58403bc..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/84/0097fa13b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,560 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/85/c0017655b1a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/85/c0017655b1a3001e1b4082bf61e237c7 deleted file mode 100644 index 8025d76..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/85/c0017655b1a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,557 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/85/c0cd4434b0a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/85/c0cd4434b0a3001e1b4082bf61e237c7 deleted file mode 100644 index 1c560a7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/85/c0cd4434b0a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,554 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/87/6077ee6185a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/87/6077ee6185a3001e1b4082bf61e237c7 deleted file mode 100644 index 065abeb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/87/6077ee6185a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,26 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double current_phase[3]; - - -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/89/609763cf91a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/89/609763cf91a3001e1b4082bf61e237c7 deleted file mode 100644 index 040482b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/89/609763cf91a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,86 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - offset_ia = 0; - offset_ib = 0; - offset_ic = 0; - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - read_ADC_voltage(hadc1,cal_current); - for (int j=0;j<3;j++){ - - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/89/8032fae191a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/89/8032fae191a3001e1b4082bf61e237c7 deleted file mode 100644 index e1c7192..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/89/8032fae191a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,85 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - read_ADC_voltage(hadc1,cal_current); - for (int j=0;j<3;j++){ - offset[j]=(offset[j]*i+cal_current[j])/(i+1); - } - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/00a43bacb2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/8c/00a43bacb2a3001e1b4082bf61e237c7 deleted file mode 100644 index cdf5a31..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/00a43bacb2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,570 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return Iq; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/20c7264cb2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/8c/20c7264cb2a3001e1b4082bf61e237c7 deleted file mode 100644 index a8cbe02..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/20c7264cb2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -uint16_t offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/8072d2d891a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/8c/8072d2d891a3001e1b4082bf61e237c7 deleted file mode 100644 index f93e90a..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8c/8072d2d891a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,84 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - read_ADC_voltage(hadc1,cal_current); - for (int j=0;j<3;j++){ - offset[j]=(offset[j]*i+cal_current[j])/(i+1); - } - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/202a55951aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/202a55951aa2001e1ab2edb23f9b017a deleted file mode 100644 index d88359e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/202a55951aa2001e1ab2edb23f9b017a +++ /dev/null @@ -1,8 +0,0 @@ -/* - * motor_control.c - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8e/5050197c7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/8e/5050197c7ca3001e1b4082bf61e237c7 deleted file mode 100644 index 8dde63b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/8e/5050197c7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,20 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double ia,ib,ic; -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/92/604257d8bda2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/92/604257d8bda2001e164b9bfe65a5b807 deleted file mode 100644 index 9a60976..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/92/604257d8bda2001e164b9bfe65a5b807 +++ /dev/null @@ -1,14 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; - - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/93/c05ad2a885a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/93/c05ad2a885a3001e1b4082bf61e237c7 deleted file mode 100644 index f4d1ea4..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/93/c05ad2a885a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,69 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - - -void ADC_Select_CH0 (void) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (void) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/99/a04bd32a91a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/99/a04bd32a91a3001e1b4082bf61e237c7 deleted file mode 100644 index cc19f4c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/99/a04bd32a91a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,82 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - offset_ia = 0; - offset_ib = 0; - offset_ic = 0; - for (int i = 0; i < calibration_rounds; i++) { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/99/e00a4264b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/99/e00a4264b2a3001e1b4082bf61e237c7 deleted file mode 100644 index b7ea3c7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/99/e00a4264b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include -#include - - -uint16_t offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); -float cal_Iq(float* , float ); -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/f0bdddb37ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/f0bdddb37ca3001e1b4082bf61e237c7 deleted file mode 100644 index e246572..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/f0bdddb37ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,546 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(adc1,ADC_VAL); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9b/f0ebdd57afa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/9b/f0ebdd57afa3001e1b4082bf61e237c7 deleted file mode 100644 index 9ca3b0b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9b/f0ebdd57afa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,552 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60e44bb5b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60e44bb5b2a3001e1b4082bf61e237c7 deleted file mode 100644 index 4799ad1..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/9d/60e44bb5b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,571 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return Iq; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/a09463dde7a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/a09463dde7a2001e164b9bfe65a5b807 deleted file mode 100644 index 0c0fb7c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/a09463dde7a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,492 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a2/00d9a543b3a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a2/00d9a543b3a3001e1b4082bf61e237c7 deleted file mode 100644 index 82794f8..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a2/00d9a543b3a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - - -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a3/b007c986afa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a3/b007c986afa3001e1b4082bf61e237c7 deleted file mode 100644 index 3153985..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a3/b007c986afa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,552 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a5/90187cd5b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/90187cd5b2a3001e1b4082bf61e237c7 deleted file mode 100644 index 19c7278..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a5/90187cd5b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,571 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -// float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return -sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a6/6036e39a7fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a6/6036e39a7fa3001e1b4082bf61e237c7 deleted file mode 100644 index f062866..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a6/6036e39a7fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,26 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double current_phase[3]; - - -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a9/9014b686b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/9014b686b2a3001e1b4082bf61e237c7 deleted file mode 100644 index eae2b64..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/a9/9014b686b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,570 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(float* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); - float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return Iq; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/802e503b91a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/802e503b91a3001e1b4082bf61e237c7 deleted file mode 100644 index cc19f4c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/802e503b91a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,82 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - offset_ia = 0; - offset_ib = 0; - offset_ic = 0; - for (int i = 0; i < calibration_rounds; i++) { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/c0b8fe6390a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/c0b8fe6390a3001e1b4082bf61e237c7 deleted file mode 100644 index 38204b1..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/c0b8fe6390a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,28 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/af/1023440d1ba2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/af/1023440d1ba2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b/c019673cb2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b/c019673cb2a3001e1b4082bf61e237c7 deleted file mode 100644 index c51b66f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b/c019673cb2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,560 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/6011eaf4b6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/b1/6011eaf4b6a3001e1e298100ab8cd7a4 deleted file mode 100644 index cf67178..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/6011eaf4b6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/3); - - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/a034277785a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b1/a034277785a3001e1b4082bf61e237c7 deleted file mode 100644 index 7cd6a22..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b1/a034277785a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,28 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double current_phase[3]; - -void ADC_Select_CH0(void); -void ADC_Select_CH1(void); -void ADC_Select_CH2(void); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b4/006ac10991a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b4/006ac10991a3001e1b4082bf61e237c7 deleted file mode 100644 index 4be4a5f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b4/006ac10991a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,74 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ -} -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b4/e0b71cb37ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b4/e0b71cb37ca3001e1b4082bf61e237c7 deleted file mode 100644 index e246572..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b4/e0b71cb37ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,546 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(adc1,ADC_VAL); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/30b0dc337ba3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/30b0dc337ba3001e1b4082bf61e237c7 deleted file mode 100644 index ed3689c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/30b0dc337ba3001e1b4082bf61e237c7 +++ /dev/null @@ -1,559 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/f012cd1a1ea2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/f012cd1a1ea2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/600dc5857ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/600dc5857ca3001e1b4082bf61e237c7 deleted file mode 100644 index eac73eb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/600dc5857ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1, uint16_t & ADC_VAL ){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/0050ce1286a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b8/0050ce1286a3001e1b4082bf61e237c7 deleted file mode 100644 index 2271707..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/0050ce1286a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,78 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.h - * @brief : Header for main.c file. - * This file contains the common defines of the application. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "motor_control.h" -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - -/* Exported functions prototypes ---------------------------------------------*/ -void Error_Handler(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ -#define LED_Pin GPIO_PIN_13 -#define LED_GPIO_Port GPIOC -#define SPI1_CSn_Pin GPIO_PIN_0 -#define SPI1_CSn_GPIO_Port GPIOB -#define Motor_Enable_Pin GPIO_PIN_15 -#define Motor_Enable_GPIO_Port GPIOB - -/* USER CODE BEGIN Private defines */ -void MX_ADC1_Init(void); - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/50b20b4a91a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b8/50b20b4a91a3001e1b4082bf61e237c7 deleted file mode 100644 index c6cb6a5..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/b8/50b20b4a91a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/3083715385a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/3083715385a3001e1b4082bf61e237c7 deleted file mode 100644 index 4eb4648..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/3083715385a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c/003a5bd8bda2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/c/003a5bd8bda2001e164b9bfe65a5b807 deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c/f07c67c57ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c/f07c67c57ca3001e1b4082bf61e237c7 deleted file mode 100644 index e246572..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c/f07c67c57ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,546 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(adc1,ADC_VAL); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c0/102db39a7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c0/102db39a7ca3001e1b4082bf61e237c7 deleted file mode 100644 index 99883a1..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c0/102db39a7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1, uint16_t& ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c1/f0e415f9afa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c1/f0e415f9afa3001e1b4082bf61e237c7 deleted file mode 100644 index 721a658..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c1/f0e415f9afa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,552 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c2/d07ed26373a3001e1f4188b4f6511e49 b/.metadata/.plugins/org.eclipse.core.resources/.history/c2/d07ed26373a3001e1f4188b4f6511e49 deleted file mode 100644 index 8681769..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c2/d07ed26373a3001e1f4188b4f6511e49 +++ /dev/null @@ -1,15 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c2/f02ccbfb1aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/c2/f02ccbfb1aa2001e1ab2edb23f9b017a deleted file mode 100644 index 871983b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c2/f02ccbfb1aa2001e1ab2edb23f9b017a +++ /dev/null @@ -1,8 +0,0 @@ -/* - * pid.c - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/a0dcedb8e9a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/a0dcedb8e9a2001e164b9bfe65a5b807 deleted file mode 100644 index 3505ba7..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/a0dcedb8e9a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,492 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c6/50656f4eb7a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/50656f4eb7a3001e1e298100ab8cd7a4 deleted file mode 100644 index 96d49fd..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c6/50656f4eb7a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,144 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - int sector = floor(angle_el / M_PI/3) + 1; - // calculate the duty cycles - float T1 = _SQRT3 * sin(sector * _PI_3 - angle_el) * Uq / voltage_power_supply; - float T2 = _SQRT3 * sin(angle_el - (sector - 1.0) * _PI_3) * Uq / voltage_power_supply; - float T0 = 1 - T1 - T2; - - - float Ta, Tb, Tc; - switch (sector) - { - case 1: - Ta = T1 + T2 + T0 / 2; - Tb = T2 + T0 / 2; - Tc = T0 / 2; - break; - case 2: - Ta = T1 + T0 / 2; - Tb = T1 + T2 + T0 / 2; - Tc = T0 / 2; - break; - case 3: - Ta = T0 / 2; - Tb = T1 + T2 + T0 / 2; - Tc = T2 + T0 / 2; - break; - case 4: - Ta = T0 / 2; - Tb = T1 + T0 / 2; - Tc = T1 + T2 + T0 / 2; - break; - case 5: - Ta = T2 + T0 / 2; - Tb = T0 / 2; - Tc = T1 + T2 + T0 / 2; - break; - case 6: - Ta = T1 + T2 + T0 / 2; - Tb = T0 / 2; - Tc = T1 + T0 / 2; - break; - default: - Ta = 0; - Tb = 0; - Tc = 0; - } - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c6/f05af97d7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c6/f05af97d7ca3001e1b4082bf61e237c7 deleted file mode 100644 index 7541435..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c6/f05af97d7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "stm32f1xx_hal.h" -#include - - -void read_ADC_voltage(ADC_HandleTypeDef hadc1, uint16_t & ADC_VAL ){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c7/2015d38c7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c7/2015d38c7ca3001e1b4082bf61e237c7 deleted file mode 100644 index 0526712..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c7/2015d38c7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c9/00a203cb78a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c9/00a203cb78a3001e1b4082bf61e237c7 deleted file mode 100644 index 0c825af..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c9/00a203cb78a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,15 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -double ia,ib,ic; -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c9/d04486451ea2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/c9/d04486451ea2001e1ab2edb23f9b017a deleted file mode 100644 index 9b98253..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/c9/d04486451ea2001e1ab2edb23f9b017a +++ /dev/null @@ -1,13 +0,0 @@ -/* - * motor_control.h - * - * Created on: Dec 23, 2023 - * Author: haotian - */ - -#ifndef INC_MOTOR_CONTROL_H_ -#define INC_MOTOR_CONTROL_H_ - - - -#endif /* INC_MOTOR_CONTROL_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cb/70786ab57ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/cb/70786ab57ca3001e1b4082bf61e237c7 deleted file mode 100644 index e246572..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/cb/70786ab57ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,546 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(adc1,ADC_VAL); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cb/906614481aa2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/cb/906614481aa2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ce/10b6999e7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ce/10b6999e7ca3001e1b4082bf61e237c7 deleted file mode 100644 index ce83a3e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ce/10b6999e7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" - -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t& ADC_VAL){ - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cf/707f5054afa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/cf/707f5054afa3001e1b4082bf61e237c7 deleted file mode 100644 index e17656e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/cf/707f5054afa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,552 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d1/908f5bbdb0a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d1/908f5bbdb0a3001e1b4082bf61e237c7 deleted file mode 100644 index 98e9700..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d1/908f5bbdb0a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,554 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - - setPhaseVoltage(_constrain(velo_controller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d4/00bf13ceb6a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/00bf13ceb6a3001e1e298100ab8cd7a4 deleted file mode 100644 index fe99479..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d4/00bf13ceb6a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,99 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d5/400d938e7fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/400d938e7fa3001e1b4082bf61e237c7 deleted file mode 100644 index 865ee6f..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d5/400d938e7fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,548 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] = float(ADC_VAL[i])/ - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/9006f27f90a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d6/9006f27f90a3001e1b4082bf61e237c7 deleted file mode 100644 index 8812406..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/9006f27f90a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,28 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375/12; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/9096a010b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d6/9096a010b2a3001e1b4082bf61e237c7 deleted file mode 100644 index 998889e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d6/9096a010b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,559 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - setPhaseVoltage(_constrain(,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d7/10006abeb5a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/d7/10006abeb5a3001e1e298100ab8cd7a4 deleted file mode 100644 index e8273c0..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/d7/10006abeb5a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,577 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -uint16_t current_offset[3]; -double current_phase[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -//const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) - -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -float cal_Iq(double* current_phase, float angle_el){ - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - float I_alpha=current_phase[0]; - float I_beta=_1_SQRT3*(2*current_phase[1]+current_phase[0]); -// float Iq=-sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -// float Id=cos(angle_el)*I_alpha+sin(angle_el)*I_beta; - return -sin(angle_el)*I_alpha+cos(angle_el)*I_beta; -} - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,¤t_offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-current_offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(Iq,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/de/104c528b7da3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/de/104c528b7da3001e1b4082bf61e237c7 deleted file mode 100644 index 877f6a6..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/de/104c528b7da3001e1b4082bf61e237c7 +++ /dev/null @@ -1,26 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double ia,ib,ic; - - -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/df/902c375cb2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/df/902c375cb2a3001e1b4082bf61e237c7 deleted file mode 100644 index 9e4e9c9..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/df/902c375cb2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -uint16_t offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); -float cal_Iq(float* , float ); -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e0/4055d0797da3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/4055d0797da3001e1b4082bf61e237c7 deleted file mode 100644 index 7eea858..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e0/4055d0797da3001e1b4082bf61e237c7 +++ /dev/null @@ -1,25 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double ia,ib,ic; - - -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e1/5039ae40b2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e1/5039ae40b2a3001e1b4082bf61e237c7 deleted file mode 100644 index efc3724..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e1/5039ae40b2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,561 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -#include "motor_control.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/006b806eb2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/006b806eb2a3001e1b4082bf61e237c7 deleted file mode 100644 index cc3e65e..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/006b806eb2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,561 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; - -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -static void MX_ADC1_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -struct LowPassFilter filter_current= {.Tf=0.05,.y_prev=0.0f}; //Tf=5ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=2.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=1.0,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - calibrateOffsets(hadc1,&offset); - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float velo_controller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - float Iq=cal_Iq(current_phase, _electricalAngle(angle_now, pole_pairs)); - float filtered_Iq=LowPassFilter_operator(angular_vel,&filter_current); - - float current_controller_output=PID_operator(velo_controller_out-filtered_Iq,&pid_controller_current); - - setPhaseVoltage(_constrain(current_controller_output,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/a036ab197ba3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/a036ab197ba3001e1b4082bf61e237c7 deleted file mode 100644 index 826b062..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/a036ab197ba3001e1b4082bf61e237c7 +++ /dev/null @@ -1,558 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - ADC_Select_CH0(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e4/60fd2f8b85a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e4/60fd2f8b85a3001e1b4082bf61e237c7 deleted file mode 100644 index f4e1806..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e4/60fd2f8b85a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,548 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] = float(ADC_VAL[i]-offset[i])/float(adc_range)*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e5/40884b6fb7a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/e5/40884b6fb7a2001e164b9bfe65a5b807 deleted file mode 100644 index 2f43913..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e5/40884b6fb7a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,14 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; -int adc_range=4095; - - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e7/50e4a77b91a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e7/50e4a77b91a3001e1b4082bf61e237c7 deleted file mode 100644 index 89a44cb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e7/50e4a77b91a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,83 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - offset_ia = 0; - offset_ib = 0; - offset_ic = 0; - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e7/9014c9c38fa3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e7/9014c9c38fa3001e1b4082bf61e237c7 deleted file mode 100644 index 8a61f1b..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/e7/9014c9c38fa3001e1b4082bf61e237c7 +++ /dev/null @@ -1,22 +0,0 @@ -/* - * motor_control.h - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#ifndef INC_MOTOR_CONTROL_H_ -#define INC_MOTOR_CONTROL_H_ -#include "stm32f1xx_hal.h" -#include - - -#define _constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) - -float _normalizeAngle(float angle); -float _electricalAngle(float shaft_angle, int pole_pairs); -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE); -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE); -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE); - -#endif /* INC_MOTOR_CONTROL_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ec/30362f7eb7a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/ec/30362f7eb7a3001e1e298100ab8cd7a4 deleted file mode 100644 index 6d31f03..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ec/30362f7eb7a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,144 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - int sector = floor(angle_el / M_PI*3) + 1; - // calculate the duty cycles - float T1 = _SQRT3 * sin(sector * M_PI/3 - angle_el) * Uq / voltage_power_supply; - float T2 = _SQRT3 * sin(angle_el - (sector - 1.0) * M_PI/3) * Uq / voltage_power_supply; - float T0 = 1 - T1 - T2; - - - float Ta, Tb, Tc; - switch (sector) - { - case 1: - Ta = T1 + T2 + T0 / 2; - Tb = T2 + T0 / 2; - Tc = T0 / 2; - break; - case 2: - Ta = T1 + T0 / 2; - Tb = T1 + T2 + T0 / 2; - Tc = T0 / 2; - break; - case 3: - Ta = T0 / 2; - Tb = T1 + T2 + T0 / 2; - Tc = T2 + T0 / 2; - break; - case 4: - Ta = T0 / 2; - Tb = T1 + T0 / 2; - Tc = T1 + T2 + T0 / 2; - break; - case 5: - Ta = T2 + T0 / 2; - Tb = T0 / 2; - Tc = T1 + T2 + T0 / 2; - break; - case 6: - Ta = T1 + T2 + T0 / 2; - Tb = T0 / 2; - Tc = T1 + T0 / 2; - break; - default: - Ta = 0; - Tb = 0; - Tc = 0; - } - // 克拉克逆变换 - float Ua = Ta * voltage_power_supply; - float Ub = Tb * voltage_power_supply; - float Uc = Tc * voltage_power_supply; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/b067264eb2a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/b067264eb2a3001e1b4082bf61e237c7 deleted file mode 100644 index dfc6efe..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/b067264eb2a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,29 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ - -#include "stm32f1xx_hal.h" -#include - - - -uint16_t offset[3]; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2375.0/12.0; //KV number (RPM is 2149 - 2375, when operating voltage is 12V) -double current_phase[3]; - -void ADC_Select_CH0(ADC_HandleTypeDef); -void ADC_Select_CH1(ADC_HandleTypeDef); -void ADC_Select_CH2(ADC_HandleTypeDef); -void read_ADC_voltage(ADC_HandleTypeDef ,uint16_t *); -void calibrateOffsets(ADC_HandleTypeDef,uint16_t *); -float cal_Iq(float* current_phase, float angle_el) -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f/60a28cfb90a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/f/60a28cfb90a3001e1b4082bf61e237c7 deleted file mode 100644 index 1481685..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f/60a28cfb90a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,71 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f/f03ab22b86a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/f/f03ab22b86a3001e1b4082bf61e237c7 deleted file mode 100644 index f1c50b2..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f/f03ab22b86a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,78 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.h - * @brief : Header for main.c file. - * This file contains the common defines of the application. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "motor_control.h" -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - -/* Exported functions prototypes ---------------------------------------------*/ -void Error_Handler(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ -#define LED_Pin GPIO_PIN_13 -#define LED_GPIO_Port GPIOC -#define SPI1_CSn_Pin GPIO_PIN_0 -#define SPI1_CSn_GPIO_Port GPIOB -#define Motor_Enable_Pin GPIO_PIN_15 -#define Motor_Enable_GPIO_Port GPIOB - -/* USER CODE BEGIN Private defines */ -static void MX_ADC1_Init(void); - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f2/d029c91ab7a2001e164b9bfe65a5b807 b/.metadata/.plugins/org.eclipse.core.resources/.history/f2/d029c91ab7a2001e164b9bfe65a5b807 deleted file mode 100644 index 740f618..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f2/d029c91ab7a2001e164b9bfe65a5b807 +++ /dev/null @@ -1,13 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; - - -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f9/f085a20ab7a3001e1e298100ab8cd7a4 b/.metadata/.plugins/org.eclipse.core.resources/.history/f9/f085a20ab7a3001e1e298100ab8cd7a4 deleted file mode 100644 index 4c2180c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/f9/f085a20ab7a3001e1e298100ab8cd7a4 +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mortor_control.c - * - * Created on: Jun 17, 2023 - * Author: hht - */ - -#include "motor_control.h" - -extern float zero_electric_angle; -extern int pole_pairs; -extern float shaft_angle; -extern int dir; -extern float voltage_limit; -extern float voltage_power_supply; -extern int period; - -float _normalizeAngle(float angle){ - float a = fmod(angle, 2*M_PI); //取余运算可以用于归一化,列出特殊值例子算便知 - return a >= 0 ? a : (a + 2*M_PI); - //三目运算符。格式:condition ? expr1 : expr2 - //其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。 - //可以将三目运算符视为 if-else 语句的简化形式。 - //fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2M_PI 的符号相反。 - //也就是说,如果 angle 的值小于 0 且 _2M_PI 的值为正数,则 fmod(angle, _2M_PI) 的余数将为负数。 - //例如,当 angle 的值为 -M_PI/2,_2M_PI 的值为 2M_PI 时,fmod(angle, _2M_PI) 将返回一个负数。 - //在这种情况下,可以通过将负数的余数加上 _2M_PI 来将角度归一化到 [0, 2M_PI] 的范围内,以确保角度的值始终为正数。 -} - -float _electricalAngle(float shaft_angle, int pole_pairs) { - return _normalizeAngle(((float)(dir * pole_pairs)*shaft_angle)-zero_electric_angle); -} - - - -//开环速度函数 -float velocityOpenloop(float target_velocity, float Uq, TIM_TypeDef * TIM_BASE){ -// uint32_t now_us = getCurrentMicros(); -// uint32_t now_us = HAL_GetTick(); -// Provides a tick value in microseconds. - - //计算当前每个Loop的运行时间间隔 -// float Ts = (now_us - open_loop_timestamp) * 1e-3f; - float Ts=2.5E-3f; - - // 通过乘以时间间隔和目标速度来计算需要转动的机械角度,存储在 shaft_angle 变量中。 - //在此之前,还需要对轴角度进行归一化,以确保其值在 0 到 2π 之间。 - shaft_angle = _normalizeAngle(shaft_angle + target_velocity*Ts); - //以目标速度为 10 rad/s 为例,如果时间间隔是 1 秒,则在每个循环中需要增加 10 * 1 = 10 弧度的角度变化量,才能使电机转动到目标速度。 - //如果时间间隔是 0.1 秒,那么在每个循环中需要增加的角度变化量就是 10 * 0.1 = 1 弧度,才能实现相同的目标速度。 - //因此,电机轴的转动角度取决于目标速度和时间间隔的乘积。 - - // Uq is not related to voltage limit - - - setPhaseVoltage(Uq, 0, _electricalAngle(shaft_angle, pole_pairs),TIM_BASE); - -// open_loop_timestamp = now_us; //用于计算下一个时间间隔 - - return Uq; -} - - - - - -void setPwm(float Ua, float Ub, float Uc, TIM_TypeDef * TIM_BASE) { - -// // 限制上限 - Ua = _constrain(Ua, 0.0f, voltage_limit); - Ub = _constrain(Ub, 0.0f, voltage_limit); - Uc = _constrain(Uc, 0.0f, voltage_limit); - // 计算占空比 - // 限制占空比从0到1 - float dc_a = _constrain(Ua / voltage_power_supply, 0.0f , 1.0f ); - float dc_b = _constrain(Ub / voltage_power_supply, 0.0f , 1.0f ); - float dc_c = _constrain(Uc / voltage_power_supply, 0.0f , 1.0f ); - - //写入PWM到PWM 0 1 2 通道 - TIM_BASE->CCR1 = (uint32_t) roundf(dc_a*period); - TIM_BASE->CCR2 = (uint32_t) roundf(dc_b*period); - TIM_BASE->CCR3 = (uint32_t) roundf(dc_c*period); - -} - -void setPhaseVoltage(float Uq,float Ud, float angle_el, TIM_TypeDef * TIM_BASE) { - angle_el = _normalizeAngle(angle_el + zero_electric_angle); - if (Uq <0 ){ - angle_el+=M_PI; - Uq=abs(Uq); - } - angle_el = _normalizeAngle (angle_el+M_PI/2); - int sector = floor(angle_el / M_PI/3) + 1; - // 帕克逆变换 - float Ualpha = -Uq*sin(angle_el); - float Ubeta = Uq*cos(angle_el); - - // 克拉克逆变换 - float Ua = Ualpha + voltage_power_supply/2; - float Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2; - float Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2; - setPwm(Ua,Ub,Uc,TIM_BASE); -} - diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/70aadd1f86a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/fa/70aadd1f86a3001e1b4082bf61e237c7 deleted file mode 100644 index 0abd50c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/70aadd1f86a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,548 +0,0 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "usb_device.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -#include "usbd_cdc_if.h" -#include "string.h" -#include "as5048a.h" -#include "pid.h" -#include "lowpass_filter.h" -#include "current_sense.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim2; -ADC_HandleTypeDef hadc1; -/* USER CODE BEGIN PV */ -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM1_Init(void); -static void MX_TIM2_Init(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -char data[50]; - - -float open_loop_timestamp=0; -float zero_electric_angle=0; -float shaft_angle=0; -float voltage_limit=12; -float voltage_power_supply=12; -int period=1600; // period for the PWM -int dir=1; // anti clockwise direction is 1 , clockwise is -1 -int pole_pairs=11; -int index1=0; -uint16_t raw1,raw2,raw3; -float motor_target= M_PI/6; -float Ts=5E-3f; -float Kp=0.167f; -float angle_prev=-1.0f; -float target_vel=5; -uint16_t ADC_VAL[3]; -struct LowPassFilter filter= {.Tf=0.01,.y_prev=0.0f}; //Tf=10ms -// limit=voltage_power_supply/2; -struct PIDController pid_controller = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - -struct PIDController pid_controller_current = {.P=0.5,.I=0.1,.D=0.0,.output_ramp=100.0,.limit=6,.error_prev=0,.output_prev=0,.integral_prev=0}; - - -float cal_angular_vel(float angle_now){ - if (angle_prev < 0){ - angle_prev=angle_now; - return 0; - } - float delta_angle=angle_now -angle_prev; - if (delta_angle >= 1.6*M_PI){ - delta_angle-=2*M_PI; - } - if (delta_angle <= -1.6*M_PI){ - delta_angle+=2*M_PI; - } - angle_prev=angle_now; - return delta_angle/Ts; - - -} -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_USB_DEVICE_Init(); - MX_TIM1_Init(); - MX_TIM2_Init(); - MX_ADC1_Init(); - /* USER CODE BEGIN 2 */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_SET); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); - HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); - - setPhaseVoltage(3,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - HAL_Delay(3000); - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - zero_electric_angle=_electricalAngle(M_PI*read_raw/MAX_ANGLE_VALUE,pole_pairs); - setPhaseVoltage(0,0,_electricalAngle(M_PI*1.5f,pole_pairs),TIM1); - sprintf(data, "zero_electric_angle: %i \n", (int) floor(zero_electric_angle/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); - HAL_TIM_Base_Start_IT(&htim2); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB; - PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 3; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_2; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = ADC_REGULAR_RANK_3; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_16BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM1 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM1_Init(void) -{ - - /* USER CODE BEGIN TIM1_Init 0 */ - /* USER CODE END TIM1_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - - /* USER CODE BEGIN TIM1_Init 1 */ - /* USER CODE END TIM1_Init 1 */ - htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; - htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 2400-1; - htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM1_Init 2 */ - /* USER CODE END TIM1_Init 2 */ - HAL_TIM_MspPostInit(&htim1); - -} - -/** - * @brief TIM2 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM2_Init(void) -{ - - /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim2.Instance = TIM2; - htim2.Init.Prescaler = 90-1; - htim2.Init.CounterMode = TIM_COUNTERMODE_UP; - htim2.Init.Period = 4000-1; - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim2) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; -/* USER CODE BEGIN MX_GPIO_Init_1 */ -/* USER CODE END MX_GPIO_Init_1 */ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(SPI1_CSn_GPIO_Port, SPI1_CSn_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(Motor_Enable_GPIO_Port, Motor_Enable_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin : LED_Pin */ - GPIO_InitStruct.Pin = LED_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : SPI1_CSn_Pin */ - GPIO_InitStruct.Pin = SPI1_CSn_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(SPI1_CSn_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : Motor_Enable_Pin */ - GPIO_InitStruct.Pin = Motor_Enable_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(Motor_Enable_GPIO_Port, &GPIO_InitStruct); - -/* USER CODE BEGIN MX_GPIO_Init_2 */ -/* USER CODE END MX_GPIO_Init_2 */ -} - -/* USER CODE BEGIN 4 */ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - // Check which version of the timer triggered this callback and toggle LED - if (htim == &htim2 ) - { - - - - index1+=1; - uint16_t read_raw=read(&hspi1, SPI1_CSn_GPIO_Port,SPI1_CSn_Pin,AS5048A_ANGLE); - float angle_now=(float)read_raw /(float)MAX_ANGLE_VALUE *2*M_PI*dir; - -// close loop position control -// float angle_error=motor_target-angle_now; -// -// angle_error=_normalizeAngle(angle_error); -// if (angle_error > M_PI){ -// angle_error-=2*M_PI; -// } -// setPhaseVoltage(_constrain(Kp*(angle_error)/M_PI*180,-voltage_power_supply/2,voltage_power_supply/2),0,_electricalAngle(angle_now,pole_pairs),TIM1); -// sprintf(data, "angle_error : %i \n", (int) floor(angle_error/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - // open loop speed control -// velocityOpenloop(5,5.5,TIM1); -// closed loop speed control - float angular_vel=cal_angular_vel(angle_now); - float filtered_vel=LowPassFilter_operator(angular_vel,&filter); - float contorller_out=PID_operator(target_vel-filtered_vel,&pid_controller); - setPhaseVoltage(_constrain(contorller_out,-voltage_power_supply/2,voltage_power_supply/2), 0, _electricalAngle(angle_now, pole_pairs),TIM1); -// sprintf(data, "angle_now : %i \t angle_prev : %i \n", (int) floor(angle_now/M_PI*180), (int) floor(angle_prev/M_PI*180)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - sprintf(data, "angular_vel : %i \n", (int) floor(angular_vel/M_PI*180)); - CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "open loop control \n"); -// sprintf(data, "angle: %u \n", read_raw); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); -// sprintf(data, "angle_now : %i \n", (int) floor(angle_now*180/M_PI)); -// CDC_Transmit_FS((uint8_t*) data, strlen(data)); - - read_ADC_voltage(hadc1,ADC_VAL); - for (int i=0;i<3;i++){ - current_phase[i] =(float) ( ADC_VAL[i]-offset[i])/(float) adc_range*Vref/Rsense; - } - - - if (index1 == 200){ - HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); - index1=0; - } - } -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/f006690886a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/fa/f006690886a3001e1b4082bf61e237c7 deleted file mode 100644 index 2e0e371..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fa/f006690886a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,78 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.h - * @brief : Header for main.c file. - * This file contains the common defines of the application. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "motor_control.h" -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - -/* Exported functions prototypes ---------------------------------------------*/ -void Error_Handler(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ -#define LED_Pin GPIO_PIN_13 -#define LED_GPIO_Port GPIOC -#define SPI1_CSn_Pin GPIO_PIN_0 -#define SPI1_CSn_GPIO_Port GPIOB -#define Motor_Enable_Pin GPIO_PIN_15 -#define Motor_Enable_GPIO_Port GPIOB - -/* USER CODE BEGIN Private defines */ - - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/e0a2386591a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/e0a2386591a3001e1b4082bf61e237c7 deleted file mode 100644 index 89a44cb..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/e0a2386591a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,83 +0,0 @@ -/* - * current_sense.c - * - * Created on: Dec 24, 2023 - * Author: haotian - */ -#include "current_sense.h" -#include "main.h" - - - -void ADC_Select_CH0 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH1 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} - -void ADC_Select_CH2 (ADC_HandleTypeDef hadc1) -{ - ADC_ChannelConfTypeDef sConfig = {0}; - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_2; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } -} -void read_ADC_voltage(ADC_HandleTypeDef hadc1,uint16_t *ADC_VAL){ - ADC_Select_CH0(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[0] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH1(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[1] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - ADC_Select_CH2(hadc1); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 1000); - ADC_VAL[2] = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); -} -void calibrateOffsets(ADC_HandleTypeDef hadc1,uint16_t *offset){ - const int calibration_rounds = 1000; - - // 查找0电流时候的电压 - offset_ia = 0; - offset_ib = 0; - offset_ic = 0; - uint16_t cal_current[3]; - for (int i = 0; i < calibration_rounds; i++) { - - } -} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/30368b291ba2001e1ab2edb23f9b017a b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/30368b291ba2001e1ab2edb23f9b017a deleted file mode 100644 index e69de29..0000000 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/80432c64b3a3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/80432c64b3a3001e1b4082bf61e237c7 deleted file mode 100644 index e31c648..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/80432c64b3a3001e1b4082bf61e237c7 +++ /dev/null @@ -1,3 +0,0 @@ -66BE74F758C12D739921AEA421D593D3=0 -DC22A860405A8BF2F2C095E5B6529F12=815F5664497909C3119F341D1E08B35D -eclipse.preferences.version=1 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/90f89a7b7ca3001e1b4082bf61e237c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/fe/90f89a7b7ca3001e1b4082bf61e237c7 deleted file mode 100644 index 8aa303c..0000000 --- a/.metadata/.plugins/org.eclipse.core.resources/.history/fe/90f89a7b7ca3001e1b4082bf61e237c7 +++ /dev/null @@ -1,16 +0,0 @@ -/* - * current_sense.h - * - * Created on: Dec 24, 2023 - * Author: haotian - */ - -#ifndef INC_CURRENT_SENSE_H_ -#define INC_CURRENT_SENSE_H_ -float offset_ia,offset_ib,offset_ib; -const int adc_range=4095; -const double Vref=3.3; // Voltage -const double Rsense=0.33; // Ohm -const double KV= 2000; //KV number -double ia,ib,ic; -#endif /* INC_CURRENT_SENSE_H_ */ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/SVPWM/.indexes/af/history.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/SVPWM/.indexes/af/history.index deleted file mode 100644 index d1130a8b9466388aa30610d75af49b49071427c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmZQ#U|?WmP}SEfPAw_P%u6rUFD}V7HcBo{O3h43)hj5<&q_@$0n({y#SBah&N?ZZ r7c41`<96GA_h6BO>Z~Z&t|Mz;A%Uo zhmnCnK-q;Cn>YhM!kB{06p#@Qq8+{DkcVa`Q{_i{g{> z^Gb^HbAX01PY^kIxPLK&oU}vJ{=`S-$A82JfepLh(&mb6$qu(bu=od|vr^c^ku6Cs zEhnH{4zY5pNJlLl*yW9wPpL z%P9p}++Z$5e1eX746=BEJw$v%x|$!d_zq);xWaKYA7t?h4=yeSxhG%~x7S1@_sm#y z9xN`f^3EPi0ezhq?b2PrLJ@dYO8<*i8OINWFkizk%7 zOGFm`@FNx?ZuWRqJ(Btt8?<;@1|<%Y<4(Bdy7dmET_Yhn`z0Fo1# A`Tzg` diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/SVPWM/.indexes/bf/c4/history.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/SVPWM/.indexes/bf/c4/history.index deleted file mode 100644 index 019f4568b6eaa342934795b0513c0e96d4d2528d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2891 zcmZwJe{c+E90u@>s6<=S(@2FDJB;a}m1`0l(b`m*Bj_1aMoTtxjwF)1bxHLkAy?!C z8LriG4Z{lBOM;%n#kGSh^&^s&t2A;|nWjW3lbKUh!bp30zcG2tV%}V$HKMzV$fbnr#pvq%pJ|_?_3`L6eaYp-`jP1B9^_K-GBtW&f{*oZ=_h-m z^ReXeyQ$&m-oQnccNFKeJK+6jn#jeHqQ~gYMeA8!Sa|YI0pxv$?9^j8=R=PwEnu!J zxa2~YX0Bt-OOLbAZ8>Y1Yt}BGgRYL5!CWdfwdBFNslOyL4@8zVplddgYxXRxMd#C| zv%IS6t6k{s*`5AoWih%njNCTUvjyD|N*-vh+l(H#H;wi4k@ZFB4{ON9K4%Khb)S<5 z7PPHGj~YboD=J-vu6und>({9IKg@;qU|pBGtK&OYGB^Esyo4M4O5%=o<9=`0Q|AVD z9i|NPCsImQR`QaxjBKMNc$#|n+~t!72A>*O(ONNSM@SCu8du!WrrA0wraR|UU2T~u zX{KODjEYM?;R)_&@Q6>j@}kClj!8$^iR9PBO+NxVO$zbQN&WT4@0H-zc}JKF86Wu3 zUA{`@nz})!&~4Rj>UZ!n(A8B3nLDEL8gLT$&E!JD?OJs0^#d#~wj_Gc1ur?DqZ~q) zUF6)p_yg#L73H*UzbZSr_%b=S%w|G&-Y8{x{rE!yx=>553|Kl5T~=Hy&uxDcfgW{` z+_6noq3d(V1OMI(N0;V*&3bJAjrSae_n&loFLUXw(D~?v*T|KS74y)&SIEVc33JiK zYI3qer>{dTat_>T1CTj&w*7c&pE zM7E*pUT`vZhn=^hyDx8}{GF!x=t4EQl&_zQ?j5#)ojj?mX^0)xt+_#yOnef(2`84b zaS_YwjUOG$hkQ~zx!gN!Kf14MAPP~ILx9nW209e4ZiHB!_4ogV;_rZSbQ3~su#K5Xr6_x ztFNW}lGdr{V#9g*81K~#L05F-fr66f(E|dxq?*>~)Rj^O~7`fQ@_CM&& zJIR$%s{`G+`|r?ays#(bZQtMZV?L_&99vh}GqC|(dxD&+j<|sC%k9ipUH<{yTdJ_0 zX3e(m@Y3-2q~ADx!iXt2v}A4Y)&Qqj&KitWG;+;umN3XuVLz3o<2Zj3!Q-(s9qqm2c0& oxJ#>L^^PU|blo}kQdf9>m((jf|N1$E=XwotH(Qp#lfk`5*_VSYf7+7q}aT?ih) zOLz;fA%aJ6q5*>o7sEI3zPvoo%jWY&LI~-QJvzD?jxXt%(nv2Pr`&0c(#{M@gT1*g z1^(5ivr6cCH#k{7;BAH6;x$B0NShqbEOaBdXEzKYGgsPzlSbsyH+=511*Fab)441C zHV6YM1AA9tYhk~8Fgcq3Gt(3nr(~-T68o-9QHP#v$HP7L-_AeDcH3s8IW3uxJzmq- z3jT!OpVe@%%qnJ#kohmxVNDfrR)|zHi-RmPXiWr}R;3r=s;rn5X@O8F?}hqDVG@tq WVcdjq?PsQcVV@e<;A8z7zJCEmeR{?K delta 469 zcmZ{g&q@O^5XQ3=>YtY|x16?15j=@Kco9JnDpo9_+3eIE$R@exyUJovlGwUGfJCzictb0_}kh8j@8Yo<$ zeiq$iSw_9tITocxg~T&ZS~^K+4Ywmc@41`<96GA_h6BO>Z~Z&t|Mz;A%Uo zhmnCnK-q;Cn>d3M!kC==@`A+T;`p@8oRZWckZBFt%MForS^R~VW?iA|hA5@A|$ zX;D#XUP*j$YF=?F&@f4cn@gQHFJ_RFc4*q4_{jXY#MCuQKu-Ih7qxN|lK6((t03YH zB5BCtKh8tMA81q;`l$0p9ek4SU{nJJ)j`ykrUOAaX)1pK!F=Yj%@x_O9d3bO!#)U|mBJHz&WhuN%=EcS5}OQ+XFZ`P}$^L3vHDuW?&M^1jBMjxdn3w*BnbrCgWMMUGB#&y*JCeE?O zUKv1$^zchD^Ep{M*QPS8md43cGc}_7_4hFDkjZF`bw`MNJ||Dk)d)G;XDa+JcTZx} zbABzY5OqKhHbG_QO^c=#>! zDDT>-`^Q2j(B+TYsJjAxu%Ns8kFfmh;WTu&*n;kP{y^=_y%n6p&skvI&hdTJ zl@FsU%D`<`wozATKKi~CJUx-QxG3-xy3d(G^Zeq&htSiX*hHOkI#29|o}jE0>i&|f zjuLR?qs+Ypu`TGv0Oo=*w;A1gH<|Uc4!h9@{$xJ#-LwC5*(h^q?CP_acMZyEkF~vB zg>I}_Pd&IIdaM}s$*oMHE_DsXqVq*Ob@8?OaCBL5`SF?a_vZHZ|1teKKAloMr8(sZ zBu)FNi$ixj=$?bc%s*ET-+;Vi6?50M>zB~euPW%bq`kn!F&-=`M9as&OUVMLFUpE z8C~dH4jY=_mM@Q?yEe`GD{ecwF_5`=V{;X{bs=;ARQDlt|6lLYeR83_mFV|7nJX7} zl%dN%WA5KNu^T;XIdflST^_ppg?HHb1TVXfLuuTXeT)ueLB;h}7_$Eyhp9kUsMBYv zb=pF`E`NHMg1Cei*W=KXKk^e@L~+67#vh;D`;j^yb?*SW+|o(iH{uwof=lEmVm|U~ j_8__}lez2Wk}K%OxCA=+Tx9AO_^(D5%AANL*7^Kjxmxo% diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/closedloop_speed_control/.indexes/bf/be/history.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/closedloop_speed_control/.indexes/bf/be/history.index deleted file mode 100644 index f84ef773f94fb2fadcf719028b0658d3cab5f56b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmZQ#U|?Wmkkoh1FG|(-%uCi!E-flb%`1s7PR%P$)yrUDXRwOCv3C)JoS66Qf2m7% zuwe+jv{_R#SSd)(BYlG9ZCHPMu_-?jdwDU#T9;8gVkTqJSl}N9`Few az96Vu5?Nd#(Fm;m!GQ;hw<4Jj69)jbg-e+L diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/closedloop_speed_control/.indexes/bf/c4/history.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/closedloop_speed_control/.indexes/bf/c4/history.index deleted file mode 100644 index 3243986d689599d760fa12b4f329a85c4707b985..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 zcmZQ#U|?Wmkkoh1FG|%9E=tx7{^lF#?4dk(Gj! z!IZMXl;&eq3UU%mDH{U=JJ{6XQixg^G;@L0!WFYmPMoYb`IXN}6i0F*so-H?U@gc@ z!QnTSa`yfD*}~+0tyH~$~hs*a}x`&s#XFj zg9a(s@X%nVco)~n9FDx3UuAi)fKo;646tDg@-Klj)FJY(C*R*9J~@9Y+vbe?esOsg zm@}d@Ac_^`fix%zfIv}Yvsk;P9$!u%en1Zo}g$L;U+ U85c@U{@*6S2NYw3iUU;u0M6um_5c6? delta 558 zcmdlsnRVM_Rv8v%CME_jP*jJ|Fp`mJql~4yWY3a=ne0ZdkfznW*sKUU& z6&w~2?yHxRSzI#tzK^J+B2W(MH$|XQPKb1FVgX2&R|!d0W%7RqvCXftJXnAsz1`ab zVyOH}sNq0L{?+9BTf`^lZ)Mw@k>4-Q$S}RrlTm)Nc)NxkvKEOiK((Nd0|JR3AT68o yx29J~_RJDxzlYEulKI2-_xg+rCDjf&KY)lT$^&UwT2KNxpAqT>pf~_3QD}+NCkfGsoq_F3;{Kp&y^^BTR9lOQZw$yVdSXwUkOkL) Uh~J-;_b`Y^1%B?S-d%nS06{7 - + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration - + @@ -81,7 +81,7 @@ categoryTag:General - + @@ -201,7 +201,7 @@ categoryTag:Help - + org.eclipse.e4.primaryDataStack EditorStack active @@ -218,18 +218,16 @@ categoryTag:General - + Editor removeOnHide org.eclipse.cdt.ui.editor.CEditor - + Editor removeOnHide org.eclipse.cdt.ui.editor.CEditor - active - activeOnClose @@ -237,6 +235,26 @@ removeOnHide org.eclipse.cdt.ui.editor.CEditor + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + active + activeOnClose + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + @@ -384,7 +402,7 @@ Draggable - + toolbarSeparator @@ -415,7 +433,7 @@ Draggable - + toolbarSeparator @@ -895,7 +913,7 @@ - + @@ -2096,7 +2114,7 @@ - + diff --git a/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml index c2d1b19..8b61e23 100644 --- a/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml +++ b/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml @@ -6,8 +6,11 @@ - + + + + @@ -20,7 +23,6 @@ - diff --git a/.metadata/version.ini b/.metadata/version.ini index 4b05401..2389035 100644 --- a/.metadata/version.ini +++ b/.metadata/version.ini @@ -1,3 +1,3 @@ -#Mon Dec 25 22:09:20 PST 2023 +#Sat Jan 27 22:45:32 PST 2024 org.eclipse.core.runtime=2 org.eclipse.platform=4.27.0.v20230302-0300 diff --git a/SVPWM/Core/Src/main.c b/SVPWM/Core/Src/main.c index f298658..4da2eae 100644 --- a/SVPWM/Core/Src/main.c +++ b/SVPWM/Core/Src/main.c @@ -59,7 +59,7 @@ float zero_electric_angle=0; float shaft_angle=0; float voltage_limit=12; float voltage_power_supply=12; -int period=1600; // period for the PWM +int period=2400; // period for the PWM int dir=1; // anti clockwise direction is 1 , clockwise is -1 int pole_pairs=11; int index1=0; diff --git a/SVPWM/Core/Src/pid.c b/SVPWM/Core/Src/pid.c index f981402..30417f5 100644 --- a/SVPWM/Core/Src/pid.c +++ b/SVPWM/Core/Src/pid.c @@ -8,7 +8,7 @@ #include "pid.h" #include "motor_control.h" float PID_operator(float error, struct PIDController* pid){ - float Ts = 5E-3f; + float Ts = 2.5E-3f; // P环 float proportional = pid->P * error; diff --git a/SVPWM/Debug/Core/Src/main.o b/SVPWM/Debug/Core/Src/main.o index c8be3cec61707d4d35dd46690ad76255f050d4c5..6cea3b8cfb2b388fad69e6e3a74fc0d7a7d83ea7 100644 GIT binary patch delta 65 zcmZ3n#CXLL;|+6|nG!gg=P|d>V`cV`c_6>tCm diff --git a/SVPWM/Debug/Core/Src/pid.o b/SVPWM/Debug/Core/Src/pid.o index 4009d2942d1b96245d8c99e0b1a59b044065a377..17d990aa7f8e99d3585c3867d0a22c88873bdc04 100644 GIT binary patch delta 64 zcmbR9%wWzlgAJ2d7?qnRv$RiUVFY3(AZ7+)5T6x@*?^cGh&h0m6NtHhn0xzV7M@N$ E0MtAbh5!Hn delta 64 zcmbR9%wWzlgAJ2d7#BBBW@(?y!U)7nK+FupAU-P)vjH(X5OV-AClGT1G57Y#EIgfh E0Pj2%1^@s6 diff --git a/SVPWM/Debug/SVPWM.elf b/SVPWM/Debug/SVPWM.elf index ea6622f10e9656bea0133198d14f87f75b8da0f8..2a72c085c8f79fe3f6eb354de4f9d5868d04e285 100755 GIT binary patch delta 72 zcmWN_y%j((0EN+$Ao%<*pwVRrnhatT&FeD^N0S8%U>|OIV+t{a<20)`%e{H?ymqgJ a6`9CIA)F{hCH_Y=q7|L!#URFu$;}`9LJ{Zy delta 72 zcmWN^y%j((0EN+$Ao%<*V1NvPB7q85low4xKe7{qunx%mSVI1)tw diff --git a/SVPWM/Debug/SVPWM.list b/SVPWM/Debug/SVPWM.list index aee0744..04b7277 100644 --- a/SVPWM/Debug/SVPWM.list +++ b/SVPWM/Debug/SVPWM.list @@ -4570,7 +4570,7 @@ float PID_operator(float error, struct PIDController* pid){ 8002878: af00 add r7, sp, #0 800287a: 6078 str r0, [r7, #4] 800287c: 6039 str r1, [r7, #0] - float Ts = 5E-3f; + float Ts = 2.5E-3f; 800287e: 4b6f ldr r3, [pc, #444] ; (8002a3c ) 8002880: 61bb str r3, [r7, #24] // P环 @@ -4791,7 +4791,7 @@ float PID_operator(float error, struct PIDController* pid){ 8002a36: 3720 adds r7, #32 8002a38: 46bd mov sp, r7 8002a3a: bdb0 pop {r4, r5, r7, pc} - 8002a3c: 3ba3d70a .word 0x3ba3d70a + 8002a3c: 3b23d70a .word 0x3b23d70a 08002a40 : void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); diff --git a/SVPWM/Debug/closed_current_loop.list b/SVPWM/Debug/closed_current_loop.list index beadb26..2583252 100644 --- a/SVPWM/Debug/closed_current_loop.list +++ b/SVPWM/Debug/closed_current_loop.list @@ -4246,7 +4246,7 @@ float PID_operator(float error, struct PIDController* pid){ 8002594: af00 add r7, sp, #0 8002596: 6078 str r0, [r7, #4] 8002598: 6039 str r1, [r7, #0] - float Ts = 5E-3f; + float Ts = 2.5E-3f; 800259a: 4b6f ldr r3, [pc, #444] ; (8002758 ) 800259c: 61bb str r3, [r7, #24] // P环 diff --git a/Test_codes/ADC_read/Core/Src/main.c b/Test_codes/ADC_read/Core/Src/main.c index 52a499d..0f3a503 100644 --- a/Test_codes/ADC_read/Core/Src/main.c +++ b/Test_codes/ADC_read/Core/Src/main.c @@ -56,7 +56,7 @@ float zero_electric_angle=0; float shaft_angle=0; float voltage_limit=12; float voltage_power_supply=12; -int period=1600; // period for the PWM +int period=2400; // period for the PWM int dir=1; // anti clockwise direction is 1 , clockwise is -1 int pole_pairs=11; int index1=0; diff --git a/Test_codes/openloop_position_control_with_record_angle/Core/Src/main.c b/Test_codes/openloop_position_control_with_record_angle/Core/Src/main.c index 059129d..de227d3 100644 --- a/Test_codes/openloop_position_control_with_record_angle/Core/Src/main.c +++ b/Test_codes/openloop_position_control_with_record_angle/Core/Src/main.c @@ -160,7 +160,7 @@ float voltage_limit=12; float voltage_power_supply=12; float shaft_angle=0,open_loop_timestamp=0; float zero_electric_angle=0,Ualpha,Ubeta=0,Ua=0,Ub=0,Uc=0,dc_a=0,dc_b=0,dc_c=0; -int period=1600; +int period=2400; int pole_pairs=11; int index1=0; uint16_t raw1,raw2,raw3; diff --git a/closed_current_loop/Core/Src/main.c b/closed_current_loop/Core/Src/main.c index e8273c0..5f3297c 100644 --- a/closed_current_loop/Core/Src/main.c +++ b/closed_current_loop/Core/Src/main.c @@ -59,7 +59,7 @@ float zero_electric_angle=0; float shaft_angle=0; float voltage_limit=12; float voltage_power_supply=12; -int period=1600; // period for the PWM +int period=2400; // period for the PWM int dir=1; // anti clockwise direction is 1 , clockwise is -1 int pole_pairs=11; int index1=0; diff --git a/closed_current_loop/Core/Src/pid.c b/closed_current_loop/Core/Src/pid.c index f981402..30417f5 100644 --- a/closed_current_loop/Core/Src/pid.c +++ b/closed_current_loop/Core/Src/pid.c @@ -8,7 +8,7 @@ #include "pid.h" #include "motor_control.h" float PID_operator(float error, struct PIDController* pid){ - float Ts = 5E-3f; + float Ts = 2.5E-3f; // P环 float proportional = pid->P * error; diff --git a/closed_current_loop/Debug/closed_current_loop.list b/closed_current_loop/Debug/closed_current_loop.list index beadb26..2583252 100644 --- a/closed_current_loop/Debug/closed_current_loop.list +++ b/closed_current_loop/Debug/closed_current_loop.list @@ -4246,7 +4246,7 @@ float PID_operator(float error, struct PIDController* pid){ 8002594: af00 add r7, sp, #0 8002596: 6078 str r0, [r7, #4] 8002598: 6039 str r1, [r7, #0] - float Ts = 5E-3f; + float Ts = 2.5E-3f; 800259a: 4b6f ldr r3, [pc, #444] ; (8002758 ) 800259c: 61bb str r3, [r7, #24] // P环 diff --git a/closedloop_position_control/Core/Src/main.c b/closedloop_position_control/Core/Src/main.c index 2349c24..337a04e 100644 --- a/closedloop_position_control/Core/Src/main.c +++ b/closedloop_position_control/Core/Src/main.c @@ -53,7 +53,7 @@ float zero_electric_angle=0; float shaft_angle=0; float voltage_limit=12; float voltage_power_supply=12; -int period=1600; // period for the PWM +int period=2400; // period for the PWM int dir=1; // anti clockwise direction is 1 , clockwise is -1 int pole_pairs=11; int index1=0; diff --git a/closedloop_speed_control/Core/Src/main.c b/closedloop_speed_control/Core/Src/main.c index db3a22b..9c6c162 100644 --- a/closedloop_speed_control/Core/Src/main.c +++ b/closedloop_speed_control/Core/Src/main.c @@ -54,7 +54,7 @@ float zero_electric_angle=0; float shaft_angle=0; float voltage_limit=12; float voltage_power_supply=12; -int period=1600; // period for the PWM +int period=2400; // period for the PWM int dir=1; // anti clockwise direction is 1 , clockwise is -1 int pole_pairs=11; int index1=0; diff --git a/closedloop_speed_control/Core/Src/pid.c b/closedloop_speed_control/Core/Src/pid.c index f981402..30417f5 100644 --- a/closedloop_speed_control/Core/Src/pid.c +++ b/closedloop_speed_control/Core/Src/pid.c @@ -8,7 +8,7 @@ #include "pid.h" #include "motor_control.h" float PID_operator(float error, struct PIDController* pid){ - float Ts = 5E-3f; + float Ts = 2.5E-3f; // P环 float proportional = pid->P * error; diff --git a/closedloop_speed_control/Debug/closedloop_speed_control.list b/closedloop_speed_control/Debug/closedloop_speed_control.list index 56d412e..e0f3f20 100644 --- a/closedloop_speed_control/Debug/closedloop_speed_control.list +++ b/closedloop_speed_control/Debug/closedloop_speed_control.list @@ -3531,7 +3531,7 @@ float PID_operator(float error, struct PIDController* pid){ 800201c: af00 add r7, sp, #0 800201e: 6078 str r0, [r7, #4] 8002020: 6039 str r1, [r7, #0] - float Ts = 5E-3f; + float Ts = 2.5E-3f; 8002022: 4b6f ldr r3, [pc, #444] ; (80021e0 ) 8002024: 61bb str r3, [r7, #24] // P环 diff --git a/openloop_speedcontrol/Core/Src/main.c b/openloop_speedcontrol/Core/Src/main.c index aef1f75..00d0a94 100644 --- a/openloop_speedcontrol/Core/Src/main.c +++ b/openloop_speedcontrol/Core/Src/main.c @@ -72,7 +72,7 @@ float voltage_limit=12; float voltage_power_supply=12; float shaft_angle=0,open_loop_timestamp=0; float zero_electric_angle=0,Ualpha,Ubeta=0,Ua=0,Ub=0,Uc=0,dc_a=0,dc_b=0,dc_c=0; -int period=1600; +int period=2400; int pole_pairs=11; int index1=0; uint16_t raw1,raw2,raw3;