共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |