Compare commits

..

No commits in common. "d56405a1bacc3a81acc6c0a988de7dd89433c4bb" and "f483ba99806b4ae8e5e8d4feb16bcf81dcecc854" have entirely different histories.

39 changed files with 182 additions and 926 deletions

View File

@ -69,14 +69,6 @@ void Error_Handler(void);
#define LED_G_GPIO_Port GPIOH #define LED_G_GPIO_Port GPIOH
#define LED_B_Pin GPIO_PIN_10 #define LED_B_Pin GPIO_PIN_10
#define LED_B_GPIO_Port GPIOH #define LED_B_GPIO_Port GPIOH
#define buzzer_Pin GPIO_PIN_14
#define buzzer_GPIO_Port GPIOD
#define down_Pin GPIO_PIN_13
#define down_GPIO_Port GPIOE
#define key_Pin GPIO_PIN_11
#define key_GPIO_Port GPIOE
#define paw_Pin GPIO_PIN_14
#define paw_GPIO_Port GPIOE
#define SPI_CS_Pin GPIO_PIN_12 #define SPI_CS_Pin GPIO_PIN_12
#define SPI_CS_GPIO_Port GPIOB #define SPI_CS_GPIO_Port GPIOB

View File

@ -34,14 +34,11 @@ extern "C" {
extern TIM_HandleTypeDef htim1; extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim4;
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */ /* USER CODE END Private defines */
void MX_TIM1_Init(void); void MX_TIM1_Init(void);
void MX_TIM4_Init(void);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);

View File

@ -57,9 +57,6 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOH, LED_R_Pin|LED_G_Pin|LED_B_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOH, LED_R_Pin|LED_G_Pin|LED_B_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, down_Pin|key_Pin|paw_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET);
@ -82,13 +79,6 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
/*Configure GPIO pins : PEPin PEPin PEPin */
GPIO_InitStruct.Pin = down_Pin|key_Pin|paw_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = SPI_CS_Pin; GPIO_InitStruct.Pin = SPI_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

View File

@ -101,12 +101,9 @@ int main(void)
MX_USART6_UART_Init(); MX_USART6_UART_Init();
MX_TIM1_Init(); MX_TIM1_Init();
MX_SPI2_Init(); MX_SPI2_Init();
MX_TIM4_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
//HAL_TIM_Base_Start(&htim1); //HAL_TIM_Base_Start(&htim1);
//HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1 ); //HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1 );
HAL_TIM_Base_Start(&htim4);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Init scheduler */ /* Init scheduler */

View File

