Browse Source

重构部分代码

master
zhaohe 2 years ago
parent
commit
aff8bf2c94
  1. 3
      .vscode/settings.json
  2. 3
      app/Core/Inc/stm32f4xx_it.h
  3. 42
      app/Core/Src/gpio.c
  4. 1
      app/Core/Src/stm32f4xx_it.c
  5. 74
      app/MDK-ARM/app.uvguix.h_zha
  6. 58
      app/app.ioc
  7. 2
      dep/libiflytop_micro
  8. 2
      dep/libtrinamic
  9. 51
      src/board/device_io_service.cpp
  10. 10
      src/board/device_io_service.hpp
  11. 4
      src/board/fan_state_monitor.cpp
  12. 12
      src/board/hardware.cpp
  13. 24
      src/board/hardware.hpp
  14. 19
      src/board/libtmcimpl.cpp
  15. 21
      src/board/libtmcimpl.hpp
  16. 15
      src/board/project_board.hpp
  17. 29
      src/lncubator_rotating_control_service.cpp
  18. 27
      src/lncubator_rotating_control_service.hpp
  19. 4
      src/umain.cpp

3
.vscode/settings.json

@ -64,6 +64,7 @@
"deque": "cpp",
"param.h": "c",
"stdbool.h": "c",
"check.h": "c"
"check.h": "c",
"stm32f4xx_it.h": "c"
}
}

3
app/Core/Inc/stm32f4xx_it.h

@ -55,10 +55,13 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void EXTI3_IRQHandler(void);
void CAN1_TX_IRQHandler(void);
void CAN1_RX0_IRQHandler(void);
void CAN1_RX1_IRQHandler(void);
void CAN1_SCE_IRQHandler(void);
void EXTI9_5_IRQHandler(void);
void EXTI15_10_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */

42
app/Core/Src/gpio.c

@ -69,12 +69,12 @@ void MX_GPIO_Init(void)
/*Configure GPIO pins : PC13 PC14 PC15 PC0
PC1 PC2 PC3 PC4
PC5 PC6 PC7 PC10
PC11 PC12 */
PC5 PC6 PC10 PC11
PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0
|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10
|GPIO_PIN_11|GPIO_PIN_12;
|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
@ -100,17 +100,29 @@ void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PD8 PD9 PD10 PD11
PD12 PD13 PD15 PD0
PD1 PD2 PD3 PD4
PD5 PD6 PD7 */
PD13 PD15 PD0 PD1
PD2 PD4 PD5 PD6
PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_15|GPIO_PIN_0
|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
|GPIO_PIN_13|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1
|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6
|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PD12 PD3 */
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pin : PC7 */
GPIO_InitStruct.Pin = GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pin : PC9 */
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
@ -119,6 +131,16 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
/* USER CODE BEGIN 2 */

1
app/Core/Src/stm32f4xx_it.c

