我使用avr單片機(jī)M16的T0作直流電機(jī)pwm調(diào)速,要設(shè)定電機(jī)在規(guī)定的時(shí)間內(nèi)轉(zhuǎn)與停,應(yīng)該怎么辦?
是否是在其PWM中斷中給予計(jì)時(shí)的限制?
static long time;
struct PUMP_DATA{
unsigned long pump_pwm;
unsigned long pump_time;
};
#pragma vector=TIMER1_COMPB_vect
__interrupt void timer1(){
//0.005s
time++;
if(time>=pump_p->pump_time){
DDRD_DDD4=0;
OCR1B=0;
}
void pump_bsp(struct PUMP_DATA *p_pump){
TCCR1A=0X20;
TCCR1B=0X11;
DDRD_DDD4=1;
ICR1=16000;
OCR1B=p_pump->pump_pwm;
}
void main()
{ OSCCAL=0xA7;//8mhz校正
pump_p->pump_pwm=8000;
pump_p->pump_time=600;
pump_bsp(pump_p);
}
為什么停不了?
請指正!
直流電機(jī)pwm調(diào)速
全部回復(fù)(2)
正序查看
倒序查看
/*前段時(shí)間在此處發(fā)表了關(guān)于直流電機(jī)pwm調(diào)速時(shí)間的控制的一個(gè)帖子,現(xiàn)已經(jīng)改好,并測試通過
現(xiàn)修改后貼出來!
IAR軟件編程
*/
#include
#include
#include
static long time;
struct PUMP_DATA {
unsigned long pump_pwm;
unsigned long pump_time;
};
struct PUMP_DATA pumdate,*pump_p=&pumdate;
#pragma vector=TIMER1_OVF_vect //應(yīng)該改成這個(gè)中斷0.005s
__interrupt void timer1(){
time++;
if(time>=pump_p->pump_time)
{
DDRD_DDD4=0;
OCR1B=0;
}
}
void pump_bsp(struct PUMP_DATA *p_pump)
{
DDRD_DDD4=1;
OCR1B=p_pump->pump_pwm;
}
void init_time1()
{
TCCR1A=0X20;
TCCR1B=0X11;
ICR1=20000;
TIMSK=TIMSK|(1< __enable_interrupt();
}
void main()
{ OSCCAL=0xA7; //8MHZ頻率校正
pump_p->pump_pwm=19000; //PWM占空比
pump_p->pump_time=12000; //定時(shí)運(yùn)行的時(shí)間 1分鐘
init_time1();
pump_bsp(pump_p);
}
現(xiàn)修改后貼出來!
IAR軟件編程
*/
#include
#include
#include
static long time;
struct PUMP_DATA {
unsigned long pump_pwm;
unsigned long pump_time;
};
struct PUMP_DATA pumdate,*pump_p=&pumdate;
#pragma vector=TIMER1_OVF_vect //應(yīng)該改成這個(gè)中斷0.005s
__interrupt void timer1(){
time++;
if(time>=pump_p->pump_time)
{
DDRD_DDD4=0;
OCR1B=0;
}
}
void pump_bsp(struct PUMP_DATA *p_pump)
{
DDRD_DDD4=1;
OCR1B=p_pump->pump_pwm;
}
void init_time1()
{
TCCR1A=0X20;
TCCR1B=0X11;
ICR1=20000;
TIMSK=TIMSK|(1<
}
void main()
{ OSCCAL=0xA7; //8MHZ頻率校正
pump_p->pump_pwm=19000; //PWM占空比
pump_p->pump_time=12000; //定時(shí)運(yùn)行的時(shí)間 1分鐘
init_time1();
pump_bsp(pump_p);
}
0
回復(fù)
@zxjtam
/*前段時(shí)間在此處發(fā)表了關(guān)于直流電機(jī)pwm調(diào)速時(shí)間的控制的一個(gè)帖子,現(xiàn)已經(jīng)改好,并測試通過現(xiàn)修改后貼出來!IAR軟件編程*/#include#include#includestatic longtime;structPUMP_DATA{ unsignedlongpump_pwm; unsignedlongpump_time;};structPUMP_DATApumdate,*pump_p=&pumdate;#pragmavector=TIMER1_OVF_vect //應(yīng)該改成這個(gè)中斷0.005s__interruptvoidtimer1(){ time++; if(time>=pump_p->pump_time) { DDRD_DDD4=0; OCR1B=0; }}voidpump_bsp(structPUMP_DATA*p_pump){ DDRD_DDD4=1; OCR1B=p_pump->pump_pwm; }voidinit_time1(){ TCCR1A=0X20; TCCR1B=0X11; ICR1=20000; TIMSK=TIMSK|(1pump_time=12000;//定時(shí)運(yùn)行的時(shí)間1分鐘 init_time1(); pump_bsp(pump_p);}
兄弟什么公司的?
0
回復(fù)