@ -25,7 +25,6 @@
/* USER CODE END 0 */ /* USER CODE END 0 */
TIM_HandleTypeDef htim1; TIM_HandleTypeDef htim1;
TIM_HandleTypeDef htim4;
/* TIM1 init function */ /* TIM1 init function */
void MX_TIM1_Init(void) void MX_TIM1_Init(void)
@ -86,60 +85,6 @@ void MX_TIM1_Init(void)
/* USER CODE END TIM1_Init 2 */ /* USER CODE END TIM1_Init 2 */
HAL_TIM_MspPostInit(&htim1); HAL_TIM_MspPostInit(&htim1);
}
/* TIM4 init function */
void MX_TIM4_Init(void)
{
/* USER CODE BEGIN TIM4_Init 0 */
/* USER CODE END TIM4_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM4_Init 1 */
/* USER CODE END TIM4_Init 1 */
htim4.Instance = TIM4;
htim4.Init.Prescaler = 0;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 20999;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != 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(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM4_Init 2 */
/* USER CODE END TIM4_Init 2 */
HAL_TIM_MspPostInit(&htim4);
} }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle) void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
@ -157,22 +102,6 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
/* USER CODE END TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */
} }
} }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM4)
{
/* USER CODE BEGIN TIM4_MspInit 0 */
/* USER CODE END TIM4_MspInit 0 */
/* TIM4 clock enable */
__HAL_RCC_TIM4_CLK_ENABLE();
/* USER CODE BEGIN TIM4_MspInit 1 */
/* USER CODE END TIM4_MspInit 1 */
}
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{ {
@ -182,6 +111,7 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
/* USER CODE BEGIN TIM1_MspPostInit 0 */ /* USER CODE BEGIN TIM1_MspPostInit 0 */
/* USER CODE END TIM1_MspPostInit 0 */ /* USER CODE END TIM1_MspPostInit 0 */
__HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE();
/**TIM1 GPIO Configuration /**TIM1 GPIO Configuration
PE9 ------> TIM1_CH1 PE9 ------> TIM1_CH1
@ -197,27 +127,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
/* USER CODE END TIM1_MspPostInit 1 */ /* USER CODE END TIM1_MspPostInit 1 */
} }
else if(timHandle->Instance==TIM4)
{
/* USER CODE BEGIN TIM4_MspPostInit 0 */
/* USER CODE END TIM4_MspPostInit 0 */
__HAL_RCC_GPIOD_CLK_ENABLE();
/**TIM4 GPIO Configuration
PD14 ------> TIM4_CH3
*/
GPIO_InitStruct.Pin = buzzer_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
HAL_GPIO_Init(buzzer_GPIO_Port, &GPIO_InitStruct);
/* USER CODE BEGIN TIM4_MspPostInit 1 */
/* USER CODE END TIM4_MspPostInit 1 */
}
} }
@ -237,22 +146,6 @@ void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* tim_pwmHandle)
} }
} }
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM4)
{
/* USER CODE BEGIN TIM4_MspDeInit 0 */
/* USER CODE END TIM4_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM4_CLK_DISABLE();
/* USER CODE BEGIN TIM4_MspDeInit 1 */
/* USER CODE END TIM4_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
/* USER CODE END 1 */ /* USER CODE END 1 */

View File

@ -102,7 +102,7 @@ void MX_USART6_UART_Init(void)
/* USER CODE END USART6_Init 1 */ /* USER CODE END USART6_Init 1 */
huart6.Instance = USART6; huart6.Instance = USART6;
huart6.Init.BaudRate = 115200; huart6.Init.BaudRate = 4000000;
huart6.Init.WordLength = UART_WORDLENGTH_8B; huart6.Init.WordLength = UART_WORDLENGTH_8B;
huart6.Init.StopBits = UART_STOPBITS_1; huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_NONE; huart6.Init.Parity = UART_PARITY_NONE;

View File

@ -3,26 +3,26 @@
{ {
"name": "mycode1", "name": "mycode1",
"includePath": [ "includePath": [
"d:\\Desktop\\mycode-shoot\\shoot\\Core\\Inc", "d:\\Desktop\\mycode -vision\\Core\\Inc",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\STM32F4xx_HAL_Driver\\Inc", "d:\\Desktop\\mycode -vision\\Drivers\\STM32F4xx_HAL_Driver\\Inc",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\STM32F4xx_HAL_Driver\\Inc\\Legacy", "d:\\Desktop\\mycode -vision\\Drivers\\STM32F4xx_HAL_Driver\\Inc\\Legacy",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\include", "d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\include",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\CMSIS_RTOS_V2", "d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\CMSIS_RTOS_V2",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS\\ARM_CM4F", "d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS\\ARM_CM4F",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\CMSIS\\Device\\ST\\STM32F4xx\\Include", "d:\\Desktop\\mycode -vision\\Drivers\\CMSIS\\Device\\ST\\STM32F4xx\\Include",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\CMSIS\\Include", "d:\\Desktop\\mycode -vision\\Drivers\\CMSIS\\Include",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\bsp", "d:\\Desktop\\mycode -vision\\User\\bsp",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\device", "d:\\Desktop\\mycode -vision\\User\\device",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\lib", "d:\\Desktop\\mycode -vision\\User\\lib",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\module", "d:\\Desktop\\mycode -vision\\User\\module",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\task", "d:\\Desktop\\mycode -vision\\User\\task",
"D:\\keil\\ARM\\ARMCC\\include", "D:\\keil\\ARM\\ARMCC\\include",
"D:\\keil\\ARM\\ARMCC\\include\\rw", "D:\\keil\\ARM\\ARMCC\\include\\rw",
"d:\\Desktop\\mycode-shoot\\shoot\\MDK-ARM", "d:\\Desktop\\mycode -vision\\MDK-ARM",
"d:\\Desktop\\mycode-shoot\\shoot\\Core\\Src", "d:\\Desktop\\mycode -vision\\Core\\Src",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\STM32F4xx_HAL_Driver\\Src", "d:\\Desktop\\mycode -vision\\Drivers\\STM32F4xx_HAL_Driver\\Src",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source", "d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\MemMang" "d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\MemMang"
], ],
"defines": [ "defines": [
"USE_HAL_DRIVER", "USE_HAL_DRIVER",

View File

@ -16,45 +16,3 @@
[info] Log at : 2025/3/12|23:02:19|GMT+0800 [info] Log at : 2025/3/12|23:02:19|GMT+0800
[info] Log at : 2025/3/12|23:23:36|GMT+0800
[info] Log at : 2025/3/13|10:52:41|GMT+0800
[info] Log at : 2025/3/13|11:23:36|GMT+0800
[info] Log at : 2025/3/13|11:29:50|GMT+0800
[info] Log at : 2025/3/13|11:32:26|GMT+0800
[info] Log at : 2025/3/13|11:48:43|GMT+0800
[info] Log at : 2025/3/13|11:49:08|GMT+0800
[info] Log at : 2025/3/13|11:52:00|GMT+0800
[info] Log at : 2025/3/13|11:52:12|GMT+0800
[info] Log at : 2025/3/13|11:52:29|GMT+0800
[info] Log at : 2025/3/13|11:52:40|GMT+0800
[info] Log at : 2025/3/13|13:05:40|GMT+0800
[info] Log at : 2025/3/13|13:05:50|GMT+0800
[info] Log at : 2025/3/13|13:09:23|GMT+0800
[info] Log at : 2025/3/13|13:09:39|GMT+0800
[info] Log at : 2025/3/13|14:46:01|GMT+0800
[info] Log at : 2025/3/13|19:24:02|GMT+0800
[info] Log at : 2025/3/13|21:58:39|GMT+0800
[info] Log at : 2025/3/14|16:14:48|GMT+0800
[info] Log at : 2025/3/14|16:14:59|GMT+0800
[info] Log at : 2025/3/14|20:12:19|GMT+0800

View File

@ -10,13 +10,6 @@
"can_task.h": "c", "can_task.h": "c",
"go_m8010_6_driver.h": "c", "go_m8010_6_driver.h": "c",
"read_spi.h": "c", "read_spi.h": "c",
"djimotor.h": "c", "djimotor.h": "c"
"buzzer.h": "c",
"main.h": "c",
"ball.h": "c",
"shoot.h": "c",
"dji.h": "c",
"calc_lib.h": "c",
"odrive_shoot.h": "c"
} }
} }

View File

@ -1,10 +1,13 @@
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\keil\ARM\ARMCC\Bin' *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\keil\ARM\ARMCC\Bin'
Build target 'mycode1' Build target 'mycode1'
compiling read_spi.c... compiling dji_task.c...
compiling odrive_shoot.c... compiling dji.c...
compiling djiMotor.c...
compiling shoot_task.c... compiling shoot_task.c...
compiling can_task.c...
compiling odrive_shoot.c...
linking... linking...
Program Size: Code=26528 RO-data=1904 RW-data=280 ZI-data=22496 Program Size: Code=26064 RO-data=1860 RW-data=284 ZI-data=22276
FromELF: creating hex file... FromELF: creating hex file...
"mycode1\mycode1.axf" - 0 Error(s), 0 Warning(s). "mycode1\mycode1.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:03 Build Time Elapsed: 00:00:04

View File

@ -1 +1 @@
2025/3/14 20:41:26 2025/3/12 20:09:49

View File

@ -153,92 +153,62 @@
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>cmd_fromnuc</ItemText> <ItemText>go</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>1</count> <count>1</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>nucbuf</ItemText> <ItemText>Temp_buffer</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>2</count> <count>2</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>motor_3508_data,0x0A</ItemText> <ItemText>cmd_fromnuc</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>3</count> <count>3</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>speed,0x0A</ItemText> <ItemText>nucbuf</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>4</count> <count>4</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>RC_mess,0x0A</ItemText> <ItemText>motor_3508_data,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>5</count> <count>5</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>M3508_speed_PID</ItemText> <ItemText>speed,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>6</count> <count>6</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>M3508_angle_PID</ItemText> <ItemText>RC_mess</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>7</count> <count>7</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>angle,0x0A</ItemText> <ItemText>M3508_speed_PID</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>8</count> <count>8</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>m,0x0A</ItemText> <ItemText>M3508_angle_PID</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>9</count> <count>9</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>go</ItemText> <ItemText>angle,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>10</count> <count>10</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>basketball,0x0A</ItemText> <ItemText>m,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>11</count> <count>11</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>angleo,0x0A</ItemText> <ItemText>go</ItemText>
</Ww>
<Ww>
<count>12</count>
<WinNumber>1</WinNumber>
<ItemText>shoot</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>1</WinNumber>
<ItemText>multi_turn_angle,0x0A</ItemText>
</Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>angle_encoder</ItemText>
</Ww>
<Ww>
<count>15</count>
<WinNumber>1</WinNumber>
<ItemText>back_angle,0x0A</ItemText>
</Ww>
<Ww>
<count>16</count>
<WinNumber>1</WinNumber>
<ItemText>encoder,0x0A</ItemText>
</Ww>
<Ww>
<count>17</count>
<WinNumber>1</WinNumber>
<ItemText>angles</ItemText>
</Ww> </Ww>
</WatchWindow1> </WatchWindow1>
<WatchWindow2> <WatchWindow2>
@ -322,7 +292,7 @@
<Group> <Group>
<GroupName>Application/User/Core</GroupName> <GroupName>Application/User/Core</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@ -1078,53 +1048,17 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\module\buzzer.c</PathWithFileName>
<FilenameWithoutPath>buzzer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\module\ball.c</PathWithFileName>
<FilenameWithoutPath>ball.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\module\shoot.c</PathWithFileName>
<FilenameWithoutPath>shoot.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>
<GroupName>User/task</GroupName> <GroupName>User/task</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>63</FileNumber> <FileNumber>60</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1136,7 +1070,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>64</FileNumber> <FileNumber>61</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1148,7 +1082,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>65</FileNumber> <FileNumber>62</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1160,7 +1094,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>66</FileNumber> <FileNumber>63</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1172,7 +1106,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>67</FileNumber> <FileNumber>64</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1184,7 +1118,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>68</FileNumber> <FileNumber>65</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1196,7 +1130,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>69</FileNumber> <FileNumber>66</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1208,7 +1142,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>70</FileNumber> <FileNumber>67</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1220,7 +1154,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>71</FileNumber> <FileNumber>68</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1230,18 +1164,6 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\task\ball_task.c</PathWithFileName>
<FilenameWithoutPath>ball_task.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>

View File

@ -820,21 +820,6 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\User\module\odrive_shoot.c</FilePath> <FilePath>..\User\module\odrive_shoot.c</FilePath>
</File> </File>
<File>
<FileName>buzzer.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\module\buzzer.c</FilePath>
</File>
<File>
<FileName>ball.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\module\ball.c</FilePath>
</File>
<File>
<FileName>shoot.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\module\shoot.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -885,11 +870,6 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\User\task\rc_task.c</FilePath> <FilePath>..\User\task\rc_task.c</FilePath>
</File> </File>
<File>
<FileName>ball_task.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\task\ball_task.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

View File

@ -1,8 +1,3 @@
# myshoot # shoot
## r1上层 r1上层
1. **odrive**推射 **can1** **id 010** **spi2**读取as5047p
2. go1 RS485模块 01翻转 02云台
3. 爪子 左三PC6
4. 接球 左一左2 PI7 PI6

View File

@ -136,6 +136,8 @@ device_status_e odrive_pos_cmd(node_id_e node_id, fp32 pos);
*/ */
odrive_msg_t* Get_Odrive_Point(void); odrive_msg_t* Get_Odrive_Point(void);
void odrive_CB(void);
void User_Odrive_Can1_CB(void); void User_Odrive_Can1_CB(void);
void User_Odrive_Can2_CB(void); void User_Odrive_Can2_CB(void);

View File

@ -40,31 +40,41 @@ uint16_t AS5047_read(uint16_t add)
return data; return data;
} }
void Encoder_Init(Encoder_t *ptr) { // void Update_MultiTurn_Angle(void)
ptr->round_cnt = 0; // {
ptr->ecd = AS5047_read(ANGLEUNC); // uint16_t current_angle = AS5047_read(ANGLEUNC);
ptr->last_ecd = ptr->ecd; // int16_t angle_diff = current_angle - last_angle;
ptr->offset_ecd = ptr->ecd;
ptr->total_angle = 0.0;
}
void Update_Encoder(Encoder_t *ptr) { // // 检测角度跳变
ptr->ecd = AS5047_read(ANGLEUNC); // if (angle_diff > 8192) // 角度从低到高跳变
// {
// multi_turn_angle -= (16384 - angle_diff);
// }
// else if (angle_diff < -8192) // 角度从高到低跳变
// {
// multi_turn_angle += (16384 + angle_diff);
// }
// else
// {
// multi_turn_angle += angle_diff;
// }
if (ptr->ecd - ptr->last_ecd > 4096) { // last_angle = current_angle;
ptr->round_cnt--; // }
} else if (ptr->ecd - ptr->last_ecd < -4096) { void Update_MultiTurn_Angle(void)
ptr->round_cnt++; {
uint16_t current_angle = AS5047_read(ANGLEUNC);
int16_t angle_diff = current_angle - last_angle;
// 检测角度跳变
if (angle_diff > 8192) // 角度从低到高跳变
{
multi_turn_angle -= 1;
}
else if (angle_diff < -8192) // 角度从高到低跳变
{
multi_turn_angle += 1;
} }
ptr->total_angle = (double)((ptr->round_cnt * 8192 + ptr->ecd - ptr->offset_ecd) ); last_angle = current_angle;
ptr->last_ecd = ptr->ecd;
}
int32_t Get_Encoder_Rounds(Encoder_t *ptr) {
return ptr->round_cnt;
}
double Get_Encoder_Angle(Encoder_t *ptr) {
return ptr->total_angle;
} }

