11 changed files with 307 additions and 259 deletions
-
42app/MDK-ARM/app.uvguix.h_zha
-
38app/MDK-ARM/app.uvoptx
-
13app/MDK-ARM/app.uvprojx
-
2dep/libiflytop_micro
-
153src/device_io_service.cpp
-
57src/device_io_service.hpp
-
28src/libtmcimpl.cpp
-
34src/libtmcimpl.hpp
-
64src/port.hpp
-
35src/umain.cpp
42
app/MDK-ARM/app.uvguix.h_zha
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1 +1 @@ |
|||
Subproject commit fb4426557e187f3f0ce98d8220a995f27f6258ad |
|||
Subproject commit bf2d8c1c5d3ab028b17d61e3dd6906231115bd82 |
@ -0,0 +1,57 @@ |
|||
#pragma once
|
|||
#include <stdint.h>
|
|||
#include <stdio.h>
|
|||
|
|||
#include "libiflytop_micro/stm32/basic/basic.h"
|
|||
#include "libiflytop_micro\stm32\basic\iflytop_micro_os.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"
|
|||
|
|||
namespace iflytop { |
|||
using namespace std; |
|||
|
|||
class DeviceIoService : public IflytopMicroOS { |
|||
private: |
|||
/* data */ |
|||
public: |
|||
DeviceIoService(/* args */) {} |
|||
~DeviceIoService() {} |
|||
|
|||
/*******************************************************************************
|
|||
* 帕尔贴驱动电路 * |
|||
*******************************************************************************/ |
|||
void peltier_set_pwm(int pwm); |
|||
/*******************************************************************************
|
|||
* tmc芯片驱动相关 * |
|||
*******************************************************************************/ |
|||
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_nRESET_pin_set_state(uint8_t channel, bool state); |
|||
|
|||
/*******************************************************************************
|
|||
* OVERRIDE IflytopMicroOS * |
|||
*******************************************************************************/ |
|||
virtual void sleepMS(int ms) { HAL_Delay(ms); }; |
|||
virtual uint32_t hasPassedMS(uint32_t ticket) { return sys_haspassedms(ticket); }; |
|||
virtual uint32_t getTicket() { return HAL_GetTick(); }; |
|||
virtual uint32_t getNowMS() { return HAL_GetTick(); }; |
|||
virtual void sleepus(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); } |
|||
|
|||
private: |
|||
// PE9 COLD_CTR_PWM0
|
|||
void peltier_cold_ctr_pwm(int pwm); |
|||
// PB0 HOT_CTR_PWM0
|
|||
void peltier_hot_ctr_pwm(int pwm); |
|||
|
|||
void tmc_motor_spi_select(int channel, bool state); |
|||
}; |
|||
|
|||
extern DeviceIoService deviceIoService; |
|||
} // namespace iflytop
|
@ -0,0 +1,28 @@ |
|||
#pragma once
|
|||
#include "libtmcimpl.hpp"
|
|||
|
|||
#include "device_io_service.hpp"
|
|||
namespace iflytop { |
|||
using namespace std; |
|||
/*******************************************************************************
|
|||
* TMC4361AImpl * |
|||
*******************************************************************************/ |
|||
void TMC4361AImpl::setResetPinState(bool state) { deviceIoService.tmc_nRESET_pin_set_state(m_channel, state); }; |
|||
void TMC4361AImpl::setFREEZEPinState(bool state) { deviceIoService.tmc_nFREEZE_pin_set_state(m_channel, state); }; |
|||
void TMC4361AImpl::setENNPinState(bool state) { deviceIoService.tmc_ENN_pin_set_state(m_channel, state); }; |
|||
bool TMC4361AImpl::getTargetReachedPinState() { return false; }; |
|||
void TMC4361AImpl::sleepus(int32_t us) { deviceIoService.sleepus(us); }; |
|||
void TMC4361AImpl::readWriteArray(uint8_t *data, size_t length) { //
|
|||
deviceIoService.tmc_motor_spi_write_and_read(m_channel, data, length); |
|||
}; |
|||
/*******************************************************************************
|
|||
* TMC2160Impl * |
|||
*******************************************************************************/ |
|||
void TMC2160Impl::initialize(uint8_t channel, TMC4361A *tmc4361) { |
|||
m_tmc4361 = tmc4361; |
|||
TMC2160::initialize(channel); |
|||
} |
|||
void TMC2160Impl::setENNPinState(bool state) { deviceIoService.tmc_ENN_pin_set_state(m_channel, state); }; |
|||
void TMC2160Impl::sleepus(int32_t us) { deviceIoService.sleepus(us); }; |
|||
void TMC2160Impl::readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); }; |
|||
} // namespace iflytop
|
@ -0,0 +1,34 @@ |
|||
#pragma once
|
|||
|
|||
#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 { |
|||
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); |
|||
}; |
|||
/**
|
|||
* @brief 对接TMC2160和硬件的接口 |
|||
*/ |
|||
class TMC2160Impl : public TMC2160 { |
|||
TMC4361A *m_tmc4361; |
|||
|
|||
public: |
|||
void initialize(uint8_t channel, TMC4361A *tmc4361); |
|||
|
|||
protected: |
|||
virtual void setENNPinState(bool state); |
|||
virtual void sleepus(int32_t us); |
|||
virtual void readWriteArray(uint8_t *data, size_t length); |
|||
}; |
|||
} // namespace iflytop
|
@ -1,64 +0,0 @@ |
|||
#include <stdint.h>
|
|||
#include <stdio.h>
|
|||
|
|||
#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp"
|
|||
namespace iflytop { |
|||
void port_do_debug_light_state(); |
|||
void port_delay_us(uint32_t us); |
|||
|
|||
/*******************************************************************************
|
|||
* IflytopMicroOS对接 * |
|||
*******************************************************************************/ |
|||
class IflytopMicroOSImpl : public IflytopMicroOS { |
|||
public: |
|||
virtual void sleepMS(int ms) { HAL_Delay(ms); }; |
|||
virtual uint32_t hasPassedMS(uint32_t ticket) { return sys_haspassedms(ticket); }; |
|||
virtual uint32_t getTicket() { return HAL_GetTick(); }; |
|||
virtual uint32_t getNowMS() { return HAL_GetTick(); }; |
|||
}; |
|||
|
|||
/*******************************************************************************
|
|||
* 帕尔贴驱动电路 * |
|||
*******************************************************************************/ |
|||
void port_peltier_set_pwm(int pwm); |
|||
/*******************************************************************************
|
|||
* tmc芯片驱动相关 * |
|||
*******************************************************************************/ |
|||
void port_tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length); |
|||
void port_tmc_extern_clk_enable(); |
|||
void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state); |
|||
void port_tmc_ENN_pin_set_state(uint8_t channel, bool state); |
|||
void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state); |
|||
int32_t port_tmc4361_get_version(uint8_t channel); |
|||
/**
|
|||
* @brief 对接TMC4361和硬件的接口 |
|||
*/ |
|||
class TMC4361AImpl : public TMC4361A { |
|||
protected: |
|||
virtual void setResetPinState(bool state) { port_tmc_nRESET_pin_set_state(m_channel, state); }; |
|||
virtual void setFREEZEPinState(bool state) { port_tmc_nFREEZE_pin_set_state(m_channel, state); }; |
|||
virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; |
|||
virtual bool getTargetReachedPinState() { return false; }; |
|||
virtual void sleepus(int32_t us) { port_delay_us(us); }; |
|||
virtual void readWriteArray(uint8_t *data, size_t length) { //
|
|||
port_tmc_motor_spi_write_and_read(m_channel, data, length); |
|||
}; |
|||
}; |
|||
/**
|
|||
* @brief 对接TMC2160和硬件的接口 |
|||
*/ |
|||
class TMC2160Impl : public TMC2160 { |
|||
TMC4361A *m_tmc4361; |
|||
|
|||
public: |
|||
void initialize(uint8_t channel, TMC4361A *tmc4361) { |
|||
m_tmc4361 = tmc4361; |
|||
TMC2160::initialize(channel); |
|||
} |
|||
|
|||
protected: |
|||
virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; |
|||
virtual void sleepus(int32_t us) { port_delay_us(us); }; |
|||
virtual void readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); }; |
|||
}; |
|||
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue