diff --git a/app/MDK-ARM/app.uvguix.h_zha b/app/MDK-ARM/app.uvguix.h_zha
index 21a9c6b..d538a75 100644
--- a/app/MDK-ARM/app.uvguix.h_zha
+++ b/app/MDK-ARM/app.uvguix.h_zha
@@ -93,8 +93,8 @@
2
3
- -32000
- -32000
+ -1
+ -1
-1
@@ -102,8 +102,8 @@
14
- 375
- 1475
+ 376
+ 1476
1000
@@ -111,7 +111,7 @@
0
738
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000000000000100000059443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000C5D4F200FFFFFFFF71443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C2E637070000000000D73746D33325F68616C2E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000BECEA100FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E687070000000000C746D6334333631412E68707000000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC010000660000009006000042020000
+ 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000020000000100000059443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000C5D4F200FFFFFFFF71443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C2E637070000000000D73746D33325F68616C2E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000BECEA100FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E687070000000000C746D6334333631412E68707000000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC010000660000009006000042020000
@@ -1822,7 +1822,7 @@
Build
966
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -1838,7 +1838,7 @@
Debug
2373
- 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -3603,12 +3603,12 @@
0
100
- 0
+ 2
..\..\src\board\hardware.cpp
0
- 372
- 396
+ 1
+ 1
1
0
diff --git a/src/board/fan_state_monitor.cpp b/src/board/fan_state_monitor.cpp
index 0574794..b98d172 100644
--- a/src/board/fan_state_monitor.cpp
+++ b/src/board/fan_state_monitor.cpp
@@ -28,9 +28,9 @@ void FanStateMonitor::doFanStateCheckPeriodicJob() {
GPIO_PinState pinState = HAL_GPIO_ReadPin(m_FB_GPIOx, m_FB_GPIO_Pin);
if (HAL_GPIO_ReadPin(m_FB_GPIOx, m_FB_GPIO_Pin) != m_lastPinState) {
m_fanFBCount++;
+ m_count++;
m_lastPinState = pinState;
}
-
/**
* @brief 电机工作超过2秒,且2秒内没有反馈信号,判断电机不工作
*/
diff --git a/src/board/fan_state_monitor.hpp b/src/board/fan_state_monitor.hpp
index e8eeeb9..45f2c5a 100644
--- a/src/board/fan_state_monitor.hpp
+++ b/src/board/fan_state_monitor.hpp
@@ -14,6 +14,7 @@ class FanStateMonitor {
bool m_lastFanState; // 上次风扇状态,用来实现捕获风扇打开事件
bool m_fanError; // 风扇故障标志位
+ uint32_t m_count; // 总计数,不清零
public:
FanStateMonitor(/* args */){};
@@ -29,9 +30,9 @@ class FanStateMonitor {
* @return true
* @return false
*/
- bool getFanError() { return m_fanError; }
- void clearFanError() { m_fanError = false; }
-
+ bool getFanError() { return m_fanError; }
+ void clearFanError() { m_fanError = false; }
+ uint32_t getCount() { return m_count; }
/*******************************************************************************
* 周期性调度任务 *
*******************************************************************************/
@@ -39,7 +40,6 @@ class FanStateMonitor {
* @brief 周期性调度任务,需要上层代码尽可能的频繁调度
*/
void periodicJob();
-
private:
void doFanStateCheckPeriodicJob();
};
diff --git a/src/board/hardware.cpp b/src/board/hardware.cpp
index bee4d44..794361a 100644
--- a/src/board/hardware.cpp
+++ b/src/board/hardware.cpp
@@ -2,8 +2,8 @@
#include "i2c.h"
using namespace iflytop;
-#define TAG "hardware"
-#define ENABLE_CAN 1
+#define TAG "hardware"
+#define TEST_TMC_ENCODER_DIRECTION 0
extern "C" {
int fputc(int ch, FILE *stream) {
uint8_t c = ch;
@@ -18,148 +18,124 @@ void Hardware::registerListener(HardwareListener *listener) {
m_listenerNum++;
}
}
-
void Hardware::hardwareinit() {
STM32_HAL::regListener(this);
-
- m_canOnRxDataFlag = false;
-
- /*******************************************************************************
- * 调试指示灯初始化 *
- *******************************************************************************/
debug_light_init();
-
- /*******************************************************************************
- * CANSLAVEService初始化 *
- *******************************************************************************/
- IflytopCanSlave::iflytop_can_slave_config_t *config = canSlaveService.createDefaultConfig(DEVICE_ID);
- canSlaveService.initialize(this, config);
- canSlaveService.activateRxIT();
- canSlaveService.registerListener(this);
- /*******************************************************************************
- * 帕尔贴初始化 *
- *******************************************************************************/
+ can_init();
+ temperature_init();
+ fan_init(1000);
peltier_init();
- /*******************************************************************************
- * 温度传感器初始化 *
- *******************************************************************************/
- tmp117[0].initializate(&hi2c1, TMP117::ID0);
- tmp117[1].initializate(&hi2c1, TMP117::ID1);
- tmp117[2].initializate(&hi2c1, TMP117::ID2);
- tmp117[3].initializate(&hi2c1, TMP117::ID3);
-
- /*******************************************************************************
- * 电机初始化 *
- *******************************************************************************/
tmc_init();
- tmc_extern_clk_enable();
- // 4361初始化
- TMC4361A::TMC4361AConfig_t *tmc4361aconfig = TMC4361A::createDeafultTMC4361AConfig(this);
- tmc4361aconfig->encoder_config.diff_enc_in_disable = false;
- tmc4361aconfig->encoder_config.invert_enc_dir = true; // 如果编码器方向和期望方向相反,设置为true
- tmc4361aconfig->encoder_config.enc_in_res = 4000;
- tmc4361aconfig->close_loop_config.enable_closed_loop = false;
-
- tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig);
- tmc4361motor1.setMaximumAcceleration(300000);
- tmc4361motor1.setMaximumDeceleration(300000);
-
- HAL_Delay(100);
- // 使能电机
- tmc4361motor1.enableIC(true);
- /**
- * @brief 通过读取Version寄存器来判断芯片是否正常
- */
- int32_t ic4361Version = tmc4361motor1.readICVersion();
- int32_t ic2160Version = tmc4361motor1.read2160ICVersion();
- ZLOGI(TAG, "TMC4361Version:%x TMC2160VERSION:%x", ic4361Version, ic2160Version);
- if (ic4361Version != 2) {
- ZLOGE(TAG, "TMC4361 or TMC2160 is not normal");
- }
- // 期望 4361Version:2 ic2160Version:30
- // tmc4361motor1.stop();
- // 测试编码器方向
- // tmc4361motor1.rotate(-300000);
- // while (true) {
- // HAL_Delay(100);
- // ZLOGI(TAG, "TMC4361A: XACTUAL:%d ENC_POS:%d DIFF:%d", tmc4361motor1.getXACTUAL(), tmc4361motor1.getENC_POS(), tmc4361motor1.getENC_POS_DEV());
- // }
-
- /*******************************************************************************
- * 风扇初始化 *
- *******************************************************************************/
- fanInit(1000);
- /**
- * @brief 风扇反馈初始化
- *
- * FAN0_FB_INT PC1
- * FAN1_FB_INT PC4
- * FAN2_FB_INT PC5
- * FAN3_FB_INT PC6
- * FAN4_FB_INT PC7
- * FAN5_FB_INT PC10
- */
- m_fanStateMonitor[0].initialize(this, GPIOC, GPIO_PIN_1, fanGetPowerState(0));
- m_fanStateMonitor[1].initialize(this, GPIOC, GPIO_PIN_4, fanGetPowerState(1));
- m_fanStateMonitor[2].initialize(this, GPIOC, GPIO_PIN_5, fanGetPowerState(2));
- m_fanStateMonitor[3].initialize(this, GPIOC, GPIO_PIN_6, fanGetPowerState(3));
- m_fanStateMonitor[4].initialize(this, GPIOC, GPIO_PIN_7, fanGetPowerState(4));
- m_fanStateMonitor[5].initialize(this, GPIOC, GPIO_PIN_10, fanGetPowerState(5));
-}
-int32_t Hardware::port_tmc4361_get_version(uint8_t channel) {
- int value;
- uint8_t data[5];
- data[0] = 0x7f;
- tmc_motor_spi_write_and_read(channel, &data[0], 5);
- value = ((uint32_t)data[1] << 24) | ((uint32_t)data[2] << 16) | (data[3] << 8) | data[4];
- return value;
+ testHardwareFlag = true;
}
void Hardware::periodicJob() {
-#if 0
- /**
- * @brief 风扇状态监控服务周期调度
- */
- for (size_t i = 0; i < ZARRAY_SIZE(m_fanStateMonitor); i++) {
- m_fanStateMonitor[i].periodicJob();
- }
-#endif
- do_debug_light_state();
-#if ENABLE_CAN
- // testCanSlaveTxAndRx();
-#endif
+ debug_light_periodicJob();
+ can_periodicJob();
+ temperature_periodicJob();
+ fan_periodicJob();
+ peltier_periodicJob();
+ tmc_periodicJob();
}
-void Hardware::do_debug_light_state() {
+/*******************************************************************************
+ * 测试指示灯 *
+ *******************************************************************************/
+void Hardware::debug_light_init() {
+ STM32_HAL::gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+}
+
+void Hardware::debug_light_periodicJob() {
static uint32_t lastprocess = 0;
if (sys_haspassedms(lastprocess) > 300) {
lastprocess = HAL_GetTick();
HAL_GPIO_TogglePin(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN);
}
}
-void Hardware::TMC4361APort_setResetPinState(uint16_t channel, bool state) { tmc_nRESET_pin_set_state(channel, state); }
-void Hardware::TMC4361APort_setFREEZEPinState(uint16_t channel, bool state) { tmc_nFREEZE_pin_set_state(channel, state); }
-void Hardware::TMC4361APort_setENNPinState(uint16_t channel, bool state) { tmc_ENN_pin_set_state(channel, state); }
-bool Hardware::TMC4361APort_getTargetReachedPinState(uint16_t channel) { return false; }
-void Hardware::TMC4361APort_sleepus(int32_t us) { sleepus(us); }
-void Hardware::TMC4361APort_readWriteArray(uint8_t *data, size_t length) { tmc_motor_spi_write_and_read(0, data, length); }
-void Hardware::TMC4361APort_setSubICENNPinState(uint16_t channel, bool state) { tmc_subic_ENN_pin_set_state(channel, state); }
-void Hardware::STM32_HAL_onGPIO_EXTI_Callback(uint16_t gpioNum) {
+/*******************************************************************************
+ * CAN *
+ *******************************************************************************/
+void Hardware::can_init() {
+ m_can.m_canOnRxDataFlag = false;
+
+ IflytopCanSlave::iflytop_can_slave_config_t *config = m_can.canSlaveService.createDefaultConfig(DEVICE_ID);
+ m_can.canSlaveService.initialize(this, config);
+ m_can.canSlaveService.activateRxIT();
+ m_can.canSlaveService.registerListener(this);
+}
+void Hardware::can_periodicJob() {
+ if (testHardwareFlag) {
+ static uint32_t lastcall;
+ static uint8_t tx[8] = {1, 2, 3, 4, 5, 6, 7, 8};
+ if (hasPassedMS(lastcall) > 1000) {
+ lastcall = getTicket();
+ // canSlaveService.translate(0x01, tx, 8, 2);
+ m_can.canSlaveService.sendReport(1, 2, 3, 100);
+ if (m_can.canSlaveService.getLastTransmitStatus() == HAL_OK) {
+ ZLOGI(TAG, "send ok");
+ } else {
+ ZLOGI(TAG, "send fail");
+ }
+ }
+ }
/**
- * @brief 赋予盘零位光电触发
+ * @brief 接收CAN消息
*/
- if (gpioNum == TMC_HOME_REF_GPIO_PIN) {
- if (STM32_HAL_GPIO_IS_THIS_PIN_TRIGGER_IRQ(TMC_HOME_REF_GPIO)) {
+ if (m_can.m_canOnRxDataFlag) {
+ m_can.m_canOnRxDataFlag = false;
+ static CAN_RxHeaderTypeDef packetHeader;
+ static uint8_t packetData[8];
+ static IflytopCanSlave::packet_t packet;
+ while (m_can.canSlaveService.getRxPacket(&packet)) {
+ if (testHardwareFlag) {
+ ZLOGI(TAG, "rx packet:");
+ ZLOGI(TAG, "\ttype:%01x, targetId:%01x, sourceId:%02x, seq:%02x, regAdd:%02x, regValue:%04x", //
+ packet.type, packet.targetId, packet.sourceId, packet.seq, packet.regAdd, packet.regValue);
+ }
for (size_t i = 0; i < m_listenerNum; i++) {
- m_listener[i]->Hardware_onHomeRefSwitchISR();
+ m_listener[i]->Hardware_OnCanRxData(&packet);
}
}
+ m_can.canSlaveService.activateRxIT();
}
}
-
-void Hardware::debug_light_init() {
- STM32_HAL::gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+/*******************************************************************************
+ * 温度 *
+ *******************************************************************************/
+void Hardware::temperature_init() {
+ m_temperature.tmp117[0].initializate(&hi2c1, TMP117::ID0);
+ m_temperature.tmp117[1].initializate(&hi2c1, TMP117::ID1);
+ m_temperature.tmp117[2].initializate(&hi2c1, TMP117::ID2);
+ m_temperature.tmp117[3].initializate(&hi2c1, TMP117::ID3);
}
-
-void Hardware::fanInit(int freq) {
+TMP117 *Hardware::temperature_get_tmp117(int off) {
+ if (off < 0 || off > 3) {
+ ZASSERT(0);
+ return NULL;
+ }
+ return &m_temperature.tmp117[off];
+}
+void Hardware::temperature_periodicJob() {
+ if (testHardwareFlag) {
+ /**
+ * @brief 周期打印温度
+ */
+ static uint32_t lastcall;
+ if (hasPassedMS(lastcall) > 1000) {
+ lastcall = getTicket();
+ for (size_t i = 0; i < 4; i++) {
+ float temp = m_temperature.tmp117[i].getTemperature();
+ if (m_temperature.tmp117[i].getLastCallStatus() == HAL_OK) {
+ ZLOGI(TAG, "tmp117_%d:%f", i, temp);
+ } else {
+ ZLOGI(TAG, "tmp117_%d:read fail", i);
+ }
+ }
+ }
+ }
+}
+/*******************************************************************************
+ * 风扇 *
+ *******************************************************************************/
+void Hardware::fan_init(int freq) {
STM32_HAL::setPWMFreq(&htim2, freq); // fan0->fan3
STM32_HAL::setPWMFreq(&htim4, freq); // fan4
STM32_HAL::setPWMFreq(&htim8, freq); // fan5
@@ -170,6 +146,23 @@ void Hardware::fanInit(int freq) {
STM32_HAL::gpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
// fan5
STM32_HAL::gpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+
+ /**
+ * @brief 风扇反馈初始化
+ *
+ * FAN0_FB_INT PC1
+ * FAN1_FB_INT PC4
+ * FAN2_FB_INT PC5
+ * FAN3_FB_INT PC6
+ * FAN4_FB_INT PC7
+ * FAN5_FB_INT PC10
+ */
+ m_fan.fanStateMonitor[0].initialize(this, GPIOC, GPIO_PIN_1, fanGetPowerState(0));
+ m_fan.fanStateMonitor[1].initialize(this, GPIOC, GPIO_PIN_4, fanGetPowerState(1));
+ m_fan.fanStateMonitor[2].initialize(this, GPIOC, GPIO_PIN_5, fanGetPowerState(2));
+ m_fan.fanStateMonitor[3].initialize(this, GPIOC, GPIO_PIN_6, fanGetPowerState(3));
+ m_fan.fanStateMonitor[4].initialize(this, GPIOC, GPIO_PIN_7, fanGetPowerState(4));
+ m_fan.fanStateMonitor[5].initialize(this, GPIOC, GPIO_PIN_10, fanGetPowerState(5));
}
void Hardware::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
@@ -181,10 +174,10 @@ void Hardware::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
if (fanIndex <= 3) {
STM32_HAL::setPWMDuty(&htim2, TIM_CHANNEL_2, dutyCycle);
- m_fanState[0] = dutyCycle > 0;
- m_fanState[1] = dutyCycle > 0;
- m_fanState[2] = dutyCycle > 0;
- m_fanState[3] = dutyCycle > 0;
+ m_fan.m_fanState[0] = dutyCycle > 0;
+ m_fan.m_fanState[1] = dutyCycle > 0;
+ m_fan.m_fanState[2] = dutyCycle > 0;
+ m_fan.m_fanState[3] = dutyCycle > 0;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
@@ -194,7 +187,7 @@ void Hardware::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
} else if (fanIndex == 4) {
STM32_HAL::setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle);
- m_fanState[4] = dutyCycle > 0;
+ m_fan.m_fanState[4] = dutyCycle > 0;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
@@ -203,7 +196,7 @@ void Hardware::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
}
} else if (fanIndex == 5) {
STM32_HAL::setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle);
- m_fanState[5] = dutyCycle > 0;
+ m_fan.m_fanState[5] = dutyCycle > 0;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
@@ -218,14 +211,53 @@ bool *Hardware::fanGetPowerState(int fanIndex) {
ZLOGE(TAG, "fanIndex is out of range!");
}
}
- return &m_fanState[fanIndex];
+ return &m_fan.m_fanState[fanIndex];
}
void Hardware::fanSetState0to3(uint16_t dutyCycle) { fanSetDutyCycle(0, dutyCycle); }
void Hardware::fanSetState4(uint16_t dutyCycle) { fanSetDutyCycle(4, dutyCycle); }
void Hardware::fanSetState5(uint16_t dutyCycle) { fanSetDutyCycle(5, dutyCycle); }
+void Hardware::fan_periodicJob() {
+ /**
+ * @brief 风扇状态监控服务周期调度
+ */
+ for (size_t i = 0; i < ZARRAY_SIZE(m_fan.fanStateMonitor); i++) {
+ m_fan.fanStateMonitor[i].periodicJob();
+ }
+
+ /**
+ * @brief 风扇测试
+ */
+ if (testHardwareFlag) {
+ static uint32_t lastcall;
+ static int duty = 0;
+ if (hasPassedMS(lastcall) > 1000) {
+ lastcall = getTicket();
+ duty += 10;
+ if (duty > 100) duty = 0;
+ fanSetState0to3(duty);
+ fanSetState4(duty);
+ fanSetState5(duty);
+ /**
+ * @brief DUYT大于零 FANPowerState为1
+ */
+ ZLOGI(TAG, "Duty:%d,FANState:%d,%d,%d,%d,%d,%d", duty, *fanGetPowerState(0), //
+ *fanGetPowerState(1), //
+ *fanGetPowerState(2), //
+ *fanGetPowerState(3), //
+ *fanGetPowerState(4), //
+ *fanGetPowerState(5)); //
+ ZLOGI(TAG, "FANCount:%d,%d,%d,%d,%d,%d", m_fan.fanStateMonitor[0].getCount(), //
+ m_fan.fanStateMonitor[1].getCount(), //
+ m_fan.fanStateMonitor[2].getCount(), //
+ m_fan.fanStateMonitor[3].getCount(), //
+ m_fan.fanStateMonitor[4].getCount(), //
+ m_fan.fanStateMonitor[5].getCount());
+ }
+ }
+}
/*******************************************************************************
- * 帕尔贴驱动电路 *
+ * 帕尔贴 *
*******************************************************************************/
void Hardware::peltier_cold_ctr_pwm(int pwm) {
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm);
@@ -278,6 +310,20 @@ void Hardware::peltier_set_pwm(int pwm) {
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
}
}
+void Hardware::peltier_periodicJob() {
+ if (testHardwareFlag) {
+ static uint32_t lastcall;
+ static int duty = 0;
+ if (hasPassedMS(lastcall) > 1000) {
+ lastcall = getTicket();
+ duty += 10;
+ if (duty > 100) duty = 0;
+ peltier_set_pwm(duty);
+ ZLOGI(TAG, "paltier set pwm:%d", duty);
+ }
+ }
+}
+
/*******************************************************************************
* tmc芯片驱动相关 *
*******************************************************************************/
@@ -288,6 +334,48 @@ void Hardware::tmc_init() {
GPIOE, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
STM32_HAL::gpioInit( //
GPIOE, GPIO_PIN_11, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
+
+ /**
+ * @brief TMC使用的外部时钟在stm32cubemx中已经进行配置,输出时钟为16MHZ
+ * 配置可以参考https://iflytop1.feishu.cn/wiki/wikcnog3hFm6dGFLMRksnhLb7Aw
+ */
+
+ // 4361初始化
+ TMC4361A::TMC4361AConfig_t *tmc4361aconfig = TMC4361A::createDeafultTMC4361AConfig(this);
+ tmc4361aconfig->encoder_config.diff_enc_in_disable = false;
+ tmc4361aconfig->encoder_config.invert_enc_dir = true; // 如果编码器方向和期望方向相反,设置为true
+ tmc4361aconfig->encoder_config.enc_in_res = 4000;
+ tmc4361aconfig->close_loop_config.enable_closed_loop = false;
+#if TEST_TMC_ENCODER_DIRECTION
+ // 测试编码器方式时关闭闭环控制
+ tmc4361aconfig->close_loop_config.enable_closed_loop = false;
+#endif
+
+ m_tmc.tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig);
+ m_tmc.tmc4361motor1.setMaximumAcceleration(300000);
+ m_tmc.tmc4361motor1.setMaximumDeceleration(300000);
+
+ HAL_Delay(100);
+ // 使能电机
+ m_tmc.tmc4361motor1.enableIC(true);
+ // 通过读取Version寄存器来判断芯片是否正常
+ int32_t ic4361Version = m_tmc.tmc4361motor1.readICVersion();
+ int32_t ic2160Version = m_tmc.tmc4361motor1.read2160ICVersion();
+ ZLOGI(TAG, "TMC4361Version:%x TMC2160VERSION:%x", ic4361Version, ic2160Version);
+ if (ic4361Version != 2) {
+ ZLOGE(TAG, "TMC4361 or TMC2160 is not normal");
+ }
+ m_tmc.tmc4361motor1.rotate(300000);
+
+#if TEST_TMC_ENCODER_DIRECTION
+ while (true) {
+ HAL_Delay(100);
+ ZLOGI(TAG, "TMC4361A: XACTUAL:%d ENC_POS:%d DIFF:%d", //
+ m_tmc.tmc4361motor1.getXACTUAL(), //
+ m_tmc.tmc4361motor1.getENC_POS(), //
+ m_tmc.tmc4361motor1.getENC_POS_DEV());
+ }
+#endif
}
void Hardware::tmc_motor_spi_select(int channel, bool state) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, state ? GPIO_PIN_SET : GPIO_PIN_RESET); }
@@ -299,14 +387,6 @@ void Hardware::tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t l
tmc_motor_spi_select(channel, true);
}
}
-void Hardware::tmc_extern_clk_enable() {
-#if 1
- /**
- * @brief TMC使用的外部时钟在stm32cubemx中已经进行配置,输出时钟为16MHZ
- * 配置可以参考https://iflytop1.feishu.cn/wiki/wikcnog3hFm6dGFLMRksnhLb7Aw
- */
-#endif
-}
void Hardware::tmc_nFREEZE_pin_set_state(uint8_t channel, bool state) {
if (channel == MOTOR_1_TMC4361A_CHANNEL) {
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
@@ -319,66 +399,40 @@ void Hardware::tmc_subic_ENN_pin_set_state(uint8_t channel, bool state) {
}
}
void Hardware::tmc_nRESET_pin_set_state(uint8_t channel, bool state) {}
-void Hardware::home_ref_switch_init() { //
+void Hardware::tmc_home_ref_switch_init() { //
STM32_HAL::gpioInitAsEXIT(TMC_HOME_REF_GPIO_PORT, TMC_HOME_REF_GPIO_PIN, GPIO_NOPULL, TMC_HOME_REF_GPIO_IRQ_MODE);
}
-bool Hardware::home_ref_switch_get_state() { return (HAL_GPIO_ReadPin(TMC_HOME_REF_GPIO_PORT, TMC_HOME_REF_GPIO_PIN) == TMC_HOME_REF_GPIO_USEFUL_STATE); }
-/*******************************************************************************
- * 硬件测试 *
- *******************************************************************************/
-void Hardware::testTmp117() {
- static uint32_t lastcall;
- if (hasPassedMS(lastcall) > 1000) {
- lastcall = getTicket();
- for (size_t i = 0; i < 4; i++) {
- float temp = tmp117[i].getTemperature();
- if (tmp117[i].getLastCallStatus() == HAL_OK) {
- ZLOGI(TAG, "tmp117_%d:%f", i, temp);
- } else {
- ZLOGI(TAG, "tmp117_%d:read fail", i);
- }
- }
- }
+bool Hardware::tmc_home_ref_switch_get_state() { return (HAL_GPIO_ReadPin(TMC_HOME_REF_GPIO_PORT, TMC_HOME_REF_GPIO_PIN) == TMC_HOME_REF_GPIO_USEFUL_STATE); }
+int32_t Hardware::tmc_tmc4361_get_version(uint8_t channel) {
+ int value;
+ uint8_t data[5];
+ data[0] = 0x7f;
+ tmc_motor_spi_write_and_read(channel, &data[0], 5);
+ value = ((uint32_t)data[1] << 24) | ((uint32_t)data[2] << 16) | (data[3] << 8) | data[4];
+ return value;
}
+void Hardware::tmc_periodicJob() { m_tmc.tmc4361motor1.periodicJob(getTicket()); }
-/**
- * @brief 测试CAN的发送和接收
- */
-void Hardware::testCanSlaveTxAndRx() {
- {
- static uint32_t lastcall;
- static uint8_t tx[8] = {1, 2, 3, 4, 5, 6, 7, 8};
- if (hasPassedMS(lastcall) > 1000) {
- lastcall = getTicket();
- // canSlaveService.translate(0x01, tx, 8, 2);
- canSlaveService.sendReport(1, 2, 3, 100);
- if (canSlaveService.getLastTransmitStatus() == HAL_OK) {
- ZLOGI(TAG, "send ok");
- } else {
- ZLOGI(TAG, "send fail");
- }
- }
- }
+/*******************************************************************************
+ * TMC4361APort *
+ *******************************************************************************/
+void Hardware::TMC4361APort_setResetPinState(uint16_t channel, bool state) { tmc_nRESET_pin_set_state(channel, state); }
+void Hardware::TMC4361APort_setFREEZEPinState(uint16_t channel, bool state) { tmc_nFREEZE_pin_set_state(channel, state); }
+void Hardware::TMC4361APort_setENNPinState(uint16_t channel, bool state) { tmc_ENN_pin_set_state(channel, state); }
+bool Hardware::TMC4361APort_getTargetReachedPinState(uint16_t channel) { return false; }
+void Hardware::TMC4361APort_sleepus(int32_t us) { sleepus(us); }
+void Hardware::TMC4361APort_readWriteArray(uint8_t *data, size_t length) { tmc_motor_spi_write_and_read(0, data, length); }
+void Hardware::TMC4361APort_setSubICENNPinState(uint16_t channel, bool state) { tmc_subic_ENN_pin_set_state(channel, state); }
+void Hardware::STM32_HAL_onGPIO_EXTI_Callback(uint16_t gpioNum) {
/**
- * @brief 接收CAN消息
+ * @brief 赋予盘零位光电触发
*/
- if (m_canOnRxDataFlag) {
- m_canOnRxDataFlag = false;
- static CAN_RxHeaderTypeDef packetHeader;
- static uint8_t packetData[8];
- // while (canSlaveService.getRxMessage(&packetHeader, packetData)) {
- // ZLOGI(TAG, "rx packet:");
- // ZLOGI(TAG, "\tid:%x len:%d", packetHeader.StdId, packetHeader.DLC);
- // ZLOGI_HEX(TAG, packetData, packetHeader.DLC);
- // }
-
- static IflytopCanSlave::packet_t packet;
- while (canSlaveService.getRxPacket(&packet)) {
- ZLOGI(TAG, "rx packet:");
- ZLOGI(TAG, "\ttype:%01x, targetId:%01x, sourceId:%02x, seq:%02x, regAdd:%02x, regValue:%04x", //
- packet.type, packet.targetId, packet.sourceId, packet.seq, packet.regAdd, packet.regValue);
+ if (gpioNum == TMC_HOME_REF_GPIO_PIN) {
+ if (STM32_HAL_GPIO_IS_THIS_PIN_TRIGGER_IRQ(TMC_HOME_REF_GPIO)) {
+ for (size_t i = 0; i < m_listenerNum; i++) {
+ m_listener[i]->Hardware_onHomeRefSwitchISR();
+ }
}
- canSlaveService.activateRxIT();
}
}
diff --git a/src/board/hardware.hpp b/src/board/hardware.hpp
index a97cee4..21c404f 100644
--- a/src/board/hardware.hpp
+++ b/src/board/hardware.hpp
@@ -18,6 +18,7 @@ namespace iflytop {
class HardwareListener {
public:
virtual void Hardware_OnHardwareException(){};
+ virtual void Hardware_OnCanRxData(IflytopCanSlave::packet_t *packet){};
virtual void Hardware_onHomeRefSwitchISR(){};
};
@@ -29,20 +30,30 @@ class Hardware : public IflytopCanSlaveListener, //
/* data */
public:
- /*motor*/
- TMC4361A tmc4361motor1;
- /*temperature*/
- TMP117 tmp117[4];
- /*fan*/
- FanStateMonitor m_fanStateMonitor[6];
- /*can*/
- IflytopCanSlave canSlaveService;
- bool m_canOnRxDataFlag;
- /* data */
- bool m_fanState[6];
+ struct tmc_res_t {
+ TMC4361A tmc4361motor1;
+ };
+ struct can_res_t {
+ IflytopCanSlave canSlaveService;
+ bool m_canOnRxDataFlag;
+ };
+ struct fan_res_t {
+ FanStateMonitor fanStateMonitor[6];
+ bool m_fanState[6];
+ };
+ struct temperature_res_t {
+ TMP117 tmp117[4];
+ };
+ struct peltier_res_t {};
+
+ tmc_res_t m_tmc;
+ can_res_t m_can;
+ fan_res_t m_fan;
+ temperature_res_t m_temperature;
HardwareListener *m_listener[MAX_HARDWARE_LISTENER_NUM];
int m_listenerNum;
+ bool testHardwareFlag;
public:
public:
@@ -50,54 +61,70 @@ class Hardware : public IflytopCanSlaveListener, //
* ListenerImpl *
*******************************************************************************/
virtual void OnIflytopCanSlaveOnCanRxData() {
- m_canOnRxDataFlag = true;
- canSlaveService.deactivateRxIT();
+ m_can.m_canOnRxDataFlag = true;
+ m_can.canSlaveService.deactivateRxIT();
}
+ /*******************************************************************************
+ * OVERRIDE STM32_HAL_LISTENER *
+ *******************************************************************************/
+ virtual void STM32_HAL_onGPIO_EXTI_Callback(uint16_t GPIO_Pin);
public:
Hardware(/* args */){};
~Hardware(){};
-
void registerListener(HardwareListener *listener);
-
void hardwareinit();
void periodicJob();
-
- int32_t port_tmc4361_get_version(uint8_t channel);
- TMC4361A *getMotor1() { return &tmc4361motor1; }
-
+ /*******************************************************************************
+ * 测试指示灯 *
+ *******************************************************************************/
void debug_light_init();
+ void debug_light_periodicJob();
+ /*******************************************************************************
+ * CAN *
+ *******************************************************************************/
+ void can_init();
+ void can_periodicJob();
+ /*******************************************************************************
+ * 温度 *
+ *******************************************************************************/
+ void temperature_init();
+ TMP117 *temperature_get_tmp117(int off);
+ void temperature_periodicJob();
- void fanInit(int freq);
+ /*******************************************************************************
+ * 风扇 *
+ *******************************************************************************/
+ void fan_init(int freq);
void fanSetDutyCycle(int fanIndex, uint16_t dutyCycle);
void fanSetState0to3(uint16_t dutyCycle);
void fanSetState4(uint16_t dutyCycle);
void fanSetState5(uint16_t dutyCycle);
bool *fanGetPowerState(int fanIndex);
-
+ void fan_periodicJob();
+ /*******************************************************************************
+ * 帕尔贴 *
+ *******************************************************************************/
+ void peltier_init();
void peltier_cold_ctr_pwm(int pwm);
void peltier_hot_ctr_pwm(int pwm);
- void peltier_init();
void peltier_set_pwm(int pwm);
-
- void tmc_init();
- void tmc_motor_spi_select(int channel, bool state);
- void tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length);
- void tmc_extern_clk_enable();
- void tmc_nFREEZE_pin_set_state(uint8_t channel, bool state);
- void tmc_ENN_pin_set_state(uint8_t channel, bool state);
- void tmc_subic_ENN_pin_set_state(uint8_t channel, bool state);
- void tmc_nRESET_pin_set_state(uint8_t channel, bool state);
-
- void home_ref_switch_init();
- bool home_ref_switch_get_state();
-
+ void peltier_periodicJob();
/*******************************************************************************
- * 测试 *
+ * TMC *
*******************************************************************************/
- void testTmp117();
- void testCanSlaveTxAndRx();
- void do_debug_light_state();
+ void tmc_init();
+ TMC4361A *tmc_get_motor1() { return &m_tmc.tmc4361motor1; }
+ void tmc_motor_spi_select(int channel, bool state);
+ void tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length);
+ void tmc_nFREEZE_pin_set_state(uint8_t channel, bool state);
+ void tmc_ENN_pin_set_state(uint8_t channel, bool state);
+ void tmc_subic_ENN_pin_set_state(uint8_t channel, bool state);
+ void tmc_nRESET_pin_set_state(uint8_t channel, bool state);
+ int32_t tmc_tmc4361_get_version(uint8_t channel);
+ void tmc_home_ref_switch_init();
+ bool tmc_home_ref_switch_get_state();
+ void tmc_periodicJob();
public:
/*******************************************************************************
@@ -120,11 +147,6 @@ class Hardware : public IflytopCanSlaveListener, //
virtual uint32_t getNowMS() { return HAL_GetTick(); };
virtual void sleepus(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); }
- /*******************************************************************************
- * OVERRIDE STM32_HAL_LISTENER *
- *******************************************************************************/
- virtual void STM32_HAL_onGPIO_EXTI_Callback(uint16_t GPIO_Pin);
-
public:
};
diff --git a/src/lncubator_rotating_control_service.cpp b/src/lncubator_rotating_control_service.cpp
index 79cc7e0..ecf06fc 100644
--- a/src/lncubator_rotating_control_service.cpp
+++ b/src/lncubator_rotating_control_service.cpp
@@ -24,7 +24,7 @@ LncubatorRotatingControlService::LncubatorRotatingControlService() {
LncubatorRotatingControlService::~LncubatorRotatingControlService() {}
void LncubatorRotatingControlService::initialize(Hardware* hardware) { //
m_hardware = hardware;
- m_motor = m_hardware->getMotor1();
+ m_motor = m_hardware->tmc_get_motor1();
m_os = m_hardware;
m_workfinished = false;
m_dowhat = kidle;
@@ -77,7 +77,7 @@ int32_t LncubatorRotatingControlService::normalizePosition(int32_t position) {
}
void LncubatorRotatingControlService::tmc_moveBy(int32_t relativePosition, uint32_t velocity) { m_motor->moveBy(relativePosition, velocity); }
-bool LncubatorRotatingControlService::hardware_isHomeRefSwitchTriggered() { return m_hardware->home_ref_switch_get_state(); }
+bool LncubatorRotatingControlService::hardware_isHomeRefSwitchTriggered() { return m_hardware->tmc_home_ref_switch_get_state(); }
/*******************************************************************************
* JobBasic *
diff --git a/src/lncubator_temperature_control_service.cpp b/src/lncubator_temperature_control_service.cpp
index 3b4e80b..06a8500 100644
--- a/src/lncubator_temperature_control_service.cpp
+++ b/src/lncubator_temperature_control_service.cpp
@@ -63,10 +63,10 @@ void LncubatorTemperatureControlService::setPidParameters(float kp, float ki, fl
}
float LncubatorTemperatureControlService::getTemperature() {
float temperature[4];
- temperature[0] = m_hardware->tmp117[0].getTemperature();
- temperature[1] = m_hardware->tmp117[1].getTemperature();
- temperature[2] = m_hardware->tmp117[2].getTemperature();
- temperature[3] = m_hardware->tmp117[3].getTemperature();
+ temperature[0] = m_hardware->temperature_get_tmp117(0)->getTemperature();
+ temperature[1] = m_hardware->temperature_get_tmp117(1)->getTemperature();
+ temperature[2] = m_hardware->temperature_get_tmp117(2)->getTemperature();
+ temperature[3] = m_hardware->temperature_get_tmp117(3)->getTemperature();
float temperature_median = 0;
// 取温度的中位数
diff --git a/src/umain.cpp b/src/umain.cpp
index 747dee6..e3ec566 100644
--- a/src/umain.cpp
+++ b/src/umain.cpp
@@ -39,8 +39,8 @@ void Main::main(int argc, char const *argv[]) {
m_hardware.hardwareinit();
while (true) {
m_hardware.periodicJob();
- // m_hardware.testCanSlaveTxAndRx(canOnRxDataFlag);
- // m_hardware.testTmp117();
+ // m_hardware.can_test_periodicJob(canOnRxDataFlag);
+ // m_hardware.temperature_test_periodicJob();
}
}