STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序
这里是使用STM32F103系列,其他型号可能略有区别
设置步骤:
1.首先HALL的IO口初始化
2.硬件HALL接口初始化
3.检测到hall信号变化会触发TIM5中断,中断处理进行电机换向
重点分析:
xx.TIM_Channel = TIM_Channel_1;是通道选择,这里只有通道1,也只能选择通道1,因为1/2/3通道最后都只能异或到通道1上,没有其他选择
xx.TIM_ICSelection = TIM_ICSelection_TRC;选择触发捕获,1/2/3通道被连在一起
TIM_SelectInputTrigger(TIM5, TIM_TS_TI1F_ED); //输入触发源选择,选择通道1
xx.TIM_ICFilter = 0x04;//重点说一下滤波器,数据手册上解释的不够清楚,这里TIM5的时钟频率是84MHz,1个周期时间=1/84 ns;如果TIM_ICFilter=0,说明采样一个周期的信号就作为有效判断信号,例如前一刻IN=0,下一刻IN=1,这时开始捕获电平,那捕获多长时间作为有效判断呢,这个参数就是决定这个的,如果设定上升沿有效,TIM_ICFilter=0说明只需要采集1个周期(1/84 ns)的电平信号就来判断是否是上升沿,如果TIM_ICFilter=8那就是采集8*1/81 ns这么长时间再判断是否有上升沿,如果中间有一次电平不一样,则重新采样计数,知道连续8次的电平一样才作为判断依据;
滤波器其实是为了抗干扰,因为会有电磁干扰进入引脚,就相当于按键的多次计数软件滤波
另外说明:使用定时器5计数溢出中断,这个是为了计算hall跳变换相时间间隔,用来计算速度
代码分享:
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);
//初始化定时器 84MHz
TIM_TimeBaseInitStre.TIM_Prescaler=84-1;//1MHz
TIM_TimeBaseInitStre.TIM_Period=0xFFFF-1;//计数65535=65.535ms
TIM_TimeBaseInitStre.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStre.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStre.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStre);
//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_ClearITPendingBit(TIM5,TIM_IT_Trigger);//清除触发中断标志
TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);//使能溢出中断
TIM_ClearITPendingBit(TIM5, TIM_IT_Update);//清除中断
TIM_ARRPreloadConfig(TIM5,ENABLE);//自动装载
TIM_Cmd(TIM5, ENABLE);//使能
}
/**********************************************************************/
//名称: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);
}
if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)
{
Count++;//溢出次数
TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
}
}
STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序相关推荐
- STC单片机驱动BLDC无刷直流电机(无HALL)官方示例
STC单片机驱动BLDC无刷直流电机(无HALL)官方示例 示例代码在STC8系列文档第20章里面:http://www.stcmcudata.com/STC8F-DATASHEET/STC8H.pd ...
- BLDC无刷直流电机和PMSM永磁同步电机 基于stm32F1的有传感器和无传感驱动 直流无刷电机有传感器和无传感驱动程序
BLDC无刷直流电机和PMSM永磁同步电机 基于stm32F1的有传感器和无传感驱动 直流无刷电机有传感器和无传感驱动程序, 无传感的实现是基于反电动势过零点实现的,有传感是霍尔实现. 永磁同步电机有 ...
- BLDC无刷直流电机和PMSM永磁同步电机
BLDC无刷直流电机和PMSM永磁同步电机 基于stm32F1的有传感器和无传感驱动 直流无刷电机有传感器和无传感驱动程序, 无传感的实现是基于反电动势过零点实现的,有传感是霍尔实现. 永磁同步电机有 ...
- ,bldc 无刷直流电机和pmsm永磁同步电机 主控TMS28335
28335主控,bldc 无刷直流电机和pmsm永磁同步电机 主控TMS28335,,有原理图,以下代码 三相异步电机 VF变频调速程序 三相永磁同步电机 无感 双闭环FOC程序 三相永磁同步电机 有 ...
- BLDC无刷直流电机仿真设计simulink 转速电流双闭环 调速系统 matlab simulink仿真
BLDC无刷直流电机仿真设计simulink 转速电流双闭环 调速系统 matlab simulink仿真 有整理好的文档,资料很详细,可以直接用,有参考资料, ID:3230671328383169 ...
- BLDC无刷直流电机转速控制Simulink模型(分别采用数学方法和SimScape库搭建,后者仿真效果更好)
BLDC无刷直流电机转速控制Simulink模型(分别采用数学方法和SimScape库搭建,后者仿真效果更好) 版本:marlab2018a,可生成低版本 算法采用PI控制 仿真时设期望转速为800r ...
- 基于STM32的无刷直流电机无传感器调速系统代码和原理图
说明:有代码和原理图 项目代码很全(是两个大项目,两个项目的区别是一个有传感器一个没有,其余实现功能都相同) 无感方波有 有传感器(霍尔元件)的编程也有 1: 基于STM32的无刷直流电机无传感器调速 ...
- BLDC(无刷直流电机)应用相关
1.基于XC866的直流无刷电机简易正弦波控制 http://blog.gkong.com/hushunlin_219521.ashx 2.无刷直流电机的PWM调制方式介绍 http://blog.g ...
- BLDC无刷直流电机之电机驱动的组成
1.组成 框图如下 五大组成分析: 1.MCU:主要是信号的处理,反馈信号故障信号的处理,同时会给出6路PWM波,给到门极驱动 2.门极驱动:带动功率器件,带动电机的旋转,电机也会给出转子的位置信号或 ...
最新文章
- linux 调用redis cli,使用redis-cli定时执行指定命令
- pytorch 笔记:tensorboardX
- CodeForces - 859C Pie Rules(dp+博弈)
- 判断groupbox中所有的edit是否为空,并给出空的哪个edit为空
- 你好a+b(非入门)
- TokenInsight:反映区块链行业整体表现的 TI 指数较昨日同期上涨9.79%
- python画超长图-python—networkx:求图的平均路径长度并画出直方图
- linux centos 系统php支持jpeg的安装方法
- 从零基础入门Tensorflow2.0 ----九、44.5 keras转换成具体函数
- MAXScript学习笔记(1)
- git通过http的方式下载和提交代码
- 诺基亚系列手机型号命名研究(转)
- 菜鸟、小白在autojs和冰狐智能辅助之间如何选择?
- 保龄球计分c语言程序,求C语言代码解释(保龄球记分程序)
- java学习笔记-良葛格_Java良葛格 学习笔记
- Python 获取网站证书有效期
- Win7 注册ocx控件 “DllRegisterServer的调用失败,错误代码为0x80040200 ”
- 计算机重镜像网络文件夹位置,利用备份的Win10映像系统文件还原win10的教程
- 基于区块链的Smart系统-题库及试卷管理模块的设计与开发
- 用计算机怎么弹出凉凉这首歌,凉凉歌词的意思是什么 凉凉歌曲表达的意思
热门文章
- 一二线城市地王频出 供应加量能否房价“去火
- 区块链技术的安全价值与局限性解析
- 孪生素数的最优解(应该)
- win7下运行Excel2007,出现“向程序发送命令时出现问题”的解决
- 轻触开源(三)-Gson项目源码解析_贰
- 为什么需要每年重新签发SSL证书?
- 链塔智库|区块链产业要闻及动态周报(2021年8月第4周)
- Pytorch → ONNX → TensorRT
- C++数据结构——小明的通讯录(哈希表线性探测法)
- LLMs之Alpaca:《Alpaca: A Strong, Replicable Instruction-Following Model》翻译与解读