[RYA2013] MicroMouse SourceCode

honghiep

Cố Vấn CLB
Staff member
sao mãi mà ko cho con robot chạy được, dùng lệnh move, turn left ... cũng ko được. Dùng lệnh SetPWM(TIMER1_BASE, TIMER_A, DEFAULT, 50); SetPWM(TIMER0_BASE, TIMER_A, DEFAULT, 50); cũng ko xong lun.
Có ai giúp mình với!
Bạn đã enable mạch boost và cho 2 chân resetAB/CB của cầu H lên 1 chưa?
 

bigboy061293

Thành Viên PIF
đoạn trong main.c, hình chỉ thêm phần enable boost và chân reset AB CD như sau:

Code:
#include "include.h"
#include "driverlib/eeprom.h"
 
extern PIDType PIDVerLeft, PIDVerRight, PIDPosLeft, PIDPosRight, PIDWallRight, PIDWallLeft, PIDWallFL, PIDWallFR;
extern uint8_t ControlFlag;
extern uint8_t Stage;
extern int32_t ADCResOn[], ADCResOff[], ADCResDelta[];
extern int32_t MaxIRBase[];
extern int32_t BuzzerTick;
extern uint8_t FollowSel;
extern uint8_t AvailDirection, RequestTurn;
 
uint32_t Readeeprom[4];
 
void Button1ISR(void)
{
    //Do nothing
    //Add your code here
}
 
void Button2ISR(void)
{
    //Do nothing
    //Add your code here
}
 
void InitPID(void)
{
    //Replace x.x with correct value
    PIDVerLeft.Kp = 0;
    PIDVerLeft.Ki = 0;
    PIDVerLeft.Kd = 0;
    PIDVerLeft.Enable = 1;
 
    PIDVerRight.Kp = 0;
    PIDVerRight.Ki = 0;
    PIDVerRight.Kd = 0;
    PIDVerRight.Enable = 1;
 
    PIDPosLeft.Kp = 0;
    PIDPosLeft.Ki = 0;
    PIDPosLeft.Kd = 0;
    PIDPosLeft.Enable = 0;
 
    PIDPosRight.Kp = 0;
    PIDPosRight.Ki = 0;
    PIDPosRight.Kd = 0;
    PIDPosRight.Enable = 0;
 
    PIDWallRight.Kp = 0;
    PIDWallRight.Ki = 0;
    PIDWallRight.Kd = 0;
 
    PIDWallLeft.Kp = 0;
    PIDWallLeft.Ki = 0;
    PIDWallLeft.Kd = 0;
}
 
void main (void)
{
    ConfigSystem();
    ConfigADCTimer();        //Set ADC timer interval: 20ms
    ConfigPIDTimer(10,2);    //10 ms speed, 10*2 = 20ms position
    EnableBuzzer();            //Enable Buzzer before CongifPWM
    ConfigPWM();
    ConfigIRDetectors();   
    ConfigEncoder();
    ConfigIRTransmitter();
    ConfigBattSense();        //Enable battery sensing
    ConfigButtons(&Button1ISR, &Button2ISR);    //Config User buttons
    SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);    //Enable EEPROM
    EEPROMInit();
 
 
    SetPWM(TIMER1_BASE, TIMER_A, DEFAULT, 0);
    SetPWM(TIMER0_BASE, TIMER_A, DEFAULT, 0);
    IntMasterEnable();
 
    InitPID();
 
    EEPROMWrite((uint32_t *)ADCResDelta, 0x7f0,4);    //write data to eeprom
    EEPROMReadWords((uint32_t *)Readeeprom, 0x7f0, 4);    //Read data from eeprom
   
    BoostEnable();
    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5|GPIO_PIN_7,160);
 
    //Select one:
    //FollowSel = FOLLOW_LEFT;    //Enable follow left wall
    PIDSpeedSet(&PIDVerLeft, 50);        //Set left-motor speed at 50
    //PIDSpeedSet(&PIDVerRight, 50);        //Set left-motor speed at 50
    //PIDPositionSet(&PIDPosRight, 2000);    //
    //Move (3000, 5000);                //Move forward: left-motor 3000 pulses - right-motor 5000 pulses
    //FollowSel = FOLLOW_DISABLE;    //Disable wall-follow
 
    while(1)
    {
 
    }
}
nhưng sao nó lại nhảy vào FaultISR ?
 

hung303mc

Thành Viên PIF
Mình muốn đọc tín hiệu Encoder, nhà mình ai đọc được chỉ mình với.
 

honghiep

Cố Vấn CLB
Staff member
đoạn trong main.c, hình chỉ thêm phần enable boost và chân reset AB CD như sau:

Code:
#include "include.h"
#include "driverlib/eeprom.h"
 
extern PIDType PIDVerLeft, PIDVerRight, PIDPosLeft, PIDPosRight, PIDWallRight, PIDWallLeft, PIDWallFL, PIDWallFR;
extern uint8_t ControlFlag;
extern uint8_t Stage;
extern int32_t ADCResOn[], ADCResOff[], ADCResDelta[];
extern int32_t MaxIRBase[];
extern int32_t BuzzerTick;
extern uint8_t FollowSel;
extern uint8_t AvailDirection, RequestTurn;
 
