STM32 直流电机 转速比
这次做的05年的电子设计竞赛题目,运动悬挂系统。。本实验是控制两个步进电机通过一个定滑轮用线挂一个重物,并使这个重物走直线。。
首先对定时器进行配置。
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period = 8; //中断时间为 T = ( TIM_Period + 1 )*( TIM_Prescaler + 1 )/TIMxCLK(72MHZ) = 10(-6) s
TIM_TimeBaseStructure.TIM_Prescaler = 7;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ClearFlag( TIM3, TIM_FLAG_Update);
TIM_ITConfig( TIM3, TIM_IT_Update, ENABLE);
}
然后写画直线的函数,思路如下,将起点和终点的坐标作为函数的传递参数。通过计算起点和终点到两个滑轮之间的距离差可以算出两个电机在这段时间转过的距离。。因为时间是相同的,所以令两个电机的速度比等于通过计算得到的距离比即可。。具体代码如下:
void Draw_Line(float x1, float y1, float x2, float y2)
{
float L1, L2; //起始点到滑轮距离之差
float sulv; //两个电机转速比
L1 = sqrt((x1 + 15)*(x1 + 15) + (115 - y1)*(115 - y1)) - sqrt((x2 + 15)*(x2 + 15) + (115 - y2)*(115 - y2));
L2 = sqrt((95 - x1)*(95 - x1) + (115 - y1)*(115 - y1)) - sqrt((95 - x2)*(95 - x2) + (115 - y2)*(115 - y2));
if(L1>0) //控制电机正反转
GPIO_SetBits(GPIOA,GPIO_Pin_6);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
if(L2>0)
GPIO_SetBits(GPIOA,GPIO_Pin_7);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
L1 = fabs(L1);
L2 = fabs(L2);
countL = L1/0.0006; //计算出走完L1、L2所需脉冲数,,0.0006是通过几组数据计算出来的。。
countR = L2/0.0006;
sulv = countL*170.0 /countR;
suduL = sulv;
suduR = 170; //算出两个电机发生电平翻转产生脉冲的时间比
count = 0;
countLR =0;
TIM_Cmd(TIM3, ENABLE); //定时器开始计时
}
中断服务程序中的内容是定时器到达两个电机规定的发生电平翻转的时间的倍数是翻转电平,产生脉冲驱动电机运动。
void TIM3_IRQHandler(void)
{
if((countLR == (countL*2)))
TIM_Cmd(TIM3, DISABLE); //两个电机运动完成,,关定时器
count++; //开始计时
if( !(count % suduR) )
{
if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4)==0)
GPIO_SetBits(GPIOA,GPIO_Pin_4);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
countLR++; //记录电平翻转次数,即脉冲数的一半
}
if( !(count % suduL) )
{
if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5)==0)
GPIO_SetBits(GPIOA,GPIO_Pin_5);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
}
/*防止定时器溢出*/
if(count == suduL*suduR)
{
count=0;
}
TIM_ClearFlag(TIM3, TIM_FLAG_Update); //一定不要忘记清除中断位
}
STM32 直流电机 转速比相关推荐
- stm32直流电机控制—PID算法篇
stm32直流电机控制-PID算法篇 一.常用的控制算法 1.控制系统的基本结构: 2.常用控制算法:位式控制 ①二位式控制算法 ②.具有回差的二位式控制算法 ③三位式控制算法 ④小结 二.PID控制 ...
- stm32直流电机PID控制hal库(Cubemx)
stm32直流电机PID控制hal库(Cubemx),一步步手把手教你怎么配置cubemx怎么写代码. 未对pid就行深入解析,不过相信您通过配置和写代码以后大概可以知道pid的主要作用. 文章目录 ...
- STM32——直流电机PI调速
所需元件 STM32F103开发板.L298N一个.带编码器的直流电机一个(如下图所示,淘宝上有很多) 系统框图 通过系统框图,我们需要做两件事,一是要测速,二是要调节.测速目前流行的就是通过 ...
- 视频手势画图python_如何裁剪视频
视频手势画图python During a recent episode of the Script and Style podcast, I had noticed that the video r ...
- 开环零点与闭环零点对系统的影响
在STM32--直流电机PI调速中,得到了小电机的传递函数 以这个电机为例展开开环零点与闭环零点对电机响应的影响.系统中极点是影响系统动态性能以及稳定性的主要因素,这里不做赘述. 开环零点对系统响 ...
- 三相直流无刷电器驱动器(BLDC)
三相无刷直流电机驱动设计 说明 所有的硬件和代码已经开源,请移步代码开源连接 首先这个项目这个是自己学习的时候做的,目前已经验证霍尔有感方案,其他的还没验证. 如果当中存在问题,欢迎评论区一起讨论. ...
- K_A08_004 基于 STM32等单片机驱动MX1919模块按键控制直流电机正反转加减速启停
目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 1.MX1919模块驱动时序 2.对应程序: 3.PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MX1919 ...
- 基于STM32单片机的直流电机控制系统加减速正反转设计方案原理图程序
硬件电路的设计 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STM32F103C8T6单片机核心板电路+L298N电机驱动电路+按键电路+电源电路组成. 1.通过按键可以控制电 ...
- STM32单片机直流电机PID速度控制正反转控制(霍尔磁铁测速)LCD1602
实践制作DIY- GC0116-直流电机PID速度控制 一.功能说明: 基于STM32单片机设计-直流电机PID速度控制 功能介绍: STM32F103C系列最小系统+LCD1602+直流电机+磁铁+ ...
- K_A08_013 基于 STM32等单片机驱动大功率MOS管模块按键控制直流电机加减速启停
目录 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 大功率MOS模块驱动 对应程序: 四.部分代码说明 接线说明 STC89C52RC+大功率MOS模块 STM32F103C8T6+大功率 ...
最新文章
- HDU2215(最小圆覆盖问题)
- 记录避免一些逻辑问题的过程
- Linux 批量依赖库拷贝(ldd)
- Qt / 伪状态和子部件
- LocalDateTime 的常用操作
- java中的局部变量、成员变量、类变量
- 英语四级c语言,2017年大学英语四级精选试题练习
- 程序员一年稳赚50w,却被群嘲只造改bug!TA说:2020年我的愿望是........
- 3.字符串(string)
- 双边滤波方法原理与代码实践(附完整代码)
- Raki的统计学习方法笔记0x9章:EM算法及其推广
- 通达信自带指标 阶段放量(c112)
- 正定矩阵,半正定矩阵,负定矩阵的通俗理解
- 关于NLSSORT和NLS_SORT的用法
- 11.0高等数学五-函数项级数收敛与一致收敛
- .satan勒索病毒加密文件恢复手记
- untiy实现文本滚动
- 2023年的 苹果iPhone15/Pro 将有哪些变化
- ORA-01439: 要更改数据类型, 则要修改的列必须为空
- 华为日历登录qq邮箱的解决方案