这里写自定义目录标题

  • N-MOS H桥结构
    • 控制原理
    • MOS驱动
    • 调速的实现
    • 控制程序编写

N-MOS H桥结构

控制原理

N-MOS的G极与S级的电压差大于某一值的时候,D极和S极之间导通,DS电阻极小,可看作导线,否则DS之间视为断路。

因此有以下控制方法
当 Signal-A 和 Signal-D > 24V+VGS
且Signal-B 和 Signal-C < 24V+VGS 的时候,
MOSA和MOSD视为导通,BC断开,电流从左至右流过电机使之旋转。
反之,
当 Signal-B 和 Signal-C > 24V+VGS
且Signal-A 和 Signal-D < 24V+VGS的时候,
MOSB和MOSC视为导通,AD断开,电流从右至左流过电机使之反转。

MOS驱动

因为不借助外部电路的话,芯片不可能提供一个大于24V+VGS的信号,所以在H桥电路中会用到MOS驱动芯片。
一般来讲,
MOS驱动的信号输入端接单片机PWM输出。
控制几个MOS就需要接几个输入信号。
电源输入端需要从外部接入高电压(高到足以导通MOS管)。
信号输出端接MOS的G极。
例如上图即为某一款MOS驱动芯片的数据手册提供的经典电路图。
其中HIN和LIN为上下桥臂信号输入。
HO和LO为上下桥臂信号输出,也就是上文的Signal-ABCD。
Vcc为芯片工作所需电压。
VB和VS就是上下桥臂输出信号的电源(一个绝对电压,一个偏移电压)。
二极管和电容用于升压,VCC和GND之间电容用于滤波。
工作的时候就这样:
LIN = 0 则 LO = 0
LIN = 1 则 LO = 1
HIN 和 HO同理。

调速的实现

通过上面对MOS驱动的了解,我们可以得知在驱动芯片输入端给1,输出端会输出1,给0就输出0。
那么我们就可以输入一个低压PWM信号来得到一个高压PWM信号。这样就可以控制MOS的导通与否来改变电机两端电压的波形,从而改变电机的电流,实现电机的调速。

(要是想采集电机的电流的话,在两个下桥臂MOS和GND之间接一个数毫欧的大功率电阻就可以实现。)


/***********************/

1.受限单极模式
A:PWM B:OFF C:OFF D:ON
当PWM高电平时,电机两端分别为24V和GND,有电流流过,电机产生扭矩,进行转动。
当PWM低电平时,电机两端未导通,不形成闭合回路,没有电流流过,此时电机的转动没有力来维持,难以控制。

优点:控制方法简单,一个单独PWM即可进行控制。
缺点:控制效果不好,稳定性也差。


2.单极模式
A:PWM B:OFF C:互补PWM D:ON

大致跟受限单极模式相同,但是当A信号为0时,C信号1,此时电机两端虽然都是与GND相连,但是此时形成了闭合回路,如下图。

电机中仍然有电流流过,虽然电流会减小,但是仍会产生磁场,仍会产生力矩来继续控制电机转动。

优点:转动时力的连续性好,启动速度快。
缺点:速度快要接近0时没有上图中2阶段的电流控制,此时与受限单极模式缺点相同。

3.双极模式
A:PWM B:PWM2 C:互补PWM D:互补PWM2

双极模式下,AB为互补的PWM,CD分别是他们的互补信号,在AD导通时电流方向如下
然后下一时刻AD断开,BC导通,电流方向如下

在此时刻,电流会沿着原来的方向减小,如果此时间更长,电流会减为0后反向增加。

最终电机的转动方向就由PWM和PWM1共同决定。
若A的PWM占空比高于50%则电流从左至右,
若低于50%则从右至左。

优点:继承单极模式优点的基础下,在速度快要接近于0时也可以提供一定的力矩,加减速性能更好,因此正反转的性能优于单极模式。控制效果好。
缺点:控制更复杂,工作时4个MOS都在工作,功耗大。

控制程序编写


基于电路设计程序
由图可知,
PWM用的是TIM1的通道3生成
PWM-N是用TIM1的通道3的互补通道生成
PWM1用的是TIM1的通道2
PWM1-Nxxxxxxxxxxxxxx2的互补通道

先配置PWM生成

