查看積分策略說明發表回覆
Discuz! 代碼
提示插入
直接插入
說明訊息

插入粗體文本 插入斜體文本 插入下劃線 置中對齊 插入超級連結 插入信件位址 插入圖像 插入 flash 插入代碼 插入引言 插入列表
刪除線 直線分隔線 虛線分隔線
    
添加文字底框
內容 [字數檢查]:

表情符號

更多 Smilies
字型大小 |||
溫馨提示:本區開放遊客瀏覽。


文章關鍵字 : [功能說明]
(關鍵字可加強搜索準確性, 如關鍵字多於一組, 請以 , 作分隔, e.g. : 阿笨,shiuh,第一笨)

 關閉 URL 識別 | html 禁用
 關閉 表情符號 | 表情符號 可用
 關閉 Discuz! 代碼 | Discuz! 代碼 可用
使用個人簽名
接收新回覆信件通知
推薦放檔網絡空間

檔案(Torent, zip等)
  1. freedl
  2. multiupload
  3. btghost
  4. 便當狗
  5. mediafire
  6. pillowangel
圖片(JPG, GIF等)
  1. hotimg
  2. tinypic
  3. mousems2
  4. imageshack
  5. imm.io
>>>歡迎推薦好用空間


最新10篇文章回顧
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的工作週期
}


leacks

 發表於 2009-1-14 12:48 PM

話說要把

關閉 Discuz! 代碼 <<給打勾
得有問題

[leacks 在  2009-2-25 12:37 PM 作了最後編輯]


leacks

 發表於 2009-1-14 12:32 PM

另外就是
  fc=motor[speed]; i為設定正反轉 speed為加減速
我看起來就怪怪的
而放進VC裡跑果然連組譯都不過

fc=int
motor=2為陣列

fc=motor[i][speed];
該不會你原本要這樣寫吧?
但這樣i又會破表

另外就是fc取得後,沒去用= =

===========
個人套一句老師最常講的,你程式有問題
而我看起來是連架構都有問題


h80053

 發表於 2009-1-14 08:47 AM

謝謝大大的指教。我馬達正轉加減速是沒有問題的。
如果要反轉加減速的話只要將speed-1就是反轉加
減速。所以二個分開寫是可以個別動作的,但是想
要合併在一起時反轉加減速就不行了。

還請大大指教謝謝。


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-13 10:38 PM

馬達反轉時無法加減速。
還請大大幫忙謝謝。


leacks

 發表於 2009-1-13 09:01 PM

你是卡到啥陰
你沒講一下


h80053

 發表於 2009-1-13 06:51 PM

這一個程式是配合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的工作週期}
}


找不到問題的所在所以貼上來詢問大家地看法,還請指教謝謝。





所在時區為 GMT+8, 現在時間是 2024-4-27 08:26 PM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.021364 second(s), 7 queries , Qzip disabled