Browse Source

重构代码

master
zhaohe 2 years ago
parent
commit
7f9d68b64b
  1. 154
      app/MDK-ARM/app.uvguix.h_zha
  2. 66
      app/MDK-ARM/app.uvoptx
  3. 19
      app/MDK-ARM/app.uvprojx
  4. 2
      dep/libiflytop_micro
  5. 199
      src/board/device_io_service.cpp
  6. 83
      src/board/device_io_service.hpp
  7. 4
      src/board/fan_state_monitor.cpp
  8. 242
      src/board/hardware.cpp
  9. 72
      src/board/hardware.hpp
  10. 4
      src/board/libtmcimpl.cpp
  11. 6
      src/board/libtmcimpl.hpp
  12. 6
      src/lncubator_rotating_control_service.cpp
  13. 13
      src/lncubator_rotating_control_service.hpp
  14. 4
      src/lncubator_temperature_control_service.cpp
  15. 1
      src/lncubator_temperature_control_service.hpp
  16. 2
      src/umain.cpp

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

66
app/MDK-ARM/app.uvoptx

@ -203,7 +203,7 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\..\src\board\device_io_service.cpp</Filename>
<Filename>D:\workspace\project_boditech_vidas_a8000\Incubator_control_system\src\board\device_io_service.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\app\../../src/board/device_io_service.cpp\142</Expression>
</Bp>
@ -897,8 +897,8 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp</PathWithFileName>
<FilenameWithoutPath>stm32_hal_res_manager.cpp</FilenameWithoutPath>
<PathWithFileName>..\..\dep\libiflytop_micro\stm32\basic\stm32_hal.cpp</PathWithFileName>
<FilenameWithoutPath>stm32_hal.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@ -953,18 +953,6 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\src\board\device_io_service.cpp</PathWithFileName>
<FilenameWithoutPath>device_io_service.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>42</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\src\board\fan_state_monitor.cpp</PathWithFileName>
<FilenameWithoutPath>fan_state_monitor.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@ -972,7 +960,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>42</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -982,18 +970,6 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>44</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\src\board\libtmcimpl.cpp</PathWithFileName>
<FilenameWithoutPath>libtmcimpl.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -1004,7 +980,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1016,7 +992,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1028,7 +1004,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1040,7 +1016,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1052,7 +1028,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>47</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1064,7 +1040,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1076,7 +1052,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1088,7 +1064,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>50</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1100,7 +1076,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>51</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1112,7 +1088,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>52</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1124,19 +1100,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>55</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_utils.cpp</PathWithFileName>
<FilenameWithoutPath>stm32_hal_utils.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

19
app/MDK-ARM/app.uvprojx

@ -1196,9 +1196,9 @@
<FilePath>..\..\dep\libiflytop_micro\stm32\basic\basic.c</FilePath>
</File>
<File>
<FileName>stm32_hal_res_manager.cpp</FileName>
<FileName>stm32_hal.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp</FilePath>
<FilePath>..\..\dep\libiflytop_micro\stm32\basic\stm32_hal.cpp</FilePath>
</File>
<File>
<FileName>iflytop_can_slave.cpp</FileName>
@ -1221,11 +1221,6 @@
<FilePath>..\..\src\lncubator_temperature_control_service.cpp</FilePath>
</File>
<File>
<FileName>device_io_service.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\src\board\device_io_service.cpp</FilePath>
</File>
<File>
<FileName>fan_state_monitor.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\src\board\fan_state_monitor.cpp</FilePath>
@ -1235,11 +1230,6 @@
<FileType>8</FileType>
<FilePath>..\..\src\board\hardware.cpp</FilePath>
</File>
<File>
<FileName>libtmcimpl.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\src\board\libtmcimpl.cpp</FilePath>
</File>
</Files>
</Group>
<Group>
@ -1296,11 +1286,6 @@
<FilePath>..\..\dep\libiflytop_micro\stm32\basic\zsignal.cpp</FilePath>
</File>
<File>
<FileName>stm32_hal_utils.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_utils.cpp</FilePath>
</File>
<File>
<FileName>pid_ctrl.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\dep\libiflytop_micro\stm32\component\pid\pid_ctrl.c</FilePath>

