Kaynağa Gözat

使用逻辑分析仪分析波形,频率验证通过,需完善加速过程。

master
Chiri 1 gün önce
ebeveyn
işleme
8f04a5e095
13 değiştirilmiş dosya ile 2438 ekleme ve 2161 silme
  1. +9
    -0
      Core/Inc/tim.h
  2. +71
    -151
      Core/Src/main.c
  3. +13
    -3
      Core/Src/stm32f4xx_it.c
  4. +255
    -1
      Core/Src/tim.c
  5. +618
    -613
      EWARM/PLSR.dep
  6. +1320
    -1319
      EWARM/PLSR.ewp
  7. +21
    -17
      EWARM/settings/PLSR.dbgdt
  8. +7
    -6
      EWARM/settings/PLSR.dnx
  9. +19
    -19
      EWARM/settings/Project.wsdt
  10. +44
    -13
      Hardware/PLSR.c
  11. +6
    -3
      Hardware/PLSR.h
  12. +1
    -1
      Hardware/PSCARR.c
  13. +54
    -15
      PLSR.ioc

+ 9
- 0
Core/Inc/tim.h Dosyayı Görüntüle

@@ -36,12 +36,21 @@ extern TIM_HandleTypeDef htim2;

extern TIM_HandleTypeDef htim10;

extern TIM_HandleTypeDef htim11;

extern TIM_HandleTypeDef htim13;

extern TIM_HandleTypeDef htim14;

/* USER CODE BEGIN Private defines */

/* USER CODE END Private defines */

void MX_TIM2_Init(void);
void MX_TIM10_Init(void);
void MX_TIM11_Init(void);
void MX_TIM13_Init(void);
void MX_TIM14_Init(void);

void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);



+ 71
- 151
Core/Src/main.c Dosyayı Görüntüle

@@ -113,7 +113,7 @@ int main(void)
HAL_Init();

/* USER CODE BEGIN Init */
PVD_Init();
/* USER CODE END Init */

/* Configure the system clock */
@@ -131,6 +131,9 @@ int main(void)
MX_USART1_UART_Init();
MX_TIM10_Init();
MX_TIM2_Init();
MX_TIM11_Init();
MX_TIM13_Init();
MX_TIM14_Init();
/* USER CODE BEGIN 2 */

@@ -267,41 +270,78 @@ void Y1Direction(void *p_arg)
while(1)
{
/* 脉冲加减速 */
/* 获取加减速所需要的脉冲数 */
GetAddCount();
/* 段切换时的脉冲加减速 */
if (ArrFlag == 1)
{
if(TIM2->CNT < Options.AccUpTime)
/* 脉冲加速 */
if (Acc > 0)
{
if (TIM2->CNT < AccUpCount)
{
SetFrequency(Options.SentPost, PulseOutput[PrePulse].Frequency + TIM2->CNT * Acc);
if (TIM2->CNT == 0) PulseStart(); /* 开始产生脉冲 */
}
else
{
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency);
ArrFlag = 0;
}
}
/* 脉冲减速 */
else if (Acc <= 0)
{
if (TIM2->CNT < AccDownCount)
{
SetFrequency(Options.SentPost, PulseOutput[PrePulse].Frequency + TIM2->CNT * Acc);
if(TIM2->CNT == 0) PulseStart(); /* 开始产生脉冲 */
}
else
{
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency);
ArrFlag = 0;
}
}
}
/* 最后一段脉冲的减速 */
if (NowPulse == Options.AllPulse - 1)
{
Acc = - (float)PulseOutput[NowPulse].Frequency / (float)AccDownCount;/* 计算加速度 */
if (TIM2->CNT > PulseOutput[NowPulse].PulseCount - AccUpCount - AccDownCount) /* 当达到脉冲减速的位置开始减速 */
{
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency + TIM2->CNT * Acc);
}
}
/* 第一段脉冲的加速 */
if (NowPulse == Options.StartPulse)
{
Acc = (float)PulseOutput[NowPulse].Frequency / (float)AccUpCount;/* 计算加速度 */
if (AccUpCount < PulseOutput[NowPulse].PulseCount)//如果能够完成加速
{
if(TIM2->CNT == 0) PulseStart(); /* 开始产生脉冲 */
SetFrequency(0, PulseOutput[PrePulse].Frequency + TIM2->CNT * Acc);
if(TIM2->CNT < AccUpCount)
{
SetFrequency(Options.SentPost, TIM2->CNT * Acc);
}
else
{
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency);
}
}
else
else //不能完成加速
{
SetFrequency(0, PulseOutput[NowPulse].Frequency);
ArrFlag = 0;
}
}
AllPulseCNT = BaseCNT + TIM2->CNT;
CountSave();
// /* 获取总的脉冲数 */
// if(EndFlag || FullFlag)
// {
// if(EndFlag)
// {
// AllPulseCNT = GetBase(NowPulse) + PulseOutput[NowPulse].PulseCount;
// }
// if(FullFlag)
// {
// AllPulseCNT = MAX_Pulse;
// }
//
// }
// else
// {
// AllPulseCNT = TIM2->CNT + GetBase(NowPulse);
// }
OSTimeDly(100, OS_OPT_TIME_DLY, &err); // 延时 100 个节拍
}
}
@@ -319,8 +359,11 @@ void PulseStartTsk(void *p_arg)
while(1)
{
PLSRPluseLoad(); //读取脉冲设置
PLSROptionLoad(); //读取脉冲基础设置
if(Register_L[0x3000] == 0x01 && EN == 1)
{
{
PulseStart();
EN = 0;
}
@@ -328,9 +371,9 @@ void PulseStartTsk(void *p_arg)
{
EN = 1;
}
PLSRPluseLoad(); //读取脉冲设置
PLSROptionLoad(); //读取脉冲基础设置

ModbusSaveSRAM();
OSTimeDly(100, OS_OPT_TIME_DLY, &err); // 延时 100 个节拍
}
}
@@ -397,129 +440,6 @@ void DirOutput(void *p_arg)
}
}