View File

@ -18,14 +18,6 @@
#define SETTINGS1 0x0018 #define SETTINGS1 0x0018
#define SETTINGS2 0x0019 #define SETTINGS2 0x0019
typedef struct {
int32_t round_cnt;
uint16_t ecd;
uint16_t last_ecd;
uint16_t offset_ecd;
double total_angle;
} Encoder_t;
#define AS5407P_CS_H() \ #define AS5407P_CS_H() \
HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET) HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET)
#define AS5407P_CS_L() \ #define AS5407P_CS_L() \
@ -34,11 +26,6 @@ typedef struct {
uint16_t Parity_bit_Calculate(uint16_t data_2_cal); uint16_t Parity_bit_Calculate(uint16_t data_2_cal);
uint16_t SPI_ReadWrite_OneByte(uint16_t _txdata); uint16_t SPI_ReadWrite_OneByte(uint16_t _txdata);
uint16_t AS5047_read(uint16_t add); uint16_t AS5047_read(uint16_t add);
void Update_MultiTurn_Angle(void);
void Encoder_Init(Encoder_t *ptr);
void Update_Encoder(Encoder_t *ptr);
int32_t Get_Encoder_Rounds(Encoder_t *ptr);
double Get_Encoder_Angle(Encoder_t *ptr);
#endif #endif

View File

@ -1,88 +0,0 @@
#include "ball.h"
#include "main.h"
#include "cmsis_os.h"
#include "FreeRTOS.h"
#include "bsp_delay.h"
#define ballcome 1
#define balldown 0
//光电识别
int ball_in(void)
{
if (HAL_GPIO_ReadPin(ball_up_GPIO_Port, ball_up_Pin) == GPIO_PIN_SET)
{
return ballcome;
}
else
{
return balldown;
}
}
int pass_ball(void)
{
if (HAL_GPIO_ReadPin(ball_in1_GPIO_Port, ball_in1_Pin) == GPIO_PIN_SET)
{
return ballcome;
}
else
{
return balldown;
}
}
//运球
void handling_ball(int hand, int paw)
{
paw =ball_in();
if (hand == 1 && paw == 1)
{
//爪子
delay_us(100);
HAL_GPIO_WritePin(paw_GPIO_Port, paw_Pin, GPIO_PIN_RESET);
osDelay(2);
delay_us(100);
//上推
HAL_GPIO_WritePin(down_GPIO_Port, down_Pin, GPIO_PIN_RESET);
hand=0;
}
else
{
//爪子
HAL_GPIO_WritePin(paw_GPIO_Port, paw_Pin, GPIO_PIN_SET);
osDelay(2);
delay_us(100);
//下推
HAL_GPIO_WritePin(down_GPIO_Port, down_Pin, GPIO_PIN_SET);
}
}
//接球
int catch_ball(int inball)
{
inball =pass_ball();
if(inball==1)
{
return ballcome;
}
else
{
return balldown;
}
}

View File

@ -1,19 +0,0 @@
#ifndef _BALL_H_
#define _BALL_H_
typedef struct ball
{
int hand;//运球
int paw;//爪
int inball;//光电门
int to_shoot;//给发射
}BASKETBALL;
int ball_in(void);
int pass_ball(void);
void handling_ball(int hand, int paw);
int catch_ball(int inball);
#endif

View File

@ -1,79 +0,0 @@
#include "buzzer.h"
uint32_t Frequency = 0;
uint32_t CLOCK = 10500000;
int i;
int pwm = MIN_BUZZER_PWM;
int psc = 0;
unsigned int notes[] = {
G3,C4,D4s,D4,C4,D4s,C4,D4,C4,G3s,A3s,G3,
G3,C4,D4s,D4,C4,D4s,C4,D4,C4,G3,F3s,F3,
F3,G3s,B3,D4, F3,G3s,B3,C4,
C4,D4s,A4s,G4s,G4,A4s,G4s,G4s,G4,G4,B3,C4,
C5,C5,B4,A4s, A4s,D5,C5,G4s,G4,
G4,A4s,G4,F4, F4,G4s,G4,F4,G4
};
unsigned int duration[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
1, 1, 1, 5, 1, 1, 1, 4,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
1, 1, 1, 3, 1, 2, 1, 1, 4,
1, 1, 1, 3, 1, 2, 1, 1, 4
};
void buzzer_on(uint16_t note) {
Frequency = CLOCK / note; // 计算定时器的重载值
htim4.Init.Prescaler = 0; // 预分频器设置为0
htim4.Init.Period = Frequency; // 设置定时器的重载值
// 设置PWM的占空比为50%
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, Frequency / 2);
// 启动PWM
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
}
void noTone(void){
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 0);
HAL_Delay(30);
}
void playSong(void){
for (i = 0; i < sizeof(notes)/sizeof(notes[0]); i++) {
Frequency = CLOCK / notes[i]; // 计算定时器的重载值
htim4.Instance->ARR = Frequency; // 设置定时器的重载值
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, Frequency / 2);// 设置PWM的占空比为50%
HAL_Delay(400*duration[i]);
noTone();
}
}
void set_buzzer_frequency(uint32_t freq){
__HAL_TIM_SetAutoreload(&htim4, freq);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, freq/2);
}
uint32_t music[3][205]={{9, 10, 9, 6, 9, 0, 6, 10, 9, 10, 12, 10, 9, 10, 9, 6, 8, 0, 10, 9, 12, 10}, {5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 10, 12, 13, 12, 0, 8, 9, 9, 8, 9, 10, 0, 10, 12, 13, 14, 13, 12, 10, 9, 9, 8, 9, 9, 9, 8, 0, 8, 10, 12, 13, 12, 0, 8, 9, 9, 8, 10, 0, 9, 10, 12, 13, 15, 16, 17, 16, 15, 12, 13, 15, 17, 17, 17, 16, 0, 12, 13, 15, 17, 17, 17, 16, 0}};
uint32_t lst[3][205]={{ 1, 1, 1, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 1, 1, 2}, {2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 3, 1, 2, 2, 2, 2, 4, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 1, 1, 1, 6, 6, 3, 1, 2, 2, 2, 2, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 4, 1, 1, 2, 2, 2, 2, 2, 8}};
uint32_t tones[]={21000000, 262, 294, 330, 349, 392, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1046, 1174, 1318, 1396, 1568, 1760, 1976};
uint32_t lenth[]={22, 103};
uint32_t frequency = 21000000;
uint32_t nw = 0, time_base = 125;
uint32_t song = 1;
void see_you_again(void)
{
set_buzzer_frequency(frequency/tones[music[song][nw]]);
/* USER CODE BEGIN 3 */
HAL_Delay(time_base*lst[song][nw]-time_base*1/4);
set_buzzer_frequency(frequency/tones[0]);
HAL_Delay(time_base*1/64);
nw = (nw + 1) % lenth[song];
}

