Browse Source

整理hardware.cpp

master
zhaohe 2 years ago
parent
commit
a5c20674fa
  1. 20
      app/MDK-ARM/app.uvguix.h_zha
  2. 2
      src/board/fan_state_monitor.cpp
  3. 8
      src/board/fan_state_monitor.hpp
  4. 436
      src/board/hardware.cpp
  5. 110
      src/board/hardware.hpp
  6. 4
      src/lncubator_rotating_control_service.cpp
  7. 8
      src/lncubator_temperature_control_service.cpp
  8. 4
      src/umain.cpp

20
app/MDK-ARM/app.uvguix.h_zha

@ -93,8 +93,8 @@
<flags>2</flags>
<showCmd>3</showCmd>
<MinPosition>
<xPos>-32000</xPos>
<yPos>-32000</yPos>
<xPos>-1</xPos>
<yPos>-1</yPos>
</MinPosition>
<MaxPosition>
<xPos>-1</xPos>
@ -102,8 +102,8 @@
</MaxPosition>
<NormalPosition>
<Top>14</Top>
<Left>375</Left>
<Right>1475</Right>
<Left>376</Left>
<Right>1476</Right>
<Bottom>1000</Bottom>
</NormalPosition>
</WindowPosition>
@ -111,7 +111,7 @@
<RegID>0</RegID>
<MDITabState>
<Len>738</Len>
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000000000000100000059443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000C5D4F200FFFFFFFF71443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C2E637070000000000D73746D33325F68616C2E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000BECEA100FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E687070000000000C746D6334333631412E68707000000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC010000660000009006000042020000</Data>
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000020000000100000059443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000C5D4F200FFFFFFFF71443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C2E637070000000000D73746D33325F68616C2E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000BECEA100FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E687070000000000C746D6334333631412E68707000000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC010000660000009006000042020000</Data>
</MDITabState>
</MDIClientArea>
<ViewEx>
@ -1822,7 +1822,7 @@
<Name>Build</Name>
<Buttons>
<Len>966</Len>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
</Buttons>
<OriginalItems>
<Len>583</Len>
@ -1838,7 +1838,7 @@
<Name>Debug</Name>
<Buttons>
<Len>2373</Len>
<Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
<Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
</Buttons>
<OriginalItems>
<Len>898</Len>
@ -3603,12 +3603,12 @@
<ActiveMDIGroup>0</ActiveMDIGroup>
<MDIGroup>
<Size>100</Size>
<ActiveTab>0</ActiveTab>
<ActiveTab>2</ActiveTab>
<Doc>
<Name>..\..\src\board\hardware.cpp</Name>
<ColumnNumber>0</ColumnNumber>
<TopLine>372</TopLine>
<CurrentLine>396</CurrentLine>
<TopLine>1</TopLine>
<CurrentLine>1</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>

2
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 22
*/

8
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();
};

436
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();
}
}

110
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:
};

4
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 *

8
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;
// 取温度的中位数

4
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();
}
}

Loading…
Cancel
Save