Selaa lähdekoodia

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

master
Chiri 1 kuukausi sitten
vanhempi
commit
faca7df92a
9 muutettua tiedostoa jossa 822 lisäystä ja 804 poistoa
  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 Näytä tiedosto

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

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

}


+ 10
- 11
Core/Src/main.c Näytä tiedosto

@@ -160,14 +160,14 @@ int main(void)
CPU_CRITICAL_ENTER();///进入临界区
/* 任务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, /* 任务堆栈大小 */
(CPU_STK_SIZE)Task_Y1Direction_SIZE, /* 任务堆栈大小 */
(OS_MSG_QTY)0, /* 任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息 */
(OS_TICK )0, /* 当使能时间片轮转时的时间片长度,为0时为默认长度 */
(void * )0, /* 用户补充的存储区 */
@@ -425,8 +425,7 @@ void PulseGetCount(void *p_arg)
{
Options.Dir = 0;
}
if(TIM2->CNT != 0)
if (TIM2->CNT != 0)
{
if (Options.Dir == 1)
{
@@ -466,10 +465,10 @@ void EXTSet(void *p_arg)
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);
if(HAL_GPIO_ReadPin(GPIOB, X5_Pin) == GPIO_PIN_RESET)
if(HAL_GPIO_ReadPin(GPIOG, X5_Pin) == GPIO_PIN_SET)
{
X5_Sta = 1;
}


+ 35
- 27
Core/Src/stm32f4xx_it.c Näytä tiedosto

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

if (Options.RunMod == 0)
if (Options.RunMod == 0) /* 相对模式 */
{
/* 如果之后还有脉冲 */
if(Options.AllPulse - PulseNum > 0)
{
PrePulse = NowPulse; /* 保存之前的脉冲段 */
if(PulseOutput[NowPulse].NextPulse == 0)
if (PulseOutput[NowPulse].NextPulse == 0)
{
NowPulse = NowPulse + 1; /* 进入下一段脉冲 */
}
@@ -263,20 +262,22 @@ void TIM2_IRQHandler(void)
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; /* 保存之前的脉冲段 */
if(PulseOutput[NowPulse].NextPulse == 0)
if (PulseOutput[NowPulse].NextPulse == 0)
{
NowPulse = NowPulse + 1; /* 进入下一段脉冲 */
}
@@ -284,24 +285,31 @@ void TIM2_IRQHandler(void)
{
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 */
}



+ 723
- 723
EWARM/PLSR.dep
File diff suppressed because it is too large
Näytä tiedosto


+ 17
- 16
EWARM/settings/PLSR.dbgdt
File diff suppressed because it is too large
Näytä tiedosto


+ 3
- 1
EWARM/settings/PLSR.dnx Näytä tiedosto

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


+ 7
- 7
EWARM/settings/Project.wsdt
File diff suppressed because it is too large
Näytä tiedosto


+ 18
- 11
Hardware/PLSR.c Näytä tiedosto

@@ -32,7 +32,7 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency)
{
CalculatePSCARR(Frequency, 72000000, 65535, &psc, &arr);
//printf("Fre=%d,",Frequency);
switch(SentPost)
switch (SentPost)
{
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;
@@ -49,7 +49,7 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency)
*/
void PulseStart(void)
{
if(PulseOutput[NowPulse].PulseCount >= 0)
if (PulseOutput[NowPulse].PulseCount >= 0)
{
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)
{
if(NowPulse == 0)
if (NowPulse == 0)
{
NowMAXPulse = PulseOutput[NowPulse].PulseCount;
}
@@ -103,11 +103,10 @@ void MAXPulseSet(int32_t PulseCount)
*/
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;
}
@@ -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
{
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 Näytä tiedosto

@@ -103,7 +103,7 @@ PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PB5.GPIOParameters=GPIO_PuPd,GPIO_Label
PB5.GPIO_Label=X4
PB5.GPIO_PuPd=GPIO_PULLUP
PB5.GPIO_PuPd=GPIO_PULLDOWN
PB5.Locked=true
PB5.Signal=GPIO_Input
PF6.Locked=true
@@ -116,7 +116,7 @@ PF9.Locked=true
PF9.Signal=S_TIM14_CH1
PG12.GPIOParameters=GPIO_PuPd,GPIO_Label
PG12.GPIO_Label=X5
PG12.GPIO_PuPd=GPIO_PULLUP
PG12.GPIO_PuPd=GPIO_PULLDOWN
PG12.Locked=true
PG12.Signal=GPIO_Input
PH0-OSC_IN.Mode=HSE-External-Oscillator
@@ -168,7 +168,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=EWARM V8
ProjectManager.ToolChainLocation=
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.AHBFreq_Value=72000000
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
TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
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.Prescaler=72
TIM10.Pulse=32767
TIM10.Period=1
TIM10.Prescaler=1
TIM10.Pulse=0
TIM11.Channel=TIM_CHANNEL_1
TIM11.IPParameters=Channel
TIM13.Channel=TIM_CHANNEL_1


Ladataan…
Peruuta
Tallenna