2
dep/libiflytop_micro

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

199
src/board/device_io_service.cpp

@ -1,199 +0,0 @@
#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) {
uint8_t c = ch;
HAL_UART_Transmit(&DEBUG_UART, &c, 1, 100);
return ch;
}
}
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() {
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) {
STM32_HAL.setPWMFreq(&htim2, freq); // fan0->fan3
STM32_HAL.setPWMFreq(&htim4, freq); // fan4
STM32_HAL.setPWMFreq(&htim8, freq); // fan5
// fan0 fan1 fan2 fan3
STM32_HAL.gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
// fan4
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);
}
void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
if (fanIndex > 5) {
while (1) {
ZLOGE(TAG, "fanIndex is out of range!");
}
}
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;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
}
} else if (fanIndex == 4) {
STM32_HAL.setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle);
m_fanState[4] = dutyCycle > 0;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
}
} else if (fanIndex == 5) {
STM32_HAL.setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle);
m_fanState[5] = dutyCycle > 0;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
}
}
}
bool *DeviceIoService::fanGetPowerState(int fanIndex) {
if (fanIndex >= 5) {
while (1) {
ZLOGE(TAG, "fanIndex is out of range!");
}
}
return &m_fanState[fanIndex];
}
void DeviceIoService::fanSetState0to3(uint16_t dutyCycle) { fanSetDutyCycle(0, dutyCycle); }
void DeviceIoService::fanSetState4(uint16_t dutyCycle) { fanSetDutyCycle(4, dutyCycle); }
void DeviceIoService::fanSetState5(uint16_t dutyCycle) { fanSetDutyCycle(5, dutyCycle); }
/*******************************************************************************
* *
*******************************************************************************/
void DeviceIoService::peltier_cold_ctr_pwm(int pwm) {
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}
// PB0 HOT_CTR_PWM0
void DeviceIoService::peltier_hot_ctr_pwm(int pwm) {
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, pwm);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
}
void DeviceIoService::peltier_init() { //
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) {
/**
* @brief
*
*
* HOT_CTR_PWM0(AL) = 0
* HOT_CTR(AH) = 0
* COLD_CTR_PWM0(BL) = 0
* COLD_CTR(BH) = 0
*
* HOT_CTR_PWM0(AL) = 1(PWM)
* HOT_CTR(AH) = 0
* COLD_CTR_PWM0(BL) = 0
* COLD_CTR(BH) = 1(IO/)
*
* HOT_CTR_PWM0(AL) = 0
* HOT_CTR(AH) = 1(IO/)
* COLD_CTR_PWM0(BL) = 1(PWM)
* COLD_CTR(BH) = 0
*/
pwm = pwm * 1000;
if (pwm == 0) {
peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
} else if (pwm > 0) {
peltier_hot_ctr_pwm(pwm); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET); /*COLD_CTR*/
} else {
peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); /*HOT_CTR*/
peltier_cold_ctr_pwm(-pwm); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
}
}
/*******************************************************************************
* tmc芯片驱动相关 *
*******************************************************************************/
void DeviceIoService::tmc_init() {
STM32_HAL.gpioInit( //
GPIOA, GPIO_PIN_4, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
STM32_HAL.gpioInit( //
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);
}
void DeviceIoService::tmc_motor_spi_select(int channel, bool state) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, state ? GPIO_PIN_SET : GPIO_PIN_RESET); }
void DeviceIoService::tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length) {
if (channel == MOTOR_1_TMC4361A_CHANNEL) {
tmc_motor_spi_select(channel, false);
sleepus(10);
HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000);
tmc_motor_spi_select(channel, true);
}
}
void DeviceIoService::tmc_extern_clk_enable() {
#if 1
/**
* @brief TMC使用的外部时钟在stm32cubemx中已经进行配置16MHZ
* https://iflytop1.feishu.cn/wiki/wikcnog3hFm6dGFLMRksnhLb7Aw
*/
#endif
}
void DeviceIoService::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);
}
}
void DeviceIoService::tmc_ENN_pin_set_state(uint8_t channel, bool state) {}
void DeviceIoService::tmc_subic_ENN_pin_set_state(uint8_t channel, bool state) {
if (channel == MOTOR_1_TMC4361A_CHANNEL) {
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
}
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);
}

