找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2309|回复: 7
打印 上一主题 下一主题
收起左侧

单片机如何同时调用两个子程序,输出两个脉冲控制两个步进电机驱动器

[复制链接]
跳转到指定楼层
楼主
本人小白,想写个程序,51单片机输出脉冲跟方向,来同时控制2个两相四线步进电机驱动器,输出两个脉冲使得两个电机同时运行,脉宽跟占空比都不变,只是输出脉冲个数不一样。51单片机是单线程的,程序一步一步执行,不存在同时调用两个子程序,但网上有说用定时器中断分时段控制,但驱动器脉冲输入端频率在10KHz(100us)左右能使电机运行,分时段控制时有冲突吗?该怎么构思程序结构,还有定时器1已经用于串口通讯了。

51hei截图_20220401132839.png (19.26 KB, 下载次数: 34)

51hei截图_20220401132839.png

51hei截图_20220401132855.png (357.5 KB, 下载次数: 27)

51hei截图_20220401132855.png

51hei截图_20220401132906.png (120.5 KB, 下载次数: 32)

51hei截图_20220401132906.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2022-4-1 15:08 | 只看该作者
概念:单片机任何时刻只能执行一条指令,即不可以同时做两件事!
所以:单片机同时调用两个子程序,是错误的观念!
回复

使用道具 举报

板凳
ID:161164 发表于 2022-4-1 17:03 | 只看该作者
定时器0模式2(8位自动重装)
设置50us中断
中断函数内
if(X_Axis_Pulse>0)
{
P00 = !P00;
if(P00 == 0)
{
X_Axis_Pulse--;
}
}

main函数控制X_Axis_Pulse的数值来输出脉冲
回复

使用道具 举报

地板
ID:844772 发表于 2022-4-1 17:31 | 只看该作者
你刚接触,给的脉冲不要太高,不要太窄,频率1k就可以了,太高了光响不转了。另外,交替的给两个电机灌脉冲,看起来就是同时运行的。
回复

使用道具 举报

5#
ID:121859 发表于 2022-4-1 17:57 | 只看该作者
不会吧,那个步进电机能工作在10K频率之下?一般也就1到2K的样子。
回复

使用道具 举报

6#
ID:264021 发表于 2022-4-1 18:42 | 只看该作者
单片机不能同时做两件事,只能一件一件来做
回复

使用道具 举报

7#
ID:882819 发表于 2022-4-2 11:27 | 只看该作者
lkc8210 发表于 2022-4-1 17:03
定时器0模式2(8位自动重装)
设置50us中断
中断函数内

谢谢您,刚才测试了下  解决了 原来是思路出问题了
回复

使用道具 举报

8#
ID:882819 发表于 2022-4-2 13:34 | 只看该作者
zhxiufan 发表于 2022-4-1 17:57
不会吧,那个步进电机能工作在10K频率之下?一般也就1到2K的样子。

是的,刚才测试了下,占空比20%,1K运行慢点更平稳些,10K运行快但有点异响,长时间运行 1K的比较好些
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表