|
本帖最后由 LGY910 于 2012-9-10 16:28 编辑
主控芯片 STC12C5A08-AD 1T 贴片
驱动芯片 ULN2003A 贴片
步进电机 24BYJ48 - 12V
问题如下
1.驱动步进电机时有失步现象,造成角度错误。
已考虑过问题
1.启动频率过高 (频率减速启动也还是有失步现象,说明书说500PPS,减速到250PPS启动依然失步)
2.负载过重 (负载基本可以不考虑,无负载)
3.电压电流不够 (额定电压12V,实际电压15V,电流测试过ULN2003双通道驱动一相,依然失步)
4.相序,拍数不对 (相序再三测试过没问题用的 4相4拍 )
5.IO口设置不对 (设置的是强上拉,无上拉电阻)
示波器观察步进电机波形如下,这个是正确的
波形图最后有缺口,这个波形有点不对,最后有缺口
原理图如下
感觉问题就出在波形缺口上
请各位老大看一看怎么解决,谢谢各位。
驱动程序如下
#include "stc5a08ad.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
code uchar tab[4] = {0x06,0x03,0x09,0x0c};
code uchar tab1[8] = {0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar angle1 = 0;
/*--------------步进电机参数-----------------*/
uint cnt5;
uchar sl;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
void Io_Init(void)
{
P0M0 = 0xf0;
P0M1 = 0x00;
P0 &= 0x0f;
}
void dj_delay(void) // 2ms
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=222;b>0;b--)
for(a=12;a>0;a--);
}
void dj_run(void)
{
if((sl == 1) && cnt5)
{
cnt5--;
if(angle1 < 3)angle1++;
else angle1=0;
P0 = 0x0f;
_nop_();
_nop_();
P0 |= tab[angle1]<<4;
}
else if((sl == 0) && cnt5)
{
cnt5--;
if(angle1 > 0)angle1--;
else angle1=3;
P0 = 0x0f;
_nop_();
_nop_();
P0 |= tab[angle1]<<4;
}
if(cnt5 == 0)
{
P0 &= 0x0f;
}
dj_delay();
}
void delay(void) //误差 -0.000000000111us
{
unsigned char a,b,c;
for(c=71;c>0;c--)
for(b=168;b>0;b--)
for(a=250;a>0;a--);
}
/*------------------------------------*/
void main(void)
{
Io_Init();
while(1){
cnt5 = 160;
sl = 0;
while(cnt5)dj_run();
delay();
cnt5 = 160;
sl = 1;
while(cnt5)dj_run();
delay();
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|