83
src/board/device_io_service.hpp

@ -1,83 +0,0 @@
#pragma once
#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 "spi.h"
#include "tim.h"
#include "usart.h"
namespace iflytop {
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();
/*******************************************************************************
* *
*******************************************************************************/
void debug_light_init();
/*******************************************************************************
* *
*******************************************************************************/
void fanInit(int freq);
void fanSetDutyCycle(int fanIndex, uint16_t dutyCycle);
bool *fanGetPowerState(int fanIndex);
void fanSetState0to3(uint16_t dutyCycle);
void fanSetState4(uint16_t dutyCycle);
void fanSetState5(uint16_t dutyCycle);
/*******************************************************************************
* *
*******************************************************************************/
void peltier_init();
void peltier_set_pwm(int pwm);
/*******************************************************************************
* tmc芯片驱动相关 *
*******************************************************************************/
void tmc_init();
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);
ZSignal0<void> onHomeRefSwitch;
void home_ref_switch_init();
/*******************************************************************************
* 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);
};
} // namespace iflytop

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_res_manager.hpp"
#include "libiflytop_micro\stm32\basic/stm32_hal.hpp"
using namespace iflytop;
@ -18,7 +18,7 @@ void FanStateMonitor::initialize(IflytopMicroOS* os, GPIO_TypeDef* FB_GPIOx, uin
m_lastFanState = false;
m_fanError = false;
STM32_HAL.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() {

242
src/board/hardware.cpp

@ -4,24 +4,38 @@
using namespace iflytop;
#define TAG "hardware"
#define ENABLE_CAN 0
extern "C" {
int fputc(int ch, FILE *stream) {
uint8_t c = ch;
HAL_UART_Transmit(&DEBUG_UART, &c, 1, 100);
return ch;
}
}
int32_t Hardware::port_tmc4361_get_version(uint8_t channel) {
int value;
uint8_t data[5];
data[0] = 0x7f;
m_deviceIoService.tmc_motor_spi_write_and_read(channel, &data[0], 5);
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::registerListener(HardwareListener *listener) {
if (listener && m_listenerNum < MAX_HARDWARE_LISTENER_NUM) {
m_listener[m_listenerNum] = listener;
m_listenerNum++;
}
}
void Hardware::hardwareinit() {
STM32_HAL::regListener(this);
m_canOnRxDataFlag = false;
m_os = &m_deviceIoService;
/*******************************************************************************
* *
*******************************************************************************/
m_deviceIoService.debug_light_init();
debug_light_init();
/*******************************************************************************
* CANSLAVEService初始化 *
@ -36,7 +50,7 @@ void Hardware::hardwareinit() {
* *
*******************************************************************************/
#if 0
m_deviceIoService.peltier_init();
peltier_init();
#endif
/*******************************************************************************
* *
@ -52,8 +66,8 @@ void Hardware::hardwareinit() {
* *
*******************************************************************************/
#if 1
m_deviceIoService.tmc_init();
m_deviceIoService.tmc_extern_clk_enable();
tmc_init();
tmc_extern_clk_enable();
// 4361初始化
TMC4361A::TMC4361AConfig_t *tmc4361aconfig = TMC4361A::createDeafultTMC4361AConfig(this);
tmc4361aconfig->encoder_config.diff_enc_in_disable = false;
@ -93,7 +107,7 @@ void Hardware::hardwareinit() {
* *
*******************************************************************************/
#if 0
m_deviceIoService.fanInit(1000);
fanInit(1000);
/**
* @brief
*
@ -104,12 +118,12 @@ void Hardware::hardwareinit() {
* FAN4_FB_INT PC7
* FAN5_FB_INT PC10
*/
m_fanStateMonitor[0].initialize(m_os, GPIOC, GPIO_PIN_1, m_deviceIoService.fanGetPowerState(0));
m_fanStateMonitor[1].initialize(m_os, GPIOC, GPIO_PIN_4, m_deviceIoService.fanGetPowerState(1));
m_fanStateMonitor[2].initialize(m_os, GPIOC, GPIO_PIN_5, m_deviceIoService.fanGetPowerState(2));
m_fanStateMonitor[3].initialize(m_os, GPIOC, GPIO_PIN_6, m_deviceIoService.fanGetPowerState(3));
m_fanStateMonitor[4].initialize(m_os, GPIOC, GPIO_PIN_7, m_deviceIoService.fanGetPowerState(4));
m_fanStateMonitor[5].initialize(m_os, GPIOC, GPIO_PIN_10, m_deviceIoService.fanGetPowerState(5));
m_fanStateMonitor[0].initialize(m_os, GPIOC, GPIO_PIN_1, fanGetPowerState(0));
m_fanStateMonitor[1].initialize(m_os, GPIOC, GPIO_PIN_4, fanGetPowerState(1));
m_fanStateMonitor[2].initialize(m_os, GPIOC, GPIO_PIN_5, fanGetPowerState(2));
m_fanStateMonitor[3].initialize(m_os, GPIOC, GPIO_PIN_6, fanGetPowerState(3));
m_fanStateMonitor[4].initialize(m_os, GPIOC, GPIO_PIN_7, fanGetPowerState(4));
m_fanStateMonitor[5].initialize(m_os, GPIOC, GPIO_PIN_10, fanGetPowerState(5));
#endif
}
void Hardware::periodicJob() {
@ -138,8 +152,8 @@ void Hardware::do_debug_light_state() {
*******************************************************************************/
void Hardware::testTmp117() {
static uint32_t lastcall;
if (m_os->hasPassedMS(lastcall) > 1000) {
lastcall = m_os->getTicket();
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) {
@ -158,8 +172,8 @@ void Hardware::testCanSlaveTxAndRx() {
{
static uint32_t lastcall;
static uint8_t tx[8] = {1, 2, 3, 4, 5, 6, 7, 8};
if (m_os->hasPassedMS(lastcall) > 1000) {
lastcall = m_os->getTicket();
if (hasPassedMS(lastcall) > 1000) {
lastcall = getTicket();
canSlaveService.translate(0x01, tx, 8, 2);
if (canSlaveService.getLastTransmitStatus() == HAL_OK) {
ZLOGI(TAG, "send ok");
@ -184,10 +198,192 @@ 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); }
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) { 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); }
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
*/
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_onHomeRefSwitch();
}
}
}
}
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::fanInit(int freq) {
STM32_HAL::setPWMFreq(&htim2, freq); // fan0->fan3
STM32_HAL::setPWMFreq(&htim4, freq); // fan4
STM32_HAL::setPWMFreq(&htim8, freq); // fan5
// fan0 fan1 fan2 fan3
STM32_HAL::gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
// fan4
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);
}
void Hardware::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
if (fanIndex > 5) {
while (1) {
ZLOGE(TAG, "fanIndex is out of range!");
}
}
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;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
}
} else if (fanIndex == 4) {
STM32_HAL::setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle);
m_fanState[4] = dutyCycle > 0;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
}
} else if (fanIndex == 5) {
STM32_HAL::setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle);
m_fanState[5] = dutyCycle > 0;
if (dutyCycle > 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
}
}
}
bool *Hardware::fanGetPowerState(int fanIndex) {
if (fanIndex >= 5) {
while (1) {
ZLOGE(TAG, "fanIndex is out of range!");
}
}
return &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::peltier_cold_ctr_pwm(int pwm) {
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}
// PB0 HOT_CTR_PWM0
void Hardware::peltier_hot_ctr_pwm(int pwm) {
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, pwm);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
}
void Hardware::peltier_init() { //
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 Hardware::peltier_set_pwm(int pwm) {
/**
* @brief
*
*
* HOT_CTR_PWM0(AL) = 0
* HOT_CTR(AH) = 0
* COLD_CTR_PWM0(BL) = 0
* COLD_CTR(BH) = 0
*
* HOT_CTR_PWM0(AL) = 1(PWM)
* HOT_CTR(AH) = 0
* COLD_CTR_PWM0(BL) = 0
* COLD_CTR(BH) = 1(IO/)
*
* HOT_CTR_PWM0(AL) = 0
* HOT_CTR(AH) = 1(IO/)
* COLD_CTR_PWM0(BL) = 1(PWM)
* COLD_CTR(BH) = 0
*/
pwm = pwm * 1000;
if (pwm == 0) {
peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
} else if (pwm > 0) {
peltier_hot_ctr_pwm(pwm); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET); /*COLD_CTR*/
} else {
peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); /*HOT_CTR*/
peltier_cold_ctr_pwm(-pwm); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
}
}
/*******************************************************************************
* tmc芯片驱动相关 *
*******************************************************************************/
void Hardware::tmc_init() {
STM32_HAL::gpioInit( //
GPIOA, GPIO_PIN_4, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
STM32_HAL::gpioInit( //
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);
}
void Hardware::tmc_motor_spi_select(int channel, bool state) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, state ? GPIO_PIN_SET : GPIO_PIN_RESET); }
void Hardware::tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length) {
if (channel == MOTOR_1_TMC4361A_CHANNEL) {
tmc_motor_spi_select(channel, false);
sleepus(10);
HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000);
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);
}
}
void Hardware::tmc_ENN_pin_set_state(uint8_t channel, bool state) {}
void Hardware::tmc_subic_ENN_pin_set_state(uint8_t channel, bool state) {
if (channel == MOTOR_1_TMC4361A_CHANNEL) {
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
}
void Hardware::tmc_nRESET_pin_set_state(uint8_t channel, bool state) {}
void Hardware::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);
}

