搜索
bottom↓
回复: 4

看了<<设计全攻略>>做无刷电调,做的好晕,还是没做好,现在

[复制链接]

出0入0汤圆

发表于 2012-3-11 11:47:44 | 显示全部楼层 |阅读模式
程序就是这样的,电路基本和MK的的电路差不多,只不过反感应电动势检测的引脚不一样而已。我用了ADC3,2,1.

#include <iom8v.h>

#define uchar unsigned char
#define uint unsigned int

#define PHASE_A_ON PORTD|=0x08;
#define PHASE_A_OFF PORTD&=0xf7;

#define PHASE_B_ON PORTD|=0x10;
#define PHASE_B_OFF PORTD&=0xef;

#define PHASE_C_ON PORTD|=0x20;
#define PHASE_C_OFF PORTD&=0xdf;

#define PWM_A_ON OCR2=pwmduty;
#define PWM_A_OFF OCR2=0;

#define PWM_B_ON OCR1B=pwmduty;
#define PWM_B_OFF OCR1B=0;

#define PWM_C_ON OCR1A=pwmduty;
#define PWM_C_OFF OCR1A=0;

#define AB_ON PWM_B_OFF PWM_C_OFF PHASE_A_OFF PHASE_C_OFF PWM_A_ON PHASE_B_ON
#define AC_ON PWM_C_OFF PWM_B_OFF PHASE_B_OFF PHASE_A_OFF PWM_A_ON PHASE_C_ON
#define BC_ON PWM_A_OFF PWM_C_OFF PHASE_A_OFF PHASE_B_OFF PWM_B_ON PHASE_C_ON
#define BA_ON PWM_A_OFF PWM_C_OFF PHASE_B_OFF PHASE_C_OFF PWM_B_ON PHASE_A_ON
#define CA_ON PWM_A_OFF PWM_B_OFF PHASE_B_OFF PHASE_C_OFF PWM_C_ON PHASE_A_ON
#define CB_ON PWM_A_OFF PWM_B_OFF PHASE_A_OFF PHASE_C_OFF PWM_C_ON PHASE_B_ON

#define TEST_AR ADMUX=0x03; ACSR=0x1a;
#define TEST_BR ADMUX=0x02; ACSR=0x1a;
#define TEST_CR ADMUX=0x01; ACSR=0x1a;

#define TEST_AF ADMUX=0x03; ACSR=0x1b;
#define TEST_BF ADMUX=0x02; ACSR=0x1b;
#define TEST_CF ADMUX=0x01; ACSR=0x1b;

#define STOP 0
#define STARTUP 1
#define RUN 2



uchar pwmduty=80;
uchar state=STOP;
//uchar start
uchar phase=0;
uint startdelay=1000;
uint startdelay2=1000;
uchar chtimes=0;

portinit()
{
DDRD=0x38;
PORTD=0x00;
DDRB=0xfe;
PORTB=0x00;
DDRC=0x00;

}

uinit()
{
UBRRL=51;
UCSRB|=0x88;


}

sendchar(char ch)
{
while(!(UCSRA&0x20));
UDR=ch;}

sendstr(char *str)
{unsigned int i;
i=0;
while(str!='\0')
{sendchar(str);
i++;
}}

pwminit()
{
TCCR1A=0xa1;
TCCR1B=0x01;
OCR1A=0x00;
OCR1B=0x00;
TCCR2=0x61;
OCR2=0x00;
}

acmpinit()
{
SFIOR|=0x08;
ACSR=0x12;
ADMUX=0x01;
}

#pragma interrupt_handler acsvr:17

acsvr()
{

change_phase();

}


T0init()
{

TCCR0=0x01;
TIMSK|=0x01;
SREG|=0x80;

}
#pragma interrupt_handler t0svr:10

t0svr()
{/*
if(state==STARTUP)
{
        if(chtimes<30)
        {
                if(!(startdelay2--))
                        {
                        pwmduty=20;
                        change_phase();
                        startdelay=startdelay*14/15;
                        startdelay2=startdelay;
                       
                        chtimes++;

                          return;

                             }
        }
        else run();
}
*/

}

startup()
{
ACSR=0x12;
pwmduty=5;
TCCR0=0x02;
startdelay=1000;
startdelay2=10000;
chtimes=0;
change_phase();
state=STARTUP;
}

run()
{
ACSR=0x1a;
state==RUN;
}

change_phase()
{
if(phase==0){AB_ON phase=1;TEST_CF sendstr("PHASE 0\r\n"); return;}
if(phase==1){AC_ON phase=2;TEST_BR sendstr("PHASE 1\r\n"); return;}
if(phase==2){BC_ON phase=3;TEST_AF sendstr("PHASE 2\r\n"); return;}
if(phase==3){BA_ON phase=4;TEST_CR sendstr("PHASE 3\r\n"); return;}
if(phase==4){CA_ON phase=5;TEST_BF sendstr("PHASE 4\r\n"); return;}
if(phase==5){CB_ON phase=0;TEST_AR sendstr("PHASE 5\r\n"); return;}
}


main()
{
portinit();
pwminit();
T0init();
acmpinit();
uinit();
//startup();
run();
while(1)
{


}
}


哎,还是转不起来,示波器看引脚的波形,很乱。。
(原文件名:Image00000.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-3-11 11:53:03 | 显示全部楼层
感觉是驱动顺序不对

出0入0汤圆

 楼主| 发表于 2012-3-11 16:55:07 | 显示全部楼层
回复【1楼】hy317  
感觉是驱动顺序不对
-----------------------------------------------------------------------
change_phase()
{
if(phase==0){AB_ON phase=1;TEST_CF sendstr("PHASE 0\r\n"); return;}
if(phase==1){AC_ON phase=2;TEST_BR sendstr("PHASE 1\r\n"); return;}
if(phase==2){BC_ON phase=3;TEST_AF sendstr("PHASE 2\r\n"); return;}
if(phase==3){BA_ON phase=4;TEST_CR sendstr("PHASE 3\r\n"); return;}
if(phase==4){CA_ON phase=5;TEST_BF sendstr("PHASE 4\r\n"); return;}
if(phase==5){CB_ON phase=0;TEST_AR sendstr("PHASE 5\r\n"); return;}
}
我的换相程序没有问题啊。。也不知道为什么就变成那个波形了。

出0入0汤圆

发表于 2012-4-13 13:59:19 | 显示全部楼层
留个脚印,还在继续学习中

出0入0汤圆

发表于 2012-5-16 09:57:59 | 显示全部楼层
电路图传上来看看,换相是怎么检测的。德国老用的是电压比较器的,你用的不会是AD转换器吧。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表