#if 0

/**
* @brief 定时器中断回调(PWM计数)
* @return 无
*/
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM10)
{
PulseCount++;
if (1 == Base.PulseMod) /* 如果是绝对模式 */
{
if (TIM2->CNT == Base.MAX_Pulse) /* 达到了最大脉冲数 */
{
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
}
else if(PulseCount == PulseOutput[NowPulse].PulseCount) /* 如果当前段的计数等于要求的计数 */
{
PulseCount = 0;
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
if(Base.PulseNum - NowPulse >= 1)
{
Base.PrePulse = NowPulse; /* 保存之前的脉冲段 */
if(PulseOutput[NowPulse].NextPulse == 0)
{
NowPulse = NowPulse+ 1;
}
else
{
NowPulse = PulseOutput[NowPulse].NextPulse; /* 进入下一段脉冲 */
}
Acc = GetAcc(PulseOutput[Base.PrePulse].Frequency,
PulseOutput[NowPulse].Frequency, Base.AccCount); /* 计算Acc */
ArrFlag = 1;
PulseStart(); //开始产生脉冲
}
}
}
else if (0 == Base.PulseMod) /* 如果是相对模式 */
{
if (PulseCount == PulseOutput[NowPulse].PulseCount) /* 如果当前段的计数等于要求的计数 */
{
PulseCount = 0;
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
if(Base.PulseNum - NowPulse > 1)
{
Base.PrePulse = NowPulse; /* 保存之前的脉冲段 */
if(PulseOutput[NowPulse].NextPulse == 0)
{
NowPulse = NowPulse+ 1;
}
else
{
NowPulse = PulseOutput[NowPulse].NextPulse; /* 进入下一段脉冲 */
}
Acc = GetAcc(PulseOutput[Base.PrePulse].Frequency,
PulseOutput[NowPulse].Frequency, Base.AccCount); /* 计算Acc */
ArrFlag = 1;
PulseStart(); //开始产生脉冲
}
else
{
PulseCount = 0;
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
}
}
}
if (ArrFlag == 1)
{
if(PulseCount < Base.AccCount)
{
SetFrequency(0, PulseOutput[Base.PrePulse].Frequency + PulseCount * Acc);
}
else
{
SetFrequency(0, PulseOutput[NowPulse].Frequency);
ArrFlag = 0;
}
}

}
}

#endif

/**
* @brief 掉电中断
* @return 无
*/
void HAL_PWR_PVDCallback(void)
{
OSIntEnter(); /* 进入中断 */
// 检查电压是否低于阈值
if (__HAL_PWR_GET_FLAG(PWR_FLAG_PVDO))
{
HAL_GPIO_TogglePin(GPIOH, Y12_Pin);
/* 掉电处理内容 */
ModbusSaveSRAM();
}
OSIntExit(); /* 退出中断 */
}

