瀏覽代碼

修改绝对模式的逻辑,但对于绝对模式的计数存在一些问题。

master
Chiri 1 月之前
父節點
當前提交
faca7df92a
共有 9 個文件被更改,包括 822 次插入804 次删除
  1. +2
    -2
      Core/Src/gpio.c
  2. +10
    -11
      Core/Src/main.c
  3. +35
    -27
      Core/Src/stm32f4xx_it.c
  4. +723
    -723
      EWARM/PLSR.dep
  5. +17
    -16
      EWARM/settings/PLSR.dbgdt
  6. +3
    -1
      EWARM/settings/PLSR.dnx
  7. +7
    -7
      EWARM/settings/Project.wsdt
  8. +18
    -11
      Hardware/PLSR.c
  9. +7
    -6
      PLSR.ioc

+ 2
- 2
Core/Src/gpio.c 查看文件

@@ -64,13 +64,13 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = X5_Pin; GPIO_InitStruct.Pin = X5_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(X5_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(X5_GPIO_Port, &GPIO_InitStruct);


/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = X4_Pin; GPIO_InitStruct.Pin = X4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(X4_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(X4_GPIO_Port, &GPIO_InitStruct);


} }


+ 10
- 11
Core/Src/main.c 查看文件

@@ -160,14 +160,14 @@ int main(void)
CPU_CRITICAL_ENTER();///进入临界区 CPU_CRITICAL_ENTER();///进入临界区
/* 任务1 */ /* 任务1 */
OSTaskCreate((OS_TCB * )&Y1Direction_Tsk, /* 任务控制块 */
(CPU_CHAR* )"Y1Direction", /* 任务名字 */
(OS_TASK_PTR)Y1Direction, /* 任务函数 */
(void * )0, /* 传递给任务函数的参数 */
(OS_PRIO )TASK_Y1Direction, /* 任务优先级 */
(CPU_STK * )&Task_Y1Direction_STK[0], /* 任务堆栈基地址 */
OSTaskCreate((OS_TCB * )&Y1Direction_Tsk, /* 任务控制块 */
(CPU_CHAR* )"Y1Direction", /* 任务名字 */
(OS_TASK_PTR)Y1Direction, /* 任务函数 */
(void * )0, /* 传递给任务函数的参数 */
(OS_PRIO )TASK_Y1Direction, /* 任务优先级 */
(CPU_STK * )&Task_Y1Direction_STK[0], /* 任务堆栈基地址 */
(CPU_STK_SIZE)Task_Y1Direction_SIZE/10, /* 任务堆栈深度限位 */ (CPU_STK_SIZE)Task_Y1Direction_SIZE/10, /* 任务堆栈深度限位 */
(CPU_STK_SIZE)Task_Y1Direction_SIZE, /* 任务堆栈大小 */
(CPU_STK_SIZE)Task_Y1Direction_SIZE, /* 任务堆栈大小 */
(OS_MSG_QTY)0, /* 任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息 */ (OS_MSG_QTY)0, /* 任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息 */
(OS_TICK )0, /* 当使能时间片轮转时的时间片长度,为0时为默认长度 */ (OS_TICK )0, /* 当使能时间片轮转时的时间片长度,为0时为默认长度 */
(void * )0, /* 用户补充的存储区 */ (void * )0, /* 用户补充的存储区 */
@@ -425,8 +425,7 @@ void PulseGetCount(void *p_arg)
{ {
Options.Dir = 0; Options.Dir = 0;
} }
if(TIM2->CNT != 0)
if (TIM2->CNT != 0)
{ {
if (Options.Dir == 1) if (Options.Dir == 1)
{ {
@@ -466,10 +465,10 @@ void EXTSet(void *p_arg)
X4_Sta = 1; X4_Sta = 1;
} }
} }
if(HAL_GPIO_ReadPin(GPIOB, X5_Pin) == GPIO_PIN_RESET)
if(HAL_GPIO_ReadPin(GPIOG, X5_Pin) == GPIO_PIN_SET)
{ {
OSTimeDly(10, OS_OPT_TIME_DLY, &err); OSTimeDly(10, OS_OPT_TIME_DLY, &err);
if(HAL_GPIO_ReadPin(GPIOB, X5_Pin) == GPIO_PIN_RESET)
if(HAL_GPIO_ReadPin(GPIOG, X5_Pin) == GPIO_PIN_SET)
{ {
X5_Sta = 1; X5_Sta = 1;
} }


+ 35
- 27
Core/Src/stm32f4xx_it.c 查看文件

@@ -219,18 +219,17 @@ void TIM2_IRQHandler(void)
/* USER CODE BEGIN TIM2_IRQn 1 */ /* USER CODE BEGIN TIM2_IRQn 1 */
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE);
//HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
TIM2->CNT = 0; TIM2->CNT = 0;
PulseNum ++; /* 脉冲段数增加 */ PulseNum ++; /* 脉冲段数增加 */


if (Options.RunMod == 0)
if (Options.RunMod == 0) /* 相对模式 */
{ {
/* 如果之后还有脉冲 */ /* 如果之后还有脉冲 */
if(Options.AllPulse - PulseNum > 0) if(Options.AllPulse - PulseNum > 0)
{ {
PrePulse = NowPulse; /* 保存之前的脉冲段 */ PrePulse = NowPulse; /* 保存之前的脉冲段 */
if(PulseOutput[NowPulse].NextPulse == 0)
if (PulseOutput[NowPulse].NextPulse == 0)
{ {
NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ NowPulse = NowPulse + 1; /* 进入下一段脉冲 */
} }
@@ -263,20 +262,22 @@ void TIM2_IRQHandler(void)
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
} }
} }
if(Options.RunMod == 1)
if (Options.RunMod == 1) /* 绝对模式 */
{ {
if(AllPulseCNT >= MAX_Pulse)
{
PulseCount = 0;
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
}
else
/* 如果之后还有脉冲 */
if (Options.AllPulse - PulseNum > 0)
{ {
/* 如果之后还有脉冲 */
if(Options.AllPulse - PulseNum > 0)
if (TIM2->ARR < PulseOutput[PulseOutput[NowPulse].NextPulse].PulseCount) /* 如果已经达到了设定的最大脉冲数 */
{
PulseCount = 0;
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
}
else
{ {
PrePulse = NowPulse; /* 保存之前的脉冲段 */ PrePulse = NowPulse; /* 保存之前的脉冲段 */
if(PulseOutput[NowPulse].NextPulse == 0)
if (PulseOutput[NowPulse].NextPulse == 0)
{ {
NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ NowPulse = NowPulse + 1; /* 进入下一段脉冲 */
} }
@@ -284,24 +285,31 @@ void TIM2_IRQHandler(void)
{ {
NowPulse = PulseOutput[NowPulse].NextPulse - 1; /* 进入下一段脉冲 */ NowPulse = PulseOutput[NowPulse].NextPulse - 1; /* 进入下一段脉冲 */
} }
/* 准备加减速 */ /* 准备加减速 */
Acc = GetAcc(PulseOutput[PrePulse].Frequency,
PulseOutput[NowPulse].Frequency, Options.AccUpTime); /* 计算加速度 */
ArrFlag = 1;
SetNextPulse();/* 设置下一次进入中断的脉冲数 */
}
/* 如果之后没有脉冲 */
else
{
PulseCount = 0;
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
if (PulseOutput[PrePulse].Frequency <= PulseOutput[NowPulse].Frequency)
{
Acc = GetAcc(PulseOutput[PrePulse].Frequency,
PulseOutput[NowPulse].Frequency, Options.AccUpTime); /* 计算加速度 */
}
else
{
Acc = GetAcc(PulseOutput[PrePulse].Frequency,
PulseOutput[NowPulse].Frequency, Options.AccDownTime); /* 计算加速度 */
}
ArrFlag = 1;
SetNextPulse();/* 设置下一次进入中断的脉冲数 */
HAL_TIM_Base_Start_IT(&htim3); /* 启动定时器3和中断 */
} }

}
/* 如果之后没有脉冲 */
else
{
PulseCount = 0;
ArrFlag = 0;
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
} }
} }


/* USER CODE END TIM2_IRQn 1 */ /* USER CODE END TIM2_IRQn 1 */
} }




+ 723
- 723
EWARM/PLSR.dep
文件差異過大導致無法顯示
查看文件


+ 17
- 16
EWARM/settings/PLSR.dbgdt
文件差異過大導致無法顯示
查看文件


+ 3
- 1
EWARM/settings/PLSR.dnx 查看文件

@@ -20,7 +20,7 @@
<LeaveTargetRunning>_ 0</LeaveTargetRunning> <LeaveTargetRunning>_ 0</LeaveTargetRunning>
</StLinkDriver> </StLinkDriver>
<DebugChecksum> <DebugChecksum>
<Checksum>3780237782</Checksum>
<Checksum>1642237281</Checksum>
</DebugChecksum> </DebugChecksum>
<Exceptions> <Exceptions>
<StopOnUncaught>_ 0</StopOnUncaught> <StopOnUncaught>_ 0</StopOnUncaught>
@@ -59,6 +59,8 @@
<Registers> <Registers>
<regBase0>TIM2_CNT 10</regBase0> <regBase0>TIM2_CNT 10</regBase0>
<regBase1>TIM2_ARR 10</regBase1> <regBase1>TIM2_ARR 10</regBase1>
<regBase2>TIM10_CNT 10</regBase2>
<regBase3>TIM10_ARR 10</regBase3>
</Registers> </Registers>
<struct_types> <struct_types>
<Fmt0>Option-AccDownTime 3 0</Fmt0> <Fmt0>Option-AccDownTime 3 0</Fmt0>


+ 7
- 7
EWARM/settings/Project.wsdt
文件差異過大導致無法顯示
查看文件


+ 18
- 11
Hardware/PLSR.c 查看文件

@@ -32,7 +32,7 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency)
{ {
CalculatePSCARR(Frequency, 72000000, 65535, &psc, &arr); CalculatePSCARR(Frequency, 72000000, 65535, &psc, &arr);
//printf("Fre=%d,",Frequency); //printf("Fre=%d,",Frequency);
switch(SentPost)
switch (SentPost)
{ {
case 0: TIM10->ARR = arr, TIM10->PSC = psc, TIM10->CCR1 = arr / 2; break; case 0: TIM10->ARR = arr, TIM10->PSC = psc, TIM10->CCR1 = arr / 2; break;
case 1: TIM11->ARR = arr, TIM11->PSC = psc, TIM11->CCR1 = arr / 2; break; case 1: TIM11->ARR = arr, TIM11->PSC = psc, TIM11->CCR1 = arr / 2; break;
@@ -49,7 +49,7 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency)
*/ */
void PulseStart(void) void PulseStart(void)
{ {
if(PulseOutput[NowPulse].PulseCount >= 0)
if (PulseOutput[NowPulse].PulseCount >= 0)
{ {
TIM2->ARR = PulseOutput[NowPulse].PulseCount; TIM2->ARR = PulseOutput[NowPulse].PulseCount;
} }
@@ -87,7 +87,7 @@ float GetAcc(int32_t Start, int32_t End, int32_t AccCount)
*/ */
void MAXPulseSet(int32_t PulseCount) void MAXPulseSet(int32_t PulseCount)
{ {
if(NowPulse == 0)
if (NowPulse == 0)
{ {
NowMAXPulse = PulseOutput[NowPulse].PulseCount; NowMAXPulse = PulseOutput[NowPulse].PulseCount;
} }
@@ -103,11 +103,10 @@ void MAXPulseSet(int32_t PulseCount)
*/ */
void SetNextPulse(void) void SetNextPulse(void)
{ {
MAXPulseSet(PulseOutput[NowPulse].PulseCount); /* 更改结果脉冲数 */
if(Options.RunMod == 0) /* 如果是相对模式 */
int32_t temp;
if (Options.RunMod == 0) /* 如果是相对模式 */
{ {
if(PulseOutput[NowPulse].PulseCount > 0)
if (PulseOutput[NowPulse].PulseCount > 0)
{ {
TIM2->ARR = PulseOutput[NowPulse].PulseCount; TIM2->ARR = PulseOutput[NowPulse].PulseCount;
} }
@@ -117,15 +116,23 @@ void SetNextPulse(void)
} }
} }
else /* 如果是绝对模式 */
else if (Options.RunMod == 1)/* 如果是绝对模式 */
{ {
if(NowMAXPulse >= MAX_Pulse) /* 如果超出了上限 */
if (PulseOutput[NowPulse].PulseCount * PulseOutput[PrePulse].PulseCount >= 0)
{ {
TIM2->ARR = - (MAX_Pulse - NowMAXPulse);
temp = PulseOutput[NowPulse].PulseCount - PulseOutput[PrePulse].PulseCount;
} }
else else
{ {
TIM2->ARR = PulseOutput[NowPulse].PulseCount;
temp = PulseOutput[NowPulse].PulseCount + PulseOutput[PrePulse].PulseCount;
}
if(temp >= 0)
{
TIM2->ARR = temp;
}
else
{
TIM2->ARR = - temp;
} }
} }
} }


+ 7
- 6
PLSR.ioc 查看文件

@@ -103,7 +103,7 @@ PA9.Mode=Asynchronous
PA9.Signal=USART1_TX PA9.Signal=USART1_TX
PB5.GPIOParameters=GPIO_PuPd,GPIO_Label PB5.GPIOParameters=GPIO_PuPd,GPIO_Label
PB5.GPIO_Label=X4 PB5.GPIO_Label=X4
PB5.GPIO_PuPd=GPIO_PULLUP
PB5.GPIO_PuPd=GPIO_PULLDOWN
PB5.Locked=true PB5.Locked=true
PB5.Signal=GPIO_Input PB5.Signal=GPIO_Input
PF6.Locked=true PF6.Locked=true
@@ -116,7 +116,7 @@ PF9.Locked=true
PF9.Signal=S_TIM14_CH1 PF9.Signal=S_TIM14_CH1
PG12.GPIOParameters=GPIO_PuPd,GPIO_Label PG12.GPIOParameters=GPIO_PuPd,GPIO_Label
PG12.GPIO_Label=X5 PG12.GPIO_Label=X5
PG12.GPIO_PuPd=GPIO_PULLUP
PG12.GPIO_PuPd=GPIO_PULLDOWN
PG12.Locked=true PG12.Locked=true
PG12.Signal=GPIO_Input PG12.Signal=GPIO_Input
PH0-OSC_IN.Mode=HSE-External-Oscillator PH0-OSC_IN.Mode=HSE-External-Oscillator
@@ -168,7 +168,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=EWARM V8 ProjectManager.TargetToolchain=EWARM V8
ProjectManager.ToolChainLocation= ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM10_Init-TIM10-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM11_Init-TIM11-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,9-MX_TIM14_Init-TIM14-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM10_Init-TIM10-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM11_Init-TIM11-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,9-MX_TIM14_Init-TIM14-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true
RCC.48MHZClocksFreq_Value=36000000 RCC.48MHZClocksFreq_Value=36000000
RCC.AHBFreq_Value=72000000 RCC.AHBFreq_Value=72000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2 RCC.APB1CLKDivider=RCC_HCLK_DIV2
@@ -216,10 +216,11 @@ SH.S_TIM2_CH1_ETR.0=TIM2_ETR,ClockSourceETR_Mode2
SH.S_TIM2_CH1_ETR.ConfNb=1 SH.S_TIM2_CH1_ETR.ConfNb=1
TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM10.Channel=TIM_CHANNEL_1 TIM10.Channel=TIM_CHANNEL_1
TIM10.IPParameters=Channel,Prescaler,AutoReloadPreload,Pulse,OCPolarity_1
TIM10.IPParameters=Channel,Prescaler,AutoReloadPreload,Pulse,OCPolarity_1,Period
TIM10.OCPolarity_1=TIM_OCPOLARITY_LOW TIM10.OCPolarity_1=TIM_OCPOLARITY_LOW
TIM10.Prescaler=72
TIM10.Pulse=32767
TIM10.Period=1
TIM10.Prescaler=1
TIM10.Pulse=0
TIM11.Channel=TIM_CHANNEL_1 TIM11.Channel=TIM_CHANNEL_1
TIM11.IPParameters=Channel TIM11.IPParameters=Channel
TIM13.Channel=TIM_CHANNEL_1 TIM13.Channel=TIM_CHANNEL_1


Loading…
取消
儲存