千家信息网

28BYJ-48步进电机掌握程序根底

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,处理了精度成绩,让我们再次回到我们的电机掌握程序上吧。下面给出的两个例程都不是适用的程序,为什么?由于程序中存在大段的延时,而在延时的时分是什么其它的事都干不了的,想想第二个程序,整整 200 秒什么
千家信息网最后更新 2025年01月20日28BYJ-48步进电机掌握程序根底

处理了精度成绩,让我们再次回到我们的电机掌握程序上吧。下面给出的两个例程都不是适用的程序,为什么?由于程序中存在大段的延时,而在延时的时分是什么其它的事都干不了的,想想第二个程序,整整 200 秒什么其余事都干不了,这在实践的掌握零碎中是相对不许可的。那么怎样改革一下呢?当然照样用准时中缀来完成了,既然每一个节奏继续工夫是2ms,那我们直接用准时器准时 2ms 来刷新节奏就行了。改革后的程序如下:

                       #include  unsigned long beats = 0; //电机迁移转变节奏总数 void StartMotor(unsigned long angle); void main(){ EA = 1; //使能总中缀 TMOD = 0x01; //设置 T0 为形式 1 TH0 = 0xF8; //为 T0 赋初值 0xF8CD,准时 2ms TL0 = 0xCD; ET0 = 1; //使能 T0 中缀 TR0 = 1; //启动 T0 StartMotor(360*2+180); //掌握电机迁移转变 2 圈半 while (1); } /* 步进电机启动函数,angle-需转过的角度 */ void StartMotor(unsigned long angle){ //在盘算前封闭中缀,完成后再翻开,以防止中缀打断盘算进程而形成毛病 EA = 0; beats = (angle * 4076) / 360; //实测为 4076 拍迁移转变一圈 EA = 1; } /* T0 中缀效劳函数,用于驱动步进电机扭转 */ void InterruptTimer0() interrupt 1{ unsigned char tmp; //暂时变量 static unsigned char index = 0; //节奏输入索引 unsigned char code BeatCode[8] = { //步进电机节奏对应的 IO 掌握代码 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; TH0 = 0xF8; //从新加载初值 TL0 = 0xCD; //节奏数不为 0 则发生一个驱动节奏 if (beats != 0){ tmp = P1; //用 tmp 把 P1 口以后值暂存 tmp = tmp & 0xF0; //用&操作清零低 4 位 //用|操作把节奏代码写到低 4 位 tmp = tmp | BeatCode[index]; //把低 4 位的节奏代码和高 4 位的原值送回 P1 P1 = tmp; index++; //节奏输入索引递增 index = index & 0x07; //用&操作完成到 8 归零 beats--; //总节奏数-1 }else{ //节奏数为 0 则封闭电机一切的相 P1 = P1 | 0x0F; } }

程序照样比拟复杂的,电机迁移转变的启动函数 StartMotor 只担任盘算一个需求的总节奏数beats,然后在中缀函数内检测这个变量,不为 0 时就履行节奏操作,同时将其减 1,直到减到 0 为止。
这里,我们要特殊阐明一下的是 StartMotor 函数中对 EA 的两次操作。我们可以看到对beats 的赋值盘算语句是夹在 EA=0;EA=1;这两行语句两头的,也就是说这行赋值盘算语句在履行前先封闭了中缀,而等它履行完后,才又从新翻开了中缀。在它履行进程中单片机是不会呼应中缀的,即中缀函数 InterruptTimer0 不会被履行,即便这时分准时器溢出了,中缀发作了,也只能等候 EA 从新置 1 后,才干失掉呼应,中缀函数 InterruptTimer0 才会被履行。
那么为什么要这么做呢?我们来想一下:在本书开端我们就曾提到,我们所运用的STC89C52 单片机是 8 位单片机,这个 8 位的概念就是说单片机操作数据时多是按 8 位即按1 个字节停止的,那么要操作多个字节(不管是读照样写)就必需分屡次停止了。而我们程序中界说的 beats 这个变量是 unsigned long 型,它要占用 4 个字节,那么对它的赋值起码也要分 4 次才干完成了。我们想象一下,假设在完成了个中第一个字节的赋值后,恰恰中缀发作了,InterruptTimer0 函数失掉履行,而这个函数内能够会对 beats 停止减 1 的操作,减法就有能够发作借位,借位就会改动其它的字节,但由于此时其它的字节还没有被赋入新值,于是毛病就会发作了,减 1 所失掉的后果就不是预期的值了!所以要防止这种毛病的发作就得先临时封闭中缀,等赋值完成后再翻开中缀。而假如我们运用的是 char 或 bit 型变量的话,由于它们多是在 CPU 的一次操作中就完成的,所以即便不关中缀,也不会发作毛病。成绩剖析清晰了,若何弃取还得依据实践状况来,赶上这类成绩的时分多多思索思索吧。


中缀 节奏 函数 电机 程序 字节 准时 单片机 变量 毛病 步进电机 步进 代码 成绩 时分 语句 初值 才干 索引 进程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 在数据库的三级模式有几个 汇通互联网软件开发有限公司 网络安全隐患的具体情况 硬盘录像机改数据服务器 计算机网络技术发展前景 佛山精工软件开发 河南华为服务器虚拟化安装 设计一个数据库需要分析什么 有关 的数据库 轨迹定位软件开发 数据库原理和应用教材难学吗 惠普 服务器 原厂原装 西甲数据库 龙里县网络安全办公室人员 性能测试网络安全专业 对无线网络技术的独立看法 不上数据库的期刊查重 武汉众乐商通网络技术怎么样 芜湖安卓软件开发定制 河北c语言软件开发定制费用 学院大赛管理系统数据库 智慧城市网络安全相关立项 vb如何从数据库中提取数据 苹果手机的虚拟手机服务器 语荣软件开发有限公司怎么样 北京京东软件开发招聘 服务器管理客户端ip 云服务器打开淘宝广告 阿里云的数据库锁定 测试过程中数据库问题报文没问题
0