STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序

2023-05-16

这里是使用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);
    }


}    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序 的相关文章

  • udacity上Google的深度学习笔记

    Udacity上deeplearning这门课是google开的 xff0c 介绍了常见的几种深度神经网络模型 xff0c 同时还附带了几个练习 xff0c 并且练习用的工具都是tensorflow xff0c 所以既可以学习一下神经网络的

随机推荐

  • maven插件解决项目中静态资源版本问题

    产品从第一次上线后 xff0c 迭代发了两个版本了 由于含web客户端 xff0c 由于浏览器的静态资源缓存策略 xff0c 出现了静态资源的版本管理问题 开发人员每次修改完js或css文件后都需要自己在html文件中修改版本号 xff0c
  • samba服务

    samba服务的完整配置 xff1a 配置centos6与centos7文件之间的共享 1 xff09 以centos6为服务端 xff0c 安装samba服务 root 64 centos6 yum install samba y 2 x
  • XML 根级别上的数据无效。 行 1,位置 1

    上午 xff1a 将XML数据保持到数据中 xff0c 从数据库提取XML 顺利通过 下午 xff1a 一键还原电脑 xff0c 重新打开VS2010运行程序 xff0c 从数据库提取XML报错 根级别上的数据无效 行 1 xff0c 位置
  • 接触客户、接触业务、来谈我的感触

    很久没有做工作总结 xff0c 今天记录下我今年接触客户的一些感触 以前是一个刚入门的开发新人 xff0c 刚进公司感觉公司的开发能力不行 xff0c 没有一套成熟的框架 xff0c 没有美工 xff0c 已经开发出的软件界面很丑 自己开发
  • 走过2011

    走过2011 时间飞逝 xff0c 2011不寻常的一年还剩下短短5天 三百天的生活与工作是一份平淡一份快乐 工作需要总结 生活也要总结 日子才会越来越好 xff01 2011是进入公司的第二年 公司开发人员有来有离 xff0c 我没有离开
  • Error: This command has to be run with superuser privileges (under the root user on most systems).

    意思是错误 xff1a 此命令必须以超级用户权限 xff08 在大多数系统上以root用户权限 xff09 运行 所以当前的用户是普通用户 xff0c 需要切换为超级用户 xff08 root用户 xff09 先输入在命令行中输入 su r
  • P200 7

    lt img src 61 34 https img blog csdn net 20150518130711865 watermark 2 text aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWXVTb25nNDg2OQ 6
  • 设计一个支持多版本的APP的后端服务

    以注册为例子的说明 我们以我们的用户中心的注册为例子我们实现的非常简单就是做一个校验 xff0c 校验成功之后 xff0c 把用户注册的数据入库即可 随着我们产品的迭代注册肯定没有这么简单 比如说我需要填写一个电话号码并且拿到验证码并验证正
  • 嵌入式工程师“中年危机”应对策略上

    嵌入式工程师 中年危机 的问题 xff08 这是个普遍现象 xff09 xff0c 当然 xff0c 面向对象不只是程序猿 众所周知 xff0c 钱 是个好东西 xff0c 能帮你解决90 的烦恼 xff0c 剩下的10 当然也可以用这东西
  • ROS实现串口解析GPS协议,并发布到话题

    1 串口配置 ROS串口编程学习笔记 xff1a https blog csdn net u014695839 article details 81209082 ROS系统的串口数据读取和解析 xff1a https blog csdn n
  • python3中input()回车不结束,改为另起一行

    参照 lst 61 while True x 61 input if len x 61 61 0 break lst append x upper for line in lst print line
  • 使用STM32 ST-LINK Utility 烧录程序,ST LINK烧录程序,解锁FLASH

    关键词 xff1a ST LINK烧录程序 xff0c STLINK烧录程序 xff0c ST LINK烧录程序 xff0c STLINK烧录程序 xff0c ST LINK解锁Flash 1 读取STM32内部FLASH及芯片信息 使用S
  • 串口调试助手,串口监控,虚拟示波器,串口示波器,网络调试工具 网络抓包监控 Wireshark.

    嵌入式开发工具收集 目录 嵌入式开发工具收集 1 串口调试工具 xff1a Xshell 6 2 串口调试工具 xff1a 界面炫 xff0c 开源软件 MobaXterm Portable v20 6 3 串口虚拟示波器1 xff1a D
  • 小米2020校招软件开发工程师笔试题一

    1 下列关于设计模式说法错误的是 xff08 B xff09 A 装饰器模式在实现过程中一般不会更改被封装对象的接口定义 B 适配器模式以不改变被适配对象的接口定义为目的对其进行改造 C 用饿汉方式实现的单例模式是不能够被继承的 D 简单工
  • 使用STM32与MAX30102实现的较为稳定的血氧算法

    现阶段网络上的算法读出的血氧值较为不稳定 xff0c 且许多情况下无法得出有效值 xff0c 本算法的原理见 xff1a MAX30102 血氧调试笔记 Yulong u012183892 CSDN博客 max30102 为了控制传感器采样
  • 通过代码测试算法的性能--以排序算法为例

    我们编写一个计算 xff08 算法执行时间 xff09 的函数来测试算法的性能 xff0c xff08 即本文性能把算法执行时间的长短作为标准 xff09 这里以排序函数为例作为被测函数 include lt iostream gt inc
  • Javascript 和vue使用for in 遍历array,取值和类型差异

    1 xff0c Javascript 使用for in 遍历 Array 在 Javascript 中是一个对象 xff0c Array 的索引是属性名 此处输出的索引值 xff0c 即 0 1 2 不是 Number 类型的 xff0c
  • 一文通俗搞懂线性无关特征向量个数≤特征值重数

    线代有个很难理解的知识点 xff0c 即同一特征值的线性无关特征向量个数要小于等于特征值重数 这个结论是怎么来的呢 xff1f 本文用最朴素的证明来帮助大家弄懂这个知识点 xff08 结论推导所用的都是基础的线代知识 xff0c 只是有些数
  • fatal: The remote end hung up unexpectedly解决方案

    在使用 git 更新项目时遇到了这句报错信息 xff1a fatal The remote end hung up unexpectedly 尝试了以下两种方法 xff1a 修改缓存大小 git config global http pos
  • STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序

    这里是使用STM32F103系列 xff0c 其他型号可能略有区别 设置步骤 xff1a 1 首先HALL的IO口初始化 2 硬件HALL接口初始化 3 检测到hall信号变化会触发TIM5中断 xff0c 中断处理进行电机换向 重点分析