72
src/board/hardware.hpp

@ -1,13 +1,30 @@
#pragma once
#include "board/device_io_service.hpp"
#include "board/fan_state_monitor.hpp"
#include "board/libtmcimpl.hpp"
#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.hpp"
#include "libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp"
#include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp"
#include "libtrinamic/src/ic/tmc2160.hpp"
#include "libtrinamic\src\ic\tmc4361A.hpp"
#include "main.h"
#include "spi.h"
#include "tim.h"
#include "usart.h"
namespace iflytop {
class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
#define MAX_HARDWARE_LISTENER_NUM 5
class HardwareListener {
public:
virtual void Hardware_OnHardwareException(){};
virtual void Hardware_onHomeRefSwitch(){};
};
class Hardware : public IflytopCanSlaveListener, //
public TMC4361APort, //
public IflytopMicroOS, //
public STM32_HAL_LISTENER {
private:
/* data */
@ -16,12 +33,16 @@ class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
TMP117 tmp117[4];
FanStateMonitor m_fanStateMonitor[6];
IflytopCanSlave canSlaveService;
IflytopMicroOS *m_os;
DeviceIoService m_deviceIoService;
bool m_canOnRxDataFlag;
bool m_canOnRxDataFlag;
/* data */
bool m_fanState[6];
HardwareListener *m_listener[MAX_HARDWARE_LISTENER_NUM];
int m_listenerNum;
public:
public:
/*******************************************************************************
* ListenerImpl *
*******************************************************************************/
@ -34,6 +55,8 @@ class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
Hardware(/* args */){};
~Hardware(){};
void registerListener(HardwareListener *listener);
void hardwareinit();
void periodicJob();
@ -58,7 +81,42 @@ class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
virtual void TMC4361APort_readWriteArray(uint8_t *data, size_t length);
virtual void TMC4361APort_setSubICENNPinState(uint16_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); }
/*******************************************************************************
* OVERRIDE STM32_HAL_LISTENER *
*******************************************************************************/
virtual void STM32_HAL_onGPIO_EXTI_Callback(uint16_t GPIO_Pin);
public:
void debug_light_init();
void fanInit(int freq);
void fanSetDutyCycle(int fanIndex, uint16_t dutyCycle);
void fanSetState0to3(uint16_t dutyCycle);
void fanSetState4(uint16_t dutyCycle);
void fanSetState5(uint16_t dutyCycle);
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);
bool *fanGetPowerState(int fanIndex);
void home_ref_switch_init();
};
} // namespace iflytop

