基于STM32的电磁炮设计与实现
基于STM32的电磁炮设计与实现
本文介绍了一个基于STM32F407单片机的电磁炮设计项目。该项目通过Boost电路实现60V电压输出,采用IGBT作为开关管,电解电容作为储能元件。文章详细介绍了升压电路、降压电路、控制电路的设计原理,并提供了完整的硬件参数、电路图和软件代码。
项目简介
该项目是一个简易电磁炮设计,主要用于测试电磁炮原理。系统采用Boost电路进行升压,IGBT作为开关管,电解电容作为储能元件。整个系统由STM32F407单片机控制,通过两个独立按键实现子弹发射和复位重置功能。
项目功能
- 基于STM32F407单片机设计
- 两个独立按键:子弹发射和复位重置
- Boost升压电路提供60V电压
- 电容充电约10秒后可发射子弹
项目参数
- 控制部分:STM32F407
- Boost电路芯片:LGS6302B5(Legend-Si)
- 5V电源芯片:MP2225GJ-Z
- 3.3V电源芯片:MP2225GJ-Z
- 电压隔离芯片:PC817C光耦
- 发射电路开关管:IGBT(FGH60N60SMD,onsemi)
原理解析(硬件说明)
整体设计分为三部分:升压电路、降压电路和控制电路。
Boost 60V升压电路
Boost电路采用LGS6302,这是一种集成功率开关的异步升压转换器,具有3V到60V的宽输入电压范围。输出电压可通过外部电阻配置,推荐使用5脚设计。
输出电压计算公式:
当输出电压为60V时,若RG=8K,则RF应为392K(实际使用390K)。
电容和电感选择:
- 输入电容CIN建议使用10uF陶瓷电容
- 电感值计算公式:(具体计算过程略)
- 输出电容应尽量选择较大值
Buck 5V、3.3V降压电路
降压电路采用MP2225GJ-Z芯片,具体设计可参考工科男孙老师的B站视频教程。
控制电路
发射部分核心器件:
IGBT(绝缘栅双极型晶体管):
结构:发射极、集电极和栅极
特点:高输入阻抗、高电流承载能力
主要参数:VGE = 4.5V,VCE = 1.9V
光耦:
作用:电气隔离和信号传递
关注参数:开关时间
发射控制原理:
通过STM32的PB5引脚控制光耦(PC817)导通,进而控制IGBT的开关状态。当PB5为低电平时,光耦导通,IGBT开启;当PB5为高电平时,光耦截止,IGBT关闭。
电容充电部分:
采用简单的开关控制电路,拨码开关打开时开始充电,充电电压为60V。
控制部分
整体设计思路如图所示,按键采用上拉电阻接法,后续可扩展舵机控制和串口通讯功能。
软件代码
时钟配置: 外部时钟
系统烧录方式:(具体方式略)
输入输出引脚配置: PB5输出,PB8、PB9采用外部中断
中断服务函数:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY1_Pin)
{
HAL_GPIO_WritePin(launch_GPIO_Port, launch_Pin, GPIO_PIN_RESET);
for(uint64_t j=0;j<150000;j++)
for(uint64_t i;i<100000;i++);
HAL_GPIO_WritePin(launch_GPIO_Port, launch_Pin, GPIO_PIN_SET);
for(short i;i<30000;i++);
}
if(GPIO_Pin == KEY2_Pin)
{
HAL_GPIO_WritePin(launch_GPIO_Port, launch_Pin, GPIO_PIN_SET);
for(short i;i<25000;i++);
}
}
主函数:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
key1=HAL_GPIO_ReadPin(GPIOB,KEY1_Pin);
key2=HAL_GPIO_ReadPin(GPIOB,KEY2_Pin);
HAL_GPIO_WritePin(launch_GPIO_Port, launch_Pin, GPIO_PIN_SET);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
key1=HAL_GPIO_ReadPin(GPIOB,KEY1_Pin);
key2=HAL_GPIO_ReadPin(GPIOB,KEY2_Pin);
}
/* USER CODE END 3 */
}
实验测试及结果
- 5V电压输出测试
- 3.3V电压输出测试
- 60V电压输出测试
实物图
项目资源
- PCB设计文件:嘉立创PCB设计链接
- 数据手册及测试代码:百度网盘链接(提取码:f6pn)