View File

@ -1,53 +0,0 @@
#ifndef _BUZZER_H_
#define _BUZZER_H_
#include "tim.h"
#define MIN_BUZZER_PWM ((uint32_t)10000)
#define MAX_BUZZER_PWM ((uint32_t)20000)
#define MAX_PSC ((uint32_t)1000)
#define C3 131
#define C3s 139
#define D3 147
#define D3s 156
#define E3 165
#define F3 175
#define F3s 185
#define G3 196
#define G3s 208
#define A3 220
#define A3s 233
#define B3 247
#define C4 262
#define C4s 277
#define D4 294
#define D4s 311
#define E4 330
#define F4 349
#define F4s 370
#define G4 392
#define G4s 415
#define A4 440
#define A4s 466
#define B4 494
#define C5 523
#define C5s 554
#define D5 587
#define D5s 622
#define E5 659
#define F5 698
#define F5s 740
#define G5 784
#define G5s 831
#define A5 880
#define A5s 932
#define B5 988
#define C6 1047
void buzzer_on(uint16_t note);
void noTone(void);
void playSong(void);
void see_you_again(void);
#endif

View File

@ -26,49 +26,17 @@ fp32 M3508_PID[3]={4.9,0.01,0.0};
int16_t result; //速度环 int16_t result; //速度环
float angleSet[MOTOR_NUM]; //位置环 float angleSet[MOTOR_NUM]; //位置环
//trigger
//编码器数据
const motor_measure_t *trigger_motor_data;//3508电机数据
pid_type_def t_speed_pid;//2006速度环pid结构体
pid_type_def t_angle_pid;//2006位置环pid结构体
fp32 M2006_speed_PID[3]={5.0,0.3,0.0}; //P,I,D(速度环)
fp32 M2006_angle_PID[3]={25.0,0.0,1.5}; //P,I,D(角度环)
//速度环pid参数
fp32 M2006_PID[3]={4.9,0.01,0.0};
int16_t t_result; //速度环 //can最后发送的数据
float t_angleSet[1]; //位置环
void motor_init(void) void motor_init(void)
{ {
// motor_3508_data=get_motor_point(0); motor_3508_data=get_motor_point(0);
trigger_motor_data=get_motor_point(0);
// PID_init(&speed_pid,PID_POSITION,M3508_speed_PID,3000,1000); // PID_init(&speed_pid,PID_POSITION,M3508_speed_PID,3000,1000);
// PID_init(&angle_pid,PID_POSITION,M3508_angle_PID,7000,2000); // PID_init(&angle_pid,PID_POSITION,M3508_angle_PID,7000,2000);
// PID_init(&speed_pid,PID_POSITION,M3508_speed_PID,500000,500000); PID_init(&speed_pid,PID_POSITION,M3508_speed_PID,500000,500000);
// PID_init(&angle_pid,PID_POSITION,M3508_angle_PID,500000,100000); PID_init(&angle_pid,PID_POSITION,M3508_angle_PID,500000,100000);
PID_init(&t_speed_pid,PID_POSITION,M2006_speed_PID,500000,500000);
PID_init(&t_angle_pid,PID_POSITION,M2006_angle_PID,500000,100000);
} }
float trigger_angle = 0;
void trigger_pos(fp32 angle)
{
int16_t delta[1];
delta[0]=PID_calc(&t_angle_pid,trigger_motor_data->total_angle,angle);
t_result=PID_calc(&t_speed_pid,trigger_motor_data->speed_rpm,delta[0]);
}
void motor_speed(fp32 speed) void motor_speed(fp32 speed)
{ {
@ -85,4 +53,3 @@ void motor_pos(fp32 angle)
result=PID_calc(&speed_pid,motor_3508_data->speed_rpm,delta[0]); result=PID_calc(&speed_pid,motor_3508_data->speed_rpm,delta[0]);
} }

