第三节、电机定速转动【51单片机-L298N-步进电机教程】

news/2024/12/29 1:45:16/

摘要:本节介绍用定时器定时的方式,精准控制脉冲时间,从而控制步进电机速度

一、计算过程
电机每一步的角速度等于走这一步所花费的时间,走一步角度等于步距角,走一步的时间理解为一步距时间
w = s t e p t … … ① w=\frac{step}{t} ……① w=tstep……

w:角速度(°/s)
step:步距角(°)
t:步距时间(s)

L298N驱动步进电机有三种模式:单相4拍、双相4拍、8拍,对于二相四线步进电机,4拍步距角为1.8度,8拍等效步距角为1.8/2=0.9度,每走一步转动的角度为step/X,带入①式
w = s t e p t ∗ X … … ② w=\frac{step}{t*X} ……② w=tXstep……
X:转动模式(4拍模式:X=1     8拍模式:X=2)

电机速度通常使用单位为转速RPM(转/分),角速度(°/S)与转速之间的转换关系
w = 6 ∗ n … … ③ w=6*n ……③ w=6n……

n:转速(RPM)

将③带入②可得:
t = s t e p 6 ∗ n ∗ X … … ④ t=\frac{step}{6*n*X} ……④ t=6nXstep……

至此得到了步进电机转动一步的时间t

采用51单片机16位溢出定时器的模式去定时,可以得到:
C = 65536 − t ∗ X t a l 12 … … ⑤ C=65536-t*\frac{Xtal}{12} ……⑤ C=65536t12Xtal……

C:16位溢出定时器初值
Xtal:晶振频率

1.5 将④带入⑤可得:
C = 65536 − s t e p ∗ X t a l 72 ∗ X ∗ n … … ⑥ C=65536-\frac{step*Xtal}{72*X*n}……⑥ C=6553672XnstepXtal……

1.6 对于二相步进电机步距角为step=1.8°,带入之后可得:
C = 65536 − X t a l 40 ∗ X ∗ n … … ⑦ C=65536-\frac{Xtal}{40*X*n}……⑦ C=6553640XnXtal……

至此得到了转速n与定时初值C的函数关系

二、举例计算
二相四线电机,八拍模式,单片机晶振频率为12000000,设定转速为100RPM,带入⑦可得:
C = 65536 − 12000000 40 ∗ 2 ∗ 100 = 64036 C=65536-\frac{12000000}{40*2*100} =64036 C=6553640210012000000=64036

定时器0初值高8位TH0= C/256=0XFA
定时器0初值低8位TL0= C%256=0X24

提供一个L298N速度计算程序:
百度网盘链接: https://pan.baidu.com/s/1ULyl8-90rLv0wAh8oKfO8A
提取码: 7hmi
在这里插入图片描述

三、测试
烧录hex文件后,单片机上电,电机会以100RMP速度匀速转动
Proteus仿真
请添加图片描述
请添加图片描述

四、功能扩展
扩展1
① 增加4个按键,控制电机启停、方向、速度加减
② 增加数码管,显示信息
请添加图片描述
请添加图片描述

扩展2
① 增加4个按键,控制电机启停、方向、速度加减
② 增加1602LCD,显示信息
请添加图片描述
请添加图片描述

五、总结
至此一个基本的电机定速驱动程序完成,通过调整定时时间,可以精确调整电机的转速
此种方式利用定时器精确定时能力,从而控制电机转速,是后续电机加减速运动的理论基础

六、附件(网盘内keil源码为付费资源,提供答疑,Proteus免费)
百度网盘链接: https://pan.baidu.com/s/1233yaX11T1lfsEnvXBTdtg
提取码: qk6j

↓↓↓点击下方目录,查看L298N系列全部文章


http://www.ppmy.cn/news/1558941.html

相关文章

【Java 代码审计入门-02】SQL 漏洞原理与实际案例介绍

SQL注入漏洞全解析 发布日期:2024年12月26日 引言 在互联网的快速发展的今天,Web应用的安全性变得越来越重要。SQL注入(SQL Injection, 简称SQLi)作为最常见的Web安全漏洞之一,给无数网站和应用程序带来了巨大的风险…

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化 前言 ArrayBuffer ArrayBuffer内部包含一块Native内存,该ArrayBuffer的JS对象壳被分配在虚拟机本地堆(LocalHeap)。与普通对象一样,需要经过序列化与反序列化拷贝传递&#x…

【Python】基于界面库PyQt5+Qt Dsigner的环境配置和界面绘制

目录 一 安装PyQt5以及PyQt5-tools 二 配置外部开发工具 三 使用Qt Designer设计界面 四 使用PyUIC将ui文件转换为py文件 五 CU分离实现逻辑代码 一 安装PyQt5以及PyQt5-tools 之前做的一些Python脚本、软件都是基于 Tkinter 实现的,其中界面的设计布局是很头疼…

Docker Run使用方法及参数详细说明

Docker Run使用方法及参数详细说明 基本语法常用参数使用示例总结Docker Run是Docker中最基本的命令之一,用于创建并启动一个新的容器。通过Docker Run,用户可以基于指定的镜像创建一个容器实例,并且可以配置容器的各种参数,如网络设置、存储选项等。下面将详细介绍Docker …

自動提取API爬蟲代理怎麼實現?

爬蟲代理,簡單來說,就是在爬蟲和目標網站之間扮演“中轉站”角色的伺服器。它的主要功能是隱藏爬蟲的真實IP地址,從而避免被目標網站封禁。通過使用代理IP,爬蟲可以模擬多個用戶訪問,突破IP訪問限制,提高數…

出海隐私合规解决方案,一文助力中企合规出海

近两年越来越多的企业选择走出国门,拓展国际市场。尤其是在移动应用、游戏和电商等领域,出海已经成为企业发展的重要战略。 企业在出海过程中,需要特别关注这几点: 隐私合规是什么? 隐私合规对出海企业有哪些影响&a…

React-更新state的数据,dom没有重新渲染

{entourageList.map((person) > (<Row key{person.id}> {/* 使用唯一的 person.id */}<Col span{16}><Row gutter{16}><Col lg{9} md{18} sm{24}><FormItem label{姓名}>{getFieldDecorator(name-${person.id}, {initialValue: person.name,…

简单的skywalking探针加载原理学习

简单的skywalking探针加载原理学习 本课程为B站bytebuddy课程 的学习笔记。 记录本人的操作记录方便后续复习学习使用&#xff0c;本人具体代码地址为&#xff1a; https://gitee.com/xiaodali/git-agent-demo 1. 创建目标工程 server工程比较简单&#xff0c;只是简单的一个…