דף 1 מתוך 2

בקר מנוע.

נשלח: ו' ינואר 06, 2012 8:47 pm
על ידי Michaelz1992
שלום :)

אני רשמתי תוכנה בשפת C לבקר מנוע :
https://www.4project.co.il/product/507

ומשום מה לא עובד לי.
אפשר לבדוק אולי איפשהו טעיתי.

קוד: בחירת הכל

#include "REG_89C51.h"
#include "type_var_H.h"
#include "lcd_play.h"
void delay_lcd();				
void delay();

void forward()
{
  u8 data STB,i;
  P0_6 = STB;	// P0_6 connected to stb pin
  STB='1'; // For work, pin stb need to be '1'
	while(1)
    {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='0';//Motor A
        P0_1='1';//Motor A
        P0_2='1';//Motor B
        P0_3='0';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
    }//End if(n=='2')
}//End void forward()
//===================================================================
void reverse()
{
  u8 data STB,i;
  P0_6 = STB;	// P0_6 connected to stb pin
  STB='1'; // For work pin stb need to be '1'
	while(1)
    {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='1';//Motor A
        P0_1='0';//Motor A
        P0_2='0';//Motor B
        P0_3='1';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
    }//End if(n=='8')
}//End void reverse()
//===================================================================
void right()
{
  u8 data n = write_num();
  u8 data STB,i;
  P0_6=STB;	// P0_6 connected to stb pin
  STB='1'; // For work pin stb need to be '1'
	while(1)
    {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='0';//Motor A
        P0_1='0';//Motor A
        P0_2='1';//Motor B
        P0_3='0';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
    }//End if(n=='6')
}//End void right()
//===================================================================
void left()
{
  u8 data n = write_num();
  u8 data STB,i;
  P0_6=STB;	// P0_6 connected to stb pin
  STB='1'; // For work pin stb need to be '1'
	while(1)
    {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='0';//Motor A
        P0_1='1';//Motor A
        P0_2='0';//Motor B
        P0_3='0';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
    }//End if(n=='4')
}//End void left()
//===================================================================
void riht_point()
{
  u8 data n = write_num();
  u8 data STB,i;
  P0_6=STB;	// P0_6 connected to stb pin
  STB='1'; // For work pin stb need to be '1'
	while(1)
    {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='1';//Motor A
        P0_1='0';//Motor A
        P0_2='1';//Motor B
        P0_3='0';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
    }//End if(n=='9')
}//End void riht_point()
//===================================================================
void left_point()
{
  u8 data n = write_num();
  u8 data STB,i;
  P0_6=STB;	// P0_6 connected to stb pin
  STB='1'; // For work pin stb need to be '1'
	while(1)
    {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='0';//Motor A
        P0_1='1';//Motor A
        P0_2='0';//Motor B
        P0_3='1';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
    }//End if(n=='7')
}//End void left_point()
//===================================================================
void stop()
{
  u8 data STB,i;
  P0_6=STB;	// P0_6 connected to stb pin
  STB='1'; // For work pin stb need to be '1'
  while(1)
  {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='0';//Motor A
        P0_1='0';//Motor A
        P0_2='0';//Motor B
        P0_3='0';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
  }
}//End void stop()
//===================================================================
void standby()
{
  u8 data STB,i;
  P0_6=STB;	// P0_6 connected to stb pin
  STB='0'; // For work pin stb need to be '0'
  while(1)
  {
	 for(i=0 ; i<9000000 ; i++)
	 {
	    P0_4='1';// PWM A get '1' to work full speed
		P0_5='1';// PWM B get '1' to work full speed
        P0_0='0';//Motor A
        P0_1='0';//Motor A
        P0_2='0';//Motor B
        P0_3='0';//Motor B
	 }
	 for(i=0 ; i<1000000 ; i++)
	 {
		P0_4='0';// PWM A get '0' to delay 
		P0_5='0';// PWM B get '0' to delay
	 }
  }
}//End void standby()

Re: בקר מנוע.

נשלח: ו' ינואר 06, 2012 10:19 pm
על ידי Alex
אני לא מבין גדול בקוד ל-8051 ודומיו, אבל האם בקוד הבא אתה באמת מעביר 1 לוגי לרגל STBY?