View File

@ -14,11 +14,30 @@ typedef enum
MOTOR_NUM MOTOR_NUM
}motorput_e; }motorput_e;
// //电机输出
// int16_t result[MOTOR_NUM]; //速度环
// float angleSet[MOTOR_NUM]; //位置环
// //电机状态
// motor_measure_t* putMotor[MOTOR_NUM];
// //翻转3508pid
// static const float M3508_speed_PID[3];
// static const float M3508_angle_PID[3];
// //前后与夹球2006pid
// static const float M2006_speed_PID[3];
// static const float M2006_angle_PID[3];
// //电机速度pid结构体
// pid_type_def speed_pid[MOTOR_NUM];
// //位置环pid
// pid_type_def angle_pid[MOTOR_NUM];
// //暂存目标位置
// //0上下1翻转2前后3夹球
// float angleSet[MOTOR_NUM];
void motor_init(void); void motor_init(void);
void motor_speed(fp32 speed); void motor_speed(fp32 speed);
void motor_pos(fp32 angle); void motor_pos(fp32 angle);
void trigger_pos(fp32 angle);
#endif #endif

View File

@ -20,17 +20,20 @@ void gimbalInit(void)
for(i = 0;i < GO_NUM;i ++) for(i = 0;i < GO_NUM;i ++)
{ {
go.goData[i] = getGoPoint(i);//获取电机数据指针 go.goData[i] = getGoPoint(i);//获取电机数据指针
// PID_init(&angle_pid[i],PID_POSITION,PID_angle,15,0.5);//pid初始化
// PID_init(&speed_pid[i],PID_POSITION,PID_speed,60,0.2);//pid初始化
// result[i] = 0;
go.angleSetgo[i] = 0; go.angleSetgo[i] = 0;
go.offestAngle[i] = 0; go.offestAngle[i] = 0;
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0); // GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0); GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
go.offestAngle[i] = go.goData[i]->Pos; go.offestAngle[i] = go.goData[i]->Pos;
HAL_Delay(100); HAL_Delay(2000);
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0); // GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0); GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
go.offestAngle[i] = go.goData[i]->Pos; go.offestAngle[i] = go.goData[i]->Pos;
HAL_Delay(100); HAL_Delay(2000);
} }
} }

View File

@ -4,8 +4,6 @@
#include <cmsis_os2.h> #include <cmsis_os2.h>
#include "read_spi.h" #include "read_spi.h"
#include "vofa.h"
extern RC_mess_t RC_mess; extern RC_mess_t RC_mess;
extern float angle_encoder; extern float angle_encoder;
@ -14,28 +12,31 @@ extern volatile uint16_t last_angle ;
#define POS_SET -10.6 #define POS_SET -10.6
#define POS_ZERO 2.705 #define POS_ZERO 2.705
#define ACCEL_SEND 100//梯形加速度 #define ACCEL_SEND 10//梯形加速度
#define ACCEL_BACK 100//返回时的加速度 #define ACCEL_BACK 5//返回时的加速度
#define DELAY 1000 #define DELAY 1000
fp32 shoot = 0; fp32 shoot = 10;
fp32 back_angle = 0;
float vofa_spi[8];
void shootStep(void) void shootStep(void)
{ {
// back_angle=Get_Angle();
// angle_encoder=AS5047_read(ANGLEUNC); angle_encoder=AS5047_read(ANGLEUNC);
// Update_MultiTurn_Angle(); Update_MultiTurn_Angle();
odrive_accel_cmd(AXIS0_NODE,ACCEL_SEND,ACCEL_SEND); odrive_accel_cmd(AXIS0_NODE,ACCEL_SEND,ACCEL_SEND);
// osDelay(2);//不知道为什么要延时 // osDelay(2);//不知道为什么要延时
odrive_pos_cmd(AXIS0_NODE,shoot); odrive_pos_cmd(AXIS0_NODE,shoot);
// vofa_spi[0]=shoot;
// vofa_spi[0]=multi_turn_angle; // osDelay(5000);
// vofa_tx_main(vofa_spi); // odrive_accel_cmd(AXIS0_NODE,5,5);
// odrive_pos_cmd(AXIS0_NODE,10);
// osDelay(DELAY);
// odrive_accel_cmd(AXIS1_NODE,ACCEL_BACK,ACCEL_BACK);
// odrive_pos_cmd(AXIS1_NODE,POS_ZERO);
} }
@ -44,6 +45,5 @@ void shootBack(void)
odrive_accel_cmd(AXIS0_NODE,ACCEL_BACK,ACCEL_BACK); odrive_accel_cmd(AXIS0_NODE,ACCEL_BACK,ACCEL_BACK);
osDelay(2); osDelay(2);
odrive_pos_cmd(AXIS0_NODE,POS_ZERO); odrive_pos_cmd(AXIS0_NODE,POS_ZERO);
} }

