stm32 通过 IRS2101S 将驱动io 升压,再驱动 N沟道MOS管 IRF540NS

N沟道MOS管是通过 高电平导通 低电平禁止的

PWM1H PWM2H PWM3H 分别接 PA8 PA9 PA10 对应的是 TIM1的pwm 输出

PWM1L PWM2L PWM3L 分别接 PB13 PB14 PB15 对应的是 TIM1的pwm的互补 输出

本代码 采用 H_PWM L_ON 的驱动模式  就是 上臂管 采用 PWM 进行驱动 下臂管 直接打开或者关闭

TIM1的初始化,采用 PWM1 模式,有效电平为低电平,则每个pwm 周期 先低电平 后高电平, 高电平导通 mos管

#define H_PWM_L_ON       0
#define H_PWM_L_PWM     1
#ifndef _MOTOR_DRV_MODE_
#define _MOTOR_DRV_MODE_ H_PWM_L_ON
#endif#define MOTORU    PerpheralBit(GPIOB->ODR,13)      //D11
#define MOTORV  PerpheralBit(GPIOB->ODR,14)      //D10
#define MOTORW  PerpheralBit(GPIOB->ODR,15)      //D10void Tim1PwmGPIOInit(void)
{SetPinState(GPIOA,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10,GPIO_Mode_AF_PP);
#if(_MOTOR_DRV_MODE_==H_PWM_L_ON)SetPinState(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15,GPIO_Mode_Out_PP);MOTORU=0;MOTORV=0;MOTORW=0;
#endif
#if(_MOTOR_DRV_MODE_==H_PWM_L_PWM)SetPinState(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15,GPIO_Mode_AF_PP);
#endif
}void DcMotorTim1Init(INT32U pwm_period,INT32U frequency)
{NVIC_InitTypeDef NVIC_InitStructure;  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;TIM_BDTRInitTypeDef  TIM_BDTRInitStructure;Tim1PwmGPIOInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能 TIMx 外设TIM_DeInit(TIM1);TIM_TimeBaseStructure.TIM_Period = pwm_period-1;                            //设置自动重装载周期值TIM_TimeBaseStructure.TIM_Prescaler =TMRNCLK/frequency/pwm_period-1;       //设置预分频值 不分频TIM_TimeBaseStructure.TIM_ClockDivision = 0;                               //设置时钟分割:TDTS = Tck_tim            这里是 32MTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                 //向上计数TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);                               //初始化 TIMxTIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse =0;                                            //PWM占空比TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                   //上桥臂TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low ;                   //下桥臂TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;TIM_OC1Init(TIM1, &TIM_OCInitStructure);                                   TIM_OC2Init(TIM1, &TIM_OCInitStructure);TIM_OC3Init(TIM1, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);               TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;TIM_BDTRInitStructure.TIM_DeadTime = 0x6A;                                  //死区1.8us   TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;        TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);TIM_ClearFlag(TIM1, TIM_FLAG_Update);  TIM_ClearITPendingBit(TIM1, TIM_IT_Update);                            //清中断标志位TIM_ITConfig(TIM1,TIM_IT_Update ,ENABLE);                             //打开中断 TIM_Cmd(TIM1, ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE);#if 0  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
#endif}

通过串口 输入 字符 '0','1','2'...'5' 可以看到电机进i行转动一定的角度

#define PWM_TEST 60
void DemoTask(void *pt)
{INT32U d=0,hall;INT8U err;SysTick_CounterCmd(SysTick_Counter_Enable);                             //系统时钟开始计数  DcMotorTim1Init(256,1000);SetPinState(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8,GPIO_Mode_IPU);OSQPost(OSQDebug,(void*)'0');do{hall=(GPIOC->IDR>>6)&0x07;printf("按键:%d\r\n",hall);d=(INT32U)OSQPend(OSQDebug,0,&err);switch(d){case '0':MOTORU=MOTORV=MOTORW=0;TIM1->CCR1=PWM_TEST;            TIM1->CCR2=0;TIM1->CCR3=0;MOTORV=1;break;case '1':MOTORU=MOTORV=MOTORW=0;TIM1->CCR1=PWM_TEST;TIM1->CCR2=0;TIM1->CCR3=0;MOTORW=1;break;case '2':MOTORU=MOTORV=MOTORW=0;TIM1->CCR1=0;TIM1->CCR2=PWM_TEST;TIM1->CCR3=0;MOTORW=1;break;case '3':MOTORU=MOTORV=MOTORW=0;TIM1->CCR1=0;TIM1->CCR2=PWM_TEST;TIM1->CCR3=0;MOTORU=1;break;case '4':MOTORU=MOTORV=MOTORW=0;TIM1->CCR1=0;TIM1->CCR2=0;TIM1->CCR3=PWM_TEST;MOTORU=1;break;case '5':MOTORU=MOTORV=MOTORW=0;TIM1->CCR1=0;TIM1->CCR2=0;TIM1->CCR3=PWM_TEST;MOTORV=1;break;default:TIM1->CCR1=0;TIM1->CCR2=0;TIM1->CCR3=0;MOTORU=MOTORV=MOTORW=0;break;}MOTORU=MOTORV=MOTORW=0;OSTimeDly(OS_TICKS_PER_SEC/30);TIM1->CCR1=0;TIM1->CCR2=0;TIM1->CCR3=0;MOTORU=MOTORV=MOTORW=0;}while(1);
}

STM32驱动无刷直流电机学习(2)相关推荐

  1. 基于STM32的无刷直流电机无传感器调速系统代码和原理图

    说明:有代码和原理图 项目代码很全(是两个大项目,两个项目的区别是一个有传感器一个没有,其余实现功能都相同) 无感方波有 有传感器(霍尔元件)的编程也有 1: 基于STM32的无刷直流电机无传感器调速 ...

  2. 无刷直流电机学习(3)

    一.内容 此次学习主要完成了无霍尔传感器的电机的程序的学习理解和相关参数的认识. 二.知识点 三段式启动 三段式启动是在定时器TIM1的中断处理函数中.由于电机在静止时反电动势为0或者反电动势很低,无 ...

  3. 无刷直流电机学习笔记3

    一. 内容 本期学习的内容,主要是结合<现代永磁同步控制原理及MATLAB仿真>一书与网上材料,对三相PMSM坐标变换原理,三相电斥源逆变器 PWM 技术的基本原理以及三相 PMSM 矢量 ...

  4. 无刷直流电机学习笔记10

    一.内容 本期的学习内容主要是:基于基波数学模型的三相永磁同步电机无传感器控制,其重点是学习滑模观测器算法的相关原理,并对该算法进行详细的分析和建模,从而正确的认识PMSM是如何获得准确的转子位置及转 ...

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

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

  6. 9-基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献)

    基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献) 文章目录 基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT ...

  7. 【毕业设计】9-基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献)

    毕业设计]基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献) 文章目录 毕业设计]基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿 ...

  8. 无刷直流电机的无位置传感器控制学习笔记

    BLDC与PMSM关系 关于这个问题,很多人不太注意,我见过很多人把无刷直流电机和永磁同步电机不区分,以至于出现了正弦波无刷直流电机这样的叫法.实际上,在学校里面学习的时候,这个还是区分开的.一般把梯 ...

  9. BLDC无刷直流电机和PMSM永磁同步电机 基于stm32F1的有传感器和无传感驱动 直流无刷电机有传感器和无传感驱动程序

    BLDC无刷直流电机和PMSM永磁同步电机 基于stm32F1的有传感器和无传感驱动 直流无刷电机有传感器和无传感驱动程序, 无传感的实现是基于反电动势过零点实现的,有传感是霍尔实现. 永磁同步电机有 ...

