|
|
h80053
銀驢友〔中級〕
. 積分: 720
. 精華: 1
. 文章: 2053
. 收花: 5801 支
. 送花: 8430 支
. 比例: 1.45
. 在線: 2473 小時
. 瀏覽: 17320 頁
. 註冊: 7414 天
. 失蹤: 312 天
. 台中 |
|
|
|
|
|
|
#1 : 2009-1-13 06:51 PM
全部回覆
|
送花
(0)
送出中...
|
|
|
這一個程式是配合PIC晶片所寫的馬達正反轉兼加減速程式,但是有一個問題就是馬達反轉時無法加減速。其中0-530是反轉(快到慢)531-1024是正轉(慢到快)。
==============================================================
程式如下:
==============================================================
#include<p18f8720.h>
#include<capture.h>
#include<delays.h>
#include<pwm.h>
#include<math.h>
#include <adc.h>
#include <timers.h>void main()
{
int x,y,i=0,q,b,result,a,v,motor_speed,j=512,k=0,kk=0,speed=0,fc;
int motor[2][16]={
{480,448,416,384,352,320,288,256,224,192,160,128,96,64,32,0},
{544,576,608,640,672,704,736,768,800,832,864,896,928,960,992,1024}
};
//,i=0
//unsigned OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_5ANA,ADC_CH0 & ADC_INT_OFF &ADC_VREFPLUS_VDD&ADC_VREFMINUS_VSS);
OpenTimer2(TIMER_INT_OFF&T2_PS_1_1&T2_POST_1_8);
//===========================================接腳輸出入
TRISD=0X00;
TRISE=0X00;
PORTE=0X18;
PORTD=0X00;
PORTD=0xFF;
//========================================按鈕開關的設定
TRISBbits.TRISB0=1;//S1
TRISBbits.TRISB1=1;//S2
TRISBbits.TRISB2=1;//S3
TRISBbits.TRISB3=1;//S4 OpenPWM1(0xff);
//=======================================================馬達設定與PWM頻率
OpenPWM3(0x7f);
OpenPWM5(0xff);
TRISGbits.TRISG0=1;//打開pwm3的功能
TRISGbits.TRISG4=0;//打開pwm5的功能 為馬達
TRISCbits.TRISC2=0;// 打開pwm1的功能
TRISAbits.TRISA5=0;//
PORTAbits.RA5=1;
//==============================================================
while(1)
//===================================馬達正反轉OK
{int i=530,qq=0;
if(PORTBbits.RB0==0&&i>=530&&i<=1000)
{ i=500;
SetDCPWM5(i);
Delay10KTCYx(100);
if(PORTBbits.RB0==0&&i>=20&&i<=500)
{ i=530;
SetDCPWM5(i);
Delay10KTCYx(100);
}
}
====================================//設定馬達加速,但反轉時無法控制
if(PORTBbits.RB1==0&&speed!=15)
{
speed=speed+1;
fc=motor[speed]; i為設定正反轉 speed為加減速
TRISGbits.TRISG4=0;
}
//===========================================//馬達停止 OK
else if(PORTBbits.RB2==0) //SW3 motor stop
{
OpenPWM5(0xff);
Delay10KTCYx(100);
PORTAbits.RA5=0;//disable雙極性馬達
TRISGbits.TRISG4=0;
}
//================================================
SetDCPWM5(0x3ff);//可以輸出pwm的工作週期}
}
找不到問題的所在所以貼上來詢問大家地看法,還請指教謝謝。
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
|
|