View File

@ -1,92 +0,0 @@
#include "shoot.h"
#include "remote_control.h"
extern RC_mess_t RC_mess;
extern motor_measure_t *trigger_motor_data;//3508电机数据
#define GO1_SHOOT 0
#define ODRIVE_SHOOT 1
#define KP 0.12
#define KD 0.008
#if GO1_SHOOT == 1
GO_SHOOT goshoot;
void shooterInit(void)
{
int i;
GO_M8010_init();
for(i = 0;i < GO_NUM;i ++)
{
goshoot.goData[i] = getGoPoint(i);//获取电机数据指针
goshoot.angleSetgo[i] = 0;
goshoot.offestAngle[i] = 0;
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
goshoot.offestAngle[i] = goshoot.goData[i]->Pos;
HAL_Delay(100);
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
goshoot.offestAngle[i] = goshoot.goData[i]->Pos;
HAL_Delay(100);
}
}
void shoot_ball(int key)
{
//蓄力
if(trigger_motor_data->real_angle ==60)//扳机已闭合
{
goshoot.angleSetgo[0] = 10;
GO_M8010_send_data(&huart6, 0,0,0,goshoot.angleSetgo[0],1,KP,KD);
}
if (key ==2)//上升准备蓄力
{
goshoot.angleSetgo[0] = 0;
GO_M8010_send_data(&huart6, 0,0,0,goshoot.angleSetgo[0],1,KP,KD);
}
}
#elif ODRIVE_SHOOT == 1
//初始位置在最上面, 有球放过来, 电机转动到最下面等待发射
//发射指令,当到最高点时,扳机离合
//返回扳机,远动到最下面
extern float angle_encoder;
extern volatile int32_t multi_turn_angle ;
extern volatile uint16_t last_angle ;
void shoot_odrive(int angle)
{
// if(ball)
// {
// if(multi_turn_angle==8)
// {
// //di
// odrive_accel_cmd(AXIS0_NODE,200,200);
// odrive_pos_cmd(AXIS0_NODE,0);
// }
// else if(multi_turn_angle==0)
// {
// }
// }
odrive_accel_cmd(AXIS0_NODE,200,200);
osDelay(2);
odrive_pos_cmd(AXIS0_NODE,angle);
}
#endif

View File

@ -1,27 +0,0 @@
#ifndef _SHOOT_H_
#define _SHOOT_H_
#include "GO_M8010_6_Driver.h"
#include "odrive_can.h"
#include "djiMotor.h"
#include "calc_lib.h"
#include "pid.h"
typedef struct
{
/* data */
GO_Motorfield* goData[GO_NUM];
//暂存目标位置
//0 left1 right
float angleSetgo[GO_NUM];
float offestAngle[GO_NUM];//go数据
float Kp;
float Kd;
float allowRange;
}GO_SHOOT;
void shooterInit(void);
void shoot_ball(int key);
void shoot_odrive(int angle);
#endif

View File

@ -63,10 +63,5 @@ const osThreadAttr_t attr_rc = {
.stack_size = 256 * 4, .stack_size = 256 * 4,
}; };
//ball
const osThreadAttr_t attr_ball = {
.name = "ball",
.priority = osPriorityRealtime,
.stack_size = 256 * 4,
};

View File

@ -20,7 +20,7 @@
#define TASK_FREQ_MONITOR (2u) #define TASK_FREQ_MONITOR (2u)
#define TASK_FREQ_CAN (500u) #define TASK_FREQ_CAN (500u)
#define TASK_FREQ_AI (250u) #define TASK_FREQ_AI (250u)
#define TASK_FREQ_BALL (500u) #define TASK_FREQ_REFEREE (1000u)
#define TASK_INIT_DELAY_INFO (500u) #define TASK_INIT_DELAY_INFO (500u)
#define TASK_INIT_DELAY_MONITOR (10) #define TASK_INIT_DELAY_MONITOR (10)
@ -43,8 +43,7 @@ typedef struct {
osThreadId_t dji_motor; osThreadId_t dji_motor;
osThreadId_t shoot; osThreadId_t shoot;
osThreadId_t go; osThreadId_t go;
osThreadId_t nuc; osThreadId_t nuc;
osThreadId_t ball;
} thread; } thread;
/* 电机的反馈和输出 */ /* 电机的反馈和输出 */
@ -160,7 +159,6 @@ extern const osThreadAttr_t attr_shoot;
extern const osThreadAttr_t attr_go; extern const osThreadAttr_t attr_go;
extern const osThreadAttr_t attr_nuc; extern const osThreadAttr_t attr_nuc;
extern const osThreadAttr_t attr_rc; extern const osThreadAttr_t attr_rc;
extern const osThreadAttr_t attr_ball;
/* Exported functions prototypes -------------------------------------------- */ /* Exported functions prototypes -------------------------------------------- */
//声明一下任务 //声明一下任务
@ -180,6 +178,4 @@ void Task_nuc(void *argument);
void Task_Rc(void *argument); void Task_Rc(void *argument);
void Task_Ball(void *argument);
#endif #endif

View File

@ -1,29 +0,0 @@
#include "ball_task.h"
#include "TopDefine.h"
#include "FreeRTOS.h"
#include "attrTask.h"
#include <cmsis_os2.h>
#include "remote_control.h"
#include "ball.h"
extern RC_mess_t RC_mess;
BASKETBALL basketball;
void Task_Ball(void *argument)
{
(void)argument; /* 未使用argument消除警告 */
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计算 */
basketball.hand=0;
basketball.paw=0;
while(1)
{
handling_ball(basketball.hand, basketball.paw);
tick += delay_tick; /* 计算下一个唤醒时刻 */
osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
}
}

