STM32F1基于H桥的电机控制程序分析
这里写自定义目录标题
- 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桥的电机控制程序分析相关推荐
- 两电平变流器matlab仿真,基于H桥级联型五电平逆变器Matlab仿真分析.doc
基于H桥级联型五电平逆变器Matlab仿真分析 基于H桥级联型五电平逆变器Matlab仿真分析 [摘 要]多电平逆变器广泛应用于电机调速等领域,本文在分析级联型逆变器的基础上,深入分析了SPWM控制技 ...
- h桥控制电机刹车_(2条消息) h桥控制电机刹车
01 H-桥电路基础 1.简介 你也许通过线上-线下的资料对于搭建H-桥电路有所了解,毕竟这些电路相对比较简单.但有些资料介绍H-桥电路比较精准,但有些差一点.当你实际使用桥电路的时候也许就会意识到, ...
- h桥控制电机刹车_082 电机驱动桥集成式的结构,定速比10左右,松油门或轻踩刹车瞬间,出现齿轮撞击的情况,是什么原因导致的?应该采取什么措施?...
神行问答082: 电机驱动桥集成式的结构,定速比10左右,松油门或轻踩刹车瞬间,出现齿轮撞击的情况,是什么原因导致的?应该采取什么措施避免? 参考答案: 参考答案1: 齿轮间隙无法完全消除,主要是标定 ...
- h桥控制电机刹车_控制直流电机正反转以及刹车电路设计 (转载)
一.直流电机 给接线端加上电源电机就会转动,加相反的电源电机就是朝相反的方向转动. 加个转接板是为了方便实验以及拆装.在电源位置并联了一个104电容,防止电机在转动过程中产生电火花以及滤波的作用. 锂 ...
- h桥控制电机刹车_51单片机H桥电路控制电机正反转和PWM调速
桥电路,控制电机的正反转和 PWM 调速, 程序是网上的, 改改引脚就能用,电路和 源程序如下: 功能: P1.1 按键停止, P1.2 左转, P1.3 右转, P1.0 调速 #include # ...
- 几款H桥电机驱动芯片直流有刷电机驱动芯片性能分析
如果您正在寻找一款高性能.可靠.集成度高.能实现卓越电流控制的H桥电机驱动芯片,那么下面介绍的芯片将是不错的选择. 这一系列芯片具有出色的功耗管理能力,以及多种保护功能,精确的电流检测和监控,能够确保 ...
- 基于STM32的电机--直流有刷电机H桥驱动的不同模式分析
文章目录 直流电机驱动设计 1.电机驱动硬件配置 2.电机驱动电路分析 简单正向电路 最简单的电机正反转电路 H桥电路分析 受限单极模式 单极模式 双极模式 减速电机的重要参数 直流电机驱动设计 1. ...
- 电路方案分析(十四)汽车电动座椅参考方案设计(H桥,高低边驱动器设计)
汽车电动座椅参考方案设计 tips:TI设计方案参考分析:TI Designs:TIDA-020008 双向和单向电机驱动器的电机驱动应用(如汽车电动座椅)的驱动和控制电路.它演示了如何驱动具有小电路 ...
- H桥驱动电机,STM32 PWM互补输出功能误用分析
如果排查的思路对你有帮助,请记住 消雨匆匆 or 大吊工. 码字和排查很累,仅此而已 硬件不是抄电路,拿烙铁,懂点软件,细致分析,找问题和破案搜集线索是一样的. 导航车设计项目中,一个新人设计了如下 ...
最新文章
- 《Datawhale年度学习总结报告》发布!
- 云服务器现安全漏洞及防护措施
- 要让机器人切土豆丝,英伟达首先给土豆建了个模
- MF_RC522_射频识别参考程序注释(2018年4月27号)
- java积分签到功能_大河客户端积分商城上线,看新闻就能换取各种超实用奖品,来约...
- Spread for Windows Forms快速入门(2)---设置Spread表单
- 重新定义旅游网站,米胖新版发布
- 用python直接调用asr技术_python中asr
- Master主动向Slave发送binlog?还是Slave主动向Master要binlog?
- firefox硬件加速 linux,全面启用 Firefox Youtube视频硬件加速
- 【硬石科技】电机系列教学(基于STM32)——舵机的控制
- 使用列表实现筛选法求素数
- 通过 jstack 与 jmap 分析一次线上故障
- python控制苹果手机触摸屏失灵怎么办_苹果6sp屏幕失灵怎么办 这些解决方法绝对最易学...
- 一文详解 OpenGL ES 纹理颜色混合
- 学习Python需要用的开发工具
- matlab精品课程视频,MATLAB 在线课程与学习资源 (2019版)
- MT6572 pixel显 示错位
- Edius7下载,安装,破解完整
- 【附白皮书下载】智能制造专家黄贞枝:如何用科学方法,让生产排程最优化?
热门文章
- 如何在idea中配置SVN
- cpua55和a53哪个好_哪种双核a73和四核a53智能电视更好?电视的64位CPU和双核
- 1. HTML学习笔记-2021年11月2日
- 推荐一个好用的JSON编辑器
- 天线巴伦制作和原理_传输线巴伦的原理设计制作及测试
- 计算机 英文缩写含义,常见计算机英文缩写含义
- nodejs shell交互_NodeJs交互式命令行工具Inquirer.js-开箱指南
- c语言中函数floor用法,C 库函数
- C# SolidWorks 二次开发 API ---读取零件相关属性
- 盘点国内MCU级RISC-V内核IP厂商