/**
* @brief PVD配置
* @return 无
*/
void PVD_Init(void)
{
PWR_PVDTypeDef PvdStruct;
HAL_PWR_EnablePVD(); /* 使能PVD */
PvdStruct.PVDLevel = PWR_PVDLEVEL_5; /* PVD阈值3.1V */
PvdStruct.Mode = PWR_PVD_MODE_IT_RISING; /* 检测掉电 */
HAL_PWR_ConfigPVD(&PvdStruct);
HAL_NVIC_SetPriority(PVD_IRQn, 0, 0); /* 配置PVD中断优先级 */
HAL_NVIC_EnableIRQ(PVD_IRQn); /* 使能PVD中断 */
}

/* USER CODE END 4 */

/**


+ 13
- 3
Core/Src/stm32f4xx_it.c Dosyayı Görüntüle

@@ -217,6 +217,7 @@ void TIM2_IRQHandler(void)
HAL_TIM_IRQHandler(&htim2);
/* USER CODE BEGIN TIM2_IRQn 1 */
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */
PulseNum ++; /* 脉冲段数增加 */
BaseCNT += TIM2->ARR;

@@ -236,10 +237,19 @@ void TIM2_IRQHandler(void)
}
/* 准备加减速 */
Acc = GetAcc(PulseOutput[PrePulse].Frequency,
PulseOutput[NowPulse].Frequency, Options.AccUpTime); /* 计算加速度 */
ArrFlag = 1;
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();/* 设置下一次进入中断的脉冲数 */
}


+ 255
- 1
Core/Src/tim.c Dosyayı Görüntüle

@@ -26,6 +26,9 @@

TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim10;
TIM_HandleTypeDef htim11;
TIM_HandleTypeDef htim13;
TIM_HandleTypeDef htim14;

/* TIM2 init function */
void MX_TIM2_Init(void)
@@ -118,6 +121,129 @@ void MX_TIM10_Init(void)
/* USER CODE END TIM10_Init 2 */
HAL_TIM_MspPostInit(&htim10);

}
/* TIM11 init function */
void MX_TIM11_Init(void)
{

/* USER CODE BEGIN TIM11_Init 0 */

/* USER CODE END TIM11_Init 0 */

TIM_OC_InitTypeDef sConfigOC = {0};

/* USER CODE BEGIN TIM11_Init 1 */

/* USER CODE END TIM11_Init 1 */
htim11.Instance = TIM11;
htim11.Init.Prescaler = 0;
htim11.Init.CounterMode = TIM_COUNTERMODE_UP;
htim11.Init.Period = 65535;
htim11.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim11.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim11) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim11) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim11, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM11_Init 2 */

/* USER CODE END TIM11_Init 2 */
HAL_TIM_MspPostInit(&htim11);

}
/* TIM13 init function */
void MX_TIM13_Init(void)
{

/* USER CODE BEGIN TIM13_Init 0 */

/* USER CODE END TIM13_Init 0 */

TIM_OC_InitTypeDef sConfigOC = {0};

/* USER CODE BEGIN TIM13_Init 1 */

/* USER CODE END TIM13_Init 1 */
htim13.Instance = TIM13;
htim13.Init.Prescaler = 0;
htim13.Init.CounterMode = TIM_COUNTERMODE_UP;
htim13.Init.Period = 65535;
htim13.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim13.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim13) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim13) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim13, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM13_Init 2 */

/* USER CODE END TIM13_Init 2 */
HAL_TIM_MspPostInit(&htim13);

}
/* TIM14 init function */
void MX_TIM14_Init(void)
{

/* USER CODE BEGIN TIM14_Init 0 */

/* USER CODE END TIM14_Init 0 */

TIM_OC_InitTypeDef sConfigOC = {0};

/* USER CODE BEGIN TIM14_Init 1 */

/* USER CODE END TIM14_Init 1 */
htim14.Instance = TIM14;
htim14.Init.Prescaler = 0;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
htim14.Init.Period = 65535;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim14) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim14, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM14_Init 2 */

/* USER CODE END TIM14_Init 2 */
HAL_TIM_MspPostInit(&htim14);

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
@@ -161,6 +287,39 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)