View File

@ -1,5 +0,0 @@
#ifndef _BALL_TASK_H_
#define _BALL_TASK_H_
#endif

View File

@ -14,7 +14,7 @@ extern motor_measure_t *motor_3508_data;
void Task_Can(void *argument) void Task_Can(void *argument)
{ {
(void)argument; /* 未使用argument消除警告 */ (void)argument; /* 未使用argument消除警告 */
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN; // const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
djiInit();//FIFO滤波器初始化 djiInit();//FIFO滤波器初始化
Odrive_Can_Init(); Odrive_Can_Init();
@ -29,8 +29,8 @@ void Task_Can(void *argument)
//将can数据添加到消息队列 //将can数据添加到消息队列
tick += delay_tick; /* 计算下一个唤醒时刻 */ // tick += delay_tick; /* 计算下一个唤醒时刻 */
osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */ // osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
} }
} }

View File

@ -9,7 +9,6 @@
extern RC_mess_t RC_mess; extern RC_mess_t RC_mess;
extern int16_t result; extern int16_t result;
extern int16_t t_result;
extern motor_measure_t *motor_3508_data; extern motor_measure_t *motor_3508_data;
float vofa[8]; float vofa[8];
/** /**
@ -25,7 +24,7 @@ void Task_Motor(void *argument)
{ {
(void)argument; /* 未使用argument消除警告 */ (void)argument; /* 未使用argument消除警告 */
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CTRL_CHASSIS; // const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CTRL_CHASSIS;
motor_init(); motor_init();
@ -38,18 +37,18 @@ void Task_Motor(void *argument)
//电机控制 //电机控制
//motor_speed(speed); //motor_speed(speed);
m=angle*(8191/360); m=angle*(8191/360);
// motor_pos(m); motor_pos(m);
trigger_pos(m);
//CAN_cmd_200(result[MOTOR_UP],result[MOTOR_UP],result[MOTOR_UP],result[MOTOR_UP],&hcan1); //CAN_cmd_200(result[MOTOR_UP],result[MOTOR_UP],result[MOTOR_UP],result[MOTOR_UP],&hcan1);
CAN_cmd_200(t_result,0,0,0,&hcan1); CAN_cmd_200(result,0,0,0,&hcan1);
osDelay(2); osDelay(2);
// vofa[0]=motor_3508_data->speed_rpm; // vofa[0]=motor_3508_data->speed_rpm;
// vofa[1]=speed; // vofa[1]=speed;
// vofa_tx_main(vofa); // vofa_tx_main(vofa);
tick += delay_tick; // tick += delay_tick;
osDelayUntil(tick); // osDelayUntil(tick);
} }

View File

@ -16,14 +16,14 @@ void Task_Go(void *argument)
#if GOUSE==1 #if GOUSE==1
//HAL_Delay(2000); //HAL_Delay(2000);
// gimbalInit(); gimbalInit();
//HAL_GPIO_WritePin(ledGreen_GPIO_Port,ledGreen_Pin,GPIO_PIN_RESET); //HAL_GPIO_WritePin(ledGreen_GPIO_Port,ledGreen_Pin,GPIO_PIN_RESET);
while(1) while(1)
{ {
LED_green(); LED_green();
// gimbalFlow(); gimbalFlow();
osDelay(1); osDelay(1);
} }
#else #else

View File

@ -48,10 +48,7 @@ task_runtime.thread.nuc =
osThreadNew(Task_nuc, NULL, &attr_nuc); osThreadNew(Task_nuc, NULL, &attr_nuc);
// rc // rc
task_runtime.thread.rc = task_runtime.thread.rc =
osThreadNew(Task_Rc, NULL, &attr_rc); osThreadNew(Task_Rc, NULL, &attr_rc);
// ball
task_runtime.thread.ball =
osThreadNew(Task_Ball, NULL, &attr_ball);
/* 消息队列 */ /* 消息队列 */
//can //can

View File