4
src/board/libtmcimpl.cpp

@ -1,4 +0,0 @@
#pragma once
#include "libtmcimpl.hpp"
#include "device_io_service.hpp"

6
src/board/libtmcimpl.hpp

@ -1,6 +0,0 @@
#pragma once
#include "board/device_io_service.hpp"
#include "libiflytop_micro/stm32/basic/basic.h"
#include "libtrinamic/src/ic/tmc2160.hpp"
#include "libtrinamic\src\ic\tmc4361A.hpp"

6
src/lncubator_rotating_control_service.cpp

@ -22,7 +22,7 @@ LncubatorRotatingControlService::~LncubatorRotatingControlService() {}
void LncubatorRotatingControlService::initialize(Hardware* hardware) { //
m_hardware = hardware;
m_motor = &m_hardware->tmc4361motor1;
m_os = &m_hardware->m_deviceIoService;
m_os = m_hardware;
m_workfinished = false;
m_dowhat = kidle;
m_maxVelocity = mc_default_velocity;
@ -31,13 +31,13 @@ void LncubatorRotatingControlService::initialize(Hardware* hardware) { //
* @brief
*/
m_motor->setMotorInPositionMode();
hardware->m_deviceIoService.onHomeRefSwitch.connect(this, onHomeSwitchKey);
hardware->registerListener(this);
}
void LncubatorRotatingControlService::moveToHome() {
m_dowhat = krotateToHome;
m_motor->moveTo(mc_onecircle_ustep_num * 2, m_maxVelocity);
}
void LncubatorRotatingControlService::onHomeSwitchKey() {
void LncubatorRotatingControlService::Hardware_onHomeRefSwitch() {
/**
* @brief
*/

13
src/lncubator_rotating_control_service.hpp

@ -1,6 +1,6 @@
#pragma once
#include "board\hardware.hpp"
#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp"
#include "libiflytop_micro\stm32\basic\stm32_hal.hpp"
#include "libiflytop_micro\stm32\component\state_machine\state_machine.hpp"
namespace iflytop {
@ -30,7 +30,7 @@ class LncubatorRotatingControlServiceListener {
virtual void OnlncubatorRotatingControlServiceJobFinished() = 0;
};
class LncubatorRotatingControlService {
class LncubatorRotatingControlService : public HardwareListener {
public:
typedef enum {
REFPOINT_TYPE_OUTLET = 0, // 出口
@ -65,8 +65,6 @@ class LncubatorRotatingControlService {
LncubatorRotatingControlServiceListener* m_listener;
private:
ZSLOT0(LncubatorRotatingControlService, onHomeSwitchKey);
public:
LncubatorRotatingControlService();
~LncubatorRotatingControlService();
@ -89,7 +87,12 @@ class LncubatorRotatingControlService {
*/
void calibrationPosition(refpoint_t refpoint, uint32_t positionIndex);
void periodicJob();
void periodicJob();
/*******************************************************************************
* OVERRIDE HardwareListener *
*******************************************************************************/
virtual void Hardware_onHomeRefSwitch();
private:
void doRotateToHomeJob();

4
src/lncubator_temperature_control_service.cpp

@ -82,7 +82,7 @@ float LncubatorTemperatureControlService::getTemperature() {
temperature_median = (temperature[1] + temperature[2]) / 2;
return temperature_median;
}
void LncubatorTemperatureControlService::setPwmOutput(float output) { m_hardware->m_deviceIoService.peltier_set_pwm(output); }
void LncubatorTemperatureControlService::setPwmOutput(float output) { m_hardware->peltier_set_pwm(output); }
void LncubatorTemperatureControlService::start() {
pid_reset(m_pidblock);
@ -99,7 +99,7 @@ void LncubatorTemperatureControlService::stop() {}
void LncubatorTemperatureControlService::periodicJob() {
if (!m_workingState) return;
if (m_hardware->m_os->hasPassedMS(m_periodicJobLastExecuteTicket) < m_compute_periodms) {
if (m_hardware->hasPassedMS(m_periodicJobLastExecuteTicket) < m_compute_periodms) {
return;
}
m_periodicJobLastExecuteTicket = m_os->getTicket();

1
src/lncubator_temperature_control_service.hpp

@ -1,5 +1,4 @@
#pragma once
#include "board/device_io_service.hpp"
#include "board\hardware.hpp"
#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp"
#include "libiflytop_micro\stm32\component\pid\pid_ctrl.h"

2
src/umain.cpp

@ -1,8 +1,6 @@
#include <stdbool.h>
#include <stdio.h>
#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"

Loading…
Cancel
Save