/* USER CODE END TIM10_MspInit 1 */
}
else if(tim_baseHandle->Instance==TIM11)
{
/* USER CODE BEGIN TIM11_MspInit 0 */

/* USER CODE END TIM11_MspInit 0 */
/* TIM11 clock enable */
__HAL_RCC_TIM11_CLK_ENABLE();
/* USER CODE BEGIN TIM11_MspInit 1 */

/* USER CODE END TIM11_MspInit 1 */
}
else if(tim_baseHandle->Instance==TIM13)
{
/* USER CODE BEGIN TIM13_MspInit 0 */

/* USER CODE END TIM13_MspInit 0 */
/* TIM13 clock enable */
__HAL_RCC_TIM13_CLK_ENABLE();
/* USER CODE BEGIN TIM13_MspInit 1 */

/* USER CODE END TIM13_MspInit 1 */
}
else if(tim_baseHandle->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspInit 0 */

/* USER CODE END TIM14_MspInit 0 */
/* TIM14 clock enable */
__HAL_RCC_TIM14_CLK_ENABLE();
/* USER CODE BEGIN TIM14_MspInit 1 */

/* USER CODE END TIM14_MspInit 1 */
}
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{
@@ -171,7 +330,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
/* USER CODE BEGIN TIM10_MspPostInit 0 */

/* USER CODE END TIM10_MspPostInit 0 */

__HAL_RCC_GPIOF_CLK_ENABLE();
/**TIM10 GPIO Configuration
PF6 ------> TIM10_CH1
@@ -187,6 +345,69 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
/* USER CODE END TIM10_MspPostInit 1 */
}
else if(timHandle->Instance==TIM11)
{
/* USER CODE BEGIN TIM11_MspPostInit 0 */

/* USER CODE END TIM11_MspPostInit 0 */

__HAL_RCC_GPIOF_CLK_ENABLE();
/**TIM11 GPIO Configuration
PF7 ------> TIM11_CH1
*/
GPIO_InitStruct.Pin = GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF3_TIM11;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

/* USER CODE BEGIN TIM11_MspPostInit 1 */

/* USER CODE END TIM11_MspPostInit 1 */
}
else if(timHandle->Instance==TIM13)
{
/* USER CODE BEGIN TIM13_MspPostInit 0 */

/* USER CODE END TIM13_MspPostInit 0 */

__HAL_RCC_GPIOF_CLK_ENABLE();
/**TIM13 GPIO Configuration
PF8 ------> TIM13_CH1
*/
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF9_TIM13;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

/* USER CODE BEGIN TIM13_MspPostInit 1 */

/* USER CODE END TIM13_MspPostInit 1 */
}
else if(timHandle->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspPostInit 0 */

/* USER CODE END TIM14_MspPostInit 0 */

__HAL_RCC_GPIOF_CLK_ENABLE();
/**TIM14 GPIO Configuration
PF9 ------> TIM14_CH1
*/
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF9_TIM14;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

/* USER CODE BEGIN TIM14_MspPostInit 1 */

/* USER CODE END TIM14_MspPostInit 1 */
}

}

@@ -223,6 +444,39 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)

/* USER CODE END TIM10_MspDeInit 1 */
}
else if(tim_baseHandle->Instance==TIM11)
{
/* USER CODE BEGIN TIM11_MspDeInit 0 */

/* USER CODE END TIM11_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM11_CLK_DISABLE();
/* USER CODE BEGIN TIM11_MspDeInit 1 */

/* USER CODE END TIM11_MspDeInit 1 */
}
else if(tim_baseHandle->Instance==TIM13)
{
/* USER CODE BEGIN TIM13_MspDeInit 0 */

/* USER CODE END TIM13_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM13_CLK_DISABLE();
/* USER CODE BEGIN TIM13_MspDeInit 1 */

/* USER CODE END TIM13_MspDeInit 1 */
}
else if(tim_baseHandle->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspDeInit 0 */

/* USER CODE END TIM14_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM14_CLK_DISABLE();
/* USER CODE BEGIN TIM14_MspDeInit 1 */

/* USER CODE END TIM14_MspDeInit 1 */
}
}

/* USER CODE BEGIN 1 */


+ 618
- 613
EWARM/PLSR.dep
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 1320
- 1319
EWARM/PLSR.ewp
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 21
- 17
EWARM/settings/PLSR.dbgdt
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 7
- 6
EWARM/settings/PLSR.dnx Dosyayı Görüntüle

