当前位置: 首页 > news >正文

学习STC51单片机35(芯片为STC89C52RCRC)智能小车3(PWM调速小车)

每日一言

        生活不会辜负每一个用力奔跑的人,你只管努力,时间自有答案。

案例:PWM调速小车

回忆一下有更加了解:

PWM(脉冲宽度调制)是一个通用的控制概念,其核心是通过调节脉冲信号的占空比来实现对目标对象的控制。由于这一特性,PWM 技术被广泛应用于电子、电机控制、通信、电源管理等多个领域的各类模块和系统中。以下是具体说明:

是的!PWM 调速的核心就是通过计算平均电压来控制负载(如电机、LED 等)的能量输入。


小车 PWM 调速的核心原理并非利用惯性,而是通过脉冲宽度调制技术来控制电机的平均电压,从而调节转速。不过,在实际应用中,电机的机械惯性会影响调速的动态响应效果。以下是具体分析:

一、PWM 调速的基本原理

1. PWM(脉冲宽度调制)的工作机制
  • 方波信号:通过微控制器(如 Arduino、STM32)输出高频方波信号(通常频率为 10-20kHz),信号的周期固定,但高电平持续时间(脉冲宽度)可调
  • 占空比:高电平时间占整个周期的比例,例如占空比 50% 表示方波一半时间为高电平,一半为低电平。
  • 平均电压控制:电机两端的平均电压与占空比成正比。例如,占空比 100% 时电机接全电压(全速),占空比 50% 时平均电压为电源电压的一半,转速相应降低。
2. 电机的响应特性
  • 直流电机:在 PWM 信号作用下,电机通过电感的续流效应(非惯性)维持连续转动。当方波为高电平时,电机通电加速;低电平时,由于电感存在,电流不会立即中断,而是通过续流二极管维持回路,电机依靠电磁惯性(而非机械惯性)继续转动。
  • 转速与占空比的关系:在理想情况下(忽略摩擦、负载等),电机转速与 PWM 占空比近似线性相关。

二、惯性在调速中的作用

虽然 PWM 调速的核心是电气控制,但机械惯性会影响调速的动态过程:

1. 加速 / 减速时的惯性延迟
  • 当增大占空比(提高目标转速)时,电机需要克服负载的机械惯性(如小车质量、车轮摩擦)才能达到新转速,因此转速不会瞬间跳变,而是有一个上升过程。
  • 反之,减小占空比时,电机也不会立即停转,而是因机械惯性逐渐减速。
2. 惯性对控制精度的影响
  • 在需要快速启停或精确调速的场景中(如机器人避障),机械惯性可能导致调速滞后,需通过 PID 控制算法补偿,而非依赖惯性本身。

三、常见误区:惯性与续流的区别

  • 续流效应(电磁惯性):由电机电感和续流二极管引起,确保 PWM 低电平时电流连续,属于电路特性,与机械惯性无关。
  • 机械惯性:指电机转子和小车运动部件的惯性质量,影响转速变化的快慢,是物理特性。

四、总结

  • 核心原理:PWM 调速通过调节占空比改变电机平均电压,实现转速控制,本质是电气控制,而非利用惯性。
  • 惯性的角色:机械惯性会影响调速的动态响应速度,但属于被动的物理特性,不是调速的原理依据。
  • 应用建议:若需提高调速精度,可结合 PID 算法补偿惯性延迟,或选择低惯性电机(如空心杯电机)以提升响应速度。

我的话来总结一下哈:PWM就是计算平均电压,平均电压大就快,小就慢,这个电压大小与每个周期内的高电平占空比有关,也就是,高电平的时间占比越大,那么电压就越大,反则越慢

OK我们来写代码:

我将会将每一段代码的下方进行代码块解释

main.c文件里面是要将我们的定时器初始化函数调用,  还有一点这个extern我之前讲过,这个关键字就是需要用到本工程其他.c文件的数据的时候,因为我们也不可能去自己定义一个,本身就是错误的思想,因为县长村长和村长张三是不一样的,而且变量也不允许重复定义语法层面也会报错,正确用法是当main.c文件需要使用time0.c文件的speed数据,那么我们使用这个关键字就可以直接使用time0.c的speed数据了

好的while里面就是把speed分别切换成18和40,当18的时候就是占空比为45%,那么就是平均电压也只有2.7v了(我是4节电池共6v),所以小车就慢了嘛,如果看实际的现象也很明显,一个轮子转得快一个转得慢

这个是延时函数

我们PWM肯定是要配置定时器的,这个是毋庸置疑的,因为PWM就是需要我们配置高低电平的各自占用时长,那么我们要定一个好计算的基础单位,比如这边我们使用0.5ms作为基础单位,因为我们知道我们使用的是50hz的频率,所以周期是20ms  20ms怎么算的(1/50=0.02s ->20ms )  20ms正好是40个0.5ms这样有利于我计算高电平的占空比。 当然了也可以自己配置其他的定时和频率,像我们这个L9110s这个电机是可以适配50hz的,但是也有其他的频率比如1khz 等等

这边就是我们的定时器中断,上一段代码是配置定时器,这个是中断函数,也是配置PWM波形的主要核心区,我们控制0.5ms的数量来模拟高电平的占空比,这边我们定义一个count是为了累加0.5ms 的数量,speed就是高电平的数量了,count会去检测是否高电平的数量是否到达speed的值,如果到了,那么就将剩下的时间全部转换成低电平,这样我们仅需要在main.c文件里面将speed赋值,我们想要的占空比越高也就是speed越高但是小于40,越高电压就越大,那么就小车的速度越快。反之越慢。

dalay.h头文件声明函数

motor.h声明函数

time0.h声明函数

相关文章:

  • 算法: 和为 K 的子数组
  • 海外打车代驾app订单系统框架搭建
  • 芯片电感需求趋势及选型关键因素
  • 英语作文模板
  • 若以floeable流运行(前后端分离)
  • 深度学习:张量标量概念、PyTorch张量创建、类型转换等
  • 医院部署IBMS系统时,哪些关键因素需要重点权衡与规划
  • Webpack 剖析与策略
  • <论文>自注意力序列推荐模型SASRec
  • AES加密
  • C语言二级指针和void *应用
  • 说一下Java里面线程池的拒绝策略
  • .NET 中的异步编程模型
  • 软件测试的艺术与科学:构建商业级产品的优雅草卓伊凡
  • 接口访问子类特有方法的几种方式
  • 运放负反馈电路原理分析
  • 运行springboot
  • Middleware
  • AWK6943:MP9943 替代DCDC兼容方案及技术优势
  • VScode中如何创建项目分支
  • 久久时间计算网/网站建设及推广优化
  • 做瞹瞹瞹视频网站/域名注册查询系统
  • java jsp做网站/国外seo网站
  • 淮北市做网站最好的公司/新十条优化措施
  • 济南优化网站排名/漯河网站推广公司
  • 做网站企业经营范围/百度最新秒收录方法2023