共2条
1/1 1 跳转至页
一个步进电机驱动程序,请各位指点一下

问
这是我写的一个步进电机程序,通过MP(代表其中一个P口)的高4位来控制,AA`BB`-4,5,6,7脚。12细分,没行数组里面分4对,每对数第一个加到P口控制电流方向,第二个数控制通电时间。正转AA`-BB`-A`A-B`B,数组由1到12行的读取,反转B`B-A`A-BB`-AA`,数组由12到1行的读取。参数POWER表示电机启动还是不启动,DIRECT参数表示方向,SPEED表示速度等级,每项通电时间用数组中的植/SPEED。本程序没考虑要走多少步的情况,调用一次就走一步。因为是第一次做,还请各位大侠帮我看看有没错误
#include <CPU8052.h>
unsigned char yx[12][8]={
{16,128,64,222,32,128,128,222},
{16,222,64,128,32,222,128,128},
{16,256,64,0,32,256,128,0},
{16,222,128,128,32,222,64,128},
{16,128,128,222,32,128,64,222},
{16,0,128,256,32,0,64,256},
{32,128,128,222,16,128,64,222},
{32,222,128,128,16,222,64,128},
{32,256,128,0,16,256,64,0},
{32,222,64,128,16,222,128,128},
{32,128,64,222,16,128,128,222},
{32,0,64,256,16,0,128,256}}; //
struct moto{
unsigned char power; //电机电源
unsigned char direct; //方向
unsigned char speed; //速度
unsigned char olDSPeed;
} moto1;
void motop(unsigned char power,unsigned char direct,unsigned char speed)
{
unsigned char i,m,motomp,n;
if (~power) {
MP=MP&0XF0; }
if (power) {
if (direct) {
for (i=0;i<12;i++) {
for (m=1;m<8;m=m+2){
MP=MP&0xf0+yx[i][m];
motomp=yx[i][m+1]/speed;
for (n=0;n<motomp;n++);
}
}
}
else
{
for (i=0;i<12;i++) {
for (m=7;m>0;m=m-2){
MP=MP&0xf0+yx[i][m];
motomp=yx[i][m+1]/speed;
for (n=0;n<motomp;n++);
}
}
}
}
} 答 1: 怎么没人说话啊!!! 答 2: 呵呵,好象你没问问题哦。 答 3: 我主要是问下,我这个程序有没啥错误,或改进得更好的地方! 答 4: m永远大于0了吧? for (m=7;m>0;m=m-2)
对于unsigned char m 来说,循环跳不出来吧 答 5: unsigned char m, m=1 ,m-2 会出现什么情况啊???
#include <CPU8052.h>
unsigned char yx[12][8]={
{16,128,64,222,32,128,128,222},
{16,222,64,128,32,222,128,128},
{16,256,64,0,32,256,128,0},
{16,222,128,128,32,222,64,128},
{16,128,128,222,32,128,64,222},
{16,0,128,256,32,0,64,256},
{32,128,128,222,16,128,64,222},
{32,222,128,128,16,222,64,128},
{32,256,128,0,16,256,64,0},
{32,222,64,128,16,222,128,128},
{32,128,64,222,16,128,128,222},
{32,0,64,256,16,0,128,256}}; //
struct moto{
unsigned char power; //电机电源
unsigned char direct; //方向
unsigned char speed; //速度
unsigned char olDSPeed;
} moto1;
void motop(unsigned char power,unsigned char direct,unsigned char speed)
{
unsigned char i,m,motomp,n;
if (~power) {
MP=MP&0XF0; }
if (power) {
if (direct) {
for (i=0;i<12;i++) {
for (m=1;m<8;m=m+2){
MP=MP&0xf0+yx[i][m];
motomp=yx[i][m+1]/speed;
for (n=0;n<motomp;n++);
}
}
}
else
{
for (i=0;i<12;i++) {
for (m=7;m>0;m=m-2){
MP=MP&0xf0+yx[i][m];
motomp=yx[i][m+1]/speed;
for (n=0;n<motomp;n++);
}
}
}
}
} 答 1: 怎么没人说话啊!!! 答 2: 呵呵,好象你没问问题哦。 答 3: 我主要是问下,我这个程序有没啥错误,或改进得更好的地方! 答 4: m永远大于0了吧? for (m=7;m>0;m=m-2)
对于unsigned char m 来说,循环跳不出来吧 答 5: unsigned char m, m=1 ,m-2 会出现什么情况啊???
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
汽车+汽车地线之间连接处理被打赏20分 | |
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 |