STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序
2021/7/13 20:10:52
本文主要是介绍STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这里是使用STM32F103系列,其他型号可能略有区别
1.首先HALL的IO口初始化
2.硬件HALL接口初始化
3.检测到hall信号变化会触发TIM5中断,中断处理进行电机换向
void HALL_IO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStre.GPIO_Pin=HALL_U_Pin|HALL_V_Pin|HALL_W_Pin;
GPIO_InitStre.GPIO_Mode=GPIO_Mode_IPU;//上拉输入
GPIO_InitStre.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStre);
}
/**********************************************************************/
//名称:void HALL_InterIO_Init(void)
//功能:HAll信号外部中断初始化
//参数:无
//返回:无
/**********************************************************************/
void HALL_InterIO_Init(void)
{
TIM_ICInitTypeDef TIM_ICInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
HALL_IO_Init();//Hall IO基本初始化
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
//不用初始化定时器
//CC1S=01 选择输入端 IC1映射到TI1上
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;// 注意只有一个通道|TIM_Channel_2|TIM_Channel_3;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;//双边沿触发
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_TRC;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//配置输入分频,不分频
TIM_ICInitStructure.TIM_ICFilter = 0x04;//滤波器
TIM_ICInit(TIM5,&TIM_ICInitStructure);
/* 配置TIM为中断源 */
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_SelectHallSensor(TIM5,ENABLE); //使能TIMx的霍尔传感器接口,同时异或映射
TIM_SelectInputTrigger(TIM5, TIM_TS_TI1F_ED); //输入触发源选择
TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset); //从模式选择为复位模式
TIM_SelectMasterSlaveMode(TIM5, TIM_MasterSlaveMode_Enable); //主从模式选择 使能
/* 允许更新中断 ,允许CC1IE捕获中断 */
TIM_ITConfig(TIM5, TIM_IT_Trigger, ENABLE);//
/* 使能定时器 */
// TIM_Cmd(TIM5, ENABLE);
TIM_ClearITPendingBit(TIM5,TIM_IT_Trigger);//清除触发中断标志
}
/**********************************************************************/
//名称:void EXTI15_10_IRQHandler(void)
//功能:Hall TIM5输入捕获中断服务函数
//参数:无
//返回:无
/**********************************************************************/
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5,TIM_IT_Trigger)!=RESET)
{
HAll_ChangePhase();//电机换相
}
TIM_ClearITPendingBit(TIM5,TIM_IT_Trigger);
}
这篇关于STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解