From e1d5b4d37dd4744fbe8da54c7e9b5484c6447876 Mon Sep 17 00:00:00 2001
From: wujunchao <24472040@qq.com>
Date: Thu, 23 May 2024 17:22:31 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
App/Inc/motor.h | 12 +-
App/Src/Uart1.c | 26 +-
App/Src/app.c | 100 +-
App/Src/motor.c | 330 +-
App/Src/oled2.c | 237 +-
App/Src/tmc5160.c | 149 +-
Inc/app.h | 4 +-
MDK-ARM/mfps.uvguix.吴俊潮 | 174 +-
MDK-ARM/mfps.uvoptx | 57 +-
MDK-ARM/mfps.uvprojx | 5 -
MDK-ARM/mfps/ads1220.crf | Bin 671436 -> 668661 bytes
MDK-ARM/mfps/ads1220.d | 5 +-
MDK-ARM/mfps/ads1220.o | Bin 759872 -> 761384 bytes
MDK-ARM/mfps/app.crf | Bin 668152 -> 665328 bytes
MDK-ARM/mfps/app.d | 7 +-
MDK-ARM/mfps/app.o | Bin 736744 -> 737256 bytes
MDK-ARM/mfps/delay.crf | Bin 667706 -> 664931 bytes
MDK-ARM/mfps/delay.d | 3 +-
MDK-ARM/mfps/delay.o | Bin 737416 -> 738460 bytes
MDK-ARM/mfps/dma.o | Bin 699560 -> 700764 bytes
MDK-ARM/mfps/flash.o | Bin 707264 -> 708632 bytes
MDK-ARM/mfps/gpio.o | Bin 700320 -> 701516 bytes
MDK-ARM/mfps/i2c.o | Bin 703612 -> 704916 bytes
MDK-ARM/mfps/key.crf | Bin 667776 -> 665001 bytes
MDK-ARM/mfps/key.d | 3 +-
MDK-ARM/mfps/key.o | Bin 738208 -> 739224 bytes
MDK-ARM/mfps/m1820.crf | Bin 668844 -> 666063 bytes
MDK-ARM/mfps/m1820.d | 3 +-
MDK-ARM/mfps/m1820.o | Bin 746092 -> 747312 bytes
MDK-ARM/mfps/main.crf | Bin 668060 -> 665339 bytes
MDK-ARM/mfps/main.d | 3 +-
MDK-ARM/mfps/main.o | Bin 737616 -> 738700 bytes
MDK-ARM/mfps/mfps.axf | Bin 815432 -> 823652 bytes
MDK-ARM/mfps/mfps.build_log.htm | 8 +-
MDK-ARM/mfps/mfps.hex | 4250 +++++++++++++------------
MDK-ARM/mfps/mfps.htm | 859 ++---
MDK-ARM/mfps/mfps.lnp | 1 -
MDK-ARM/mfps/mfps.map | 2324 +++++++-------
MDK-ARM/mfps/mfps_mfps.dep | 157 +-
MDK-ARM/mfps/misc.o | Bin 704600 -> 705904 bytes
MDK-ARM/mfps/motor.crf | Bin 669765 -> 667739 bytes
MDK-ARM/mfps/motor.d | 3 +-
MDK-ARM/mfps/motor.o | Bin 744132 -> 748384 bytes
MDK-ARM/mfps/mylib.o | Bin 712852 -> 714048 bytes
MDK-ARM/mfps/oled.crf | Bin 672911 -> 672976 bytes
MDK-ARM/mfps/oled.o | Bin 768952 -> 771460 bytes
MDK-ARM/mfps/oled2.crf | Bin 675366 -> 672817 bytes
MDK-ARM/mfps/oled2.d | 3 +-
MDK-ARM/mfps/oled2.o | Bin 779528 -> 781824 bytes
MDK-ARM/mfps/serial_port.crf | Bin 667943 -> 665168 bytes
MDK-ARM/mfps/serial_port.d | 3 +-
MDK-ARM/mfps/serial_port.o | Bin 734464 -> 735408 bytes
MDK-ARM/mfps/spi.o | Bin 703592 -> 704896 bytes
MDK-ARM/mfps/startup_stm32f103xe.o | Bin 6788 -> 6812 bytes
MDK-ARM/mfps/stm32f1xx_hal.o | Bin 731772 -> 733764 bytes
MDK-ARM/mfps/stm32f1xx_hal_cortex.o | Bin 721748 -> 723420 bytes
MDK-ARM/mfps/stm32f1xx_hal_dma.o | Bin 720572 -> 722124 bytes
MDK-ARM/mfps/stm32f1xx_hal_exti.o | Bin 711164 -> 712572 bytes
MDK-ARM/mfps/stm32f1xx_hal_flash.o | Bin 719056 -> 720672 bytes
MDK-ARM/mfps/stm32f1xx_hal_flash_ex.o | Bin 718464 -> 719984 bytes
MDK-ARM/mfps/stm32f1xx_hal_gpio.o | Bin 710756 -> 712128 bytes
MDK-ARM/mfps/stm32f1xx_hal_gpio_ex.o | Bin 700608 -> 701812 bytes
MDK-ARM/mfps/stm32f1xx_hal_i2c.o | Bin 848260 -> 851948 bytes
MDK-ARM/mfps/stm32f1xx_hal_msp.o | Bin 699144 -> 700308 bytes
MDK-ARM/mfps/stm32f1xx_hal_pwr.o | Bin 721944 -> 723672 bytes
MDK-ARM/mfps/stm32f1xx_hal_rcc.o | Bin 721408 -> 723004 bytes
MDK-ARM/mfps/stm32f1xx_hal_rcc_ex.o | Bin 702812 -> 704020 bytes
MDK-ARM/mfps/stm32f1xx_hal_spi.o | Bin 787168 -> 790200 bytes
MDK-ARM/mfps/stm32f1xx_hal_tim.o | Bin 898720 -> 903916 bytes
MDK-ARM/mfps/stm32f1xx_hal_tim_ex.o | Bin 772276 -> 774848 bytes
MDK-ARM/mfps/stm32f1xx_hal_uart.o | Bin 797672 -> 800872 bytes
MDK-ARM/mfps/stm32f1xx_it.crf | Bin 669599 -> 666970 bytes
MDK-ARM/mfps/stm32f1xx_it.d | 3 +-
MDK-ARM/mfps/stm32f1xx_it.o | Bin 761724 -> 763636 bytes
MDK-ARM/mfps/system_stm32f1xx.o | Bin 699540 -> 700728 bytes
MDK-ARM/mfps/tim.o | Bin 703568 -> 704880 bytes
MDK-ARM/mfps/tmc5160.crf | Bin 670032 -> 667184 bytes
MDK-ARM/mfps/tmc5160.d | 3 +-
MDK-ARM/mfps/tmc5160.o | Bin 747832 -> 748788 bytes
MDK-ARM/mfps/uart1.crf | Bin 671121 -> 668371 bytes
MDK-ARM/mfps/uart1.d | 3 +-
MDK-ARM/mfps/uart1.o | Bin 760720 -> 762368 bytes
MDK-ARM/mfps/usart.o | Bin 707788 -> 709168 bytes
Src/main.c | 37 +-
Src/stm32f1xx_it.c | 55 +-
85 files changed, 4448 insertions(+), 4379 deletions(-)
diff --git a/App/Inc/motor.h b/App/Inc/motor.h
index 56c3815..9dcce82 100644
--- a/App/Inc/motor.h
+++ b/App/Inc/motor.h
@@ -3,10 +3,12 @@
#include "main.h"
-#define magnet_1mm 7 //1mmӦmvֵ
-extern int magnet_middle; //Χ-еmv
-extern int magnet_start; //Χ-mv
-extern int magnet_end; //Χ-յmv
+#define magnet_1mm 7 //1mmӦmvֵ
+extern int magnet_middle; //Χ-еmv
+extern int magnet_start; //Χ-mv
+extern int magnet_end; //Χ-յmv
+extern unsigned char magnet_type;//
+extern signed int vol_data; //ŸӦģѹֵ
extern unsigned char Runmotor_step;
extern int led_flag; //ledƿر־
@@ -47,5 +49,5 @@ void mov_step(void); //
//void mov_end(void); //صλ
//void motor_seat(void); //λж
void get_state(void);
-
+void get_magnetv(void);
#endif
diff --git a/App/Src/Uart1.c b/App/Src/Uart1.c
index 5f54c42..7284baa 100644
--- a/App/Src/Uart1.c
+++ b/App/Src/Uart1.c
@@ -573,6 +573,7 @@ unsigned char Check_VerfiyData(void)
//ݽշ(ôѭ)
+uint8_t magnet_type = 25;
void Deal_Uart_Data_For_Module(void)
{
if(order_flag) //нյָ
@@ -626,32 +627,37 @@ void Deal_Uart_Data_For_Module(void)
{
case 1:// #25
{
- magnet_start = magnet_middle - 13 * magnet_1mm;
- magnet_end = magnet_middle + 13 * magnet_1mm;
+ magnet_start = magnet_middle - 16 * magnet_1mm;
+ magnet_end = magnet_middle + 16 * magnet_1mm;
+ magnet_type = 25;
}
break;
case 2:// #50
{
- magnet_start = magnet_middle - 26 * magnet_1mm;
- magnet_end = magnet_middle + 26 * magnet_1mm;
+ magnet_start = magnet_middle - 29 * magnet_1mm;
+ magnet_end = magnet_middle + 29 * magnet_1mm;
+ magnet_type = 50;
}
break;
case 3:// #110
{
- magnet_start = magnet_middle - 56 * magnet_1mm;
- magnet_end = magnet_middle + 56 * magnet_1mm;
+ magnet_start = magnet_middle - 59 * magnet_1mm;
+ magnet_end = magnet_middle + 59 * magnet_1mm;
+ magnet_type = 110;
}
break;
case 4:// #210
{
- magnet_start = magnet_middle - 106 * magnet_1mm;
- magnet_end = magnet_middle + 106 * magnet_1mm;
+ magnet_start = magnet_middle - 109 * magnet_1mm;
+ magnet_end = magnet_middle + 109 * magnet_1mm;
+ magnet_type = 210;
}
break;
case 5://
{
- magnet_start = magnet_middle - 56 * magnet_1mm;
- magnet_end = magnet_middle + 56 * magnet_1mm;
+ magnet_start = magnet_middle - 29 * magnet_1mm;
+ magnet_end = magnet_middle + 29 * magnet_1mm;
+ magnet_type = 25;
}
break;
}
diff --git a/App/Src/app.c b/App/Src/app.c
index 4f62a0e..92ffc88 100644
--- a/App/Src/app.c
+++ b/App/Src/app.c
@@ -2,41 +2,34 @@
//绿灯 NOR ;蓝灯 ERR
-float X_ads1220 = 0; //读到的电压值
-float X_ads1220_L = 15.0; //电压值上限
-float X_ads1220_H = 1320.0; //电压值下限
-float X_ads1220_prc = 0; //电压百分比(即位移百分比)
+float X_ads1220 = 0; //读到的电压值
float TEMP_M1820 = 0; //温度
uint32_t move_step_5mm = 0x0000C800;
uint32_t move_step_1mm = 0x00002800;
-char oled_init_flag = 0,oled_init_result = 0;
-//int i2c_error_temp = 0;
+
uint8_t magnet_tx[7] = {0x05,0x01,0x00,0x01,0x00,0x32,0xFF};
-HAL_StatusTypeDef hal_check_tx;
-uint8_t flash_rd_flag = 0;
-signed int first_xa_32 = 0;//记录上电时电机位置
-uint16_t load_check = 0;
-uint8_t TSTEP_CK[5] = {0};
-uint32_t tstep_check = 0;
+
+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) //只读取一次
{
STMFLASH_Read(FLASH_SAVE_ADDR,flash_rd,6); //读取当前flash内容
-// magnet_middle = flash_rd[0]; //默认以#25的中点为标准
+
+ magnet_middle = flash_rd[0]; //默认以#25的中点为标准,#50和#110的位置预留
flash_rd_flag = 1;
}
- TMC5160_SPIReadInt(0x12,TSTEP_CK); //读取TSTEP,为0说明灵敏度过小
- tstep_check = Raw_32(TSTEP_CK);
- TMC5160_SPIReadInt(DRV_STAT_ADDR,DRV_STAT); //读取驱动器状态
- DRV_STAT_32 = Raw_32(DRV_STAT);
- SG_RESULT_16 = ((uint16_t)DRV_STAT_32) & 0x03FF; //驱动器状态共32bit,其中0-9bit为负载值,读到的负载值越低,负载越高,0代表最高负载
- if(SG_RESULT_16 != 0) load_check = SG_RESULT_16;
- //1 按键操作
+ // 按键操作
// Key_Scan();//按键扫描(已放入定时器中断)
key_act(); //按键执行功能
@@ -50,41 +43,48 @@ void app_act (void)
//
// }
- //3 串口通信测试
-// uart_test();
- //4 数据采集
+ // 数据采集
if(it_100ms_flag)
{
it_100ms_flag = 0;
- HAL_GPIO_WritePin(RS485_EN1_GPIO_Port,RS485_EN1_Pin,GPIO_PIN_SET); //使能485发送,发送结束后在回调函数中拉低
+// 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发送
+// hal_check_tx = HAL_UART_Transmit_IT(&huart2, magnet_tx ,7); //485发送
- TEMP_M1820 = M1820_Get_Temp(); //温度采集
+ 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代表最高负载
- OLED_MenuTest(); //OLED显示,菜单
+ get_state();
+
+ get_magnetv(); //磁感应反馈电压
- X_ads1220 = Xads1220_filter(25,75); //电阻尺滤波结果(电压值,mv)
-// X_ads1220_prc =(X_ads1220 - X_ads1220_L)/(X_ads1220_H - X_ads1220_L);
+ TEMP_M1820 = M1820_Get_Temp(); //温度采集
+
+ OLED_MenuTest(); //OLED显示,菜单
+
+ X_ads1220 = Xads1220_filter(25,75); //电阻尺滤波结果(电压值,mv)
- // 串口计时
- process_ttl_receive_timer();
+
+ process_ttl_receive_timer(); // 串口计时
}
- //5 电阻尺 位移传感器
- Xads1220_record();//采集数据用于滤波
+ // 电阻尺 位移传感器
+ Xads1220_record(); //采集数据用于滤波
- //6 电机
- motor_protect_ads(100,1900);
+ // 电机
+ motor_protect_ads(100,1900); //电阻尺限位
Deal_Motor();
- //7 串口数据处理
+ // 串口数据处理
Deal_Uart_Data_For_Module();
@@ -94,23 +94,41 @@ void app_act (void)
//9 LED灯状态指示
if( Motor_Run == 0 )
{
- HAL_GPIO_WritePin(LED_NOR_GPIO_Port, LED_NOR_Pin, GPIO_PIN_SET);//停止状态两灯熄灭
+ 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_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);//反向转动蓝灯亮
+ HAL_GPIO_WritePin(LED_ERR_GPIO_Port, LED_ERR_Pin, GPIO_PIN_RESET); //反向转动蓝灯亮
}
if( ( Motor_Run == 2 ) || ( Motor_Run == 3 ) )
{
- 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(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); //复位移动时两灯闪烁
+ }
+ }
}
}
diff --git a/App/Src/motor.c b/App/Src/motor.c
index 83c24fc..bd27110 100644
--- a/App/Src/motor.c
+++ b/App/Src/motor.c
@@ -10,7 +10,7 @@
#define MOTOR_REV 2 //˶
#define MOTOR_RETURN 3 //
-int magnet_middle = 1135; //е
+int magnet_middle = 1240; //е
int magnet_start = 800; //Χ-mv
int magnet_end = 1200; //Χ-յmv
#define motor_start 200 //˶Χmv
@@ -59,35 +59,31 @@ void ClrRunmotorStep(void)
}
//
+#define SPEED_MIN 0x00003A98
#define SPEED_NORMAL 0x00007530
-#define SPEED_MAX 0x0000EA60
+#define SPEED_MAX 0x0001D4C0
int first_flag = 1;
void Deal_Motor(void)
{
- TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //ȡʵλXACTUAL
- XA_32 = Raw_32(XA);
- TMC5160_SPIReadInt(VACTUAL_ADDR,VA); //ȡʵٶVACTUAL
- VA_32 = Raw_32(VA);
-
//жֱг̻ǽг
if(Travle_Flag == 0)//ֱг̡תһȦˮƽλ5mm
{
motor_data[0] = 0x00;//00 ֱг 01 г
//жϵֹͣУеʼλǽλ
- if( Motor_Run == 0)//ֹͣ
+ if( Motor_Run == 0) //ֹͣ
{
tmc5160_operate(MOTOR_STOP,0);
if( speed_max != SPEED_NORMAL)
{
- speed_max = SPEED_NORMAL; //VMAX
+ speed_max = SPEED_NORMAL; //VMAX
TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1);
- speed_1 = speed_max / 2; //V1
+ speed_1 = speed_max / 2; //V1
TMC5160_SPIWriteInt(V1_ADDR, speed_1,1);
}
}
- else if(Motor_Run == 1)//
+ else if((Motor_Run == 1) && (first_flag == 0)) //Уϵ縴λɺЧ
{
if(Motor_Run >= 1 && Runmotor_step == 0)
{
@@ -121,19 +117,21 @@ void Deal_Motor(void)
if( ocin1 == 0 )//жǷʼλ
{
+ //¼һθλʱλ
+ if(first_flag)
+ {
+ TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //ȡʵλXACTUAL
+ XA_32 = Raw_32(XA);
+
+ first_xa_32 = XA_32;
+ first_flag = 0;
+ }
+
motor_direc = MOTOR_POS;
Runmotor_step = 0;
Motor_Run = 0;
return;
}
-// if( ocin2 == 0 )//жǷλ
-// {
-// motor_direc = MOTOR_REV;
-// Runmotor_step = 0;
-// Motor_Run = 0;
-// return;
-// }
-
if( (X_ads1220 <= (motor_start + 50) ) && (X_ads1220 != 0) )
{
@@ -153,14 +151,14 @@ void Deal_Motor(void)
}
- if((ocin2 == 1) && (ocin2 == 1))
+ if((ocin2 == 1) && (ocin2 == 1)) //δλʱٴ
{
if( speed_max != SPEED_MAX)
{
speed_max = SPEED_MAX;
- TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1); // VMAX
+ TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1); // VMAX
- speed_1 = speed_max / 2; //V1
+ speed_1 = speed_max / 2; //V1
TMC5160_SPIWriteInt(V1_ADDR, speed_1,1);
}
@@ -168,15 +166,8 @@ void Deal_Motor(void)
}
}
- else if(Motor_Run == 3)//еλ
+ else if((Motor_Run == 3) && (first_flag == 0)) //еλ
{
-// if( ocin1 == 0 )//жǷʼλ
-// {
-// motor_direc = MOTOR_POS;
-// Runmotor_step = 0;
-// Motor_Run = 0;
-// return;
-// }
if( ocin2 == 0 )//жǷλ
{
motor_direc = MOTOR_REV;
@@ -195,14 +186,12 @@ void Deal_Motor(void)
if((ocin2 == 1) && (ocin2 == 1))
{
-
-// uint32_t speed_max = 0x00009C40; //VMAX Ŀٶ
if( speed_max != SPEED_MAX)
{
speed_max = SPEED_MAX;
- TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1); // VMAX
+ TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1); // VMAX
- speed_1 = speed_max / 2; //V1
+ speed_1 = speed_max / 2; //V1
TMC5160_SPIWriteInt(V1_ADDR, speed_1,1);
}
@@ -297,13 +286,6 @@ void mov_step(void)
return;
}
-// TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //ȡʵλXACTUAL
-// XA_32 = Raw_32(XA);
-// TMC5160_SPIReadInt(VACTUAL_ADDR,VA); //ȡʵٶVACTUAL
-// VA_32 = Raw_32(VA);
-
- if(Run_mm == 0) return;//Ϊ0
-
switch(Runmotor_step)
{
case 1 : //
@@ -316,13 +298,13 @@ void mov_step(void)
break;
case 2 : //й
{
- if(Run_Step == 0) //λϢʱʹλĿƲRun_mm
+ if(Run_Step == 0) //λϢʱʹλĿƲRun_mm
{
tmc5160_operate(motor_direc,Run_mm * 10240);
}else
{
- tmc5160_operate(motor_direc,Run_Step * 1024);//Runstep cm
+ tmc5160_operate(motor_direc,Run_Step * 1024); //Runstep cm
}
if(busy_flag == 0)
{
@@ -332,27 +314,23 @@ void mov_step(void)
break;
case 3 :
{
-// if(busy_flag == 0)
-// {
-// Runmotor_step++;
-// }
Runmotor_step++;
}
break;
case 4 :
{
- if(it_50ms_flag) //1msʱ־
+ if(it_50ms_flag) //50msʱ־
{
- it_50ms_flag = 0;//ʱ־
+ it_50ms_flag = 0; //ʱ־
Runmotor_Nums++;
}
- if(Runmotor_Nums >= 10)//ʱ
+ if(Runmotor_Nums >= 10) //ʱ
{
Runmotor_Nums = 0;
Runmotor_step++;
- get_state(); //ȡǰ״̬
- send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//ݷ
+ get_state(); //ȡǰ״̬
+ send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data); //ݷ
}
}
break;
@@ -372,22 +350,16 @@ void mov_step(void)
//Уһֱг̣
-
+int stop_cnt = 0;
+uint32_t motor_x_start = 0,motor_x_end = 0;
void mov_loop1(void)
{
-// TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //ȡʵλXACTUAL
-// XA_32 = Raw_32(XA);
-// TMC5160_SPIReadInt(VACTUAL_ADDR,VA); //ȡʵٶVACTUAL
-// VA_32 = Raw_32(VA);
-
switch(Runmotor_step)
{
case 1 : //
{
- //motor_direc = MOTOR_POS; //ʼΪת
- motor_dire = 1;
-// Run_mm = 0;
+// motor_direc = MOTOR_POS; //λ
Run_num = 0;
motor_data[2] = 0x00; //ʱ
Runmotor_Nums = 0; //д
@@ -398,12 +370,58 @@ void mov_loop1(void)
break;
case 2 : //й̣ڷΧ
{
- if( X_ads1220 > magnet_start ) //λж
+ if( X_ads1220 >= magnet_start ) //һεΧ,ԵΪ
{
tmc5160_operate(MOTOR_STOP,0);
-// if(busy_flag == 1) break;
+ while(busy_flag == 1) //ֹͣ
+ {
+ tmc5160_operate(MOTOR_STOP,0);
+
+ stop_cnt++;
+ if(stop_cnt > 10000)
+ {
+ stop_cnt = 0;
+ break; //ֹ
+ }
+
+ if(busy_flag == 0) stop_cnt = 0;
+ }
- if(it_1000ms_flag) //1msʱ־
+ TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //ֹͣȡʵλXACTUAL
+ XA_32 = Raw_32(XA);
+
+ motor_x_start = XA_32; //¼ʱĵλ
+
+ switch(magnet_type) //ݲͬ˶յ
+ {
+ case 25:
+ {
+ motor_x_end = motor_x_start + 10240*(25+6);
+ }
+ break;
+ case 50:
+ {
+ motor_x_end = motor_x_start + 10240*(50+6);
+ }
+ break;
+ case 110:
+ {
+ motor_x_end = motor_x_start + 10240*(110+6);
+ }
+ break;
+ case 210:
+ {
+ motor_x_end = motor_x_start + 10240*(210+6);
+ }
+ break;
+ default:
+ {
+ motor_x_end = 0;
+ }
+ break;
+ }
+
+ if(it_1000ms_flag) //1000msʱ־
{
it_1000ms_flag = 0; //ʱ־
Runmotor_Nums++;
@@ -424,14 +442,28 @@ void mov_loop1(void)
// get_state(); //ȡǰ״̬
// send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//ݷ
}
- //ΧǰԴ˶λΪmm5mmתһȦ
- if( speed_max != SPEED_MAX)
+
+ if( X_ads1220 <= magnet_start - 150) //ΧȽԶʱ˶
{
- speed_max = SPEED_MAX;
- TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1); // VMAX
-
- speed_1 = speed_max / 2; //V1
- TMC5160_SPIWriteInt(V1_ADDR, speed_1,1);
+ if( speed_max != SPEED_MAX)
+ {
+ speed_max = SPEED_MAX;
+ TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1); // VMAX
+
+ speed_1 = speed_max / 2; //V1
+ TMC5160_SPIWriteInt(V1_ADDR, speed_1,1);
+ }
+ }
+ else //ΧȽϽʱСٶ
+ {
+ if( speed_max != SPEED_MIN)
+ {
+ speed_max = SPEED_MIN; //VMAX
+ TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1);
+
+ speed_1 = speed_max / 2; //V1
+ TMC5160_SPIWriteInt(V1_ADDR, speed_1,1);
+ }
}
tmc5160_operate( motor_direc, 51200*30 );
@@ -445,21 +477,21 @@ void mov_loop1(void)
//ΧС˶λΪmm
if( speed_max != SPEED_NORMAL)
{
- speed_max = SPEED_NORMAL; //VMAX
+ speed_max = SPEED_NORMAL; //VMAX
TMC5160_SPIWriteInt(VMAX_ADDR, speed_max,1);
- speed_1 = speed_max / 2; //V1
+ speed_1 = speed_max / 2; //V1
TMC5160_SPIWriteInt(V1_ADDR, speed_1,1);
}
if(Run_Step == 0)
{
- tmc5160_operate(motor_direc,Run_mm*10240);//5mm-512001mm-10240
+ tmc5160_operate(motor_direc,Run_mm*10240); //5mm-512001mm-10240
}else
{
tmc5160_operate(motor_direc,Run_Step*1024);
}
- if(busy_flag == 0)//ָλúͷbusy_flag
+ if(busy_flag == 0) //ָλúͷbusy_flag
{
Runmotor_step++;
}
@@ -467,20 +499,20 @@ void mov_loop1(void)
break;
case 4 : //ʱ
{
- if(it_50ms_flag) //1msʱ־
+ if(it_50ms_flag) //50msʱ־
{
- it_50ms_flag = 0;//ʱ־
+ it_50ms_flag = 0; //ʱ־
Runmotor_Nums++;
}
- if(Runmotor_Nums >= (Run_Inter / 50))//ʱ
+ if(Runmotor_Nums >= (Run_Inter / 50)) //ʱ
{
Runmotor_Nums = 0;
Runmotor_step++;
send_flag = 0;
- get_state(); //ȡǰλ
- send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//ݷ
+ get_state(); //ȡǰλ
+ send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data); //ݷ
}
}
@@ -488,14 +520,14 @@ void mov_loop1(void)
case 5 :
{
- if( (ocin1 == 0) && (motor_direc != MOTOR_POS) )//жǷʼλ
+ if( (ocin1 == 0) && (motor_direc != MOTOR_POS) ) //жǷʼλ
{
motor_direc = MOTOR_POS;
Runmotor_step = 0;
Motor_Run = 0;
break;
}
- if( (ocin2 == 0) && (motor_direc != MOTOR_REV) )//жǷλ
+ if( (ocin2 == 0) && (motor_direc != MOTOR_REV) ) //жǷλ
{
motor_direc = MOTOR_REV;
Runmotor_step = 0;
@@ -503,25 +535,87 @@ void mov_loop1(void)
break;
}
- Runmotor_step = 3;
+ Runmotor_step = 3; //Χ֮ǰ3-4-5֮ѭ
- if((X_ads1220 >= magnet_end) && (motor_direc != MOTOR_REV)) //Χж
+ TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //ȡʵλXACTUAL
+ XA_32 = Raw_32(XA);
+
+ if(motor_x_end != 0) //δ쳣ʱԵΪ
{
- tmc5160_operate(MOTOR_STOP,0);
-
- if(busy_flag == 0)
+ if((XA_32 >= motor_x_end) && (motor_direc != MOTOR_REV)) //Χյֹͣ
{
- motor_direc = MOTOR_REV; //ת
- Runmotor_Nums = 0;
- Runmotor_step = 7;
+
+ tmc5160_operate(MOTOR_STOP,0);
+ while(busy_flag == 1) //ֹͣ
+ {
+ tmc5160_operate(MOTOR_STOP,0);
+
+ stop_cnt++;
+ if(stop_cnt > 10000)
+ {
+ stop_cnt = 0;
+ break; //ֹ
+ }
+
+ if(busy_flag == 0) stop_cnt = 0;
+ }
+
+ if(busy_flag == 0)
+ {
+ motor_direc = MOTOR_REV; //ת
+ Runmotor_Nums = 0;
+ Runmotor_step = 7;
+ }
+ }
+ }else //쳣ʱԵΪ
+ {
+ if((X_ads1220 >= magnet_end) && (motor_direc != MOTOR_REV)) //Χյֹͣ
+ {
+
+ tmc5160_operate(MOTOR_STOP,0);
+ while(busy_flag == 1) //ֹͣ
+ {
+ tmc5160_operate(MOTOR_STOP,0);
+
+ stop_cnt++;
+ if(stop_cnt > 10000)
+ {
+ stop_cnt = 0;
+ break; //ֹ
+ }
+
+ if(busy_flag == 0) stop_cnt = 0;
+ }
+
+ if(busy_flag == 0)
+ {
+ motor_direc = MOTOR_REV; //ת
+ Runmotor_Nums = 0;
+ Runmotor_step = 7;
+ }
}
}
- if((X_ads1220 <= magnet_start) && (motor_direc == MOTOR_REV)) //Χж
+ if((XA_32 <= motor_x_start) && (motor_direc == MOTOR_REV)) //صΧλ
{
- Motor_Run = 2; //
+ tmc5160_operate(MOTOR_STOP,0);
+ while(busy_flag == 1) //ֹͣ
+ {
+ tmc5160_operate(MOTOR_STOP,0);
+
+ stop_cnt++;
+ if(stop_cnt > 10000)
+ {
+ stop_cnt = 0;
+ break; //ֹ
+ }
+
+ if(busy_flag == 0) stop_cnt = 0;
+ }
+
+ Motor_Run = 2; //صʼ
Runmotor_step = 0;
}
@@ -530,14 +624,14 @@ void mov_loop1(void)
break;
case 6 :
{
- if( (ocin1 == 0) && (motor_direc != MOTOR_POS) )//жǷʼλ
+ if( (ocin1 == 0) && (motor_direc != MOTOR_POS) ) //жǷʼλ
{
motor_direc = MOTOR_POS;
Runmotor_step = 0;
Motor_Run = 0;
break;
}
- if( (ocin2 == 0) && (motor_direc != MOTOR_REV) )//жǷλ
+ if( (ocin2 == 0) && (motor_direc != MOTOR_REV) ) //жǷλ
{
motor_direc = MOTOR_REV;
Runmotor_step = 0;
@@ -550,9 +644,9 @@ void mov_loop1(void)
break;
case 7 :
{
- if(it_10ms_flag) //1msʱ־
+ if(it_10ms_flag) //1msʱ־
{
- it_10ms_flag = 0; //ʱ־
+ it_10ms_flag = 0; //ʱ־
Runmotor_Nums++;
}
if((Runmotor_Nums/100) >= Run_Stop) //ʱ
@@ -570,19 +664,35 @@ void mov_loop1(void)
}
}
+uint32_t V_data = 0;
+signed int _data = 0,vol_data = 0;
+char start_check = 0;
+uint16_t send_xa = 0;
void get_state(void)
{
motor_data[1] = Motor_Run;
motor_data[2] = Run_Mode;
- motor_data[4] = rx_data2[1]; //485
- motor_data[5] = rx_data2[2];
- motor_data[6] = rx_data2[3];
- motor_data[7] = rx_data2[4];
+
+ if(rx_data2[start_check] != 0x05)
+ {
+ start_check = (start_check + 1)*(start_check <5); //λʼ֡
+ }
+ else
+ {
+ motor_data[4] = rx_data2[ (start_check + 1) - 6*( (start_check + 1) > 5) ]; //ʼ֡λ㼟Ӧģķֵ
+ motor_data[5] = rx_data2[ (start_check + 2) - 6*( (start_check + 2) > 5) ];
+ motor_data[6] = rx_data2[ (start_check + 3) - 6*( (start_check + 3) > 5) ];
+ motor_data[7] = rx_data2[ (start_check + 4) - 6*( (start_check + 4) > 5) ];
+ }
+
+
/*߶*/
// motor_data[8] = ((uint16_t)(X_ads1220*10) & 0xff00)>> 8; //ȸ8λ
-// motor_data[9] = (uint16_t)(X_ads1220*10) & 0x00ff; //ȵ8λ
+// motor_data[9] = (uint16_t)(X_ads1220*10) & 0x00ff; //ȵ8λ
+
/*ڲ*/
- uint16_t send_xa = 0;
+ TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //ȡʵλXACTUAL
+ XA_32 = Raw_32(XA);
send_xa = ((XA_32 - first_xa_32) * 100) / 10240;
motor_data[8] = ((uint16_t)send_xa & 0xff00)>> 8; //ȸ8λ
motor_data[9] = ((uint16_t)send_xa & 0x00ff); //ȵ8λ
@@ -594,3 +704,19 @@ void get_state(void)
else
motor_data[3] = motor_direc + 2;
}
+
+void get_magnetv(void)
+{
+ V_data = motor_data[4]*0xffffff + motor_data[5]*0xffff + motor_data[6]*0xff + motor_data[7];
+ //ADSתΪʵʵѹֵ
+ if(V_data & 0x00800000)
+ {
+ _data = 0xffffffff - V_data;
+ vol_data = (-2.5 / 0x7fffff) * _data*1000;
+ }
+ else
+ {
+ _data = V_data;
+ vol_data = (2.5 / 0x7fffff) * _data*1000;
+ }
+}
diff --git a/App/Src/oled2.c b/App/Src/oled2.c
index 5600a50..afa5ff0 100644
--- a/App/Src/oled2.c
+++ b/App/Src/oled2.c
@@ -475,11 +475,12 @@ void OLED_DisplayTest(void)
}
}
-char oled_p = 0,oled_s[2] = {0},oled_en = 0,oled_s_motorok[2] = {0},oled_s_magnetok[2] = {0}; //ѡָݴ
+char oled_p = 0,oled_s[2] = {0},oled_en = 1,oled_s_motorok[2] = {0},oled_s_magnetok[2] = {0}; //ѡָݴ
char magnet_select[2] = {0},magnet_s_ok[2] = {0}; //лȷȡָ
char para_flag = 0,motor_flag1 = 0,motor_flag2 = 0,magnet_flag = 0; //ǣֻʾһκҪˢµ
unsigned int step_temp[2] = {1,1},smp_intr_temp[2] = {0},smp_dpth_temp[2] = {0}; //ݴ
char run_mode_temp[2] = {0},magnetx_temp[2] = {0}; //ģʽ㶯ѭݴ棬ݴ
+signed int magnetv_temp[2] = {0}; //ŸӦݴ
float x_magnet_temp[2] = {0}; //Уλݴ
int direc_temp[2] = {1,1}; //ݴ
uint16_t flash_wrt[6] = {0},flash_rd[6] = {0}; //0:#25е,1:#50е,2:#110е
@@ -498,23 +499,17 @@ void OLED_MenuTest(void)
{
OLED_Clear();
-// OLED_ShowString(0,0," ",16,1); //0ҳ
-// OLED_ShowString(56,0," ",16,1); //У0ҳ
-// OLED_ShowString(80,0," ",16,1); //ң0ҳ
-// OLED_ShowCN(40,0,0,1); //ԡˡ0ҳ
-// OLED_ShowCN(64,0,1,1); //ԡ0ҳ
-// OLED_ShowString(0,2,"Parameter ",16,0);
OLED_ShowCN(0,0,2,0); //Ρ0ҳ
OLED_ShowCN(24,0,3,0); //0ҳ
OLED_ShowCN(48,0,4,0); //ࡱ0ҳ
OLED_ShowCN(72,0,5,0); //⡱0ҳ
-// OLED_ShowString(0,4,"Motor Control",16,0);
+
OLED_ShowCN(0,2,6,0); //硱2ҳ
OLED_ShowCN(24,2,7,0); //2ҳ
OLED_ShowCN(48,2,8,0); //ء2ҳ
OLED_ShowCN(72,2,9,0); //ơ2ҳ
-// OLED_ShowString(0,6,"Magnet Sample",16,0);
+
OLED_ShowCN(0,4,10,0); //š4ҳ
OLED_ShowCN(24,4,11,0); //4ҳ
OLED_ShowCN(48,4,12,0); //ɡ4ҳ
@@ -598,64 +593,43 @@ void OLED_MenuTest(void)
para_flag = 1;
OLED_Clear();
-// OLED_ShowString(0,0,(char *)("Pos"),16,0); //(x,y,char,size,color), color{01},x{0-128},y{}
-// OLED_ShowString(0,2,str_print2,16,0);
-// OLED_ShowString(88,0,(char *)("OC1"),16,0);
-// OLED_ShowString(0,4,(char *)("Temp"),16,0);
-// sprintf(str_print3, "%.2f",TEMP_M1820 );
-// OLED_ShowString(0,6,str_print3,16,0);
-// OLED_ShowString(88,4,(char *)("OC2"),16,0);
-// OLED_ShowString(64,2,(char *)("mv"),16,0);
-// if(ocin1 == 1)
-// {
-// OLED_ShowString(88,2," OK ",16,0);
-// }else
-// {
-// OLED_ShowString(88,2,"ERR",16,0);
-// }
-// if(ocin2 == 1)
-// {
-// OLED_ShowString(88,6," OK ",16,0);
-// }else
-// {
-// OLED_ShowString(88,6,"ERR",16,0);
-// }
-
OLED_ShowCN(0,0,6,0); //硱0ҳ
OLED_ShowCN(16,0,14,0); //衱0ҳ
OLED_ShowCN(32,0,15,0); //ߡ0ҳ
- sprintf(str_print2, "%.2f",X_ads1220 );
+ OLED_ShowChar(96,0,' ',16,0); //ˢµλ
+ sprintf(str_print2, "%d",(int)X_ads1220 );
OLED_ShowString(56,0,str_print2,16,0); //ADCֵ
// OLED_ShowString(112,0,"mv",16,0); //mv
OLED_ShowCN(0,2,16,0); //¡2ҳ
OLED_ShowCN(16,2,17,0); //ȡ2ҳ
if( TEMP_M1820 > 50) TEMP_M1820 = 25.00;
- sprintf(str_print3, "%.2f",TEMP_M1820 );
+ sprintf(str_print3, "%.1f",TEMP_M1820 );
OLED_ShowString(56,2,str_print3,16,0); //¶ֵ
+
+ OLED_ShowCN(0,4,10,0); //š4ҳ
+ OLED_ShowCN(16,4,11,0); //4ҳ
+ if( abs(vol_data) > 500) vol_data = 500;
+ sprintf(str_print2, "%d",vol_data );
+ OLED_ShowString(56,4,str_print2,16,0); //Ӧֵ
- OLED_ShowCN(0,4,18,0); //ޡ4ҳ
- OLED_ShowCN(16,4,19,0); //λ4ҳ
- OLED_ShowChar(32,4,'1',16,0); //'1'
-
- OLED_ShowCN(0,6,18,0); //ޡ6ҳ
- OLED_ShowCN(16,6,19,0); //λ6ҳ
- OLED_ShowChar(32,6,'2',16,0); //'2'
if(ocin1 == 1)
{
- OLED_ShowString(56,4,"----",16,0); //δʾ----
+ OLED_ShowString(0,6,"-----",16,0); //δʾ----
}else
{
- OLED_ShowCN(56,4,20,0); //4ҳ
- OLED_ShowCN(72,4,21,0); //4ҳ
+ OLED_ShowCN(0,6,18,0); //ޡ4ҳ
+ OLED_ShowCN(16,6,19,0); //λ4ҳ
+ OLED_ShowChar(32,6,'1',16,0); //'1'
}
if(ocin2 == 1)
{
- OLED_ShowString(56,6,"----",16,0); //δʾ----
+ OLED_ShowString(72,6,"-----",16,0); //δʾ----
}else
{
- OLED_ShowCN(56,6,20,0); //6ҳ
- OLED_ShowCN(72,6,21,0); //6ҳ
+ OLED_ShowCN(72,6,18,0); //ޡ6ҳ
+ OLED_ShowCN(88,6,19,0); //λ6ҳ
+ OLED_ShowChar(104,6,'2',16,0); //'2'
}
@@ -663,9 +637,10 @@ void OLED_MenuTest(void)
{
//λ
Xads_temp2[0] = X_ads1220;
- if( (Xads_temp2[1] - Xads_temp2[0] > 1) || (Xads_temp2[0] - Xads_temp2[1] > 1))
+ if( (Xads_temp2[1] - Xads_temp2[0] >= 1) || (Xads_temp2[0] - Xads_temp2[1] >= 1))
{
- sprintf(str_print2, "%.2f",Xads_temp2[0] ); //
+ sprintf(str_print2, "%d",(int)Xads_temp2[0] ); //
+ OLED_ShowChar(80,0,' ',16,0); //ˢµ4λ
OLED_ShowString(56,0,str_print2,16,0);
Xads_temp2[1] = Xads_temp2[0];
}
@@ -673,11 +648,23 @@ void OLED_MenuTest(void)
//¶
T_temp2[0] = TEMP_M1820;
if((T_temp2[1] != T_temp2[0]) && (T_temp2[1] < 50))
- {
- sprintf(str_print3, "%.2f",T_temp2[1] ); //¶
+ {
+ sprintf(str_print3, "%.1f",T_temp2[1] ); //¶
OLED_ShowString(56,2,str_print3,16,0);
+ OLED_ShowChar(72,2,'.',16,0); //ˢС㣬ֹ
T_temp2[1] = T_temp2[0];
}
+
+ //
+ magnetv_temp[0] = vol_data;
+ if( abs(vol_data) > 500) vol_data = 500;
+ if(magnetv_temp[1] != magnetv_temp[0])
+ {
+ OLED_ShowString(64,4," ",16,0);
+ sprintf(str_print2, "%d",vol_data );
+ OLED_ShowString(56,4,str_print2,16,0); //Ӧֵ
+ magnetv_temp[1] = magnetv_temp[0];
+ }
//λÿ1
OC1_temp[0] = ocin1;
@@ -685,13 +672,12 @@ void OLED_MenuTest(void)
{
if(OC1_temp[0] == 1)
{
-// OLED_ShowString(56,4," OK ",16,0);
- OLED_ShowString(56,4,"----",16,0); //δʾ----
+ OLED_ShowString(0,6,"-----",16,0); //δʾ----
}else
- {
-// OLED_ShowString(56,4,"ERR",16,0);
- OLED_ShowCN(56,4,20,0); //4ҳ
- OLED_ShowCN(72,4,21,0); //4ҳ
+ {
+ OLED_ShowCN(0,6,18,0); //ޡ4ҳ
+ OLED_ShowCN(16,6,19,0); //λ4ҳ
+ OLED_ShowChar(32,6,'1',16,0); //'1'
}
OC1_temp[1] = OC1_temp[0];
}
@@ -702,13 +688,12 @@ void OLED_MenuTest(void)
{
if(OC2_temp[0] == 1)
{
-// OLED_ShowString(56,6," OK ",16,0);
- OLED_ShowString(56,6,"----",16,0); //δʾ----
+ OLED_ShowString(72,6,"-----",16,0); //δʾ----
}else
{
-// OLED_ShowString(56,6,"ERR",16,0);
- OLED_ShowCN(56,6,20,0); //6ҳ
- OLED_ShowCN(72,6,21,0); //6ҳ
+ OLED_ShowCN(72,6,18,0); //ޡ6ҳ
+ OLED_ShowCN(88,6,19,0); //λ6ҳ
+ OLED_ShowChar(104,6,'2',16,0); //'2'
}
OC2_temp[1] = OC2_temp[0];
}
@@ -729,15 +714,11 @@ void OLED_MenuTest(void)
motor_flag1 = 1;
OLED_Clear();
-// OLED_ShowString(0,0,"Motor Control",16,0);
-// OLED_ShowString(0,0,"Run Mode:",16,0);
OLED_ShowCN(0,0,22,0); //ˡ0ҳ
OLED_ShowCN(16,0,23,0); //0ҳ
OLED_ShowCN(32,0,24,0); //ģ0ҳ
OLED_ShowCN(48,0,25,0); //ʽ0ҳ
-// if(Run_Mode == 0) OLED_ShowString(80,0,"STEP",16,1);
-// if(Run_Mode == 1) OLED_ShowString(80,0,"LOOP",16,1);
if(Run_Mode == 0)
{
OLED_ShowCN(72,0,26,1); //ԡ㡱0ҳ
@@ -756,7 +737,6 @@ void OLED_MenuTest(void)
run_mode_temp[0] = Run_Mode;
run_mode_temp[1] = Run_Mode;
-// OLED_ShowString(0,2,"Run Step:",16,0);
OLED_ShowCN(0,2,22,0); //ˡ2ҳ
OLED_ShowCN(16,2,23,0); //2ҳ
OLED_ShowCN(32,2,30,0); //2ҳ
@@ -767,12 +747,11 @@ void OLED_MenuTest(void)
step_temp[0] = Run_mm;
step_temp[1] = Run_mm;
-// OLED_ShowString(0,4,"Run Dire:",16,0);
OLED_ShowCN(0,4,22,0); //ˡ4ҳ
OLED_ShowCN(16,4,23,0); //4ҳ
OLED_ShowCN(32,4,32,0); //4ҳ
OLED_ShowCN(48,4,33,0); //4ҳ
-// OLED_ShowString(80,4,"POS",16,0);
+
if(motor_direc == 2)
{
OLED_ShowCN(72,4,35,0); //4ҳ
@@ -784,8 +763,6 @@ void OLED_MenuTest(void)
direc_temp[0] = motor_direc;
direc_temp[1] = motor_direc;
-// OLED_ShowString(0,6,"Cancel",16,0);
-// OLED_ShowString(80,6,"OK",16,0);
OLED_ShowCN(80,6,36,0); //ȷ6ҳ
OLED_ShowCN(96,6,37,0); //ϡ6ҳ
OLED_ShowCN(0,6,38,0); //ȡ6ҳ
@@ -795,8 +772,6 @@ void OLED_MenuTest(void)
{
if(run_mode_temp[0] != run_mode_temp[1]) //˶ģʽ仯ʱˢ
{
-// if(run_mode_temp[0] == 0) OLED_ShowString(80,0,"STEP",16,1);
-// if(run_mode_temp[0] == 1) OLED_ShowString(80,0,"LOOP",16,1);
if(run_mode_temp[0] == 0)
{
OLED_ShowCN(72,0,26,1); //ԡ㡱0ҳ
@@ -820,9 +795,7 @@ void OLED_MenuTest(void)
{
oled_en = 0;
motor_flag1 = 0;
-
-// if(run_mode_temp[0] == 0) OLED_ShowString(80,0,"STEP",16,0);
-// if(run_mode_temp[0] == 1) OLED_ShowString(80,0,"LOOP",16,0);
+
if(run_mode_temp[0] == 0)
{
OLED_ShowCN(72,0,26,0); //㡱0ҳ
@@ -923,12 +896,10 @@ void OLED_MenuTest(void)
{
if(direc_temp[0] == 1)
{
-// OLED_ShowString(80,4,"POS",16,1);
OLED_ShowCN(72,4,34,1); //ԡ4ҳ
}
if(direc_temp[0] == 2)
{
-// OLED_ShowString(80,4,"REV",16,1);
OLED_ShowCN(72,4,35,1); //ԡ4ҳ
}
@@ -943,12 +914,10 @@ void OLED_MenuTest(void)
if(direc_temp[0] == 1)
{
-// OLED_ShowString(80,4,"POS",16,0);
OLED_ShowCN(72,4,34,0); //4ҳ
}
if(direc_temp[0] == 2)
{
-// OLED_ShowString(80,4,"REV",16,0);
OLED_ShowCN(72,4,35,0); //4ҳ
}
@@ -963,7 +932,6 @@ void OLED_MenuTest(void)
motor_flag1 = 1;
oled_s_motorok[0] = 0;
oled_s_motorok[1] = 0;
-// OLED_ShowString(0,6,"Cancel",16,1);
OLED_ShowCN(0,6,38,1); //ԡȡ6ҳ
OLED_ShowCN(16,6,39,1); //ԡ6ҳ
@@ -973,8 +941,6 @@ void OLED_MenuTest(void)
{
if(oled_s_motorok[0] == 0)
{
-// OLED_ShowString(0,6,"Cancel",16,1);
-// OLED_ShowString(80,6,"OK",16,0);
OLED_ShowCN(80,6,36,0); //ȷ6ҳ
OLED_ShowCN(96,6,37,0); //ϡ6ҳ
OLED_ShowCN(0,6,38,1); //ԡȡ6ҳ
@@ -982,8 +948,6 @@ void OLED_MenuTest(void)
}
if(oled_s_motorok[0] == 1)
{
-// OLED_ShowString(0,6,"Cancel",16,0);
-// OLED_ShowString(80,6,"OK",16,1);
OLED_ShowCN(80,6,36,1); //ԡȷ6ҳ
OLED_ShowCN(96,6,37,1); //ԡϡ6ҳ
OLED_ShowCN(0,6,38,0); //ȡ6ҳ
@@ -1042,25 +1006,7 @@ void OLED_MenuTest(void)
{
motor_flag2 = 1;
OLED_Clear();
-// OLED_ShowString(0,0,"Running...",16,0);
-// OLED_ShowString(0,2,"Pos:",16,0);
-// OLED_ShowString(106,2,"mv",16,0);
-// OLED_ShowString(0,4,"OC1:",16,0);
-// OLED_ShowString(64,4,"OC2:",16,0);
-// if(ocin1 == 1)
-// {
-// OLED_ShowString(8,6," OK ",16,0);
-// }else
-// {
-// OLED_ShowString(8,6,"ERROR",16,0);
-// }
-// if(ocin2 == 1)
-// {
-// OLED_ShowString(72,6," OK ",16,0);
-// }else
-// {
-// OLED_ShowString(72,6,"ERROR",16,0);
-// }
+
OLED_ShowCN(0,0,22,0); //ˡ0ҳ
OLED_ShowCN(16,0,40,0); //С0ҳ
OLED_ShowCN(32,0,41,0); //С0ҳ
@@ -1109,45 +1055,15 @@ void OLED_MenuTest(void)
Xads_temp2[1] = Xads_temp2[0];
}
-// //λÿ1
-// OC1_temp[0] = ocin1;
-// if( OC1_temp[1] != OC1_temp[0] )
-// {
-// if(OC1_temp[0] == 1)
-// {
-// OLED_ShowString(8,6," OK ",16,0);
-// }else
-// {
-// OLED_ShowString(8,6,"ERROR",16,0);
-// }
-// OC1_temp[1] = OC1_temp[0];
-// }
-
-// //λÿ2
-// OC2_temp[0] = ocin2;
-// if( OC2_temp[1] != OC2_temp[0] )
-// {
-// if(OC2_temp[0] == 1)
-// {
-// OLED_ShowString(72,6," OK ",16,0);
-// }else
-// {
-// OLED_ShowString(72,6,"ERROR",16,0);
-// }
-// OC2_temp[1] = OC2_temp[0];
-// }
-
//λÿ1
OC1_temp[0] = ocin1;
if( OC1_temp[1] != OC1_temp[0] )
{
if(OC1_temp[0] == 1)
{
-// OLED_ShowString(56,4," OK ",16,0);
OLED_ShowString(56,4,"----",16,0); //δʾ----
}else
{
-// OLED_ShowString(56,4,"ERR",16,0);
OLED_ShowCN(56,4,20,0); //4ҳ
OLED_ShowCN(72,4,21,0); //4ҳ
}
@@ -1160,11 +1076,9 @@ void OLED_MenuTest(void)
{
if(OC2_temp[0] == 1)
{
-// OLED_ShowString(56,6," OK ",16,0);
OLED_ShowString(56,6,"----",16,0); //δʾ----
}else
{
-// OLED_ShowString(56,6,"ERR",16,0);
OLED_ShowCN(56,6,20,0); //6ҳ
OLED_ShowCN(72,6,21,0); //6ҳ
}
@@ -1174,7 +1088,6 @@ void OLED_MenuTest(void)
if(Motor_Run == 0)
{
-// OLED_ShowString(0,0,"Completed !",16,0);
OLED_ShowCN(0,0,42,0); //ѡ0ҳ
OLED_ShowCN(16,0,43,0); //ꡱ0ҳ
OLED_ShowCN(32,0,44,0); //ɡ0ҳ
@@ -1200,13 +1113,11 @@ void OLED_MenuTest(void)
magnet_flag = 1;
OLED_Clear();
-// STMFLASH_Read(FLASH_SAVE_ADDR,flash_rd,2);
smp_intr_temp[0] = magnet_tx[3];
smp_intr_temp[1] = magnet_tx[3];
smp_dpth_temp[0] = magnet_tx[5];
smp_dpth_temp[1] = magnet_tx[5];
-// OLED_ShowString(0,0,"Sample Set",16,0);
OLED_ShowCN(32,0,12,1); //ԡɡ0ҳ
OLED_ShowCN(48,0,13,1); //ԡ0ҳ
OLED_ShowCN(64,0,45,1); //ԡ衱0ҳ
@@ -1214,29 +1125,21 @@ void OLED_MenuTest(void)
OLED_ShowString(0,0," ",16,1);
OLED_ShowString(96,0," ",16,1);
-// OLED_ShowString(0,2,"Interval:",16,0);
OLED_ShowCN(0,2,12,0); //ɡ2ҳ
OLED_ShowCN(16,2,13,0); //2ҳ
OLED_ShowCN(32,2,47,0); //䡱2ҳ
OLED_ShowCN(48,2,48,0); //2ҳ
sprintf(str_print2, "%d",smp_intr_temp[0] );
OLED_ShowString(72,2,str_print2,16,1);
-// sprintf(str_print2, "%d",flash_rd[0] );
-// OLED_ShowString(72,2,str_print2,16,1);
OLED_ShowString(96,2,"ms",16,0);
-// OLED_ShowString(0,4,"Deepth:",16,0);
OLED_ShowCN(0,4,12,0); //ɡ4ҳ
OLED_ShowCN(16,4,13,0); //4ҳ
OLED_ShowCN(32,4,49,0); //4ҳ
OLED_ShowCN(48,4,17,0); //ȡ4ҳ
sprintf(str_print2, "%d",smp_dpth_temp[0] );
OLED_ShowString(72,4,str_print2,16,0);
-// sprintf(str_print2, "%d",flash_rd[1] );
-// OLED_ShowString(72,2,str_print2,16,1);
-// OLED_ShowString(0,6,"Cancel",16,0);
-// OLED_ShowString(80,6,"OK",16,0);
OLED_ShowCN(80,6,36,0); //ȷ6ҳ
OLED_ShowCN(96,6,37,0); //ϡ6ҳ
OLED_ShowCN(0,6,38,0); //ȡ6ҳ
@@ -1304,19 +1207,19 @@ void OLED_MenuTest(void)
if(magnet_flag == 0)
{
magnet_flag = 1;
+
oled_s_magnetok[0] = 0;
oled_s_magnetok[1] = 0;
-// OLED_ShowString(0,6,"Cancel",16,1);
+
OLED_ShowCN(0,6,38,1); //ԡȡ6ҳ
OLED_ShowCN(16,6,39,1); //ԡ6ҳ
+
}else
{
if(oled_s_magnetok[0] != oled_s_magnetok[1])
{
if(oled_s_magnetok[0] == 0)
{
-// OLED_ShowString(0,6,"Cancel",16,1);
-// OLED_ShowString(80,6,"OK",16,0);
OLED_ShowCN(80,6,36,0); //ȷ6ҳ
OLED_ShowCN(96,6,37,0); //ϡ6ҳ
OLED_ShowCN(0,6,38,1); //ԡȡ6ҳ
@@ -1324,8 +1227,6 @@ void OLED_MenuTest(void)
}
if(oled_s_magnetok[0] == 1)
{
-// OLED_ShowString(0,6,"Cancel",16,0);
-// OLED_ShowString(80,6,"OK",16,1);
OLED_ShowCN(80,6,36,1); //ԡȷ6ҳ
OLED_ShowCN(96,6,37,1); //ԡϡ6ҳ
OLED_ShowCN(0,6,38,0); //ȡ6ҳ
@@ -1336,7 +1237,7 @@ void OLED_MenuTest(void)
}
if(oled_en == 1)
{
- if(oled_s_magnetok[0] == 0)
+ if(oled_s_magnetok[0] == 0) //ȡʼݴ
{
oled_en = 0;
magnet_flag = 0;
@@ -1348,7 +1249,7 @@ void OLED_MenuTest(void)
oled_p = 1;
}
- if(oled_s_magnetok[0] == 1)
+ if(oled_s_magnetok[0] == 1) //ȷϺݴдmagnet_tx
{
oled_en = 0;
magnet_flag = 0;
@@ -1356,9 +1257,10 @@ void OLED_MenuTest(void)
magnet_tx[3] = smp_intr_temp[0];
magnet_tx[5] = smp_dpth_temp[0];
-// flash_wrt[0] = smp_intr_temp[0];
-// flash_wrt[1] = smp_dpth_temp[0];
-// STMFLASH_Write(FLASH_SAVE_ADDR,flash_wrt,2);
+ HAL_GPIO_WritePin(RS485_EN1_GPIO_Port,RS485_EN1_Pin,GPIO_PIN_SET); //ʹ485ͣͽڻص
+
+ HAL_UART_Transmit_IT(&huart2, magnet_tx ,7); //485
+
oled_p = 1;
}
@@ -1430,7 +1332,7 @@ void OLED_MenuTest(void)
if(magnet_select[0] == 0)
{
- OLED_ShowString(72,0,"#25 ",16,0); //ȷȡ
+ OLED_ShowString(72,0,"#25 ",16,0); //ȷȡ
sprintf(str_print2, "%d",flash_rd[0] ); //#25е
OLED_ShowString(72,2,str_print2,16,0);
}
@@ -1458,8 +1360,6 @@ void OLED_MenuTest(void)
{
magnet_flag = 1;
- OLED_ShowCN(0,6,38,0); //ԡȡ6ҳ
- OLED_ShowCN(16,6,39,0); //ԡ6ҳ
sprintf(str_print2, "%d",(uint16_t)Xads_temp2[0] ); //Եǰλ
OLED_ShowString(72,4,str_print2,16,1);
}
@@ -1474,21 +1374,23 @@ void OLED_MenuTest(void)
Xads_temp2[1] = Xads_temp2[0];
}
- if(magnet_motor_sw == 0)
+ if(magnet_motor_sw == 0) //ֹͣ
{
Motor_Run = 0;
motor_direc = 1;
Run_Mode = 0;
}
- if(magnet_motor_sw == 1)
+ if(magnet_motor_sw == 1) //ѭ
{
+ Run_Step = 0;
Run_mm = 15;
motor_direc = 1;
Motor_Run = 1;
Run_Mode = 0;
}
- if(magnet_motor_sw == 2)
+ if(magnet_motor_sw == 2) //ѭ
{
+ Run_Step = 0;
Run_mm = 15;
motor_direc = 2;
Motor_Run = 1;
@@ -1496,7 +1398,7 @@ void OLED_MenuTest(void)
}
}
- if(oled_en == 1)
+ if(oled_en == 1) //ȷϵǰλúȡ
{
oled_en = 0;
magnet_flag = 0;
@@ -1505,7 +1407,7 @@ void OLED_MenuTest(void)
Motor_Run = 0;
Run_Mode = 0;
motor_direc = 1;
- sprintf(str_print2, "%d",(uint16_t)Xads_temp2[0] ); //ȷϵǰλúȡ
+ sprintf(str_print2, "%d",(uint16_t)Xads_temp2[0] );
OLED_ShowString(72,4,str_print2,16,0);
oled_p = 14;
@@ -1557,7 +1459,7 @@ void OLED_MenuTest(void)
}
}
- if((oled_en == 1) && (magnet_s_ok[0] == 1))
+ if((oled_en == 1) && (magnet_s_ok[0] == 1)) //ȷϺе㡱ֵдflash
{
oled_en = 0;
magnet_flag = 0;
@@ -1567,7 +1469,8 @@ void OLED_MenuTest(void)
if(magnet_select[0] == 2) flash_wrt[2] = (uint16_t)Xads_temp2[0]; //#110е
STMFLASH_Write(FLASH_SAVE_ADDR,flash_wrt,6); //дflash
-// magnet_middle = flash_rd[0]; //Ĭ#25еΪ
+
+ magnet_middle = flash_rd[0]; //Ĭ#25еΪ
magnet_s_ok[0] = 0;
magnet_s_ok[1] = 0;
diff --git a/App/Src/tmc5160.c b/App/Src/tmc5160.c
index 8e8c737..3bb3f22 100644
--- a/App/Src/tmc5160.c
+++ b/App/Src/tmc5160.c
@@ -52,10 +52,10 @@ uint32_t rampmode = 0x00000000; //斜坡运动模式 0-位置;1-速度
int xtarget = 0x00000000; //位置模式的目标位置,51200/圈
uint32_t speed_1 = 0x00004E20; //V1 过渡阶段的目标速度
uint32_t speed_max = 0x00009C40; //VMAX 目标速度
-uint32_t acc_1 = 0x00000BB8; //A1 过渡阶段的加速度
-uint32_t acc_max = 0x000007D0; //AMAX 最大加速度
-uint32_t dcr_1 = 0x0000BB8; //D1 过渡阶段的减速度
-uint32_t dcr_max = 0x000007D0; //DMAX 最大减速度
+uint32_t acc_1 = 0x00000FA0; //A1 过渡阶段的加速度
+uint32_t acc_max = 0x00000BB8; //AMAX 最大加速度
+uint32_t dcr_1 = 0x00000FA0; //D1 过渡阶段的减速度
+uint32_t dcr_max = 0x00000BB8; //DMAX 最大减速度
/*************常用参数配置***************/
void tmc5160_init(void)
@@ -72,9 +72,9 @@ void tmc5160_init(void)
// 速度相关的驱动控制寄存器
TMC5160_SPIWriteInt(0x10, 0x00070A02,1); // IHOLD->0~7bit; IRUN->12~8bit
TMC5160_SPIWriteInt(0x11, 0x0000000A,1); // writing value 0x0000000A = 10 = 0.0 to address 9 = 0x11(TPOWERDOWN)
-// TMC5160_SPIWriteInt(0x13, 0x000001F4,1); // writing value 0x00000041 = 65 = 0.0 to address 10 = 0x13(TPWMTHRS)
- TMC5160_SPIWriteInt(0x14, 0x00000010,1); // 0x14(TCOOLTHRS),静步阈值
- TMC5160_SPIWriteInt(0x15, 0x00000010,1); // writing value 0x00000000 = 0 = 0.0 to address 12 = 0x15(THIGH)
+ TMC5160_SPIWriteInt(0x13, 0x00000000,1); // 0x13(TPWMTHRS),StealthChop上限,超过该值后启用降噪,TSTEP >= TPWMTHRS使能降噪
+ TMC5160_SPIWriteInt(0x14, 0x00000000,1); // 0x14(TCOOLTHRS),降温操作,当该值 >= TSTEP >= THIGH 时,将禁用降噪,使能降温。
+ TMC5160_SPIWriteInt(0x15, 0x00000000,1); // 0x15(THIGH),该值大于等于TSTEP时,coolstep和steathchop都会被禁用
// 斜波发生器运动寄存器
TMC5160_SPIWriteInt(RAMPMODE_ADDR, rampmode,1); // writing value 0x00000000 = 0 = 0.0 to address 13 = 0x20(RAMPMODE)
TMC5160_SPIWriteInt(XACTUAL_ADDR, 0x00000000,1); // writing value 0xFFCC12F0 = 0 = 0.0 to address 14 = 0x21(XACTUAL)
@@ -108,10 +108,10 @@ void tmc5160_init(void)
// TMC5160_SPIWriteInt(0x68, 0xFFFF8056,1); // writing value 0xFFFF8056 = 0 = 0.0 to address 39 = 0x68(MSLUTSEL)
// TMC5160_SPIWriteInt(0x69, 0x00F70000,1); // writing value 0x00F70000 = 16187392 = 0.0 to address 40 = 0x69(MSLUTSTART)
// // 电机驱动寄存器-驱动寄存器组
- TMC5160_SPIWriteInt(0x6C, 0x000100C3,1); // writing value 0x00410153 = 4260179 = 0.0 to address 41 = 0x6C(CHOPCONF)
- TMC5160_SPIWriteInt(0x6D, 0x00000000,1); // 0x6D(COOLCONF),16-22bit设置堵转灵敏度,最大3F(63),最小40(-64)
-// TMC5160_SPIWriteInt(0x6E, 0x00000000,1); // writing value 0x00000000 = 0 = 0.0 to address 43 = 0x6E(DCCTRL)
- TMC5160_SPIWriteInt(0x70, 0xC40C001E,1); // writing value 0xC40C001E = 0 = 0.0 to address 44 = 0x70(PWMCONF)
+ TMC5160_SPIWriteInt(0x6C, 0x000100C3,1); // 0x6C(CHOPCONF)斩波器配置
+ TMC5160_SPIWriteInt(0x6D, 0x00C00000,1); // 0x6D(COOLCONF),16-22bit设置堵转灵敏度,最大3F(63),最小C0(-64)
+// TMC5160_SPIWriteInt(0x6E, 0x00000000,1); // 0x6E(DCCTRL)
+ TMC5160_SPIWriteInt(0x70, 0xC40C001E,1); // 0x70(PWMCONF)已开启自动调节
}
uint8_t data_r[5] = {0};//存放接收到的数据
@@ -207,54 +207,11 @@ void TMC5160_SPIReadInt(uint8_t addr, uint8_t record[5])//从addr寄存器读取
}
-uint8_t XA[5]={0},VA[5]={0},RAMP_STAT[5],DRV_STAT[5];
-signed int XA_32 = 0,VA_32 = 0,RAMP_STAT_32 = 0,DRV_STAT_32 = 0; //有正负
-uint16_t SG_RESULT_16 = 0;
-char tmc5160_sw =0;
+uint8_t XA[5]={0},VA[5]={0},RAMP_STAT[5],DRV_STAT[5]; //用于存放接收到的8bit*5数据
+signed int XA_32 = 0,VA_32 = 0,RAMP_STAT_32 = 0,DRV_STAT_32 = 0; //用于存放从8bit*5转化得到的32位数据
+char tmc5160_sw =0; //用于控制电机,在按键功能中使用
-//void tmc5160_act()
-//{
-// TMC5160_SPIReadInt(XACTUAL_ADDR,XA);//读取实际位置XACTUAL
-// XA_32 = Raw_32(XA);
-// TMC5160_SPIReadInt(VACTUAL_ADDR,VA);//读取实际速度VACTUAL
-// VA_32 = Raw_32(VA);
-
-// if(tmc5160_sw == 1)
-// {
-// HAL_GPIO_WritePin(LED_ERR_GPIO_Port,LED_ERR_Pin,GPIO_PIN_RESET); //蓝灯常亮
-//
-// rampmode = 0x00000001;
-// TMC5160_SPIWriteInt(RAMPMODE_ADDR,rampmode,1); //开启速度模式
-//
-//// rampmode = 0x00000000;
-//// TMC5160_SPIWriteInt(RAMPMODE_ADDR,rampmode,1); //开启位置模式
-//// if( XA_32 == 0x00000000 )
-//// {
-//// xtarget = 0x00025800;
-//// TMC5160_SPIWriteInt(XTARGET_ADDR, xtarget,1); //正向转动3圈
-//// }
-////
-//// if( XA_32== 0x00025800 )
-//// {
-//// xtarget = 0x00000000;
-//// TMC5160_SPIWriteInt(XTARGET_ADDR, xtarget,1); //接着反向转3圈(返回起点)
-//// }
-// }else
-// {
-// TMC5160_SPIWriteInt(XTARGET_ADDR,XA_32,1); //把当前位置设定为目标位置,进入减速阶段
-//
-// if( abs(VA_32) <= 0x0000000A ) // 视作已经停止
-// {
-// HAL_GPIO_TogglePin(LED_ERR_GPIO_Port,LED_ERR_Pin); //蓝灯闪烁
-//
-// }
-
-// }
-
-//
-//}
-
-signed int Raw_32(uint8_t raw[5]) //把5*8bit数据中的0~31位拼接成1*32bit的数值并返回
+signed int Raw_32(uint8_t raw[5]) //把5*8bit数据中的0~31位拼接成1*32bit的数值并返回
{
uint32_t result = 0;
@@ -269,21 +226,20 @@ signed int Raw_32(uint8_t raw[5]) //把5*8bit数据中的0~31位拼接成1*32bit
return result;
}
-uint32_t X_temp = 0;
-char busy_flag = 0;
+
+char busy_flag = 0; //忙信号标志
void tmc5160_operate(char operate_mode, uint32_t steps)
{
-
switch(operate_mode)
{
case 0 : //电机停止
{
- TMC5160_SPIReadInt(VACTUAL_ADDR,VA); //读取实际速度VACTUAL
+ TMC5160_SPIReadInt(VACTUAL_ADDR,VA); //读取实际速度VACTUAL
VA_32 = Raw_32(VA);
- TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //读取实际位置XACTUAL
+ TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //读取实际位置XACTUAL
XA_32 = Raw_32(XA);
- if( VA_32 != 0)
+ if( VA_32 != 0) //只要实际速度不为0,就进入减速
{
busy_flag = 1;
@@ -303,19 +259,16 @@ void tmc5160_operate(char operate_mode, uint32_t steps)
if( busy_flag == 0)
{
- busy_flag = 1;
+ busy_flag = 1; //忙信号置1,等待到达目标位置
- TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //读取实际位置XACTUAL
+ TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //读取实际位置XACTUAL
XA_32 = Raw_32(XA);
- X_temp = XA_32;
- //记录此时的实际位置
-
rampmode = 0x00000000;
TMC5160_SPIWriteInt(RAMPMODE_ADDR,rampmode,1); //开启位置模式
- TMC5160_SPIWriteInt(XTARGET_ADDR, X_temp + steps, 1); //此时的实际位置+步长作为目标位置
- delay(1000); //静止状态下会被 误判 成已经到达目标位置,因此进行延时等待寄存器发生变化。
+ TMC5160_SPIWriteInt(XTARGET_ADDR, XA_32 + steps, 1); //此时的实际位置+步长作为目标位置
+ delay(1000); //静止状态下会被 误判 成已经到达目标位置,因此进行延时等待寄存器发生变化。
}
if(busy_flag == 1)
{
@@ -324,8 +277,7 @@ void tmc5160_operate(char operate_mode, uint32_t steps)
if(RAMP_STAT_32 & 0x00000200) //到达目标位置,XACTUAL = XTARGET时,第9位会被置 1
{
- busy_flag = 0;
- X_temp = 0;
+ busy_flag = 0; //忙信号清零
}
}
@@ -338,53 +290,28 @@ void tmc5160_operate(char operate_mode, uint32_t steps)
{
busy_flag = 1;
- TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //读取实际位置XACTUAL
+ TMC5160_SPIReadInt(XACTUAL_ADDR,XA); //读取实际位置XACTUAL
XA_32 = Raw_32(XA);
-
- X_temp = XA_32;
-
+
rampmode = 0x00000000;
- TMC5160_SPIWriteInt(RAMPMODE_ADDR,rampmode,1); //开启位置模式
+ TMC5160_SPIWriteInt(RAMPMODE_ADDR,rampmode,1); //开启位置模式
- TMC5160_SPIWriteInt(XTARGET_ADDR, X_temp - steps, 1);
- delay(1000); //静止状态下会被 误判 成已经到达目标位置,因此进行延时等待寄存器发生变化。
+ TMC5160_SPIWriteInt(XTARGET_ADDR, XA_32 - steps, 1);
+ delay(1000); //静止状态下会被 误判 成已经到达目标位置,因此进行延时等待寄存器发生变化。
}
if(busy_flag == 1)
{
- TMC5160_SPIReadInt(RAMP_STAT_ADDR,RAMP_STAT); //读取斜坡状态
+ TMC5160_SPIReadInt(RAMP_STAT_ADDR,RAMP_STAT); //读取斜坡状态
RAMP_STAT_32 = Raw_32(RAMP_STAT);
- if(RAMP_STAT_32 & 0x00000200) //到达目标位置,XACTUAL = XTARGET时,第9位会被置 1
+ if(RAMP_STAT_32 & 0x00000200) //到达目标位置,XACTUAL = XTARGET时,第9位会被置 1
{
busy_flag = 0;
- X_temp = 0;
}
}
}
break;
-
-// case 3 : //电机回到起点(上电位置)
-// {
-// if( busy_flag == 0)
-// {
-// busy_flag = 1;
-// rampmode = 0x00000000;
-// TMC5160_SPIWriteInt(RAMPMODE_ADDR,rampmode,1); //开启位置模式
-//
-// speed_max <<=1;
-// TMC5160_SPIWriteInt(VMAX_ADDR, speed_max, 1); //以二倍速返回零点
-// TMC5160_SPIWriteInt(XTARGET_ADDR, 0x00000000, 1);
-// }
-// if( RAMP_STAT_32 & 0x00000200 )
-// {
-// busy_flag = 0;
-// speed_max >>=1;
-// TMC5160_SPIWriteInt(VMAX_ADDR, speed_max, 1); //恢复原速
-// }
-// }
-// break;
-
default :
{
}
@@ -396,15 +323,15 @@ void tmc5160_operate(char operate_mode, uint32_t steps)
void motor_protect_ads(float threshold_neg, float threshold_pos)
{
- if( (X_ads1220 <= threshold_neg) && (motor_direc != 1) )
+ if( (X_ads1220 <= threshold_neg) && ( motor_direc != 1 ) ) //到达负限位后停止,停止后正向
{
- tmc5160_operate(0, 0);
- if(busy_flag == 0) motor_direc = 1;
+ Motor_Run = 0;
+ motor_direc = 1;
}
- if( (X_ads1220 >= threshold_pos) && ( motor_direc != 2 ) )
+ if( (X_ads1220 >= threshold_pos) && ( motor_direc != 2 ) ) //到达正限位后停止,停止后反向
{
- tmc5160_operate(0, 0);
- if(busy_flag == 0) motor_direc = 2;
+ Motor_Run = 0;
+ motor_direc = 2;
}
}
diff --git a/Inc/app.h b/Inc/app.h
index e7421ba..f14056e 100644
--- a/Inc/app.h
+++ b/Inc/app.h
@@ -1,9 +1,9 @@
#ifndef _APP_H
#define _APP_H
+#include "MyLib.h"
#include "serial_port.h"
#include "m1820.h"
-#include "oled.h"
#include "oled2.h"
#include "ads1220.h"
#include "tmc5160.h"
@@ -30,7 +30,7 @@ void motor_protect_ads(float threshold_neg, float threshold_pos);
void motor_protect_ocin(void);
extern int it_1ms_cnt ,it_1ms_flag;
-extern int it_2ms_cnt ,it_2ms_flag;
+extern int it_200ms_cnt ,it_200ms_flag;
extern int it_5ms_cnt ,it_5ms_flag;
extern int it_10ms_cnt ,it_10ms_flag;
extern int it_50ms_cnt ,it_50ms_flag;
diff --git a/MDK-ARM/mfps.uvguix.吴俊潮 b/MDK-ARM/mfps.uvguix.吴俊潮
index b80b836..153cefd 100644
--- a/MDK-ARM/mfps.uvguix.吴俊潮
+++ b/MDK-ARM/mfps.uvguix.吴俊潮
@@ -15,17 +15,17 @@
38003
Registers
- 140 90
+ 140 100
346
Code Coverage
- 1010 160
+ 1010 655
204
Performance Analyzer
- 1170
+ 1170 175 175 145
@@ -93,8 +93,8 @@
2
3
- -1
- -1
+ -32000
+ -32000
-1
@@ -102,16 +102,16 @@
167
- 227
- 1667
+ -1693
+ -253
920
0
- 1142
- 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000C000000000000000100000035463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C5372635C6170702E6300000000056170702E6300000000C5D4F200FFFFFFFF37463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C5372635C6D6F746F722E6300000000076D6F746F722E6300000000FFDC7800FFFFFFFF39463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C5372635C746D63353136302E630000000009746D63353136302E6300000000BECEA100FFFFFFFF37463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C5372635C6F6C6564322E6300000000076F6C6564322E6300000000F0A0A100FFFFFFFF37463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C5372635C6D794C69622E6300000000076D794C69622E6300000000BCA8E100FFFFFFFF35463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C5372635C6B65792E6300000000056B65792E63000000009CC1B600FFFFFFFF37463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C496E635C6F6C6564322E6800000000076F6C6564322E6800000000F7B88600FFFFFFFF31463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C496E635C6170702E6800000000056170702E6800000000D9ADC200FFFFFFFF45463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4D444B2D41524D5C737461727475705F73746D33326631303378652E730000000015737461727475705F73746D33326631303378652E7300000000A5C2D700FFFFFFFF32463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C5372635C6D61696E2E6300000000066D61696E2E6300000000B3A6BE00FFFFFFFF37463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C5372635C55617274312E63000000000755617274312E6300000000EAD6A300FFFFFFFF37463A5C4465736B746F705C576F726B5C323032342E30355C323032342E30352E31385C6D6670735C4170705C496E635C6D6F746F722E6800000000076D6F746F722E6800000000F6FA7D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000012030000
+ 1484
+ 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000C000000010000000100000052463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C5372635C55617274312E63000000000755617274312E6300000000C5D4F200FFFFFFFF52463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C5372635C6D6F746F722E6300000000076D6F746F722E6300000000FFDC7800FFFFFFFF52463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C5372635C6F6C6564322E6300000000076F6C6564322E6300000000BECEA100FFFFFFFF52463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C496E635C6D6F746F722E6800000000076D6F746F722E6800000000F0A0A100FFFFFFFF50463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C5372635C6170702E6300000000056170702E6300000000BCA8E100FFFFFFFF4D463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C5372635C6D61696E2E6300000000066D61696E2E63000000009CC1B600FFFFFFFF52463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C5372635C64656C61792E63000000000764656C61792E6300000000F7B88600FFFFFFFF54463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C5372635C746D63353136302E630000000009746D63353136302E6300000000D9ADC200FFFFFFFF55463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C5372635C73746D3332663178785F69742E63000000000E73746D3332663178785F69742E6300000000A5C2D700FFFFFFFF4C463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C496E635C6170702E6800000000056170702E6800000000EAD6A300FFFFFFFF54463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4170705C5372635C616473313232302E630000000009616473313232302E6300000000F6FA7D00FFFFFFFF60463A5C4465736B746F705C576F726B5C30315FCEBBD6C3B7B4C0A1B2E2CAD4D7B0D6C35C30315F434F44455C30315F4E65775C323032342E30352E32335C6D6670735C4D444B2D41524D5C737461727475705F73746D33326631303378652E730000000015737461727475705F73746D33326631303378652E7300000000F6FA7D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000074F9FFFF660000000000000012030000
@@ -134,7 +134,7 @@
16
- F40000006600000090050000F4000000
+ 74F9FFFF6600000010FEFFFFF4000000
@@ -1799,14 +1799,14 @@
3312
- 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F4000000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A004000066000000900500003C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000FB020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000012030000000000004F000000F0000000FB0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000002C02000090050000CE020000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000FB02000080070000FF0200000100000001000010040000000100000070FDFFFFF4000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000001603000080070000F503000000000000FF02000080070000DE0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
+ 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E65002000000000000074F9FFFF6600000010FEFFFFF4000000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000000000020FDFFFF6600000010FEFFFF3C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000FB020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000080F8FFFF6600000070F9FFFF12030000000000004F000000F0000000FB0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000080F8FFFF2C02000010FEFFFFCE020000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000FB02000080070000FF0200000100000001000010040000000100000070FDFFFFF4000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000080F8FFFF1603000000000000F503000000000000FF02000080070000DE0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
59392
File
- 2570
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000E53544D464C4153485F5772697465960000000000000001000E53544D464C4153485F577269746500000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2671
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000004686172649600000000000000080004686172640E69745F313030306D735F666C61670D69745F3530306D735F666C61670D69745F3130306D735F666C61670C69745F35306D735F666C61670C69745F31306D735F666C61670B69745F356D735F666C61670B69745F316D735F666C61670000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1822,7 +1822,7 @@
Build
968
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000046D66707396000000000000000100046D667073000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000046D66707396000000000000000100046D667073000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -1838,7 +1838,7 @@
Debug
2373
- 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -1875,7 +1875,7 @@
16
- 7C05000066000000800700004F030000
+ FCFDFFFF66000000000000004F030000
@@ -2031,7 +2031,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -2291,7 +2291,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -2311,7 +2311,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -2391,7 +2391,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -2411,7 +2411,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -2431,7 +2431,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -2451,7 +2451,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -3031,7 +3031,7 @@
0
16
- F7000000660000007D070000C4000000
+ F8000000660000007D070000C4000000
16
@@ -3540,14 +3540,14 @@
3415
- 000000000C000000000000000040000001000000FFFFFFFFFFFFFFFF780500004F0000007C05000038030000010000000200001004000000010000001CFCFFFF9D02000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000FFFF02000B004354616262656450616E6500400000010000007C05000066000000800700004F0300007C0500004F000000800700003803000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000080070000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D60100004589000001800020000000000000F40000006600000080070000F4000000F40000004F00000080070000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A004000066000000900500003C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF10000004F000000F5000000380300000100000002000010040000000100000012FFFFFF7F040000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F10000004F030000000000004F000000F1000000380300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000038030000800700003C03000001000000010000100400000001000000000000000000000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFC00300003C030000C4030000DE03000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000250200009005000029020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000004002000090050000CE020000000000002902000090050000B70200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
+ 000000000C000000000000000040000001000000FFFFFFFFFFFFFFFF780500004F0000007C05000038030000010000000200001004000000010000001CFCFFFF9D02000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000FFFF02000B004354616262656450616E650040000001000000FCFDFFFF66000000000000004F0300007C0500004F000000800700003803000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000020000000000000FFFFFFFFFFFFFFFFF5000000DD00000080070000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D6010000458900000180002000000000000075F9FFFF6600000000000000F4000000F50000004F00000080070000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000000000020FDFFFF6600000010FEFFFF3C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF10000004F000000F5000000380300000100000002000010040000000100000012FFFFFF7F040000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000080F8FFFF6600000071F9FFFF4F030000000000004F000000F1000000380300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000038030000800700003C03000001000000010000100400000001000000000000000000000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFC00300003C030000C4030000DE03000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000250200009005000029020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000000000080F8FFFF4002000010FEFFFFCE020000000000002902000090050000B70200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
59392
File
- 2814
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000000960000000000000014000002C9E802B5E302353502B4C50D52756E6D6F746F725F4E756D730E69745F313030306D735F666C61670C69745F31306D735F666C616702CEBB0454454D5010535344313330365F5772697465436D640775696E74385F7404463678380575696E74381773746172745F74746C5F726563656976655F74696D65721474746C5F726563656976655F696E74657276616C0C585441524745525F414444520972655F737461747573067864617461201678646174612074746C5F726563656976655F666C61670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2671
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000004686172649600000000000000080004686172640E69745F313030306D735F666C61670D69745F3530306D735F666C61670D69745F3130306D735F666C61670C69745F35306D735F666C61670C69745F31306D735F666C61670B69745F356D735F666C61670B69745F316D735F666C61670000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -3579,7 +3579,7 @@
Debug
2362
- 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020000002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000004002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000004002800000000000000000000000000000000010000000100000001801B80000000000400290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000004002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020000002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -3603,84 +3603,48 @@
0
100
- 0
+ 1
- ..\App\Src\app.c
- 8
- 10
- 28
+ ..\App\Src\Uart1.c
+ 0
+ 629
+ 576
1
0
..\App\Src\motor.c
- 32
- 1
- 13
- 1
-
- 0
-
-
- ..\App\Src\tmc5160.c
- 0
- 42
- 409
+ 17
+ 562
+ 571
1
0
..\App\Src\oled2.c
- 16
- 1549
- 1571
+ 46
+ 245
+ 246
1
0
- ..\App\Src\myLib.c
- 84
- 308
- 327
- 1
-
- 0
-
-
- ..\App\Src\key.c
+ ../App/Inc/motor.h
0
- 139
- 140
- 1
-
- 0
-
-
- ../App/Inc/oled2.h
- 28
1
- 19
+ 12
1
0
- ../Inc/app.h
- 26
- 7
- 47
- 1
-
- 0
-
-
- startup_stm32f103xe.s
- 0
- 133
- 148
+ ..\App\Src\app.c
+ 9
+ 82
+ 113
1
0
@@ -3695,19 +3659,55 @@
0
- ..\App\Src\Uart1.c
- 68
- 612
- 629
+ ..\App\Src\delay.c
+ 0
+ 39
+ 50
1
0
- ../App/Inc/motor.h
+ ..\App\Src\tmc5160.c
+ 38
+ 92
+ 112
+ 1
+
+ 0
+
+
+ ../Src/stm32f1xx_it.c
+ 22
+ 101
+ 118
+ 1
+
+ 0
+
+
+ ../Inc/app.h
0
1
- 6
+ 51
+ 1
+
+ 0
+
+
+ ..\App\Src\ads1220.c
+ 0
+ 300
+ 335
+ 1
+
+ 0
+
+
+ startup_stm32f103xe.s
+ 0
+ 133
+ 148
1
0
diff --git a/MDK-ARM/mfps.uvoptx b/MDK-ARM/mfps.uvoptx
index 5b3ec5b..64923d4 100644
--- a/MDK-ARM/mfps.uvoptx
+++ b/MDK-ARM/mfps.uvoptx
@@ -258,37 +258,52 @@
21
1
- SG_RESULT_16
+ Run_Stop
22
1
- DRV_STAT_32
+ Runmotor_Nums,0x0A
23
1
- load_check
+ flash_wrt,0x0A
24
1
- tstep_check
+ V_data
25
1
- Run_Stop
+ vol_data,0x0A
26
1
- Runmotor_Nums,0x0A
+ magnet_middle,0x0A
27
1
- flash_wrt,0x0A
+ motor_x_end
+
+
+ 28
+ 1
+ SG_RESULT
+
+
+ 29
+ 1
+ DRV_STAT_32
+
+
+ 30
+ 1
+ TSTEP
@@ -760,18 +775,6 @@
0
0
0
- ..\App\Src\oled.c
- oled.c
- 0
- 0
-
-
- 5
- 33
- 1
- 0
- 0
- 0
..\App\Src\ads1220.c
ads1220.c
0
@@ -779,7 +782,7 @@
5
- 34
+ 33
1
0
0
@@ -791,7 +794,7 @@
5
- 35
+ 34
1
0
0
@@ -803,7 +806,7 @@
5
- 36
+ 35
1
0
0
@@ -815,7 +818,7 @@
5
- 37
+ 36
1
0
0
@@ -827,7 +830,7 @@
5
- 38
+ 37
1
0
0
@@ -839,7 +842,7 @@
5
- 39
+ 38
1
0
0
@@ -851,7 +854,7 @@
5
- 40
+ 39
1
0
0
@@ -863,7 +866,7 @@
5
- 41
+ 40
1
0
0
diff --git a/MDK-ARM/mfps.uvprojx b/MDK-ARM/mfps.uvprojx
index b94c1df..9f294d7 100644
--- a/MDK-ARM/mfps.uvprojx
+++ b/MDK-ARM/mfps.uvprojx
@@ -1682,11 +1682,6 @@
1
..\App\Src\serial_port.c
-
- oled.c
- 1
- ..\App\Src\oled.c
-
ads1220.c
1
diff --git a/MDK-ARM/mfps/ads1220.crf b/MDK-ARM/mfps/ads1220.crf
index 379d6a3c3d50b03b2c7991eeffaf00adfac75ea7..bfddaca2265febd59e1c12a2115c144ee2e1c8ca 100644
GIT binary patch
delta 15948
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
P-a3VAHl`XzzzF>h83bDc
delta 18523
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
ndYvoHY81@v=Wp-X(cDey%0bblj~ks
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