关于PWM与电调的问题
各位大侠,我写了一个用avr16单片机产生PWM波的程序,各位高人给看一下这个能启动我们刚到手的中特威电调吗?思路是用外部中断来改变占空比。/********************************************/
/* 工作频率:内部8M *
* 输 出:PD4输出PWMB,PD5输出PWMA *
* 产生的PWMA,PWMB频率为8M/(1250*2*64)约50HZ,工作区间为10%占空比到22%占空比,
*步进为1.6%占空比,起始占空比为0.5%,起始到工作步进占空比为0.8%
********************************************/
#include <avr/io.h>
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include "avr/delay.h"
int m;
unsigned int a=6,b=6;
void port_init(void)
{
cli();
GIFR |=(1<<6)|(1<<7);
MCUCR |=0x0a;
GICR |=(1<<6)|(1<<7);
PORTA = 0xFF;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x0c;
DDRD = 0x30;
sei();
}
SIGNAL(SIG_INTERRUPT0)//增加占空比
{
cli();
if(a>=125)
{
m=20;a=m+a;b=b+m;
if(a>=275)
{
a=275;
b=275;
}
}
else
{
m=10;a=a+m;b=b+m;
}
OCR1A=a;
OCR1B=b;
GIFR |=(1<<6)|(1<<7);
sei();
}
SIGNAL(SIG_INTERRUPT1)//减少占空比
{
cli();
if(a<125)
{
;
}
else
{
m=20;a=a-m;b=b-m;
}
if(a<=125)
{
a=125;
b=125;
}
}
OCR1A=a;
OCR1B=b;
GIFR |=(1<<6)|(1<<7);
sei();
}
void timer1_init(void)
{
TCCR1A = 0xa2; //两路PWM,匹配清零
TCCR1B = 0x14; //相位修正PWM模式,预分频 64
ICR1 = 0x04e2; //计数上限为1250,11位PWM
}
void main(void)
{
port_init();
timer1_init();
OCR1A=a; //匹配初值
OCR1B=b;
while(1)
{
;
}
} 试验才知真相,只看程序是不行的。
前几天我也想这样做,用51,也用M16。
用51的时候,还让电机叫2声,换成m16后,叫都懒的叫了。
不过用PWM调LED光挺管事,调电调麻烦了,也没有成功,麻烦看这个贴子,中间部分的。从13楼开始。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4706890&bbs_page_no=1&search_mode=4&search_text=kerrwang1982&bbs_id=9999 回复【1楼】kerrwang1982
-----------------------------------------------------------------------
谢大侠指点我试验过了,电调也是一点反应也没有,我用示波器看过它的PWM波,发现与想要的结果差之甚远也不知是什么原因。 回复【1楼】kerrwang1982
-----------------------------------------------------------------------
谢大侠指点我试验过了,电调也是一点反应也没有,我用示波器看过它的PWM波,发现与想要的结果差之甚远也不知是什么原因。 回复【1楼】kerrwang1982
-----------------------------------------------------------------------
多谢大侠指点我已经明白是什么问题了? 怎么能用程序通过电调驱动无刷电机呢?我刚刚到手了一套无法让它转起来,迷茫中。。。求大侠指点一二
页:
[1]