@ -3,7 +3,6 @@
#include "FreeRTOS.h" #include "FreeRTOS.h"
#include "main.h" #include "main.h"
#include "led.h" #include "led.h"
#include "buzzer.h"
void Task_Led(void *argument) { void Task_Led(void *argument) {
(void)argument; /* 未使用argument消除警告 */ (void)argument; /* 未使用argument消除警告 */
@ -11,10 +10,9 @@ void Task_Led(void *argument) {
for (;;) { for (;;) {
// LED_red(); // LED_red();
// LED_bule(); LED_bule();
// see_you_again();
// LED_green(); // LED_green();
// osDelay(500); osDelay(500);
} }
} }

View File

@ -15,11 +15,11 @@ void Task_nuc(void *argument)
{ {
(void)argument; /* 未使用argument消除警告 */ (void)argument; /* 未使用argument消除警告 */
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_AI; // const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_AI;
NUC_Init(&cmd_fromnuc); NUC_Init(&cmd_fromnuc);
uint32_t tick = osKernelGetTickCount(); uint32_t tick = osKernelGetTickCount();
while(1) while(1)
{ {
@ -42,8 +42,8 @@ void Task_nuc(void *argument)
// osMessageQueuePut(task_runtime.msgq.cmd.raw.nuc,&(cmd_fromnuc),0,0); // osMessageQueuePut(task_runtime.msgq.cmd.raw.nuc,&(cmd_fromnuc),0,0);
osDelay(2); osDelay(2);
tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/ // tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/
osDelayUntil(tick); // osDelayUntil(tick);
} }
} }

View File

@ -3,45 +3,29 @@
#include "FreeRTOS.h" #include "FreeRTOS.h"
#include "attrTask.h" #include "attrTask.h"
#include <cmsis_os2.h> #include <cmsis_os2.h>
#include "remote_control.h" #include "shoot_task.h"
#include "shoot.h"
#include "odrive_shoot.h" #include "odrive_shoot.h"
#include "read_spi.h" #include "remote_control.h"
extern RC_mess_t RC_mess; extern RC_mess_t RC_mess;
Encoder_t encoder; const odrive_msg_t *odrive_msg1;
double angles;
int32_t rounds;
int angleo = 0; //发射角度
#define GO1_SHOOT 0
#define ODRIVE_SHOOT 1
void Task_Shoot(void *argument) void Task_Shoot(void *argument)
{ {
(void)argument; /* 未使用argument消除警告 */ (void)argument; /* 未使用argument消除警告 */
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN; // const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
Encoder_Init(&encoder); // odrive_CB();
#if GO1_SHOOT == 1 // uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计算 */
shooterInit();
#endif
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计算 */
while(1) while(1)
{ {
#if GO1_SHOOT == 1 shootStep();
shoot_ball(0);
#elif ODRIVE_SHOOT == 1 odrive_get_encode(AXIS0_NODE);
shootStep();
//shoot_odrive(angleo); odrive_msg1 = Get_Odrive_Point();
#endif osDelay(2);
// 更新编码器数据
Update_Encoder(&encoder);
tick += delay_tick; /* 计算下一个唤醒时刻 */
osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */ // tick += delay_tick; /* 计算下一个唤醒时刻 */
// osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
} }
} }

View File

@ -67,9 +67,8 @@ Mcu.CPN=STM32F407IGH6
Mcu.Family=STM32F4 Mcu.Family=STM32F4
Mcu.IP0=CAN1 Mcu.IP0=CAN1
Mcu.IP1=CAN2 Mcu.IP1=CAN2
Mcu.IP10=USART1 Mcu.IP10=USART3
Mcu.IP11=USART3 Mcu.IP11=USART6
Mcu.IP12=USART6
Mcu.IP2=DMA Mcu.IP2=DMA
Mcu.IP3=FREERTOS Mcu.IP3=FREERTOS
Mcu.IP4=NVIC Mcu.IP4=NVIC
@ -77,8 +76,8 @@ Mcu.IP5=RCC
Mcu.IP6=SPI2 Mcu.IP6=SPI2
Mcu.IP7=SYS Mcu.IP7=SYS
Mcu.IP8=TIM1 Mcu.IP8=TIM1
Mcu.IP9=TIM4 Mcu.IP9=USART1
Mcu.IPNb=13 Mcu.IPNb=12
Mcu.Name=STM32F407I(E-G)Hx Mcu.Name=STM32F407I(E-G)Hx
Mcu.Package=UFBGA176 Mcu.Package=UFBGA176
Mcu.Pin0=PB5 Mcu.Pin0=PB5
@ -94,26 +93,21 @@ Mcu.Pin17=PH12
Mcu.Pin18=PH11 Mcu.Pin18=PH11
Mcu.Pin19=PH10 Mcu.Pin19=PH10
Mcu.Pin2=PA14 Mcu.Pin2=PA14
Mcu.Pin20=PD14 Mcu.Pin20=PE9
Mcu.Pin21=PE13 Mcu.Pin21=PB12
Mcu.Pin22=PE9 Mcu.Pin22=PB13
Mcu.Pin23=PE11 Mcu.Pin23=PB14
Mcu.Pin24=PE14 Mcu.Pin24=PB15
Mcu.Pin25=PB12 Mcu.Pin25=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin26=PB13 Mcu.Pin26=VP_SYS_VS_Systick
Mcu.Pin27=PB14
Mcu.Pin28=PB15
Mcu.Pin29=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin3=PA13 Mcu.Pin3=PA13
Mcu.Pin30=VP_SYS_VS_Systick
Mcu.Pin31=VP_TIM4_VS_ClockSourceINT
Mcu.Pin4=PB7 Mcu.Pin4=PB7
Mcu.Pin5=PB6 Mcu.Pin5=PB6
Mcu.Pin6=PD0 Mcu.Pin6=PD0
Mcu.Pin7=PC11 Mcu.Pin7=PC11
Mcu.Pin8=PC10 Mcu.Pin8=PC10
Mcu.Pin9=PI7 Mcu.Pin9=PI7
Mcu.PinsNb=32 Mcu.PinsNb=27
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F407IGHx Mcu.UserName=STM32F407IGHx
@ -180,22 +174,6 @@ PD0.Signal=CAN1_RX
PD1.Locked=true PD1.Locked=true
PD1.Mode=CAN_Activate PD1.Mode=CAN_Activate
PD1.Signal=CAN1_TX PD1.Signal=CAN1_TX
PD14.GPIOParameters=GPIO_Label
PD14.GPIO_Label=buzzer
PD14.Locked=true
PD14.Signal=S_TIM4_CH3
PE11.GPIOParameters=GPIO_Label
PE11.GPIO_Label=key
PE11.Locked=true
PE11.Signal=GPIO_Output
PE13.GPIOParameters=GPIO_Label
PE13.GPIO_Label=down
PE13.Locked=true
PE13.Signal=GPIO_Output
PE14.GPIOParameters=GPIO_Label
PE14.GPIO_Label=paw
PE14.Locked=true
PE14.Signal=GPIO_Output
PE9.Locked=true PE9.Locked=true
PE9.Signal=S_TIM1_CH1 PE9.Signal=S_TIM1_CH1
PG14.Mode=Asynchronous PG14.Mode=Asynchronous
@ -294,8 +272,6 @@ RCC.VCOOutputFreq_Value=336000000
RCC.VcooutputI2S=192000000 RCC.VcooutputI2S=192000000
SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1 SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1
SH.S_TIM1_CH1.ConfNb=1 SH.S_TIM1_CH1.ConfNb=1
SH.S_TIM4_CH3.0=TIM4_CH3,PWM Generation3 CH3
SH.S_TIM4_CH3.ConfNb=1
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32 SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32
SPI2.CLKPhase=SPI_PHASE_2EDGE SPI2.CLKPhase=SPI_PHASE_2EDGE
SPI2.CalculateBaudRate=1.3125 MBits/s SPI2.CalculateBaudRate=1.3125 MBits/s
@ -309,9 +285,6 @@ TIM1.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period,Pulse-PWM Generat
TIM1.Period=20000-1 TIM1.Period=20000-1
TIM1.Prescaler=168-1 TIM1.Prescaler=168-1
TIM1.Pulse-PWM\ Generation1\ CH1=2000 TIM1.Pulse-PWM\ Generation1\ CH1=2000
TIM4.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
TIM4.IPParameters=Channel-PWM Generation3 CH3,Period
TIM4.Period=20999
USART1.BaudRate=115200 USART1.BaudRate=115200
USART1.IPParameters=VirtualMode,BaudRate USART1.IPParameters=VirtualMode,BaudRate
USART1.VirtualMode=VM_ASYNC USART1.VirtualMode=VM_ASYNC
@ -326,7 +299,5 @@ VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM4_VS_ClockSourceINT.Mode=Internal
VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT
board=custom board=custom
rtos.0.ip=FREERTOS rtos.0.ip=FREERTOS