uint32_t Readeeprom[4];
 
void Button1ISR(void)
{
    //Do nothing
    //Add your code here
}
 
void Button2ISR(void)
{
    //Do nothing
    //Add your code here
}
 
void InitPID(void)
{
    //Replace x.x with correct value
    PIDVerLeft.Kp = 0;
    PIDVerLeft.Ki = 0;
    PIDVerLeft.Kd = 0;
    PIDVerLeft.Enable = 1;
 
    PIDVerRight.Kp = 0;
    PIDVerRight.Ki = 0;
    PIDVerRight.Kd = 0;
    PIDVerRight.Enable = 1;
 
    PIDPosLeft.Kp = 0;
    PIDPosLeft.Ki = 0;
    PIDPosLeft.Kd = 0;
    PIDPosLeft.Enable = 0;
 
    PIDPosRight.Kp = 0;
    PIDPosRight.Ki = 0;
    PIDPosRight.Kd = 0;
    PIDPosRight.Enable = 0;
 
    PIDWallRight.Kp = 0;
    PIDWallRight.Ki = 0;
    PIDWallRight.Kd = 0;
 
    PIDWallLeft.Kp = 0;
    PIDWallLeft.Ki = 0;
    PIDWallLeft.Kd = 0;
}
 
void main (void)
{
    ConfigSystem();
    ConfigADCTimer();        //Set ADC timer interval: 20ms
    ConfigPIDTimer(10,2);    //10 ms speed, 10*2 = 20ms position
    EnableBuzzer();            //Enable Buzzer before CongifPWM
    ConfigPWM();
    ConfigIRDetectors(); 
    ConfigEncoder();
    ConfigIRTransmitter();
    ConfigBattSense();        //Enable battery sensing
    ConfigButtons(&Button1ISR, &Button2ISR);    //Config User buttons
    SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);    //Enable EEPROM
    EEPROMInit();
 
 
    SetPWM(TIMER1_BASE, TIMER_A, DEFAULT, 0);
    SetPWM(TIMER0_BASE, TIMER_A, DEFAULT, 0);
    IntMasterEnable();
 
    InitPID();
 
    EEPROMWrite((uint32_t *)ADCResDelta, 0x7f0,4);    //write data to eeprom
    EEPROMReadWords((uint32_t *)Readeeprom, 0x7f0, 4);    //Read data from eeprom
 
    BoostEnable();
    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5|GPIO_PIN_7,160);
 
    //Select one:
    //FollowSel = FOLLOW_LEFT;    //Enable follow left wall
    PIDSpeedSet(&PIDVerLeft, 50);        //Set left-motor speed at 50
    //PIDSpeedSet(&PIDVerRight, 50);        //Set left-motor speed at 50
    //PIDPositionSet(&PIDPosRight, 2000);    //
    //Move (3000, 5000);                //Move forward: left-motor 3000 pulses - right-motor 5000 pulses
    //FollowSel = FOLLOW_DISABLE;    //Disable wall-follow
 
    while(1)
    {
 
    }
}
nhưng sao nó lại nhảy vào FaultISR ?
Bạn chạy debug xem khi nào nó nhảy vào FaultISR
 

honghiep

Cố Vấn CLB
Staff member
Mình muốn đọc tín hiệu Encoder, nhà mình ai đọc được chỉ mình với.
Sau khi config encoder xong bạn có thể đọc được encoder qua các biến EncLeftCount, EncRightCount, PosLeftCount , PosRightCount
Lưu ý: Khai báo trước khi truy xuất các biến này:
extern int32_t EncLeftCount, EncRightCount, PosLeftCount , PosRightCount;
 

ntan234

Trứng gà
Cho mình hỏi các giá trị Kp, Ki, Kd nằm trong khảong bao nhiêu vậy? Trong đoạn 0..1 hay tùy ý?
Với lại, tại sao sau khi thực hiện lệnh Move, đèn LED đỏ phía sau con robot lại sáng (OTW), ko thực hiện j tiếp cả, lỗi j vậy? Đọc datasheet của con driver thì nó lại bảo Overtemperature warning.
 

hung303mc

Thành Viên PIF
Cho mình hỏi PIDPositionSet(&PIDPosRight,50) có tác dụng là gì vậy?. Do không hiểu sao con robot mình khi để chạy PWM bình thường thì chạy tiến, còn khi cho PID vào thì chạy ngược. Và muốn đổi chiều xe này thì phải làm sao. Mình xin cám ơn
 

honghiep

Cố Vấn CLB
Staff member
Cho mình hỏi PIDPositionSet(&PIDPosRight,50) có tác dụng là gì vậy?. Do không hiểu sao con robot mình khi để chạy PWM bình thường thì chạy tiến, còn khi cho PID vào thì chạy ngược. Và muốn đổi chiều xe này thì phải làm sao. Mình xin cám ơn
PIDPositionSet(&PIDPosRight,50) sẽ PID bánh phải 50 xung. Các thông số PID vị trí phải khác 0 thì hàm trên mới có tác dụng
 

