Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Electrical (http://www.chiefdelphi.com/forums/forumdisplay.php?f=53)
-   -   Project Questions about Programming and Electrical (http://www.chiefdelphi.com/forums/showthread.php?t=58793)

RyanN 16-09-2007 20:56

Project Questions about Programming and Electrical
 
First off, a description of my project:
I started building a contraption that I call the "Weather Alert." It basically houses a 12V battery, microcontroller, switches, LEDs, Power Inverter, 12V outlet, 120V outlet, and integrated flood lights. My last version of this thing used a BS2 controller, but that proved to be very flaky and didn't have enough ports for me to use. Now this one is controlled by using the 2005 robot controller. I have the controller to run continuously in autonomous mode without the Operator Interface so all programming will be done int he autonomous code. Here are my questions:

Since I know nothing of programming, what variable is used to show the battery voltage, and if there is an equation to detect the exact voltage, can you please supply it?

Is there a way to output a frequency to a speaker to use for an alarm? This will have to be capable of producing many different types of sounds.

How would you charge the battery for this? I was thinking of just using a regular 20AMP Headlight relay to connect and disconnect the charger, but if I do this and run the battery completely down and it cannot connect the charger, how would I charge the battery? I can't have it setup on a normally closed circuit either because when I turn the Weather Alert system off, the charger would remain on, killing my battery(ies).

Some additional information:
My power switch is a DPDT Momentary switch. Both poles are used: one gives the system a "jumpstart" so it can come on (Switch gives power to the power relay, which provides power to the whole system), the other pole is used to send the kill signal to the robot controller.

I think I have a way to connect the charger by using some diodes and letting the RC only charge the battery for like 30 seconds if the battery if full or continue to charge it if it is dead.

If this all seems very confusing, it probably is... Just ask me a particular question and I'll answer it to the best of my knowledge.

DonRotolo 16-09-2007 21:04

Re: Project Questions about Programming and Electrical
 
What source of power is available to charge the battery? If you have 120 AC, then a small charger like the ones used for FIRST would be perfect - leave them on and connected forever and no overcharging.

If it's some other power source, then provide more details please.

Don

RyanN 16-09-2007 21:10

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by Don Rotolo (Post 642541)
What source of power is available to charge the battery? If you have 120 AC, then a small charger like the ones used for FIRST would be perfect - leave them on and connected forever and no overcharging.

If it's some other power source, then provide more details please.

Don

I want to use something like a 15V 1.5AMP charger (I used a 13.5V 1.5AMP one on my last version) Something that will charge the battery quicker than 3 days. Also, last time I tried leaving the charger on continuously, 3 out of 4 of the batteries cracked and went bad, and I could feel the heat coming out of them with the charger on. So... having a charger that automatically comes on and off is important.

Phalanx 16-09-2007 21:24

Re: Project Questions about Programming and Electrical
 
Look in ifi_aliases.h, You will find the variables for the battery.
I hope this helps.

/*
*-----------------------------------------------------------------------------------------------------
*---------- Aliases for Battery Voltage bytes --------------------------------------------------------
*-----------------------------------------------------------------------------------------------------
* Formula to calculate voltage in volts:
* current_voltage = battery_voltage * 0.038 + 0.05;
*/

#define battery_voltage rxdata.rc_main_batt*15.64/256
#define backup_voltage rxdata.rc_backup_batt*15.64/256

RyanN 16-09-2007 22:00

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by Phalanx (Post 642545)
Look in ifi_aliases.h, You will find the variables for the battery.
I hope this helps.

/*
*-----------------------------------------------------------------------------------------------------
*---------- Aliases for Battery Voltage bytes --------------------------------------------------------
*-----------------------------------------------------------------------------------------------------
* Formula to calculate voltage in volts:
* current_voltage = battery_voltage * 0.038 + 0.05;
*/

#define battery_voltage rxdata.rc_main_batt*15.64/256
#define backup_voltage rxdata.rc_backup_batt*15.64/256

Thanks!

Also, I'm going to add something. I think for the charger, I might have a manual override so I can force it to charge while off (like just a small switch in the back)

Kevin Sevcik 17-09-2007 00:17

Re: Project Questions about Programming and Electrical
 
You could pretty easily use the CCP ports represented by PWMs 13-16 to output single frequency tones. You'd set it up to output a square wave at the particular frequency you want. You'd have to filter it fairly heavily if you wanted a pure tone, of course. Square waves have harmonics at odd multiples of the fundamental frequency, so if it were me, I'd pick what your high frequency is, make yourself something like a 4th or 6th order low pass filter with a corner frequency at that highest frequency. Then you can put out frequencies down to about 1/2 that highest frequency and still have a pretty pure tone. You'd need to make up a separate amp to drive your speaker, and you'd want it to filter out the DC offset inherent in that initial PWM-style square wave and you'd probably need to create a virtual ground split between your 0V and 12V and various other things as well, of course.

RyanN 25-09-2007 23:30

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by Kevin Sevcik (Post 642585)
You could pretty easily use the CCP ports represented by PWMs 13-16 to output single frequency tones. You'd set it up to output a square wave at the particular frequency you want. You'd have to filter it fairly heavily if you wanted a pure tone, of course. Square waves have harmonics at odd multiples of the fundamental frequency, so if it were me, I'd pick what your high frequency is, make yourself something like a 4th or 6th order low pass filter with a corner frequency at that highest frequency. Then you can put out frequencies down to about 1/2 that highest frequency and still have a pretty pure tone. You'd need to make up a separate amp to drive your speaker, and you'd want it to filter out the DC offset inherent in that initial PWM-style square wave and you'd probably need to create a virtual ground split between your 0V and 12V and various other things as well, of course.

Can you please elaborate? Like I've connected my speaker to a this transistor and I have sound, but it's just a steady pulse, like you would expect from a PWM signal. I really need the help with the programming. I'm electrical, not programming, though I've just learned my first lessons with C like creating variables, the evil semicolon; how to compare things using if {} and how to set variables to certain values. That is literally all I know. I even had trouble compiling the code... (due to something going crazy with MPLAB and not saving my user_routines_fast.c... that took about 20 minutes to figure out). Some coding examples or some electrical schematics of what you are talking about will help a lot. I also have the option to use a Homework Basic Stamp boards as like a sound card, but I'd rather not do that because of the power consumption and the price.

Kevin Sevcik 27-09-2007 13:16

Re: Project Questions about Programming and Electrical
 
Ryan,

PWM outputs 13-16 are directly connected to the user processor's CCP modules, so you can use them to generate timed pulses. The default code has a section briefly covering this:
Code:

/* FIFTH: Set your PWM output types for PWM OUTPUTS 13-16.
  /*  Choose from these parameters for PWM 13-16 respectively:              */
  /*    IFI_PWM  - Standard IFI PWM output generated with Generate_Pwms(...) */
  /*    USER_CCP - User can use PWM pin as digital I/O or CCP pin.          */
  Setup_PWM_Output_Type(IFI_PWM,IFI_PWM,IFI_PWM,IFI_PWM);

  /*
    Example: The following would generate a 40KHz PWM with a 50% duty cycle on the CCP2 pin:

        CCP2CON = 0x3C;
        PR2 = 0xF9;
        CCPR2L = 0x7F;
        T2CON = 0;
        T2CONbits.TMR2ON = 1;

        Setup_PWM_Output_Type(USER_CCP,IFI_PWM,IFI_PWM,IFI_PWM);
  */

One use for the CCP hardware was replacing the IFI code for the PWMs with more stable code. This is described here.

So, using the CCP, you can get a square wave signal at (mostly) whatever frequency you want, but two problems remain. First, the signal will oscillate between 0(ish)V and 5(ish)V. Sending something like this through a speaker isn't particularly nice. Especially if the 0V side isn't 0V, as then you'd be constantly sending a current through the speaker. So you'd need an op-amp circuit to shift the square wave so it oscillates around 0V.

You could, in fact, send this through the speaker, but it'd sound a bit odd as it's not a nice sine wave like a pure audio tone is. It's possible to get a nice pure tone out of a square wave, however. The sharp edges (more or less) represent higher frequency components of the signal. So if you create a filtering circuit to filter out high frequencies, you'll get a much purer, cleaner tone. That bit isn't as necessary to making a sound come out of the speaker, though.

RyanN 27-09-2007 23:01

Re: Project Questions about Programming and Electrical
 
Thanks. I'll try to figure it all out this weekend. I just got a bunch of stuff working on it until a PWM cable randomly decided to go out or else a pin on the circuit board came loose and is not giving me a good connection. I think I may just try to move it to a different pin.

Alan Anderson 27-09-2007 23:08

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by Kevin Sevcik (Post 643755)
Sending something like this through a speaker isn't particularly nice. Especially if the 0V side isn't 0V, as then you'd be constantly sending a current through the speaker. So you'd need an op-amp circuit to shift the square wave so it oscillates around 0V.

You can block DC current by putting a suitable capacitor in series with the speaker. That's not always a perfect option, but it's certainly a lot easier, cheaper, and quicker than adding active circuitry that requires a bipolar power supply.

Al Skierkiewicz 28-09-2007 08:00

Re: Project Questions about Programming and Electrical
 
Ryan,
Audio alerts can take many different forms. If you are trying to get someone's attention, a Sonalert or Piezo electric transducer works very well. These devices work best at their resonant frequency but can reproduce a range of frequencies in the mid band of human hearing. They are easy to interface and are pretty cheap. I have a used a few from Radio Shack like the ones here...http://www.radioshack.com/family/ind...032058.2032230

RyanN 29-09-2007 00:57

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by Al Skierkiewicz (Post 643857)
Ryan,
Audio alerts can take many different forms. If you are trying to get someone's attention, a Sonalert or Piezo electric transducer works very well. These devices work best at their resonant frequency but can reproduce a range of frequencies in the mid band of human hearing. They are easy to interface and are pretty cheap. I have a used a few from Radio Shack like the ones here...http://www.radioshack.com/family/ind...032058.2032230

I'm looking for something that would have a variety of different tones to play for different alarms. Like an alarm for a power outage, flood waters, high winds, temperature, and other related types of warnings. I'm used to a basic stamp (freqout) where I can customize my sounds. I'm thinking of using one like a sound card and using the pulsin command to figure out what type of alarm to do, but I'd rather still just do it all within the RC.

Kevin Sevcik 29-09-2007 15:09

Re: Project Questions about Programming and Electrical
 
Ryan, again, you can customize the CCP output to produce different frequencies. Not a LOT if you want it to sound half decent, but still probably 3-4 distinct tones. Honestly, with just two tones and a little clever programming you could get several different signals by pulsing and alternating the tones at intervals, sort of like morse code or the BIOS beep codes computers use.

Addressing Alan's comments, yes putting a capacitor in series with your amplifier or speaker would remove the DC component of the signal, but if you're planning on using a bipolar amplifier of some sort to power your speaker, then I'd recommend the extra trouble of a little active filtering, as it would really help in the long run. What I wouldn't recommend is running he speaker directly from the RC digital output. I don't think they can source or sink nearly enough current to work well in that application.

Al Skierkiewicz 29-09-2007 21:21

Re: Project Questions about Programming and Electrical
 
Ryan,
You can use piezo buzzers in place of speakers. They are easy to interface and can play out a band of frequencies. At least one of the Radio Shack devices is listed as midband 1500-3000Hz. That is certainly enough to give you R2D2 like sounds. They are very efficient giving upwards of 90dB+ outputs at 10-15 ma. Most can be used as the collector load in a simple one transistor amp. Since the current demands are low, a 2N2222 or 2N3906 would work fine. When you choose, be sure to look for one that does not self resonate, i.e. make sound when connected to a power source. Most are able to take a variable frequency input.

RyanN 10-10-2007 14:00

Re: Project Questions about Programming and Electrical
 
I've run into a bit of a problem today. I was testing the whole setup, so I left it running for about half an hour. Every thing seemed fine. I turned it off and went to go run some errands, and when I came home I found that it was on. So I pushed the power switch off and it stayed on. "Hmm...," I thought to my self so I disconnected the battery and it turned off. I reconnected it and left it off. I went to do some chores around my house, came back to my room and found it on again! Somehow, this thing keeps on turning itself on, and I'm not sure how it can do it with the way I have the power switch wired. I'm totally lost on to what is causing this because there is no way for it to happen with the setup I have. You can see that the power relay is connected to the fuse panel, which must receive power from the power switch first in order to even turn on. Here is a rough hand drawn schematic of my electrical circuits:
http://nazaretian.homeip.net:8000/ry...%201%20001.png

EDIT: Also it is receiving power from something non-mechanical. So I guess it's leaking through a transistor or something, but I don't see how since they're all connective negatively.

RyanN 10-10-2007 15:38

Re: Project Questions about Programming and Electrical
 
I partially found the problem. My power relay's contacts were stuck closed because my connection pushed the contact up, but... that doesn't explain why it would turn off then after a few minutes, it would turn back on unless the copper connections were bending slightly after it cooled down.

Al Skierkiewicz 10-10-2007 15:45

Re: Project Questions about Programming and Electrical
 
Ryan,
When linking to your schematic the connection is refused so I can't be sure of what you are doing.
As to the power relay, did you solder directly to the relay contacts? Often this melts the base material and leaves enough slop in the contact to move around with heat/cool and vibration. Add to this a few errant metal shavings or whiskers and you end up with a contact that you can't really see but is there none the less. The best way to use realys is to add a socket. The socket is made for soldering and the relay merely plugs into it. Relays are notorious for acting weird especially on low current signals.

RyanN 10-10-2007 16:21

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by Al Skierkiewicz (Post 645602)
Ryan,
When linking to your schematic the connection is refused so I can't be sure of what you are doing.
As to the power relay, did you solder directly to the relay contacts? Often this melts the base material and leaves enough slop in the contact to move around with heat/cool and vibration. Add to this a few errant metal shavings or whiskers and you end up with a contact that you can't really see but is there none the less. The best way to use realys is to add a socket. The socket is made for soldering and the relay merely plugs into it. Relays are notorious for acting weird especially on low current signals.

I didn't solder it at all. I used female connections and it doesn't look melted at all. I think it may just be a defective connection. Here are the pictures I uploaded to facebook since my server doesn't want to cooperate:



Al Skierkiewicz 11-10-2007 07:40

Re: Project Questions about Programming and Electrical
 
Ryan,
Are you using the backup battery input to the RC? Since the relay outputs of the RC are intended for Spike connections, I am not sure what the actual signal output is. They may actually send a keep alive output which could turn the relay driver on. The Spike input circuit is pretty complex and has a lot of input filtering. I suspect that the RC is actually triggering the relay drive transistor. Also, the relay output only has to rise to 0.6 volts to turn the relay driver on in this configuration. You could simply try a 1k resistor in series with the base of the transistor and I would add a 0.1mfd cap base to emitter to quench any noise and see what happens.

RyanN 11-10-2007 21:14

Re: Project Questions about Programming and Electrical
 
Actually all seems to be working well just after replacing the relay. I got my charger connected and it seems to work perfectly. I only have the LEDs and sensors to connect now. I like how it is wrapping up and I hope to post some pictures of the spaghetti I have made into my project. TOO MANY SIGNAL WIRES!!!!! Oh well, as long as it doesn't break I'll be fine, and if it does, I just need to set aside a day to fix it :D. Thanks for all the help. If I encounter any trouble with the transistors, I will do what you said and add a resistor and a capacitor to the transistors. I actually found the Spike signal system to be very very simple. They output 5V (my personal favorite voltage for transistors and LEDs) It switches using IFI's seemingly favorite H bridge. If you put both fwd and rev to 1, then it outputs positive signals on the spike outputs, and they are both 0, then it's a negative signal. So what I've done is take like fwd and rev to turn individual spikes to only forward since accidentally reversing them will fry some things. Hopefully this all makes sense. If there are any questions for me, please don't hesitate to ask.

Al Skierkiewicz 12-10-2007 07:33

Re: Project Questions about Programming and Electrical
 
Glad you got it working the way you want. I love when that happens.

RyanN 12-10-2007 22:21

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by Phalanx (Post 642545)
Look in ifi_aliases.h, You will find the variables for the battery.
I hope this helps.

/*
*-----------------------------------------------------------------------------------------------------
*---------- Aliases for Battery Voltage bytes --------------------------------------------------------
*-----------------------------------------------------------------------------------------------------
* Formula to calculate voltage in volts:
* current_voltage = battery_voltage * 0.038 + 0.05;
*/

#define battery_voltage rxdata.rc_main_batt*15.64/256
#define backup_voltage rxdata.rc_backup_batt*15.64/256

I've gotten to the part of programming where I'm trying to get my charger working, but obviously there is something wrong with the code.
User_routines_fast.c
Code:

/*** DEFINE USER VARIABLES AND INITIALIZE THEM HERE ***/
int powerrelay;
int tempb;
int tempc;
int tempd;
int pwrofftmout;
int powerout;
int poweroutb;
int volts;
(Skip a lot of the stuff that doesn't matter in this post)
printf("volts %d\n","battery_voltage %d\n");
volts = battery_voltage*0.038+0.05; /*Should give the correct voltage*/

With my novice programming skills, all this seems good to me, however, when using the printf command (which I'm not sure I'm using it correctly) it says "volts 15865" meaning that it has no value for volts and when I manually convert: 15865*0.038+0.05 = 602.92V which is obviously not correct. Any help is greatly appreciated.

Also, the value 15865 does not change at all. It is constant when I disconnect the charger or when I put a load on the battery, which indicates something else is not working properly.

bear24rw 12-10-2007 22:45

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by RyanN (Post 645890)
I've gotten to the part of programming where I'm trying to get my charger working, but obviously there is something wrong with the code.
User_routines_fast.c
Code:

/*** DEFINE USER VARIABLES AND INITIALIZE THEM HERE ***/
int powerrelay;
int tempb;
int tempc;
int tempd;
int pwrofftmout;
int powerout;
int poweroutb;
int volts;
(Skip a lot of the stuff that doesn't matter in this post)
printf("volts %d\n","battery_voltage %d\n");
volts = battery_voltage*0.038+0.05; /*Should give the correct voltage*/

With my novice programming skills, all this seems good to me, however, when using the printf command (which I'm not sure I'm using it correctly) it says "volts 15865" meaning that it has no value for volts and when I manually convert: 15865*0.038+0.05 = 602.92V which is obviously not correct. Any help is greatly appreciated.

Also, the value 15865 does not change at all. It is constant when I disconnect the charger or when I put a load on the battery, which indicates something else is not working properly.

For your printF your not printing any values.. try it like this
Code:

printf("volts %d\n","battery_voltage %d\n",volts_variable, battery_voltage_variable);

RyanN 12-10-2007 22:58

Re: Project Questions about Programming and Electrical
 
Quote:

Originally Posted by bear24rw (Post 645893)
For your printF your not printing any values.. try it like this
Code:

printf("volts %d\n","battery_voltage %d\n",volts_variable, battery_voltage_variable);

The Code:
Code:

printf("volts %d\n","battery_voltage %d\n",volts_variable,battery_voltage_variable);
The Build:
Code:

C:\FrcCode2005v2.2\user_routines_fast.c:168:Error [1105] symbol 'volts_variable' has not been defined
C:\FrcCode2005v2.2\user_routines_fast.c:168:Error [1105] symbol 'battery_voltage_variable' has not been defined
C:\FrcCode2005v2.2\user_routines_fast.c:168:Warning [2058] call of function without prototype
Halting build on first failure as requested.

I also tried
Code:

printf("volts %d\n","battery_voltage %d\n",(int)volts,(int)battery_voltage);
That compiled, but it's still giving me a ridiculously high number, which is now constant at 16025.

bear24rw 13-10-2007 00:26

Re: Project Questions about Programming and Electrical
 
Are you doing the volts equation before printf?

bear24rw 13-10-2007 00:28

Re: Project Questions about Programming and Electrical
 
Code:

printf("volts %d\n","battery_voltage %d\n",(int)volts,(int)battery_voltage);
Try making that

Code:

printf("volts %d\n battery_voltage %d\n",(int)volts,(int)battery_voltage);

RyanN 14-10-2007 00:07

Re: Project Questions about Programming and Electrical
 
Well, I tried your code and same thing... I then defined battery_voltage in user_routines_fast and it's now updating, but the values are still in the 15 and 16000 range. I totally took out all the multiplication and stuff to get the normal volts and just created values using that equation so now I'm doing stuff like:
Code:

if (battery_voltage < 361)
{
relay02_fwd =  1 (<- this may be wrong, I'm writing this from memory)
}

The problem still remains: Why is my battery voltage appearing so high (like 600 volts)? I can't really see any relation. I may end up just making my own equation tomorrow or something that will allow me to get the voltage correct. Well, now I'm off to bed.

Edit: Just thought of another problem. My charger should stop charging when the value is greater than like 370 or something, but even though it's 16000, the charger remains on. I can connect the charger to a switch with the software and it works, so I'm probably screwing something up with the programming.

RyanN 21-10-2007 22:43

Re: Project Questions about Programming and Electrical
 
Well, no one has replied in over a week, so I'm going to ask again...
Okay... I've tried to program the controller to read the battery voltage, but it's giving me raw values of over 16,000 (if you go to this post, they're experiencing the same problem). No body answered their question, and I posted there yesterday and also got no answer. Please please, any ideas are greatly appreciated, otherwise this thing will overcharge as it did last time.


All times are GMT -5. The time now is 06:55.

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