在这里插入代码片
void Pwm_Init(void)
{GPIO_InitTypeDef           GPIO_InitStructure;TIM_TimeBaseInitTypeDef      TIM_TimeBaseStructure;TIM_OCInitTypeDef         TIM_OCInitStructure;TIM_BDTRInitTypeDef         TIM_BDTRInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO ,ENABLE);//时钟使能GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIOA初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//GPIOB初始化TIM_DeInit(TIM1);TIM_TimeBaseStructure.TIM_Prescaler = 2;//预分配系数TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned2;//计数模式TIM_TimeBaseStructure.TIM_Period = 700;//PWM的周期值TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//pwm模式TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Disable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; //此处将输出和互补输出先都关闭//到时候确定控制模式后再改//单极模式和双极模式需要打开互补通道TIM_OCInitStructure.TIM_Pulse =700;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;//此处极性设置也可以后面更改CCER来改变TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;TIM_OC2Init(TIM1,&TIM_OCInitStructure);TIM_OC3Init(TIM1,&TIM_OCInitStructure);//通道2,3初始化TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;TIM_BDTRInitStructure.TIM_DeadTime = 100;//死区时间TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;TIM_BDTRInitStructure.TIM_BreakPolarity =  TIM_BreakPolarity_Low;TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);//重装载使能TIM_SelectInputTrigger(TIM1, TIM_TS_ITR2);//选择触发源TIM_CtrlPWMOutputs(TIM1,ENABLE);TIM_Cmd(TIM1,ENABLE);
}

根据电路不同,配置也有差距。

配置好之后就是根据不同控制模式来编写控制程序了。

模式 TIM1 CH2 TIM1 CH2N TIM1 CH3 TIM1 CH3N
受限单极模式 (正转) 1 0 0 0
受限单极模式 (反转) 0 0 1 0
单极模式(正转) 1 1 0 0
单极模式(反转) 0 0 1 1
双极模式 1 1 1 1

大家可以根据自己的电路来列出像我这个表一样的配置表
然后在CCER寄存器修改即可
例如,单极模式的正反转
speed是我们输入的占空比,speed<周期。