最新文章

  1. DokiCam 360°4K相机:为极致运动爱好者而生
  2. 《WinForm开发系列之控件篇》Item22 HelpProvider(暂无)
  3. std string与线程安全_这才是现代C++单例模式简单又安全的实现
  4. openstack上传镜像失败_制作云window10镜像
  5. java.util.concurrent.FutureTask 源码
  6. Linux Redis自动化挖矿感染蠕虫分析及安全建议
  7. 基于zynq的千兆网udp项目_随时随地感受“沉浸式千兆体验”!海南互联网络迈入“三千兆”时代...
  8. 新闻上的文本分类:机器学习大乱斗 王岳王院长 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处
  9. IOS UIScrollView 滚动视图的使用和文档
  10. if shell 条件语句简写_shell中的if语句
  11. tql触发器修改记录时同步更新_运维日记|MySQL数据单向同步方案对比
  12. 一二线城市都有哪些互联网公司是大家都想去的?
  13. 苹果出现长方形透明框_安卓还像苹果用户所说用两年就卡吗?|安卓|安卓系统|安卓手机|苹果ios...
  14. 指数函数(复利)特性及个人发展
  15. 外行人都能看得懂的机器学习,错过了血亏!
  16. python设置代理_Python怎么设置代理
  17. (附源码)Python学生兼职平台系统 毕业设计 160938
  18. 机械臂速成小指南(零):指南主要内容及分析方法
  19. [热门]浅谈360主动防御(360提示)、瑞星主动及360实时查杀的免杀技巧
  20. 多年亿级流量下的高并发经验总结,我毫无保留的写在了这本书中(CSDN创始人、总裁、副总裁联合推荐)

热门文章

  1. 有限元数值分析方法:我们认识世界的工具
  2. 搭载高德地图车机版的天之眼智能后视镜开售 高德用户可享免单
  3. UML组件视图、部署图、包图简要说明
  4. 360安全桌面和360购物
  5. hpux- hp superdome9000 日常硬件故障处理总结
  6. ROS2——topic话题(八)
  7. gentoo freemind 安装设置
  8. 乖离性暗机器人_乖离性百万亚瑟王超级妖 暗机器人攻略详解
  9. 凯文凯利给年轻人的建议
  10. Arduino开发实例-DIY风速测量及显示