@@ -20,7 +20,7 @@
<LeaveTargetRunning>_ 0</LeaveTargetRunning>
</StLinkDriver>
<DebugChecksum>
<Checksum>2315233233</Checksum>
<Checksum>3713707742</Checksum>
</DebugChecksum>
<Exceptions>
<StopOnUncaught>_ 0</StopOnUncaught>
@@ -60,11 +60,12 @@
<regBase0>TIM2_CNT 10</regBase0>
</Registers>
<struct_types>
<Fmt0>Option-AccUpTime 3 0</Fmt0>
<Fmt1>Option-InitSpeed 3 0</Fmt1>
<Fmt2>Pulse-Frequency 3 0</Fmt2>
<Fmt3>Pulse-NextPulse 3 0</Fmt3>
<Fmt4>Pulse-PulseCount 3 0</Fmt4>
<Fmt0>Option-AccDownTime 3 0</Fmt0>
<Fmt1>Option-AccUpTime 3 0</Fmt1>
<Fmt2>Option-InitSpeed 3 0</Fmt2>
<Fmt3>Pulse-Frequency 3 0</Fmt3>
<Fmt4>Pulse-NextPulse 3 0</Fmt4>
<Fmt5>Pulse-PulseCount 3 0</Fmt5>
</struct_types>
<array_types>
<Fmt0>uint8_t[10000] 4 0</Fmt0>


+ 19
- 19
EWARM/settings/Project.wsdt
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 44
- 13
Hardware/PLSR.c Dosyayı Görüntüle

@@ -14,14 +14,15 @@ uint8_t NowPulse; /*
uint8_t PrePulse; /* 之前处于第几段脉冲 */
uint8_t PulseNum; /* 一共有多少段脉冲 */
int32_t MAX_Pulse; /* 最多的脉冲数 */
int32_t AccCount; /* 加速脉冲数 */
int32_t AccUpCount; /* 加速脉冲数 */
int32_t AccDownCount; /* 减速脉冲数 */
int32_t NowMAXPulse; /* 当前要达到的总脉冲 */

int32_t PulseCount = 0;

/**
* @brief 根据脉冲的频率设置对应的PSC和ARR
* @param[in] SentPost 脉冲通道(目前只有通道Y0)
* @param[in] SentPost 脉冲通道
* @param[in] Ferquency 脉冲的频率
* @return 无
*/
@@ -31,6 +32,9 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency)
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;
case 2: TIM13->ARR = arr, TIM13->PSC = psc, TIM13->CCR1 = arr / 2; break;
case 3: TIM14->ARR = arr, TIM14->PSC = psc, TIM14->CCR1 = arr / 2; break;
}
}
@@ -66,11 +70,24 @@ void PulseBaseInit(uint8_t StartPulse, uint8_t PulseMod, int32_t MAX_Pulse)
MAX_Pulse = MAX_Pulse;
}

/**
* @brief 脉冲开始
* @param[in] StartPulse 起始脉冲段
* @return 无
*/
void PulseStart(void)
{
SetFrequency(Options.DirPost, PulseOutput[NowPulse].Frequency);
SetFrequency(Options.SentPost, PulseOutput[NowPulse].Frequency);
TIM2->ARR = PulseOutput[NowPulse].PulseCount;
HAL_TIM_PWM_Start_IT(&htim10, TIM_CHANNEL_1);
switch(Options.SentPost)
{
case 0: HAL_TIM_PWM_Start_IT(&htim10, TIM_CHANNEL_1); break;
case 1: HAL_TIM_PWM_Start_IT(&htim11, TIM_CHANNEL_1); break;
case 2: HAL_TIM_PWM_Start_IT(&htim13, TIM_CHANNEL_1); break;
case 3: HAL_TIM_PWM_Start_IT(&htim14, TIM_CHANNEL_1); break;
}
}
/**
* @brief 获取加速度
@@ -207,7 +224,7 @@ void PLSROptionLoad(void)
uint16_t tempH, tempL;
Set8_16(&tempH, &Register_H[0x1009], &Register_L[0x1009]);
Set8_16(&tempL, &Register_H[0x100A], &Register_L[0x100A]);
Set16_32(&InitSpeed, &tempH, &tempL);
Set16_32(&InitSpeed, &tempL, &tempH);
/* 数据读取 */
Options.SentPost = Register_L[0x1000];
@@ -220,8 +237,9 @@ void PLSROptionLoad(void)
Options.AllPulse = Register_L[0x1007];
Options.StartPulse = Register_L[0x1008];
Options.InitSpeed = InitSpeed;
Options.AccUpTime = Register_L[0x100B];
Options.AccDownTime = Register_L[0x100C];
Options.AccUpTime = (Register_H[0x100B]<< 8) | Register_L[0x100B];
Options.AccDownTime = (Register_H[0x100C]<< 8) | Register_L[0x100C];

}