void set_pwm(int speed)
{if(speed > 0){TIM1->CCER = 0x10;//这个值不懂的话继续往后看}else if(speed < 0){TIM1->CCER = 0x0100;//CCER中输出极性根据自己的需要可以改speed = -speed;}speed = 700 - speed;if(speed <= 10) {speed = 10;}TIM1->CCR2=speed;TIM1->CCR3=speed;
}

其中CCER的值需要通过上面的表和接下来这个表来确定

上图未截完,0位是CC1E:通道1输出使能

例如我要使能CH2
那么CH2使能这一位就是1,否则是0。
如下:
受限单极正转:000000000010000 = 0x10
受限单极反转:000000100000000 = 0x100
单极模式正转:000000001010000 = 0x50
单极模式反转:000010100000000 = 0x500
双极模式正反:000010101010000 = 0x550

至此控制程序也完毕了。

注:在单极模式下和受限单极模式下,改变CCER值后一定要记得将另一边桥臂的信号给出一高一低。
最简单的方法就是GPIO_SetBits()和GPIO_ResetBits()。
不过更实用的方法就是直接在CCER中一起改变。

 TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;

因为之前的配置中我们使能了OSSR,那么对应下表圈出来的地方。

OCx=CCxP,OCxN=CCxNP

也就是
通道x输出=CCxP的值,通道x互补通道的输出=CCxNP的值。
CCxP=0则通道x为低电平,CCxP=1则通道x为高电平。

那么据此我们就可以在CCER中直接写入CCxP和CCxNP来控制另一边桥臂的高低电平。
那么在单极模式中,
正转:CCER: 0000 1000 0101 0000 = 0x850
反转:CCER: 0000 0101 1000 0000 = 0x580

STM32F1基于H桥的电机控制程序分析相关推荐

  1. 两电平变流器matlab仿真,基于H桥级联型五电平逆变器Matlab仿真分析.doc

    基于H桥级联型五电平逆变器Matlab仿真分析 基于H桥级联型五电平逆变器Matlab仿真分析 [摘 要]多电平逆变器广泛应用于电机调速等领域,本文在分析级联型逆变器的基础上,深入分析了SPWM控制技 ...

  2. h桥控制电机刹车_(2条消息) h桥控制电机刹车

    01 H-桥电路基础 1.简介 你也许通过线上-线下的资料对于搭建H-桥电路有所了解,毕竟这些电路相对比较简单.但有些资料介绍H-桥电路比较精准,但有些差一点.当你实际使用桥电路的时候也许就会意识到, ...

  3. h桥控制电机刹车_082 电机驱动桥集成式的结构,定速比10左右,松油门或轻踩刹车瞬间,出现齿轮撞击的情况,是什么原因导致的?应该采取什么措施?...

    神行问答082: 电机驱动桥集成式的结构,定速比10左右,松油门或轻踩刹车瞬间,出现齿轮撞击的情况,是什么原因导致的?应该采取什么措施避免? 参考答案: 参考答案1: 齿轮间隙无法完全消除,主要是标定 ...

  4. h桥控制电机刹车_控制直流电机正反转以及刹车电路设计 (转载)

    一.直流电机 给接线端加上电源电机就会转动,加相反的电源电机就是朝相反的方向转动. 加个转接板是为了方便实验以及拆装.在电源位置并联了一个104电容,防止电机在转动过程中产生电火花以及滤波的作用. 锂 ...

  5. h桥控制电机刹车_51单片机H桥电路控制电机正反转和PWM调速

    桥电路,控制电机的正反转和 PWM 调速, 程序是网上的, 改改引脚就能用,电路和 源程序如下: 功能: P1.1 按键停止, P1.2 左转, P1.3 右转, P1.0 调速 #include # ...

  6. 几款H桥电机驱动芯片直流有刷电机驱动芯片性能分析

    如果您正在寻找一款高性能.可靠.集成度高.能实现卓越电流控制的H桥电机驱动芯片,那么下面介绍的芯片将是不错的选择. 这一系列芯片具有出色的功耗管理能力,以及多种保护功能,精确的电流检测和监控,能够确保 ...

  7. 基于STM32的电机--直流有刷电机H桥驱动的不同模式分析

    文章目录 直流电机驱动设计 1.电机驱动硬件配置 2.电机驱动电路分析 简单正向电路 最简单的电机正反转电路 H桥电路分析 受限单极模式 单极模式 双极模式 减速电机的重要参数 直流电机驱动设计 1. ...

  8. 电路方案分析(十四)汽车电动座椅参考方案设计(H桥,高低边驱动器设计)

    汽车电动座椅参考方案设计 tips:TI设计方案参考分析:TI Designs:TIDA-020008 双向和单向电机驱动器的电机驱动应用(如汽车电动座椅)的驱动和控制电路.它演示了如何驱动具有小电路 ...

  9. H桥驱动电机,STM32 PWM互补输出功能误用分析

    如果排查的思路对你有帮助,请记住 消雨匆匆 or  大吊工. 码字和排查很累,仅此而已 硬件不是抄电路,拿烙铁,懂点软件,细致分析,找问题和破案搜集线索是一样的. 导航车设计项目中,一个新人设计了如下 ...

最新文章

  1. 《Datawhale年度学习总结报告》发布!
  2. 云服务器现安全漏洞及防护措施
  3. 要让机器人切土豆丝,英伟达首先给土豆建了个模
  4. MF_RC522_射频识别参考程序注释(2018年4月27号)
  5. java积分签到功能_大河客户端积分商城上线,看新闻就能换取各种超实用奖品,来约...
  6. Spread for Windows Forms快速入门(2)---设置Spread表单
  7. 重新定义旅游网站,米胖新版发布
  8. 用python直接调用asr技术_python中asr
  9. Master主动向Slave发送binlog?还是Slave主动向Master要binlog?
  10. firefox硬件加速 linux,全面启用 Firefox Youtube视频硬件加速
  11. 【硬石科技】电机系列教学(基于STM32)——舵机的控制
  12. 使用列表实现筛选法求素数
  13. 通过 jstack 与 jmap 分析一次线上故障
  14. python控制苹果手机触摸屏失灵怎么办_苹果6sp屏幕失灵怎么办 这些解决方法绝对最易学...
  15. 一文详解 OpenGL ES 纹理颜色混合
  16. 学习Python需要用的开发工具
  17. matlab精品课程视频,MATLAB 在线课程与学习资源 (2019版)
  18. MT6572 pixel显 示错位
  19. Edius7下载,安装,破解完整
  20. 【附白皮书下载】智能制造专家黄贞枝:如何用科学方法,让生产排程最优化?

热门文章

  1. 如何在idea中配置SVN
  2. cpua55和a53哪个好_哪种双核a73和四核a53智能电视更好?电视的64位CPU和双核
  3. 1. HTML学习笔记-2021年11月2日
  4. 推荐一个好用的JSON编辑器
  5. 天线巴伦制作和原理_传输线巴伦的原理设计制作及测试
  6. 计算机 英文缩写含义,常见计算机英文缩写含义
  7. nodejs shell交互_NodeJs交互式命令行工具Inquirer.js-开箱指南
  8. c语言中函数floor用法,C 库函数
  9. C# SolidWorks 二次开发 API ---读取零件相关属性
  10. 盘点国内MCU级RISC-V内核IP厂商