主題:
[C&C++]
[問題]C語言問題
[打印本頁]
發表人:
h80053
時間:
2009-1-13 06:51 PM
主題:
[問題]C語言問題
這一個程式是配合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的工作週期}
}
找不到問題的所在所以貼上來詢問大家地看法,還請指教謝謝。
發表人:
leacks
時間:
2009-1-13 09:01 PM
你是卡到啥陰
你沒講一下
發表人:
h80053
時間:
2009-1-13 10:38 PM
馬達反轉時無法加減速。
還請大大幫忙謝謝。
發表人:
leacks
時間:
2009-1-13 11:02 PM
寫得真是亂
括弧都亂瓜一通
你要不要好好瓜一次,然後自己重看一次
假設你while那段成立
以下就不知道該怎樣
因為看起來i=530
if(PORTBbits.RB1==0&&speed!=15)
{
speed=speed+1;
fc=motor[speed]; i為設定正反轉 speed為加減速
TRISGbits.TRISG4=0;
}
//==========
你要不要先測正轉加減速
再測反轉加減速
單一元件測試ok後再合併
發表人:
h80053
時間:
2009-1-14 08:47 AM
謝謝大大的指教。我馬達正轉加減速是沒有問題的。
如果要反轉加減速的話只要將speed-1就是反轉加
減速。所以二個分開寫是可以個別動作的,但是想
要合併在一起時反轉加減速就不行了。
還請大大指教謝謝。
發表人:
leacks
時間:
2009-1-14 12:32 PM
另外就是
fc=motor[speed]; i為設定正反轉 speed為加減速
我看起來就怪怪的
而放進VC裡跑果然連組譯都不過
fc=int
motor=2為陣列
fc=motor[i][speed];
該不會你原本要這樣寫吧?
但這樣i又會破表
另外就是fc取得後,沒去用= =
===========
個人套一句老師最常講的,你程式有問題
而我看起來是連架構都有問題
發表人:
leacks
時間:
2009-1-14 12:48 PM
話說要把
關閉 Discuz! 代碼 <<給打勾
得有問題
[leacks 在 2009-2-25 12:37 PM 作了最後編輯]
發表人:
h80053
時間:
2009-1-14 12:52 PM
fc=motor
[speed];
該不會你原本要這樣寫吧?yes
那是我貼程式時可能有把它用掉
fc我有貼回 SetDCPWM5(fc);
給它動作但是還是有問題
==========================
我的架構可能有問題這我也很清楚
所以希望大大能跟我將哪一部份的
問題跟我說一下
==========================
我也有參考其他同學的可是看到後來會變的
很像就如同抄襲了很多同學的程式後來都跟
一開始交的一樣因為要交報告的關係我還是
希望以自己的想法寫看看
===========================同學程式如下
#include <p18f8720.h>
#include <delays.h>
#include <pwm.h>
#include <math.h>
#include <adc.h>
#include <timers.h>
#include <capture.h>
void main (void)
{
int i;
int motor_speed[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}
};
int led_array[8] = {0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00};
int led_enable[2] = {0xEF,0xFF};
int led_flag = 0,led_L = 0xFF,led_R = 0xFF;
int motor_flag = 0,speed = 0,motor = 512 ,stop = 0;
unsigned int result;
OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_5ANA,ADC_CH0 & ADC_INT_OFF &ADC_VREFPLUS_VDD&ADC_VREFMINUS_VSS);
SetChanADC( ADC_CH0 );//手動調速VR
//PWM相關設定
OpenTimer2( TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_8 );
OpenPWM1(0xff);
OpenPWM3(0x7f);
OpenPWM5(0xff);
TRISD=0X00;
TRISE=0X00;
TRISGbits.TRISG0=0;//打開pwm3的功能
TRISGbits.TRISG4=0;//打開pwm5的功能
TRISCbits.TRISC2=0;// 打開pwm1的功能
TRISAbits.TRISA5=0;//
PORTAbits.RA5=1;
SetDCPWM3(0);
while(1)
{
if(PORTBbits.RB0==0)
{
if(motor_flag == 0)
{
motor_flag = 1;
}
else if(motor_flag == 1)
{
motor_flag = 0;
}
SetDCPWM3(250);
Delay10KTCYx(100);
SetDCPWM3(0);
}
else if((PORTBbits.RB1==0) && (speed!=15))
{
speed = speed + 1;
SetDCPWM3(250);
Delay10KTCYx(100);
SetDCPWM3(0);
}
else if((PORTBbits.RB2==0) && (speed!=0))
{
speed = speed - 1;
SetDCPWM3(250);
Delay10KTCYx(100);
SetDCPWM3(0);
}
else if(PORTBbits.RB3==0)
{
if(stop == 0)
{
stop = 1;
}
else if(stop == 1)
{
stop = 0;
}
SetDCPWM3(250);
Delay10KTCYx(100);
SetDCPWM3(0);
}
if(stop == 1)
{
motor = 512;
}
else
{
motor = motor_speed[motor_flag][speed];
}
SetDCPWM5(motor);
switch(speed)
{
case 0:
led_L = led_array[0];
led_R = 0xFF;
break;
case 1:
led_L = led_array[1];
led_R = 0xFF;
break;
case 2:
led_L = led_array[2];
led_R = 0xFF;
break;
case 3:
led_L = led_array[3];
led_R = 0xFF;
break;
case 4:
led_L = led_array[4];
led_R = 0xFF;
break;
case 5:
led_L = led_array[5];
led_R = 0xFF;
break;
case 6:
led_L = led_array[6];
led_R = 0xFF;
break;
case 7:
led_L = led_array[7];
led_R = 0xFF;
break;
case 8:
led_L = led_array[7];
led_R = led_array[0];
break;
case 9:
led_L = led_array[7];
led_R = led_array[1];
break;
case 10:
led_L = led_array[7];
led_R = led_array[2];
break;
case 11:
led_L = led_array[7];
led_R = led_array[3];
break;
case 12:
led_L = led_array[7];
led_R = led_array[4];
break;
case 13:
led_L = led_array[7];
led_R = led_array[5];
break;
case 14:
led_L = led_array[7];
led_R = led_array[6];
break;
case 15:
led_L = led_array[7];
led_R = led_array[7];
break;
}
if(led_flag == 0)
{
led_flag = 1;
// PORTE = led_enable[led_flag];
PORTEbits.RE3=0;
PORTD = led_R;
PORTEbits.RE4=1;
}
else if(led_flag == 1)
{
led_flag = 0;
// PORTE = led_enable[led_flag];
PORTEbits.RE3=1;
PORTEbits.RE4=0;
PORTD = led_L;
}
if(speed == 15)
{
SetDCPWM3(850);
}
else
{
SetDCPWM3(0);
}
}
SetDCPWM5(0x3ff);//可以輸出pwm的工作週期
SetDCPWM1(0x3ff);//可以輸出pwm的工作週期
}
歡迎光臨 TWed2k (http://twed2k.org/)
Powered by Discuz! 4.1.0