void PLSRPluseLoad(void)
@@ -250,6 +268,10 @@ void PLSRPluseLoad(void)
}
}

/**
* @brief 保存总的脉冲数至指定的寄存器
* @return 无
*/
void CountSave(void)
{
int32_t temp_Count = 0;
@@ -259,9 +281,18 @@ void CountSave(void)
memcpy(&temp_Count, &AllPulseCNT, 4);
DatH = temp_Count / 0xffff;
DatL = temp_Count % 0xffff;
Register_H[0x2001] = DatH / 0xff;
Register_L[0x2001] = DatH % 0xff;
Register_H[0x2000] = DatL / 0xff;
Register_L[0x2000] = DatL % 0xff;
}
Register_H[0x2001] = (DatH >> 8);
Register_L[0x2001] = (DatH & 0x00ff);
Register_H[0x2000] = (DatL >> 8);
Register_L[0x2000] = (DatL & 0x00ff);
}

/**
* @brief 获取加减速的脉冲数
* @return 无
*/
void GetAddCount(void)
{
AccUpCount = Options.AccUpTime * PulseOutput[NowPulse].Frequency / 1000;
AccDownCount = Options.AccDownTime * PulseOutput[NowPulse].Frequency / 1000;
}

+ 6
- 3
Hardware/PLSR.h Dosyayı Görüntüle

@@ -25,8 +25,8 @@ typedef struct
uint8_t AllPulse; ///<<脉冲总段数
uint8_t StartPulse; ///<<起始执行段数
uint32_t InitSpeed; ///<<脉冲默认速度
uint8_t AccUpTime; ///<<脉冲默认速度加速时间
uint8_t AccDownTime; ///<<脉冲默认速度减速时间
uint16_t AccUpTime; ///<<脉冲默认速度加速时间
uint16_t AccDownTime; ///<<脉冲默认速度减速时间
} Option;

/* 变量声明 */
@@ -37,11 +37,13 @@ extern uint8_t NowPulse; ///<<
extern uint8_t PrePulse; ///<< 之前处于第几段脉冲
extern uint8_t PulseNum; ///<< 一共有多少段脉冲(中断内使用)
extern int32_t MAX_Pulse; ///<< 最多的脉冲数
extern int32_t AccCount; ///<<加速脉冲数
extern int32_t AccUpCount; ///<<加速脉冲数
extern int32_t AccDownCount;///<<减速脉冲数
extern int32_t NowMAXPulse; ///<<当前要达到的总脉冲
extern int32_t PulseCount;
extern int32_t NextPulseEND;


/* 函数声明 */
void SetFrequency(uint8_t SentPost, uint32_t Frequency);
void SetPulse(uint8_t Pulse, uint32_t Ferquency, int32_t Count, uint8_t Direction, int8_t NextPulse);
@@ -54,6 +56,7 @@ void SetNextPulse(void);
void PLSROptionLoad(void);
void PLSRPluseLoad(void);
void CountSave(void);
void GetAddCount(void);

uint32_t GetBase(uint8_t NowPulseNUM);



+ 1
- 1
Hardware/PSCARR.c Dosyayı Görüntüle

@@ -129,7 +129,7 @@ void Frequency_Change_PSC_And_ARR(uint32_t Frequency, uint16_t* psc, uint16_t* a
else
{
*psc = 1;
*arr = 72000000 / ((*psc) * Frequency);
*arr = 36000000 / ((*psc) * Frequency);
}
}
else


+ 54
- 15
PLSR.ioc Dosyayı Görüntüle

@@ -36,23 +36,34 @@ Mcu.IP2=RCC
Mcu.IP3=SYS
Mcu.IP4=TIM2
Mcu.IP5=TIM10
Mcu.IP6=USART1
Mcu.IPNb=7
Mcu.IP6=TIM11
Mcu.IP7=TIM13
Mcu.IP8=TIM14
Mcu.IP9=USART1
Mcu.IPNb=10
Mcu.Name=STM32F407I(E-G)Tx
Mcu.Package=LQFP176
Mcu.Pin0=PF6
Mcu.Pin1=PH0-OSC_IN
Mcu.Pin10=VP_SYS_VS_Systick
Mcu.Pin11=VP_TIM10_VS_ClockSourceINT
Mcu.Pin2=PH1-OSC_OUT
Mcu.Pin3=PH6
Mcu.Pin4=PH7
Mcu.Pin5=PH8
Mcu.Pin6=PH9
Mcu.Pin7=PA9
Mcu.Pin8=PA10
Mcu.Pin9=PA15
Mcu.PinsNb=12
Mcu.Pin1=PF7
Mcu.Pin10=PA9
Mcu.Pin11=PA10
Mcu.Pin12=PA13
Mcu.Pin13=PA14
Mcu.Pin14=PA15
Mcu.Pin15=VP_SYS_VS_Systick
Mcu.Pin16=VP_TIM10_VS_ClockSourceINT
Mcu.Pin17=VP_TIM11_VS_ClockSourceINT
Mcu.Pin18=VP_TIM13_VS_ClockSourceINT
Mcu.Pin19=VP_TIM14_VS_ClockSourceINT
Mcu.Pin2=PF8
Mcu.Pin3=PF9
Mcu.Pin4=PH0-OSC_IN
Mcu.Pin5=PH1-OSC_OUT
Mcu.Pin6=PH6
Mcu.Pin7=PH7
Mcu.Pin8=PH8
Mcu.Pin9=PH9
Mcu.PinsNb=20
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407IGTx
@@ -75,6 +86,10 @@ NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA15.GPIOParameters=GPIO_Speed
PA15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA15.Locked=true
@@ -83,6 +98,12 @@ PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PF6.Locked=true
PF6.Signal=S_TIM10_CH1
PF7.Locked=true
PF7.Signal=S_TIM11_CH1
PF8.Locked=true
PF8.Signal=S_TIM13_CH1
PF9.Locked=true
PF9.Signal=S_TIM14_CH1
PH0-OSC_IN.Mode=HSE-External-Oscillator
PH0-OSC_IN.Signal=RCC_OSC_IN
PH1-OSC_OUT.Mode=HSE-External-Oscillator
@@ -132,7 +153,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
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
RCC.48MHZClocksFreq_Value=36000000
RCC.AHBFreq_Value=72000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2
@@ -169,6 +190,12 @@ RCC.VCOOutputFreq_Value=144000000
RCC.VcooutputI2S=192000000
SH.S_TIM10_CH1.0=TIM10_CH1,PWM Generation1 CH1
SH.S_TIM10_CH1.ConfNb=1
SH.S_TIM11_CH1.0=TIM11_CH1,PWM Generation1 CH1
SH.S_TIM11_CH1.ConfNb=1
SH.S_TIM13_CH1.0=TIM13_CH1,PWM Generation1 CH1
SH.S_TIM13_CH1.ConfNb=1
SH.S_TIM14_CH1.0=TIM14_CH1,PWM Generation1 CH1
SH.S_TIM14_CH1.ConfNb=1
SH.S_TIM2_CH1_ETR.0=TIM2_ETR,ClockSourceETR_Mode2
SH.S_TIM2_CH1_ETR.ConfNb=1
TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
@@ -177,6 +204,12 @@ TIM10.IPParameters=Channel,Prescaler,AutoReloadPreload,Pulse,OCPolarity_1
TIM10.OCPolarity_1=TIM_OCPOLARITY_LOW
TIM10.Prescaler=72
TIM10.Pulse=32767
TIM11.Channel=TIM_CHANNEL_1
TIM11.IPParameters=Channel
TIM13.Channel=TIM_CHANNEL_1
TIM13.IPParameters=Channel
TIM14.Channel=TIM_CHANNEL_1
TIM14.IPParameters=Channel
USART1.BaudRate=19200
USART1.IPParameters=VirtualMode,BaudRate,Parity,WordLength
USART1.Parity=PARITY_ODD
@@ -186,4 +219,10 @@ VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM10_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM10_VS_ClockSourceINT.Signal=TIM10_VS_ClockSourceINT
VP_TIM11_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM11_VS_ClockSourceINT.Signal=TIM11_VS_ClockSourceINT
VP_TIM13_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM13_VS_ClockSourceINT.Signal=TIM13_VS_ClockSourceINT
VP_TIM14_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM14_VS_ClockSourceINT.Signal=TIM14_VS_ClockSourceINT
board=custom

Yükleniyor…
İptal
Kaydet