Go to Post Building things from scratch builds character. - davidthefat [more]
Home
Go Back   Chief Delphi > Technical > Control System > Sensors
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #1   Spotlight this post!  
Unread 07-06-2008, 11:02
gohan22 gohan22 is offline
Registered User
no team
 
Join Date: Jun 2008
Location: Canada
Posts: 9
gohan22 will become famous soon enoughgohan22 will become famous soon enough
Building self balancing scooter- troubles with Integrating Gyro

Hi there, i am building a self balancing scooter and i am trying to integrate the gyro (ADIS16100) in order to use it as a tilt sensor but the value of the integration keeps drifting away weather the Gyro is moving or not. Currently every 10 seconds the value increases by a small amount. Does anyone know of a better way to integrate or a way to determine the offset than just assuming its constant which clearly its not?









#include<16f877A.h>
#DEVICE ADC=8
#fuses hs,nowdt,noprotect,noput,nobrownout
#use delay(clock=20000000)
#include<lcd420.c>//set up for LCD
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8,pari ty=N)
//#use spi(MASTER,DI=pin_A0,DO=pin_A1,CLK=pin_A2,BAUD=100 0000,IDLE=1,SAMPLE_RISE,ENABLE_ACTIVE=1,MODE=1,BIT S=16,MSB_FIRST,STREAM=SPI_STREAM,ENABLE=PIN_D2)
#define GYRO_OFFSET 123 //offset for 8 bits is 123 and for 10 bit it is 507
#int_timer0

void main ()
{
float dt,angle;
double gz_adc,last_angle; /* Analog values */
int gz_deg,gyro_deg; /* Unit values */
double newgyrovalue = 0;
double oldgyrovalue = 0;
double gyrointegral = 0;

lcd_init ();
delay_us(10);

//Setup the Timer
setup_timer_0(RTCC_INTERNAL | RTCC_8_BIT| RTCC_DIV_256); // sets up timer
set_timer0(0); // intitializes timer to 0

//Setup the ADC
setup_adc(ADC_CLOCK_INTERNAL );//setup clock before setup
setup_adc_ports( ALL_ANALOG );
set_adc_channel( 0 );//check to see why not A0


while(1)
{

newgyrovalue = read_adc();
set_timer0(0);//start the timer
gyro_deg=((newgyrovalue-gyro_offset)*41);
dt=get_Timer0();//get the timer value
gyrointegral = (oldgyrovalue + (gyro_deg*0.000051*dt));


oldgyrovalue = gyrointegral;
angle=gyrointegral;
printf (lcd_putc,"\f Angle is :%f", angle); // d for int and f for
float and double
delay_ms(40);
//set_timer0(0);//reset the timer
}
}
Reply With Quote
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Motor specs for self-balancing scooter dunkonu Motors 1 23-02-2008 12:05
Underwater self propelled scooter devices Elgin Clock Chit-Chat 2 20-02-2007 15:02
Team 862 - Self Balancing Scooter jakep Robot Showcase 15 10-10-2006 21:01
Self-Balancing 2 Wheeled Robot Mike Robotics Education and Curriculum 25 02-08-2005 15:12
Self Balancing Robot in FIRST (plausible? possible? preferable?) phrontist General Forum 11 28-06-2004 10:55


All times are GMT -5. The time now is 21:47.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi