这是一段包含特定代码及变量定义的程序内容?
- 时间:
- 浏览:157
- 来源:中国微特电机网
瞧瞧这单片机控制步进电机的代码和各种信息,这里面门道可不少,价值巨大但也很多人看得一头雾水
代码初步设置
在代码一开始,就有不少重要的设置操作。先是#include c:mc518051io.h和#include c:mc518051reg.h,这引入了相关的头文件,就好比给一场演出准备好舞台道具。然后cw_n = n将初始步数赋值给cw方向的步数,接着flag1进行一系列操作来启用或禁用相应函数。比如说flag1 |=0x01是启用cw()函数,这种设置为后续的电机控制行为奠定了基础。
像做实验调试的时候发现,这头文件要是没引用对,代码就运行不起来,可见这开头的设置是多么的重要。所以编码过程中这些看似简单的赋值和引用就是整个电机程序运行的导火索。
不同方向控制
关于电机不同方向的运行控制才是这个程序的一大亮点。ccw_n = n语句的出现相当关键,它起到重新加载反方向步数到相应计数器中的作用。并且在运行途中flag1一直起着协调左右的重要功能。通过对比cw()和ccw()的启用和禁用能看出对电机不同行为控制得特别细腻。
在实际操作某电机控制项目中,按照要求交替让cw和ccw生效的时候,如果这期间代码编写设置稍微有误,比如ccw启用有问题,那么电机在反方向运作的时候没准就会出错,甚至导致运转不起来。
定时操作相关
其中有三条asm语句非常值得深入探索。asm“ JNB TCON.5,*”等待TF0置位,asm“ CLR TCON.5”给TF0清零单片机控制电机程序单片机控制电机程序,为进一步设置做准备。asm“ ORL TH0,#$DC”将$DC加载到TH0中并设置TL0等于0。这就像是给整个系统设定了精确的时间节拍,只有时间安排准确电机才能有序运转。
在另外一个相关项目中,这几个定时初值设置要是稍微有一点偏差,比如定时时间变长或者变短,电机的速度就会明显受到影响,这说明这套定时系统特别容易受到小误差的干扰。
引脚输出逻辑
再谈谈P1引脚的操作。P1 = step[(j&0x07)]严格指定了步进电机只能用到0 - 7这几个步骤。要想驱动步进电机启动,开机的时候P1.4 - P1.7都设置成高电平,操作时依次把P1.4 - P1.7设置成低电平,但是更换引脚的时候要把前一个输出引脚设为高电平。这就像是一个特别精准的指挥系统。因为有一次在测试过程中一旦没有按照这个逻辑接线输出电信号,电机就会出现各种奇怪的抖动声音等问题,完全乱了套。
电机参数详情
从表1中的35BY48S03型步机电机参数里能观察出不少电机的特性。这里也标注了根据定时时间算出的定时初值TH1和TL1,采用的晶振是11.0592M。这好比电机的能力指标,了解这些参数可以帮助工程师们更好地调节电机速度和模式。有次做电机调速调整这参数的时候发现调整初值或者选取不同晶振对电机运行的方方面面都影响巨大,转速不稳定很多时候就是这些基础参数没调好。
数据移动代码
最后我们再看看关于数据在DispBuf和各个存储单元之间的移动操作。像MOV这类指令,比如MOV DispBuf+x,A 负责把数据放在合适的位置,并且可以根据运算数据不断调整各存储单元里的数据值。例如获取键值来分析等这些操作都是为了完成用户指令做的前置工作,体现出该程序不仅有电机底层控制方面内容还有跟用户交互方面的考量呢 !
现在我就想问大家,你们在类似的电机控制编程的时候遇到过啥棘手的事情吗?要是觉得文章有用记得点赞分享!
猜你喜欢