קוד: בחירת הכל

  u8 data STB,i;
  P0_6 = STB;   // P0_6 connected to stb pin
  STB='1'; // For work, pin stb need to be '1'
זה לא אמור להיות ככה?

קוד: בחירת הכל

  P0_6 = '1';   // P0_6 connected to stb pin

Re: בקר מנוע.

נשלח: ו' ינואר 06, 2012 10:36 pm
על ידי Michaelz1992
כן, זה אמור להיות כך.
זה בעיות קטנות.
אל תשים לב לזה.
בכל זאת משהו לא נותן לו לעבוד.
ועדיין לא גיליתי מה.

Re: בקר מנוע.

נשלח: ו' ינואר 06, 2012 11:50 pm
על ידי Alex
מה בעיות קטנות?
כל עוד ה-STB לא יהיה ב-1 לוגי הבקר לא יעבוד.
ועד כמה שאני מבין את הקוד שלך ה-STB לא מורם ל-1 כי אתה כותב שם ערך של משתנה שכנראה מכיל 0 כברירת מחדל.

הדבר הקטן הוא זה שאתה כל הזמן כותב משהו לפורטים בתוך הלופים שלך.
כדי לייצר PWM אתה צריך לכתוב 1, לחכות (אולי לופ ריק), לכתוב 0 ולחכות.
אין טעם לכתוב את אותו ערך 9 מיליון פעם ברצף.

אני גם לא יודע מה מהירות הריצה לך, תבדוק שאות ה-PWM שאתה מייצר מתאים למהירות שהבקר צריך לקבל.

Re: בקר מנוע.

נשלח: ש' ינואר 07, 2012 1:11 am
על ידי Michaelz1992
את ה-שטות שעשיתי של STB תיקנתי בדיוק דקה אחרי שפרסמתי.
אז אתה מתכוון פשוט לעשות while() וזהו, שירוץ.
ולא הבנתי לגבי ה-" כדי לייצר PWM אתה צריך לכתוב 1, לחכות (אולי לופ ריק), לכתוב 0 ולחכות."
אתה מתכוון שפשוט לעשות את זה כמה פעמים עם delay?

תודה על העזרה.

Re: בקר מנוע.

נשלח: ש' ינואר 07, 2012 8:50 am
על ידי Alex
כן. אפ יש לך פונקציה של delay עם זמן מוגדר, אז זה מה שצריך להשתמש בו.
אם פונקצית delay מקבלת ערכים של מיקרושניות ונגיד אתה רוצה לתת לבקר PWM של 1 קילוהרץ, כלומר כל המחזור הוא 1 מילישניה (או 1000 מיקרו),
אז צריך להיות משהו כזה:

קוד: בחירת הכל

P0_0='0';//Motor A
P0_1='1';//Motor A
P0_2='1';//Motor B
P0_3='0';//Motor B

while(1)
{
P0_4='1';
P0_5='1';
delay(666);

P0_4='0';
P0_5='0';
delay(333);
}

Re: בקר מנוע.

נשלח: ש' ינואר 07, 2012 1:25 pm
על ידי Michaelz1992
בדיוק על זה חשבתי כשאמרת לי לגבי ה-delay.
אני אנסה את זה עוד מעט:).

תודה רבה על העזרה שלך פה:).

Re: בקר מנוע.

נשלח: ש' ינואר 07, 2012 1:28 pm
על ידי Michaelz1992
ורק שכחת להוסיף את הפורט '1'=P0_6 שלי שהוא בעצם רגל STB כדי שהבקר יעבוד.

Re: בקר מנוע.

נשלח: ש' ינואר 07, 2012 2:45 pm
על ידי Michaelz1992
משום מה זה גם לא עובד.
יש אפשרות שיש בעיה ברכיב?או שאני כבר לגמרי שכחתי תוכנה?חחח

Re: בקר מנוע.

נשלח: ש' ינואר 07, 2012 8:18 pm
על ידי Alex
הקוד האחרון הוא לגבי ה-PWM ולא לכל הפרוייקט...

הכל אפשרי. אני יכול להגיד לך שרכיב זה עבר בדיקה אחרי היצור, כך שאני הייתי מחפש בעיות במקומות אחרים.
אולי חיבורים? מתחים?