This repository has been archived on 2024-12-31. You can view files and clone it, but cannot push or open issues or pull requests.
mfps/App/Src/app.c

157 lines
3.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "app.h"
//绿灯 NOR ;蓝灯 ERR
float X_ads1220 = 0; //读到的电压值
float TEMP_M1820 = 0; //温度
uint32_t move_step_5mm = 0x0000C800;
uint32_t move_step_1mm = 0x00002800;
uint8_t magnet_tx[7] = {0x05,0x01,0x00,0x01,0x00,0x32,0xFF};
HAL_StatusTypeDef hal_check_tx; //用于查看debug发送状态
uint8_t flash_rd_flag = 0; //flash读取标志
signed int first_xa_32 = 0; //记录上电时电机位置
int LEDcnt_ms = 100; //LED计数
uint16_t SG_RESULT = 0;
uint8_t TSTEP_RAW[5] = {0};
uint32_t TSTEP = 0;
void app_act (void)
{
if(flash_rd_flag == 0) //只读取一次
{
flash_rd_flag = 1;
STMFLASH_Read(FLASH_SAVE_ADDR,flash_rd,6); //读取当前flash内容
magnet_middle = flash_rd[0]; //默认以#25的中点为标准#50和#110的位置预留
}
// 按键操作
// Key_Scan(); //按键扫描(已放入定时器中断)
if(old2new_flag == 0)
{
key_act(); //执行旧版功能
}else
{
key_act_new(); //执行新版功能
}
//2 定时器
// if(it_5000ms_flag == 1)
// {
// it_5000ms_flag = 0;
//
//
//
// }
// 数据采集
if(it_100ms_flag)
{
it_100ms_flag = 0;
// HAL_GPIO_WritePin(RS485_EN1_GPIO_Port,RS485_EN1_Pin,GPIO_PIN_SET); //使能485发送发送结束后在回调函数中拉低
// hal_check_tx = HAL_UART_Transmit_IT(&huart2, magnet_tx ,7); //485发送
// TMC5160_SPIReadInt(0x12,TSTEP_RAW); //读取TSTEP
// TSTEP = Raw_32(TSTEP_RAW);
// TMC5160_SPIReadInt(DRV_STAT_ADDR,DRV_STAT); //读取驱动器状态
// DRV_STAT_32 = Raw_32(DRV_STAT); // 16-20bit为实际电机电流
// SG_RESULT = ((uint16_t)DRV_STAT_32) & 0x03FF; //驱动器状态共32bit其中0-9bit为负载值读到的负载值越低负载越高0代表最高负载
get_state();
get_magnetv(); //磁感应反馈电压
TEMP_M1820 = M1820_Get_Temp(); //温度采集
if(old2new_flag == 0)
{//旧版
OLED_MenuTest(); //OLED显示,菜单
}else
{//新版
OLED_Menu_New();
}
X_ads1220 = Xads1220_filter(25,75); //电阻尺滤波结果电压值mv
process_ttl_receive_timer(); // 串口计时
}
// 电阻尺 位移传感器
Xads1220_record(); //采集数据用于滤波
// 电机
motor_protect_ads(100,1900); //电阻尺限位
Deal_Motor();
// 串口数据处理
Deal_Uart_Data_For_Module();
//9 LED灯状态指示
if(old2new_flag == 0)
{ //旧版
if( Motor_Run == 0 )
{
HAL_GPIO_WritePin(LED_NOR_GPIO_Port, LED_NOR_Pin, GPIO_PIN_SET); //停止状态两灯熄灭
HAL_GPIO_WritePin(LED_ERR_GPIO_Port, LED_ERR_Pin, GPIO_PIN_SET);
}
if( (Motor_Run == 1) && (motor_direc == 1) )
{
HAL_GPIO_WritePin(LED_NOR_GPIO_Port, LED_NOR_Pin, GPIO_PIN_RESET); //正向转动绿灯亮
HAL_GPIO_WritePin(LED_ERR_GPIO_Port, LED_ERR_Pin, GPIO_PIN_SET);
}
if( (Motor_Run == 1) && (motor_direc == 2) )
{
HAL_GPIO_WritePin(LED_NOR_GPIO_Port, LED_NOR_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_ERR_GPIO_Port, LED_ERR_Pin, GPIO_PIN_RESET); //反向转动蓝灯亮
}
if( ( Motor_Run == 2 ) || ( Motor_Run == 3 ) )
{
if(LEDcnt_ms == 100)
{
LEDcnt_ms = 0;
HAL_GPIO_WritePin(LED_NOR_GPIO_Port, LED_NOR_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_ERR_GPIO_Port, LED_ERR_Pin, GPIO_PIN_RESET);
}
if(it_200ms_flag)
{
it_200ms_flag = 0;
LEDcnt_ms++;
if( LEDcnt_ms == 2 )
{
LEDcnt_ms = 0;
HAL_GPIO_TogglePin(LED_NOR_GPIO_Port, LED_NOR_Pin);
HAL_GPIO_TogglePin(LED_ERR_GPIO_Port, LED_ERR_Pin); //复位移动时两灯闪烁
}
}
}
}else
{//新版
}
}