28BYJ-48步进电机

今天练习了一下步进电机,看过资料后开始进行编程测试,编程后能顺利让电机转动起来,并且数度可调,但是当我想让电机只转一圈时问题来了。

        这款步进电机的减速比为1:64,步进角为5.625/64度。那么要转一圈需要的脉冲多少呢,我自己算了算。

一个脉冲转5.625/64=0.087890625度,所以要转360度需要的脉冲数为360/(5.625/64)=4096个,由于电机为8拍所以对于8拍的循环要执行4096/8=512次,这样电机能转一圈停下。

      在编程过程中我把两个变量全设置成了char型(把大部分数据设置成char这是我的一个习惯,个人认为不好),写好程序以后进行下载运行结果电机就转了一点,这与目的不符。首先我想到的是参数错误,网上搜一下的确对于转一圈的脉冲个数有的人说4096,有的说64,挨着试了一下发现都不对,这下迷茫了就开始试着换参数,换成300转了一点,换了200转了大半圈,300不行200差不多这不应该,就在这时我想起了前几天编写DS18B20温度传感器时对于数据类型运用时犯下的错误于是果断把char改成了int,编译下载后运行结果与预期相符转了一圈听了下来。

    调试成功后我开始想为什么刚开始500不行,查阅书籍后发现有符号字符型变量取值范围为-128到+127无符号的范围为0到255.这也就是300不转200转了大半圈的原因。经过这次练习后发现还是自己的基础知识不牢固有些甚至不理解,这对以后的发展危害极大。下定决心一定要把那些最基础的东西学好,这样才能更上一城楼。

#include <reg51.h>       //51芯片管脚定义头文件
#define uchar unsigned char
#define uint  unsigned int
uchar i,j;
//uint j;
uchar code FFW[8]={0x01,0x03,0x02,0x06,
0x04,0x0c,0x08,0x09};  //四相八拍正转编码
uchar code REV[8]={0x09,0x08,0x0c,0x04,
0x06,0x02,0x03,0x01};  四相八拍反转编码
void delay(uchar z)
{
    uchar x,y;
for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}


void main()
{
    for(j=200;j>0;j--)
{   
for(i=0;i<8;i++)
{
   P1=FFW[i];
delay(10);
}
}
while(1);


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值