@ -254,6 +254,7 @@ void CAN1_SCE_IRQHandler(void)
/* USER CODE END CAN1_SCE_IRQn 1 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

74
app/MDK-ARM/app.uvguix.h_zha
File diff suppressed because it is too large
View File

58
app/app.ioc

@ -43,30 +43,33 @@ Mcu.Name=STM32F407V(E-G)Tx
Mcu.Package=LQFP100
Mcu.Pin0=PH0-OSC_IN
Mcu.Pin1=PH1-OSC_OUT
Mcu.Pin10=PA10
Mcu.Pin11=PA11
Mcu.Pin12=PA12
Mcu.Pin13=PA13
Mcu.Pin14=PA14
Mcu.Pin15=PB3
Mcu.Pin16=PB6
Mcu.Pin17=PB7
Mcu.Pin18=VP_CRC_VS_CRC
Mcu.Pin19=VP_RNG_VS_RNG
Mcu.Pin10=PC9
Mcu.Pin11=PA9
Mcu.Pin12=PA10
Mcu.Pin13=PA11
Mcu.Pin14=PA12
Mcu.Pin15=PA13
Mcu.Pin16=PA14
Mcu.Pin17=PD3
Mcu.Pin18=PB3
Mcu.Pin19=PB6
Mcu.Pin2=PA5
Mcu.Pin20=VP_SYS_VS_Systick
Mcu.Pin21=VP_TIM1_VS_ClockSourceINT
Mcu.Pin22=VP_TIM3_VS_ClockSourceINT
Mcu.Pin23=VP_TIM6_VS_ClockSourceINT
Mcu.Pin24=VP_TIM7_VS_ClockSourceINT
Mcu.Pin20=PB7
Mcu.Pin21=VP_CRC_VS_CRC
Mcu.Pin22=VP_RNG_VS_RNG
Mcu.Pin23=VP_SYS_VS_Systick
Mcu.Pin24=VP_TIM1_VS_ClockSourceINT
Mcu.Pin25=VP_TIM3_VS_ClockSourceINT
Mcu.Pin26=VP_TIM6_VS_ClockSourceINT
Mcu.Pin27=VP_TIM7_VS_ClockSourceINT
Mcu.Pin3=PA6
Mcu.Pin4=PA7
Mcu.Pin5=PE9
Mcu.Pin6=PD14
Mcu.Pin7=PC8
Mcu.Pin8=PC9
Mcu.Pin9=PA9
Mcu.PinsNb=25
Mcu.Pin6=PD12
Mcu.Pin7=PD14
Mcu.Pin8=PC7
Mcu.Pin9=PC8
Mcu.PinsNb=28
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407VETx
@ -78,6 +81,9 @@ NVIC.CAN1_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.CAN1_SCE_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.CAN1_TX_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.EXTI15_10_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.EXTI3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.EXTI9_5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
@ -118,13 +124,19 @@ PB6.Signal=I2C1_SCL
PB7.Locked=true
PB7.Mode=I2C
PB7.Signal=I2C1_SDA
PC7.Locked=true
PC7.Signal=GPXTI7
PC8.Locked=true
PC8.Signal=S_TIM8_CH3
PC9.Locked=true
PC9.Mode=Clock-out-2
PC9.Signal=RCC_MCO_2
PD12.Locked=true
PD12.Signal=GPXTI12
PD14.Locked=true
PD14.Signal=S_TIM4_CH3
PD3.Locked=true
PD3.Signal=GPXTI3
PE9.GPIOParameters=GPIO_ModeDefaultPP,GPIO_PuPd
PE9.GPIO_ModeDefaultPP=GPIO_MODE_AF_PP
PE9.GPIO_PuPd=GPIO_PULLDOWN
@ -203,6 +215,12 @@ RCC.VCOI2SOutputFreq_Value=128000000
RCC.VCOInputFreq_Value=2000000
RCC.VCOOutputFreq_Value=288000000
RCC.VcooutputI2S=64000000
SH.GPXTI12.0=GPIO_EXTI12
SH.GPXTI12.ConfNb=1
SH.GPXTI3.0=GPIO_EXTI3
SH.GPXTI3.ConfNb=1
SH.GPXTI7.0=GPIO_EXTI7
SH.GPXTI7.ConfNb=1
SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1
SH.S_TIM1_CH1.ConfNb=1
SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2

2
dep/libiflytop_micro

@ -1 +1 @@
Subproject commit bb1b993c2015abe36525a7876b17f076665433b4
Subproject commit 160fa668ad40f8abac72d2634ee54fa4f3ad9188

2
dep/libtrinamic

@ -1 +1 @@
Subproject commit 02807418568c7fdb1bee192424af3ad274b06269
Subproject commit d4381558b25522ebd43c86d125f8177d38c578e3

51
src/board/device_io_service.cpp

@ -1,6 +1,8 @@
#include "device_io_service.hpp"
#include "libiflytop_micro/stm32/basic/stm32_hal_utils.hpp"
#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp"
#include "project_board.hpp"
#define TAG "DEVICE_IO_SERVICE"
extern "C" {
int fputc(int ch, FILE *stream) {
@ -12,21 +14,36 @@ int fputc(int ch, FILE *stream) {
using namespace iflytop;
namespace iflytop {}
void DeviceIoService::initialize() { //
// STM32_HAL.connect(this, &DeviceIoService::onGPIO_EXTI_Callback);
}
void DeviceIoService::onGPIO_EXTI_Callback(uint16_t gpioNum) {
/**
* @brief
*/
if (gpioNum == TMC_HOME_REF_GPIO_PIN) {
if (STM32_HAL_GPIO_IS_THIS_PIN_TRIGGER_IRQ(TMC_HOME_REF_GPIO)) {
onHomeRefSwitch.trigger();
}
}
}
void DeviceIoService::debug_light_init() {
Stm32HalUtils::gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL.gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
}
void DeviceIoService::fanInit(int freq) {
Stm32HalUtils::setPWMFreq(&htim2, freq); // fan0->fan3
Stm32HalUtils::setPWMFreq(&htim4, freq); // fan4
Stm32HalUtils::setPWMFreq(&htim8, freq); // fan5
STM32_HAL.setPWMFreq(&htim2, freq); // fan0->fan3
STM32_HAL.setPWMFreq(&htim4, freq); // fan4
STM32_HAL.setPWMFreq(&htim8, freq); // fan5
// fan0 fan1 fan2 fan3
Stm32HalUtils::gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL.gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
// fan4
Stm32HalUtils::gpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL.gpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
// fan5
Stm32HalUtils::gpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL.gpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
}
void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
@ -37,7 +54,7 @@ void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
}
if (fanIndex <= 3) {
Stm32HalUtils::setPWMDuty(&htim2, TIM_CHANNEL_2, dutyCycle);
STM32_HAL.setPWMDuty(&htim2, TIM_CHANNEL_2, dutyCycle);
m_fanState[0] = dutyCycle > 0;
m_fanState[1] = dutyCycle > 0;
m_fanState[2] = dutyCycle > 0;
@ -50,7 +67,7 @@ void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
}
} else if (fanIndex == 4) {
Stm32HalUtils::setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle);
STM32_HAL.setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle);
m_fanState[4] = dutyCycle > 0;
if (dutyCycle > 0) {
@ -59,7 +76,7 @@ void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
}
} else if (fanIndex == 5) {
Stm32HalUtils::setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle);
STM32_HAL.setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle);
m_fanState[5] = dutyCycle > 0;
if (dutyCycle > 0) {
@ -94,8 +111,8 @@ void DeviceIoService::peltier_hot_ctr_pwm(int pwm) {
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
}
void DeviceIoService::peltier_init() { //
Stm32HalUtils::gpioInit(GPIOB, GPIO_PIN_1, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
Stm32HalUtils::gpioInit(GPIOE, GPIO_PIN_10, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL.gpioInit(GPIOB, GPIO_PIN_1, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL.gpioInit(GPIOE, GPIO_PIN_10, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
}
void DeviceIoService::peltier_set_pwm(int pwm) {
/**
@ -139,11 +156,11 @@ void DeviceIoService::peltier_set_pwm(int pwm) {
* tmc芯片驱动相关 *
*******************************************************************************/
void DeviceIoService::tmc_init() {
Stm32HalUtils::gpioInit( //
STM32_HAL.gpioInit( //
GPIOA, GPIO_PIN_4, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
Stm32HalUtils::gpioInit( //
STM32_HAL.gpioInit( //
GPIOE, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
Stm32HalUtils::gpioInit( //
STM32_HAL.gpioInit( //
GPIOE, GPIO_PIN_11, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
}
@ -176,3 +193,7 @@ void DeviceIoService::tmc_subic_ENN_pin_set_state(uint8_t channel, bool state) {
}
}
void DeviceIoService::tmc_nRESET_pin_set_state(uint8_t channel, bool state) {}
void DeviceIoService::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);
}

10
src/board/device_io_service.hpp

@ -2,12 +2,13 @@
#include <stdint.h>
#include <stdio.h>
#include "board/project_board.hpp"
#include "libiflytop_micro/stm32/basic/basic.h"
#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp"
#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp"
#include "libtrinamic/src/ic/tmc2160.hpp"
#include "libtrinamic\src\ic\tmc4361A.hpp"
#include "main.h"
#include "project_board.hpp"
#include "spi.h"
#include "tim.h"
#include "usart.h"
@ -18,13 +19,15 @@ using namespace std;
class DeviceIoService : public IflytopMicroOS {
private:
/* data */
bool m_fanState[6];
ZSLOT1(DeviceIoService, onGPIO_EXTI_Callback, uint16_t); // GPIO中断回调
public:
DeviceIoService(/* args */) {}
~DeviceIoService() {}
void initialize();
/*******************************************************************************
* *
*******************************************************************************/
@ -56,6 +59,9 @@ class DeviceIoService : public IflytopMicroOS {
void tmc_subic_ENN_pin_set_state(uint8_t channel, bool state);
void tmc_nRESET_pin_set_state(uint8_t channel, bool state);
ZSignal0<void> onHomeRefSwitch;
void home_ref_switch_init();
/*******************************************************************************
* OVERRIDE IflytopMicroOS *
*******************************************************************************/

4
src/board/fan_state_monitor.cpp

@ -1,7 +1,7 @@
#include "fan_state_monitor.hpp"
#include "libiflytop_micro/stm32/basic/basic.h"
#include "libiflytop_micro\stm32\basic\stm32_hal_utils.hpp"
#include "libiflytop_micro\stm32\basic/stm32_hal_res_manager.hpp"
using namespace iflytop;
@ -18,7 +18,7 @@ void FanStateMonitor::initialize(IflytopMicroOS* os, GPIO_TypeDef* FB_GPIOx, uin
m_lastFanState = false;
m_fanError = false;
Stm32HalUtils::gpioInitAsInput(FB_GPIOx, FB_GPIO_Pin);
STM32_HAL.gpioInitAsInput(FB_GPIOx, FB_GPIO_Pin);
m_lastPinState = HAL_GPIO_ReadPin(m_FB_GPIOx, m_FB_GPIO_Pin);
}
void FanStateMonitor::doFanStateCheckPeriodicJob() {

12
src/board/hardware.cpp

@ -30,6 +30,7 @@ void Hardware::hardwareinit() {
IflytopCanSlave::iflytop_can_slave_config_t *config = canSlaveService.createDefaultConfig(DEVICE_ID);
canSlaveService.initialize(m_os, config);
canSlaveService.activateRxIT();
canSlaveService.registerListener(this);
#endif
/*******************************************************************************
* *
@ -54,13 +55,13 @@ void Hardware::hardwareinit() {
m_deviceIoService.tmc_init();
m_deviceIoService.tmc_extern_clk_enable();
// 4361初始化
TMC4361AImpl::TMC4361AConfig_t *tmc4361aconfig = TMC4361AImpl::createDeafultTMC4361AConfig();
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(&m_deviceIoService, MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig);
tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig);
tmc4361motor1.setMaximumAcceleration(300000);
tmc4361motor1.setMaximumDeceleration(300000);
@ -183,3 +184,10 @@ void Hardware::testCanSlaveTxAndRx() {
// canSlaveService.activateRxIT();
}
}
void Hardware::TMC4361APort_setResetPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_nRESET_pin_set_state(channel, state); }
void Hardware::TMC4361APort_setFREEZEPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_nFREEZE_pin_set_state(channel, state); }
void Hardware::TMC4361APort_setENNPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_ENN_pin_set_state(channel, state); }
bool Hardware::TMC4361APort_getTargetReachedPinState(uint16_t channel) { return false; }
void Hardware::TMC4361APort_sleepus(int32_t us) { m_os->sleepus(us); }
void Hardware::TMC4361APort_readWriteArray(uint8_t *data, size_t length) { m_deviceIoService.tmc_motor_spi_write_and_read(0, data, length); }
void Hardware::TMC4361APort_setSubICENNPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_subic_ENN_pin_set_state(channel, state); }

24
src/board/hardware.hpp

@ -7,12 +7,12 @@
#include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp"
namespace iflytop {
class Hardware {
class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
private:
/* data */
public:
TMC4361AImpl tmc4361motor1;
TMC4361A tmc4361motor1;
TMP117 tmp117[4];
FanStateMonitor m_fanStateMonitor[6];
IflytopCanSlave canSlaveService;
@ -22,11 +22,15 @@ class Hardware {
bool m_canOnRxDataFlag;
public:
ZSLOT0(Hardware, onCanRxData) {
/*******************************************************************************
* ListenerImpl *
*******************************************************************************/
virtual void OnIflytopCanSlaveOnCanRxData() {
m_canOnRxDataFlag = true;
canSlaveService.deactivateRxIT();
}
public:
Hardware(/* args */){};
~Hardware(){};
@ -41,6 +45,20 @@ class Hardware {
void testTmp117();
void testCanSlaveTxAndRx();
void do_debug_light_state();
public:
/*******************************************************************************
* TMC4361APort *
*******************************************************************************/
virtual void TMC4361APort_setResetPinState(uint16_t channel, bool state);
virtual void TMC4361APort_setFREEZEPinState(uint16_t channel, bool state);
virtual void TMC4361APort_setENNPinState(uint16_t channel, bool state);
virtual bool TMC4361APort_getTargetReachedPinState(uint16_t channel);
virtual void TMC4361APort_sleepus(int32_t us);
virtual void TMC4361APort_readWriteArray(uint8_t *data, size_t length);
virtual void TMC4361APort_setSubICENNPinState(uint16_t channel, bool state);
public:
};
} // namespace iflytop

19
src/board/libtmcimpl.cpp

@ -2,22 +2,3 @@
#include "libtmcimpl.hpp"
#include "device_io_service.hpp"
namespace iflytop {
using namespace std;
/*******************************************************************************
* TMC4361AImpl *
*******************************************************************************/
void TMC4361AImpl::setResetPinState(bool state) { m_deviceIoService->tmc_nRESET_pin_set_state(m_channel, state); };
void TMC4361AImpl::setFREEZEPinState(bool state) { m_deviceIoService->tmc_nFREEZE_pin_set_state(m_channel, state); };
void TMC4361AImpl::setENNPinState(bool state) { m_deviceIoService->tmc_ENN_pin_set_state(m_channel, state); };
void TMC4361AImpl::setSubICENNPinState(bool state) { m_deviceIoService->tmc_subic_ENN_pin_set_state(m_channel, state); }
bool TMC4361AImpl::getTargetReachedPinState() { return false; };
void TMC4361AImpl::sleepus(int32_t us) { m_deviceIoService->sleepus(us); };
void TMC4361AImpl::readWriteArray(uint8_t *data, size_t length) { //
m_deviceIoService->tmc_motor_spi_write_and_read(m_channel, data, length);
};
void TMC4361AImpl::initialize(DeviceIoService *deviceIoService, uint8_t channel, driver_ic_type_t driver_ic_type, TMC4361AConfig_t *config) {
m_deviceIoService = deviceIoService;
TMC4361A::initialize(channel, driver_ic_type, config);
}
} // namespace iflytop

21
src/board/libtmcimpl.hpp

@ -4,24 +4,3 @@
#include "libiflytop_micro/stm32/basic/basic.h"
#include "libtrinamic/src/ic/tmc2160.hpp"
#include "libtrinamic\src\ic\tmc4361A.hpp"
namespace iflytop {
using namespace std;
/**
* @brief TMC4361和硬件的接口
*/
class TMC4361AImpl : public TMC4361A {
DeviceIoService *m_deviceIoService;
protected:
virtual void setResetPinState(bool state);
virtual void setFREEZEPinState(bool state);
virtual void setENNPinState(bool state);
virtual bool getTargetReachedPinState();
virtual void sleepus(int32_t us);
virtual void readWriteArray(uint8_t *data, size_t length);
virtual void setSubICENNPinState(bool state);
public:
void initialize(DeviceIoService *deviceIoService, uint8_t channel, driver_ic_type_t driver_ic_type, TMC4361AConfig_t *config);
};
} // namespace iflytop

15
src/project_board.hpp → src/board/project_board.hpp

@ -3,20 +3,23 @@
#define VERSION "v1.0"
// 设备ID
#define DEVICE_ID 0x02
// 调试串口
#define DEBUG_UART huart1
// 调试指示灯
#define DEBUG_LIGHT_PORT GPIOE
#define DEBUG_LIGHT_PIN GPIO_PIN_8
// 微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置
// http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md
#define DELAY_US_TIMER htim6
// 电机编号
//
/*******************************************************************************
* TMC *
*******************************************************************************/
// 电机通道编号
#define MOTOR_1_TMC4361A_CHANNEL 1
#define MOTOR_1_TMC2160_CHANNEL 2
//
#define TMC_HOME_REF_GPIO_PIN GPIO_PIN_3
#define TMC_HOME_REF_GPIO_PORT GPIOD
#define TMC_HOME_REF_GPIO_IRQ_MODE GPIO_MODE_IT_RISING

29
src/lncubator_rotating_control_service.cpp

@ -1,6 +1,7 @@
#include "lncubator_rotating_control_service.hpp"
using namespace iflytop;
#define TAG "LRCS"
const uint32_t LncubatorRotatingControlService::mc_onecircle_ustep_num = (256 * 200 * 50);
const uint32_t LncubatorRotatingControlService::mc_default_velocity = 500000; // 500k
@ -30,15 +31,39 @@ void LncubatorRotatingControlService::initialize(Hardware* hardware) { //
* @brief
*/
m_motor->setMotorInPositionMode();
hardware->m_deviceIoService.onHomeRefSwitch.connect(this, onHomeSwitchKey);
}
void LncubatorRotatingControlService::moveToHome() {
m_dowhat = krotateToHome;
m_motor->moveTo(mc_onecircle_ustep_num * 2, m_maxVelocity);
}
void LncubatorRotatingControlService::onHomeSwitchKey() {
/**
* @brief
*/
m_homeKeyTriggered = true;
}
void LncubatorRotatingControlService::setVelocity(uint32_t velocityMax) { m_maxVelocity = velocityMax; }
void LncubatorRotatingControlService::rotate(uint32_t count) { m_motor->moveBy(count, m_maxVelocity); }
void LncubatorRotatingControlService::periodicJob() {
if (krotateToHome) {
if (krotateToHome == m_dowhat) {
doRotateToHomeJob();
}
}
void LncubatorRotatingControlService::doRotateToHomeJob() {
if (m_homeKeyTriggered) {
m_homeKeyTriggered = false;
/**
* @brief ,
*/
m_homePosition = m_motor->getENC_POS();
m_motor->stop();
m_dowhat = kidle;
ZLOGI(TAG, "home position:%d", m_homePosition);
}
}
void LncubatorRotatingControlService::registerListener(LncubatorRotatingControlServiceListener* listener) { //
m_listener = listener;
}

27
src/lncubator_rotating_control_service.hpp

@ -1,5 +1,8 @@
#pragma once
#include "board\hardware.hpp"
#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp"
#include "libiflytop_micro\stm32\component\state_machine\state_machine.hpp"
namespace iflytop {
/**
* @brief
@ -14,11 +17,19 @@ namespace iflytop {
* 7.
* 8.
*
*
*
*/
#define LNCUBATOR_MAX_POSITION_COUNT 20
#define ZEROOFFSETCORRECTION 0
class LncubatorRotatingControlServiceListener {
public:
virtual void OnlncubatorRotatingControlServiceException() = 0;
virtual void OnlncubatorRotatingControlServiceJobFinished() = 0;
};
class LncubatorRotatingControlService {
public:
typedef enum {
@ -35,23 +46,26 @@ class LncubatorRotatingControlService {
kidle,
krotateToTarget,
krotateToHome,
kspeedMode,
} dowhat_t;
/* data */
Hardware* m_hardware;
IflytopMicroOS* m_os;
TMC4361AImpl* m_motor;
TMC4361A* m_motor;
dowhat_t m_dowhat;
// 零点位置
uint32_t m_homePosition;
// 便宜修正,第一个仓位中心距离零点的距离
uint32_t m_homeOffsetCorrection;
uint32_t m_maxVelocity = 0;
bool m_workfinished;
bool m_homeKeyTriggered;
bool m_workfinished;
LncubatorRotatingControlServiceListener* m_listener;
bool homeKeyTriggered;
private:
ZSLOT0(LncubatorRotatingControlService, onHomeSwitchKey);
public:
LncubatorRotatingControlService();
@ -61,6 +75,8 @@ class LncubatorRotatingControlService {
void setVelocity(uint32_t velocityMax);
void rotate(uint32_t count);
void registerListener(LncubatorRotatingControlServiceListener* listener);
void moveToHome();
void moveTo(refpoint_t refpoint, uint32_t positionIndex);
void stop();
@ -74,5 +90,8 @@ class LncubatorRotatingControlService {
void calibrationPosition(refpoint_t refpoint, uint32_t positionIndex);
void periodicJob();
private:
void doRotateToHomeJob();
};
} // namespace iflytop

4
src/umain.cpp

@ -3,10 +3,10 @@
#include "board/device_io_service.hpp"
#include "board/libtmcimpl.hpp"
#include "board/project_board.hpp"
#include "libiflytop_micro\stm32\basic\basic.h"
#include "libtrinamic/src/ic/tmc2160.hpp"
#include "libtrinamic\src\ic\tmc4361A.hpp"
#include "project_board.hpp"
//
#include "board/hardware.hpp"
#include "i2c.h"
@ -36,7 +36,7 @@ class Main {
void Main::initialize() {
zsignal_init(zsignal_listener, ZARRAY_SIZE(zsignal_listener));
m_hardware.hardwareinit();
m_hardware.hardwareinit();
// canSlaveService = &m_hardware.canSlaveService;
}

Loading…
Cancel
Save