ppchf123 发表于 2010-8-19 16:04:04

想用51来控制刚买的50A电调和绿马达

http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576139.jpg
(原文件名:图片 001.jpg)

http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576140.jpg
(原文件名:图片 002.jpg)

http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576141.jpg
(原文件名:图片 003.jpg)
各位前辈我刚弄无刷不久,请教一下,下面是我的51代码:
#include <REGX51.H>

#define uchar unsigned char      


void init_sys(void);            /*系统初始化函数*/
void Delay5Ms(void);

unsigned char pwm;

void main (void)
{
init_sys() ;

pwm=8;            /*占空比初始值设定*/

while(1)
{
       if (!P1_1) //如果按了+键,增加占空比
      {
       Delay5Ms();
       if (!P1_1)
         {
         pwm++;
         
         }
      }

       if (!P1_2) //如果按了-键,减少占空比
      {
       Delay5Ms();
       if (!P1_2)
         {
         pwm--;
      
         }
      }
/*对占空比值限定范围*/
if (pwm>=23) pwm=23;
if (pwm<=8) pwm=8;
}
}


/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void init_sys(void)            /*系统初始化函数*/
{
/*定时器初始化*/
TMOD=0x01;
TH0=0x0ff;
TL0=0x9c;
TR0=1;
ET0=1;
EA=1;
}


//延时
void Delay5Ms(void)
{
unsigned int TempCyc = 5000;
while(TempCyc--);
}

/*中断函数*/
void timer0(void) interrupt 1 using 2
{
static uchar click=0;                  /*中断次数计数器变量*/

init_sys() ;
++click;
if (click>=100) click=0;

if (click<=pwm)      /*当小于占空比值时输出高电平,高于时是低电平,实现占空比的调整*/
P1_0=1;
else
P1_0=0;


}

调了好久都不行。。。。。。./emotion/em037.gif
请高手们帮忙看看。。。

myasus 发表于 2010-9-3 20:49:52

电调都是有启动保护的,单片机直接启动无刷电调,程序开始必须从IO口输出1.0ms的信号,维持数秒钟,然后再慢慢将脉冲加宽到接近2.0ms,太快加宽脉冲也会被电调判断为错误信号而忽略掉

zhuml2010 发表于 2010-12-6 17:45:34

你好,你的无刷电机驱动有原理图和单片机的源程序吗,可以给我参考吗,我最近也在做这个,我的邮箱zhuml2010@163.com。qq:675016379,谢谢了
页: [1]
查看完整版本: 想用51来控制刚买的50A电调和绿马达