ctcngh

Thành Viên PIF
Vậy cho mình hỏi làm sao có thể đổi chiều quay của xe
Bình thường thì nếu PWM xuất vào driver mà <50 thì nó quay theo 1 chiều và >50 thì nó sẽ quay theo chiều ngược lại.
Hàm SetPWM trong SystemConfig dùng để set pwm. trong đó cái dutycycle đưa vô là -90 ->90. Nếu âm thì quay ngược chiều
 

ctcngh

Thành Viên PIF
Cho mình hỏi các giá trị Kp, Ki, Kd nằm trong khảong bao nhiêu vậy? Trong đoạn 0..1 hay tùy ý?
Với lại, tại sao sau khi thực hiện lệnh Move, đèn LED đỏ phía sau con robot lại sáng (OTW), ko thực hiện j tiếp cả, lỗi j vậy? Đọc datasheet của con driver thì nó lại bảo Overtemperature warning.
Bạn Enable mạch boost chưa? Kp Ki Kd thì phải chỉnh từ từ
 

ntan234

Trứng gà
Cho mình hỏi các giá trị Kp, Ki, Kd nằm trong khảong bao nhiêu vậy? Trong đoạn 0..1 hay tùy ý?
Với lại, tại sao sau khi thực hiện lệnh Move, đèn LED đỏ phía sau con robot lại sáng (OTW), ko thực hiện j tiếp cả, lỗi j vậy? Đọc datasheet của con driver thì nó lại bảo Overtemperature warning.
Bạn Enable mạch boost chưa? Kp Ki Kd thì phải chỉnh từ từ
Enable rồi, chỉnh PB5,7 lên 1 luôn rồi. Nó chỉ làm lệnh move 1 lần sau đó lỗi.
 

honghiep

Cố Vấn CLB
Staff member
Cho mình hỏi các giá trị Kp, Ki, Kd nằm trong khảong bao nhiêu vậy? Trong đoạn 0..1 hay tùy ý?
Với lại, tại sao sau khi thực hiện lệnh Move, đèn LED đỏ phía sau con robot lại sáng (OTW), ko thực hiện j tiếp cả, lỗi j vậy? Đọc datasheet của con driver thì nó lại bảo Overtemperature warning.
Bạn Enable mạch boost chưa? Kp Ki Kd thì phải chỉnh từ từ
Enable rồi, chỉnh PB5,7 lên 1 luôn rồi. Nó chỉ làm lệnh move 1 lần sau đó lỗi.
Bạn kiểm tra xem pin đã sạc đầy chưa?
Bạn có thể mang robot lên để team support kiểm tra nhé!
 

2death

Cố Vấn CLB
Staff member
Driver mạch kích kiểu bootstrap nên dutycycle không thể là 100% được (google for it). Vậy khi test mà cho kênh pwm lên 1 tất nhiên sẽ không chạy. Em phải set duty thấp xuống mới test được.
 

hung303mc

Thành Viên PIF
Bạn nào cho xe chạy theo PID được hướng dẫn mình với, xe mình chạy theo PID không theo ý muốn, @@. Chạy tùm lum.
 

ntan234

Trứng gà
Cho mình hỏi PIDPositionSet(&PIDPosRight,50) có tác dụng là gì vậy?. Do không hiểu sao con robot mình khi để chạy PWM bình thường thì chạy tiến, còn khi cho PID vào thì chạy ngược. Và muốn đổi chiều xe này thì phải làm sao. Mình xin cám ơn
PIDPositionSet(&PIDPosRight,50) sẽ PID bánh phải 50 xung. Các thông số PID vị trí phải khác 0 thì hàm trên mới có tác dụng

PID bánh phải 50 xung là sao vậy? hiệu chỉnh thêm 50 xung sau khi tính toán phải không?
 

ntan234

Trứng gà
Bạn Enable mạch boost chưa? Kp Ki Kd thì phải chỉnh từ từ
Enable rồi, chỉnh PB5,7 lên 1 luôn rồi. Nó chỉ làm lệnh move 1 lần sau đó lỗi.
Bạn kiểm tra xem pin đã sạc đầy chưa?
Bạn có thể mang robot lên để team support kiểm tra nhé!
Mình cho xuất PWM trực tiếp thì nó chạy ào ào, còn dùng lệnh move, turnleft, right,... thì ko xong.
 

Chi Linh

Thành Viên PIF
ba con nao test robot chay duoc roi...post code mau len ae tham khao voi...sao t code hoai ko thay no cu dong chut nao...buon ghe...hj...thks all!
 

MMKC

Thành Viên PIF
Hoc. ve` PID tham khao~ tai. day
Code:
[URL]http://www.hocavr.com/index.php/app/dcservo[/URL]
 
Top