共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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |