Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 742e3f75b1 | |||
| 930c49e3cf | |||
| 11ad46b73d | |||
| cbb2803d81 | |||
| e38a025201 | |||
| 5831580e55 | |||
| 82e5f25e3a | |||
| 1c83cbc70a |
29
.eide/bc2d-pos.arm.options.gcc.json
Normal file
29
.eide/bc2d-pos.arm.options.gcc.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"version": 5,
|
||||
"beforeBuildTasks": [],
|
||||
"afterBuildTasks": [],
|
||||
"global": {
|
||||
"$float-abi-type": "softfp",
|
||||
"output-debug-info": "enable",
|
||||
"misc-control": "--specs=nosys.specs --specs=nano.specs"
|
||||
},
|
||||
"c/cpp-compiler": {
|
||||
"language-c": "c11",
|
||||
"language-cpp": "c++11",
|
||||
"optimization": "level-debug",
|
||||
"warnings": "all-warnings",
|
||||
"one-elf-section-per-function": true,
|
||||
"one-elf-section-per-data": true,
|
||||
"C_FLAGS": "",
|
||||
"CXX_FLAGS": ""
|
||||
},
|
||||
"asm-compiler": {
|
||||
"ASM_FLAGS": ""
|
||||
},
|
||||
"linker": {
|
||||
"output-format": "elf",
|
||||
"remove-unused-input-sections": true,
|
||||
"LD_FLAGS": "",
|
||||
"LIB_FLAGS": "-lm"
|
||||
}
|
||||
}
|
||||
31
.eide/bc2d-pos.files.options.yml
Normal file
31
.eide/bc2d-pos.files.options.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
##########################################################################################
|
||||
# Append Compiler Options For Source Files
|
||||
#
|
||||
# syntax:
|
||||
# <your matcher expr>: <your compiler command>
|
||||
#
|
||||
# examples:
|
||||
# 'main.cpp': --cpp11 -Og ...
|
||||
# 'src/*.c': -gnu -O2 ...
|
||||
# 'src/lib/**/*.cpp': --cpp11 -Os ...
|
||||
# '!Application/*.c': -O0
|
||||
# '**/*.c': -O2 -gnu ...
|
||||
#
|
||||
# For more syntax, please refer to: https://www.npmjs.com/package/micromatch
|
||||
#
|
||||
##########################################################################################
|
||||
|
||||
version: '1.0'
|
||||
|
||||
#
|
||||
# for source files with filesystem paths
|
||||
#
|
||||
files:
|
||||
# './test/**/*.c': --c99
|
||||
|
||||
#
|
||||
# for source files with virtual paths
|
||||
#
|
||||
virtualPathFiles:
|
||||
# 'virtual_folder/**/*.c': --c99
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"version": 4,
|
||||
"beforeBuildTasks": [],
|
||||
"afterBuildTasks": [],
|
||||
"global": {
|
||||
"use-microLIB": true,
|
||||
"output-debug-info": "enable"
|
||||
},
|
||||
"c/cpp-compiler": {
|
||||
"optimization": "level-0",
|
||||
"one-elf-section-per-function": true,
|
||||
"c99-mode": true,
|
||||
"C_FLAGS": "--diag_suppress=1 --diag_suppress=1295",
|
||||
"CXX_FLAGS": "--diag_suppress=1 --diag_suppress=1295",
|
||||
"warnings": "all-warnings"
|
||||
},
|
||||
"asm-compiler": {},
|
||||
"linker": {
|
||||
"output-format": "elf",
|
||||
"xo-base": "",
|
||||
"ro-base": "0x08000000",
|
||||
"rw-base": "0x20000000"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "BC2D",
|
||||
"name": "BC2D-POS",
|
||||
"type": "ARM",
|
||||
"dependenceList": [],
|
||||
"srcDirs": [
|
||||
@@ -89,7 +89,7 @@
|
||||
"uid": "9d909db3024271625a98879e53e2d396"
|
||||
},
|
||||
"targets": {
|
||||
"BC2D": {
|
||||
"BC2D-POS": {
|
||||
"excludeList": [],
|
||||
"toolchain": "GCC",
|
||||
"compileConfig": {
|
||||
@@ -131,7 +131,6 @@
|
||||
"libraries/cmsis/cm4/device_support",
|
||||
"project/inc",
|
||||
".cmsis/include",
|
||||
"project/MDK_V5/RTE/_BC2D",
|
||||
".eide/deps",
|
||||
"3rd-part/dwt_delay",
|
||||
"3rd-part/PID-Library",
|
||||
|
||||
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"sonarlint.pathToCompileCommands": "${workspaceFolder}\\build\\BC2D\\compile_commands.json"
|
||||
"sonarlint.pathToCompileCommands": "${workspaceFolder}\\build\\BC2D-POS\\compile_commands.json"
|
||||
}
|
||||
@@ -54,6 +54,11 @@
|
||||
<ModeSub name="Multi-Channels" value="Encoder_Mode"/>
|
||||
<ModeSub name="Activated" value="TRUE"/>
|
||||
</Mode>
|
||||
<Parameters>
|
||||
<ParametersSub name="EncoderMode" value="TMR_ENCODER_MODE_B"/>
|
||||
<ParametersSub name="IC1Filter" value="7"/>
|
||||
<ParametersSub name="IC2Filter" value="7"/>
|
||||
</Parameters>
|
||||
</TMR2>
|
||||
<TMR3>
|
||||
<Mode>
|
||||
@@ -66,7 +71,7 @@
|
||||
<ModeSub name="Activated" value="TRUE"/>
|
||||
</Mode>
|
||||
<Parameters>
|
||||
<ParametersSub name="DividerValue" value="999"/>
|
||||
<ParametersSub name="DividerValue" value="1999"/>
|
||||
<ParametersSub name="Period" value="1999"/>
|
||||
</Parameters>
|
||||
</TMR4>
|
||||
@@ -134,7 +139,7 @@
|
||||
<PinSub pinname="PB6" signalname="GPIO_Input" signaltype="3"/>
|
||||
</PINInfo>
|
||||
<ProjectInfomation>
|
||||
<ProjectName>BC2D</ProjectName>
|
||||
<ProjectName>BC2D-POS</ProjectName>
|
||||
<ProjectLocation>C:/Users/ForgotDoge/Desktop/BC2024/firmware</ProjectLocation>
|
||||
<ToolchainIDE>MDK_V5</ToolchainIDE>
|
||||
<KeepUserCode>true</KeepUserCode>
|
||||
@@ -31,7 +31,7 @@
|
||||
"titleBar.activeForeground": "#FAFAFE"
|
||||
},
|
||||
"EIDE.OpenOCD.ExePath": "D:/Program Files (x86)/at32_OpenOCD_V2.0.2/bin/openocd.exe",
|
||||
"cortex-debug.variableUseNaturalFormat": true
|
||||
"cortex-debug.variableUseNaturalFormat": false
|
||||
},
|
||||
"extensions": {
|
||||
}
|
||||
211
app/by_motion.c
211
app/by_motion.c
@@ -8,76 +8,151 @@
|
||||
#define DRV_ENABLE() gpio_bits_set(GPIOB, GPIO_PINS_15)
|
||||
#define DRV_DISABLE() gpio_bits_reset(GPIOB, GPIO_PINS_15)
|
||||
|
||||
#define MU (2.854f) // speed = \mu * speed_in_pulse
|
||||
|
||||
by_motor_param param_m1;
|
||||
by_motor_param param_m2;
|
||||
PID_TypeDef pid_m1;
|
||||
PID_TypeDef pid_m2;
|
||||
uint8_t motion_enable_flag;
|
||||
uint8_t motion_busy_flag;
|
||||
uint8_t motion_reset_flag;
|
||||
int16_t time_via;
|
||||
float position_abs;
|
||||
|
||||
void by_motion_set_pwm_m1(int32_t pwm_duty)
|
||||
{
|
||||
pwm_duty = clip_s32(pwm_duty, -449, 449); // 不可以拉满哦
|
||||
pwm_duty = clip_s32(pwm_duty, -440, 440); // 不可以拉满哦
|
||||
pwm_duty += 499;
|
||||
|
||||
// 互补 pwm 输出,499 为中值
|
||||
tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_1, pwm_duty);
|
||||
}
|
||||
|
||||
void by_motion_set_pwm_m2(int32_t pwm_duty)
|
||||
{
|
||||
pwm_duty = clip_s32(pwm_duty, -449, 449); // 不可以拉满哦
|
||||
pwm_duty += 499;
|
||||
// void by_motion_set_pwm_m2(int32_t pwm_duty)
|
||||
// {
|
||||
// pwm_duty = clip_s32(pwm_duty, -440, 440); // 不可以拉满哦
|
||||
// pwm_duty += 499;
|
||||
|
||||
// 互补 pwm 输出,499 为中值
|
||||
tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_2, pwm_duty);
|
||||
}
|
||||
// // 互补 pwm 输出,499 为中值
|
||||
// tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_2, pwm_duty);
|
||||
// }
|
||||
|
||||
int16_t by_motion_get_speed_m1(void)
|
||||
{
|
||||
#define alpha (0.1f)
|
||||
static float last_speed = 0.0f;
|
||||
param_m1.real_speed = alpha * last_speed + (1.0f - alpha) * (float)(-1 * (int16_t)tmr_counter_value_get(TMR2));
|
||||
last_speed = param_m1.real_speed;
|
||||
param_m1.real_speed = alpha * last_speed + (1.0f - alpha) * (float)(+1 * (int16_t)tmr_counter_value_get(TMR2));
|
||||
last_speed = param_m1.real_speed;
|
||||
tmr_counter_value_set(TMR2, 0);
|
||||
return (int16_t)param_m1.real_speed;
|
||||
#undef alpha
|
||||
}
|
||||
|
||||
int16_t by_motion_get_speed_m2(void)
|
||||
{
|
||||
#define alpha (0.1f)
|
||||
static float last_speed = 0.0f;
|
||||
param_m2.real_speed = alpha * last_speed + (1.0f - alpha) * (float)(-1 * (int16_t)tmr_counter_value_get(TMR3));
|
||||
last_speed = param_m2.real_speed;
|
||||
tmr_counter_value_set(TMR3, 0);
|
||||
return (int16_t)param_m2.real_speed;
|
||||
#undef alpha
|
||||
}
|
||||
// int16_t by_motion_get_speed_m2(void)
|
||||
// {
|
||||
// #define alpha (0.1f)
|
||||
// static float last_speed = 0.0f;
|
||||
// param_m2.real_speed = alpha * last_speed + (1.0f - alpha) * (float)(-1 * (int16_t)tmr_counter_value_get(TMR3));
|
||||
// last_speed = param_m2.real_speed;
|
||||
// tmr_counter_value_set(TMR3, 0);
|
||||
// return (int16_t)param_m2.real_speed;
|
||||
// #undef alpha
|
||||
// }
|
||||
|
||||
void by_motion_set_speed_m1(int16_t speed)
|
||||
{
|
||||
param_m1.target_speed = speed;
|
||||
}
|
||||
|
||||
void by_motion_set_speed_m2(int16_t speed)
|
||||
// void by_motion_set_speed_m2(int16_t speed)
|
||||
// {
|
||||
// param_m2.target_speed = speed;
|
||||
// }
|
||||
|
||||
void by_motion_set_distance(float distance, int16_t speed)
|
||||
{
|
||||
param_m2.target_speed = speed;
|
||||
// TODO 验证距离是否超限
|
||||
if (motion_busy_flag) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (speed < 0) {
|
||||
speed = -speed;
|
||||
}
|
||||
|
||||
position_abs += distance;
|
||||
|
||||
if (distance < 0.0f) {
|
||||
by_motion_set_speed_m1(-1 * speed);
|
||||
distance = -distance;
|
||||
} else {
|
||||
by_motion_set_speed_m1(speed);
|
||||
}
|
||||
|
||||
motion_busy_flag = 1;
|
||||
time_via = (int16_t)(distance * 50.0f / ((float)speed * MU)); // 控制频率为 50Hz,控制值单位为 s
|
||||
// lwprintf("time_via = %d\r\n", time_via);
|
||||
LOGD("position_abs = %f\r\n", position_abs);
|
||||
}
|
||||
|
||||
void by_motion_set_distance2(float distance, int16_t speed)
|
||||
{
|
||||
// TODO 验证距离是否超限
|
||||
if (motion_busy_flag) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (speed < 0) {
|
||||
speed = -speed;
|
||||
}
|
||||
|
||||
if (distance < 0.0f) {
|
||||
distance = -distance;
|
||||
}
|
||||
|
||||
distance = distance - position_abs;
|
||||
position_abs += distance;
|
||||
|
||||
if (5.0 >= position_abs) {
|
||||
position_abs = 0;
|
||||
by_motion_set_speed_m1(-10);
|
||||
motion_busy_flag = 1;
|
||||
motion_reset_flag = 1;
|
||||
LOGD("RESET position_abs = %f\r\n", position_abs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (distance < 0.0f) {
|
||||
distance = -distance;
|
||||
by_motion_set_speed_m1(-1 * speed);
|
||||
} else {
|
||||
by_motion_set_speed_m1(speed);
|
||||
}
|
||||
|
||||
motion_busy_flag = 1;
|
||||
time_via = (int16_t)(distance * 50.0f / ((float)speed * MU)); // 控制频率为 50Hz,控制值单位为 s
|
||||
LOGD("position_abs = %f\r\n", position_abs);
|
||||
// lwprintf("time_via = %d\r\n", time_via);
|
||||
}
|
||||
|
||||
void by_motion_init(void)
|
||||
{
|
||||
motion_enable_flag = 0;
|
||||
motion_busy_flag = 0;
|
||||
time_via = 0;
|
||||
position_abs = 0.0f; // TODO 待添加复位操作
|
||||
|
||||
by_motion_set_pwm_m1(0);
|
||||
by_motion_set_pwm_m2(0);
|
||||
// by_motion_set_pwm_m2(0);
|
||||
|
||||
/* set default parameters */
|
||||
param_m1.Kp = BY_MOTION_DEFAULT_KP_M1;
|
||||
param_m1.Ki = BY_MOTION_DEFAULT_KI_M1;
|
||||
param_m1.Kd = BY_MOTION_DEFAULT_KD_M1;
|
||||
param_m2.Kp = BY_MOTION_DEFAULT_KP_M2;
|
||||
param_m2.Ki = BY_MOTION_DEFAULT_KI_M2;
|
||||
param_m2.Kd = BY_MOTION_DEFAULT_KD_M2;
|
||||
// param_m2.Kp = BY_MOTION_DEFAULT_KP_M2;
|
||||
// param_m2.Ki = BY_MOTION_DEFAULT_KI_M2;
|
||||
// param_m2.Kd = BY_MOTION_DEFAULT_KD_M2;
|
||||
|
||||
/* load parameters form ee */
|
||||
// TODO
|
||||
@@ -87,47 +162,91 @@ void by_motion_init(void)
|
||||
PID_SetSampleTime(&pid_m1, 10);
|
||||
PID_SetOutputLimits(&pid_m1, -400, 400);
|
||||
|
||||
PID(&pid_m2, ¶m_m2.real_speed, ¶m_m2.out_pwm, ¶m_m2.target_speed, param_m2.Kp, param_m2.Ki, param_m2.Kd, _PID_P_ON_E, _PID_CD_DIRECT);
|
||||
PID_SetMode(&pid_m2, _PID_MODE_AUTOMATIC);
|
||||
PID_SetSampleTime(&pid_m2, 10);
|
||||
PID_SetOutputLimits(&pid_m2, -400, 400);
|
||||
// PID(&pid_m2, ¶m_m2.real_speed, ¶m_m2.out_pwm, ¶m_m2.target_speed, param_m2.Kp, param_m2.Ki, param_m2.Kd, _PID_P_ON_E, _PID_CD_DIRECT);
|
||||
// PID_SetMode(&pid_m2, _PID_MODE_AUTOMATIC);
|
||||
// PID_SetSampleTime(&pid_m2, 10);
|
||||
// PID_SetOutputLimits(&pid_m2, -400, 400);
|
||||
|
||||
motion_enable_flag = 1;
|
||||
DRV_ENABLE();
|
||||
|
||||
// 上电回零
|
||||
by_motion_set_speed_m1(-10);
|
||||
while (SET == gpio_input_data_bit_read(GPIOB, GPIO_PINS_3)) {
|
||||
// 等待复位
|
||||
}
|
||||
by_motion_set_speed_m1(0);
|
||||
}
|
||||
|
||||
void by_motion_run(void)
|
||||
{
|
||||
if (motion_enable_flag) {
|
||||
by_motion_get_speed_m1();
|
||||
by_motion_get_speed_m2();
|
||||
// by_motion_get_speed_m2();
|
||||
|
||||
PID_Compute(&pid_m1);
|
||||
PID_Compute(&pid_m2);
|
||||
// PID_Compute(&pid_m2);
|
||||
|
||||
by_motion_set_pwm_m1((int32_t)param_m1.out_pwm);
|
||||
by_motion_set_pwm_m2((int32_t)param_m2.out_pwm);
|
||||
// by_motion_set_pwm_m2((int32_t)param_m2.out_pwm);
|
||||
}
|
||||
}
|
||||
|
||||
void by_motion_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len)
|
||||
{
|
||||
#define BC2D_MODEL1
|
||||
|
||||
if (0x01 == stdd_id) {
|
||||
#if defined(BC2D_MODEL1)
|
||||
int16_t speed_m1_temp = (int16_t)(data[0] | (data[1] << 8));
|
||||
int16_t speed_m2_temp = (int16_t)(data[2] | (data[3] << 8));
|
||||
by_motion_set_speed_m1(speed_m1_temp);
|
||||
by_motion_set_speed_m2(speed_m2_temp);
|
||||
#elif defined(BC2D_MODEL2)
|
||||
int16_t speed_m1_temp = (int16_t)(data[4] | (data[5] << 8));
|
||||
int16_t speed_m2_temp = (int16_t)(data[6] | (data[7] << 8));
|
||||
by_motion_set_speed_m1(speed_m1_temp);
|
||||
by_motion_set_speed_m2(speed_m2_temp);
|
||||
#endif
|
||||
if (0x08 == stdd_id) {
|
||||
uint8_t mode = data[0];
|
||||
int16_t speed = (int16_t)data[1];
|
||||
// float distance = (float)(data[2] | (data[3] << 8) | (data[4] << 16) | (data[5] << 24));
|
||||
float distance;
|
||||
memcpy(&distance, &data[2], 4);
|
||||
if (0 == mode) {
|
||||
by_motion_set_distance2(distance, speed);
|
||||
} else if (1 == mode) {
|
||||
by_motion_set_distance(distance, speed);
|
||||
}
|
||||
}
|
||||
|
||||
// #define BC2D_MODEL1
|
||||
|
||||
// if (0x01 == stdd_id) {
|
||||
// #if defined(BC2D_MODEL1)
|
||||
// int16_t speed_m1_temp = (int16_t)(data[0] | (data[1] << 8));
|
||||
// int16_t speed_m2_temp = (int16_t)(data[2] | (data[3] << 8));
|
||||
// by_motion_set_speed_m1(speed_m1_temp);
|
||||
// by_motion_set_speed_m2(speed_m2_temp);
|
||||
// #elif defined(BC2D_MODEL2)
|
||||
// int16_t speed_m1_temp = (int16_t)(data[4] | (data[5] << 8));
|
||||
// int16_t speed_m2_temp = (int16_t)(data[6] | (data[7] << 8));
|
||||
// by_motion_set_speed_m1(speed_m1_temp);
|
||||
// by_motion_set_speed_m2(speed_m2_temp);
|
||||
// #endif
|
||||
// }
|
||||
|
||||
LOGD("m1:%f,%f,%f", param_m1.real_speed, param_m1.target_speed, param_m1.out_pwm);
|
||||
LOGD("m2:%f,%f,%f", param_m2.real_speed, param_m2.target_speed, param_m2.out_pwm);
|
||||
}
|
||||
|
||||
void by_motion_tmr_handle(void)
|
||||
{
|
||||
if (!motion_busy_flag) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (motion_reset_flag) {
|
||||
if (!gpio_input_data_bit_read(GPIOB, GPIO_PINS_3)) {
|
||||
motion_reset_flag = 0;
|
||||
motion_busy_flag = 0;
|
||||
by_motion_set_speed_m1(0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (time_via > 0) {
|
||||
time_via--;
|
||||
} else {
|
||||
by_motion_set_speed_m1(0);
|
||||
motion_busy_flag = 0;
|
||||
}
|
||||
}
|
||||
@@ -12,9 +12,9 @@ typedef struct by_motor_param {
|
||||
float out_pwm;
|
||||
} by_motor_param;
|
||||
|
||||
#define BY_MOTION_DEFAULT_KP_M1 (5.0f)
|
||||
#define BY_MOTION_DEFAULT_KI_M1 (100.0f)
|
||||
#define BY_MOTION_DEFAULT_KD_M1 (0.0f)
|
||||
#define BY_MOTION_DEFAULT_KP_M1 (10.0f)
|
||||
#define BY_MOTION_DEFAULT_KI_M1 (80.0f)
|
||||
#define BY_MOTION_DEFAULT_KD_M1 (0.08f)
|
||||
#define BY_MOTION_DEFAULT_KP_M2 (5.0f)
|
||||
#define BY_MOTION_DEFAULT_KI_M2 (100.0f)
|
||||
#define BY_MOTION_DEFAULT_KD_M2 (0.0f)
|
||||
@@ -28,6 +28,7 @@ extern int16_t by_motion_get_speed_m2(void);
|
||||
extern void by_motion_set_speed_m1(int16_t speed);
|
||||
extern void by_motion_set_speed_m2(int16_t speed);
|
||||
extern void by_motion_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len);
|
||||
extern void by_motion_tmr_handle(void);
|
||||
|
||||
extern by_motor_param param_m1;
|
||||
extern by_motor_param param_m2;
|
||||
|
||||
@@ -55,6 +55,65 @@ extern "C" {
|
||||
|
||||
/* add user code end exported macro */
|
||||
|
||||
/* add user code begin dma define */
|
||||
/* user can only modify the dma define value */
|
||||
//#define DMA1_CHANNEL1_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL1_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL1_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL2_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL2_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL2_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL3_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL3_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL3_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL4_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL4_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL4_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL5_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL5_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL5_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL6_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL6_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL6_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL7_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL7_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL7_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL1_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL1_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL1_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL2_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL2_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL2_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL3_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL3_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL3_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL4_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL4_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL4_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL5_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL5_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL5_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL6_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL6_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL6_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL7_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL7_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL7_PERIPHERAL_BASE_ADDR 0
|
||||
/* add user code end dma define */
|
||||
|
||||
/* exported functions ------------------------------------------------------- */
|
||||
/* system clock config. */
|
||||
void wk_system_clock_config(void);
|
||||
|
||||
@@ -237,6 +237,7 @@ void TMR4_GLOBAL_IRQHandler(void)
|
||||
/* add user code begin TMR4_GLOBAL_IRQ 0 */
|
||||
if (SET == tmr_interrupt_flag_get(TMR4, TMR_OVF_FLAG)) {
|
||||
by_motion_run();
|
||||
by_motion_tmr_handle();
|
||||
tmr_flag_clear(TMR4, TMR_OVF_FLAG);
|
||||
}
|
||||
/* add user code end TMR4_GLOBAL_IRQ 0 */
|
||||
|
||||
@@ -461,16 +461,16 @@ void wk_tmr2_init(void)
|
||||
tmr_input_struct.input_channel_select = TMR_SELECT_CHANNEL_1;
|
||||
tmr_input_struct.input_mapped_select = TMR_CC_CHANNEL_MAPPED_DIRECT;
|
||||
tmr_input_struct.input_polarity_select = TMR_INPUT_RISING_EDGE;
|
||||
tmr_input_struct.input_filter_value = 0;
|
||||
tmr_input_struct.input_filter_value = 7;
|
||||
tmr_input_channel_init(TMR2, &tmr_input_struct, TMR_CHANNEL_INPUT_DIV_1);
|
||||
|
||||
tmr_input_struct.input_channel_select = TMR_SELECT_CHANNEL_2;
|
||||
tmr_input_struct.input_mapped_select = TMR_CC_CHANNEL_MAPPED_DIRECT;
|
||||
tmr_input_struct.input_polarity_select = TMR_INPUT_RISING_EDGE;
|
||||
tmr_input_struct.input_filter_value = 0;
|
||||
tmr_input_struct.input_filter_value = 7;
|
||||
tmr_input_channel_init(TMR2, &tmr_input_struct, TMR_CHANNEL_INPUT_DIV_1);
|
||||
|
||||
tmr_encoder_mode_config(TMR2, TMR_ENCODER_MODE_A, TMR_INPUT_RISING_EDGE, TMR_INPUT_RISING_EDGE);
|
||||
tmr_encoder_mode_config(TMR2, TMR_ENCODER_MODE_B, TMR_INPUT_RISING_EDGE, TMR_INPUT_RISING_EDGE);
|
||||
|
||||
tmr_counter_enable(TMR2, TRUE);
|
||||
|
||||
@@ -564,7 +564,7 @@ void wk_tmr4_init(void)
|
||||
/* add user code end tmr4_init 1 */
|
||||
|
||||
/* configure counter settings */
|
||||
tmr_base_init(TMR4, 1999, 999);
|
||||
tmr_base_init(TMR4, 1999, 1999);
|
||||
tmr_cnt_dir_set(TMR4, TMR_COUNT_UP);
|
||||
tmr_clock_source_div_set(TMR4, TMR_CLOCK_DIV1);
|
||||
tmr_period_buffer_enable(TMR4, FALSE);
|
||||
|
||||
@@ -68,10 +68,10 @@
|
||||
/* add user code end 0 */
|
||||
|
||||
/**
|
||||
* @brief main function.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief main function.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
/* add user code begin 1 */
|
||||
@@ -124,8 +124,12 @@ int main(void)
|
||||
LOGI("init done");
|
||||
/* add user code end 2 */
|
||||
|
||||
while (1) {
|
||||
while(1)
|
||||
{
|
||||
/* add user code begin 3 */
|
||||
// lwprintf("pwm value: %f\r\n", param_m1.out_pwm);
|
||||
// lwprintf("mot speed: %f\r\n", param_m1.real_speed);
|
||||
// lwprintf("%f,%f,%f\r\n", param_m1.real_speed, param_m1.target_speed, param_m1.out_pwm);
|
||||
/* add user code end 3 */
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user