98 lines
2.3 KiB
C
98 lines
2.3 KiB
C
#include "main.h"
|
||
#include "tim.h"
|
||
#include "usart.h"
|
||
#include "gpio.h"
|
||
|
||
#include "app_main.h"
|
||
#include "Com_type.h"
|
||
#include "Com_debug.h"
|
||
#include "Int_Encoder.h"
|
||
#include "Int_TMC2209.h"
|
||
#include "app_key.h"
|
||
#include "app_motor.h"
|
||
#include "app_param_store.h"
|
||
#include "app_test.h"
|
||
#include "CANopen.h"
|
||
#include "CO_app_STM32.h"
|
||
#include "can.h"
|
||
|
||
Encoder_t encoder_1 = {0};
|
||
|
||
Stepper_t stepper_1 = {
|
||
.dir = GPIO_PIN_RESET, // 方向(1为手轮方向,0为电机方向)
|
||
.distance = 100.0f,
|
||
.speed = 50.0f,
|
||
.acc = 40.0f,
|
||
.dec = 40.0f,
|
||
.start_speed = 5.0f,
|
||
};
|
||
|
||
CANopenNodeSTM32 CANopenNode;
|
||
|
||
static void App_PrintKeyUsage(void)
|
||
{
|
||
debug_printf("%s", "================ 按键功能说明 ================");
|
||
debug_printf("%s", "K1 (单击): 自动回零 (HOME, 低速 5 mm/s)");
|
||
debug_printf("%s", "K2 (长按): JOG+ 正向点动, 松开后减速停止");
|
||
debug_printf("%s", "K3 (长按): JOG- 反向点动, 松开后减速停止");
|
||
debug_printf("%s", "K4 (单击): 速度档位循环 5 -> 25 -> 60 mm/s");
|
||
debug_printf("%s", "K5 (单击): 紧急停止 (立即停机)");
|
||
debug_printf("%s", "提示: 回零完成以零位开关触发为准");
|
||
debug_printf("%s", "==============================================");
|
||
}
|
||
|
||
static void CANopenNode_init(void)
|
||
{
|
||
CANopenNode.CANHandle = &hcan1;
|
||
CANopenNode.HWInitFunction = MX_CAN1_Init;
|
||
CANopenNode.timerHandle = &htim11;
|
||
CANopenNode.desiredNodeID = 3;
|
||
CANopenNode.baudrate = 500;
|
||
canopen_app_init(&CANopenNode);
|
||
}
|
||
|
||
void app_main(void)
|
||
{
|
||
debug_printf("hello three-axis steppers");
|
||
App_PrintKeyUsage();
|
||
CANopenNode_init();
|
||
App_Motor_Init();
|
||
App_ParamStore_Init();
|
||
(void)App_ParamStore_LoadAndApply();
|
||
while (1)
|
||
{
|
||
App_key_run(&stepper_1);
|
||
canopen_app_process();
|
||
App_Motor_Process();
|
||
App_ParamStore_Process();
|
||
}
|
||
}
|
||
|
||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||
{
|
||
switch (GPIO_Pin)
|
||
{
|
||
case X_ZERO_Pin:
|
||
stepper_1.x_zero = 1;
|
||
break;
|
||
case ENCODER1_Z_Pin:
|
||
encoder_1.z++;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||
{
|
||
if (htim == CANopenNode.timerHandle)
|
||
{
|
||
canopen_app_interrupt();
|
||
}
|
||
|
||
if (htim->Instance == TIM12)
|
||
{
|
||
App_Motor_StepLossCheck();
|
||
}
|
||
}
|