共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 跳转至页
回复
打赏帖 | |
---|---|
【OZONE】使用方法总结被打赏20分 | |
【S32K314】芯片启动流程分析被打赏20分 | |
【LP-MSPM0L1306】适配 RT-Thread Nano被打赏20分 | |
今天的咸鱼也是曾经鱼跃龙门的天纵之才,中流击水,浪遏飞舟,粪土当年万户侯,数风流人物,还看今朝,被打赏5分 | |
分享一种检测按键状态的方法被打赏20分 | |
周末总结一下,STM32C0系列的开发经验被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下定时器配置被打赏20分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下PWM配置被打赏20分 | |
【Cortex-M】Systick Timer使用被打赏10分 | |
分享汽车防盗系统的组成与分类(一)被打赏5分 |