Files
-
boards-archive / base-station-v2.0 / base-station.brd
-
boards-archive / base-station-v2.0 / base-station.sch
-
boards-archive / breakbeam-2015-c / breakbeam.brd
-
boards-archive / breakbeam-2015-c / breakbeam.sch
-
boards-archive / capacitor-board-2015-c / capacitor-board.brd
-
boards-archive / capacitor-board-2015-c / capacitor-board.sch
-
boards-archive / cc1101-breakout-v1 / cc1101-breakout.brd
-
boards-archive / cc1101-breakout-v1 / cc1101-breakout.sch
-
boards-archive / control-v2.1 / control.brd
-
boards-archive / control-v2.1 / control.sch
-
boards-archive / control-v2.1 / control-v2.1 / control.brd
-
boards-archive / encoder-tester / encoder-tester.brd
-
boards-archive / encoder-tester / encoder-tester.sch
-
boards-archive / kicker-tester-c / kicker-tester-c.brd
-
boards-archive / kicker-tester-c / kicker-tester-c.sch
-
boards-archive / kicker-v2.2 / kicker.brd
-
boards-archive / kicker-v2.2 / kicker.sch
-
boards-archive / kicker-v3.0-IGBT / kicker.brd
-
boards-archive / kicker-v3.0-IGBT / kicker.sch
-
boards-archive / kicker-v3.0 / kicker.brd
-
boards-archive / kicker-v3.0 / kicker.sch
-
boards-archive / kicker-v3.1-IGBT-EMG57 / kicker.brd
-
boards-archive / kicker-v3.1-IGBT-EMG57 / kicker.sch
-
boards-archive / kicker-v3.1-IGBT / kicker.brd
-
boards-archive / kicker-v3.1-IGBT / kicker.sch
-
boards-archive / mcp23017-v1 / mcp23017.brd
-
boards-archive / mcp23017-v1 / mcp23017.sch
-
boards-archive / motor-breakout-a / motor-breakout.brd
-
boards-archive / motor-breakout-a / motor-breakout.sch
-
boards-archive / motor-v2.0 / motor.brd
-
boards-archive / motor-v2.0 / motor.sch
-
boards-archive / radio-v2.1 / radio.brd
-
boards-archive / radio-v2.1 / radio.sch
-
boards-archive / reflow-oven-controller-v2 / reflow-oven-controller.brd
-
boards-archive / reflow-oven-controller-v2 / reflow-oven-controller.sch
-
boards-archive / shell-id-v1.0 / shell-id.brd
-
boards-archive / shell-id-v1.0 / shell-id.sch
-
boards / breakbeam-v1.0 / breakbeam-v1.0.brd
-
boards / breakbeam-v1.0 / breakbeam-v1.0.sch
-
boards / control-v3.2 / control.brd
-
boards / control-v3.2 / control.sch
-
boards / kicker-3.2 / kicker.brd
-
boards / kicker-3.2 / kicker.sch
-
boards / radio-v3.0 / radio-v3.0.brd
-
boards / radio-v3.0 / radio-v3.0.sch
Last update 5 years 2 months
by
Will Stuckey
Filesdoc | |
---|---|
.. | |
kicker-v3.X.aux | |
kicker-v3.X.pdf | |
kicker-v3.X.tex |
kicker-v3.X.tex\documentclass[12pt, letterpaper]{article} \usepackage[utf8]{inputenc} \title{RoboJackets RoboCup Kicker v3.0} \author{William Stuckey \thanks{I'd like to acknowledge Ryo Osawa and Jon Jones for their patient mentorship in helping a CS major through the world of analog and digital electronics for the first time.}} \date{August 2018} \begin{document} \begin{titlepage} \maketitle \end{titlepage} \section{Preface} I want to write this document to address the recurring pattern of shoddy RoboCup kicker boards. Electrical Engineers with practical experience are pretty hard to come by, especially early in their undergraduate careers. For many kicker boards designers, this is their first time doing \"serious and practical\" EE work (myself included). A lot of past mistakes are undocumented or have been ignored. Over the past month I've looked at every kicker revision since 2013 and talked to past members in an attempt to understand common mistakes. \textbf{Future kicker board designers should start here.} At least that is my hope. \section{Introduction} In RoboCup SSL, ground kicks (referred to as kicks) and chip kicks (referred to as chips) are critical robot functions. In order to get precise control over kick speed, the league has largely standardized on using elctromagnetic solenoids to kick and chip balls. By varying the amount of time current flows through the solenoid, software can control how hard the ball is kicked. In order to support this system of ball control, the robot needs a subsystem to drive these solenoids. The subsystem in contained on the kicker board, a PCB dedicated to this task. The highest level functional overview contains three main systems: 1) a charging system to convert low voltage DC to high voltage DC that charges a capacitor bank; 2) a discharge system to release the energy stored in the capacitor bank through the solenoids, thus kicking the ball; 3) a control system to regulate charge and discharge cycles accurately and safely. Subsystems for v3.0 are described in detail below as subsections under \"Kicker v3.0\". Driving a solenoid with sufficient force has proven to be a non-trivial task for the following reasons: 1) modeling the solenoid impedance over time is difficult because mesauring the magnetic field is difficult; 2) modeling energy transfer to the mechanical system is difficult to measure; 3) high voltages and currents are involved making some mistakes far more fatal than digital designers are used to. Points 1 and 2 result in a lot of design iteration based on testing and high-level data gathering rather than theory. The third point results in usually ignorable issues, no longer being ignorable. This includes noise, ringing, and transient voltage spikes. As well, FET and diode ratings have added complexity in voltage ratings and swithing times. Read data sheets for AC subsystem components carefully. As a final note, the energy stored in the capacitor bank is non-trivial. It can and will shock you, and under very ideal conditions is potentially dangerous. Just be careful when handling these boards. \section{Past Results} Past kicker board designs have had mixed success in terms of safety and reliability. A short list of results is below: \subsection{Kicker 2013} We don't have a lot of surviving experiential notes and docs from the 2013 era. The boards weren't radcally different. They had a smaller storage capacity and less debugging information. We've also been handed down the criticisms that they didn't like the choice of IGBTs over power FETs for discharge because the switching times would be too high if they ever wanted to PWM control the solenoids. The cost was also higher. Some older designs also use two stacked IGBTs/FETs to achieve a high current rating. The failure rate was too high due to swithing time variances from (relatively) imprecise binning. \subsection{Kicker 2015 (v1.X)} The 2015 kicker suffered from two fatal issues. The first issue was the gate voltage rating of AC system switching fet. The gate was only rated for 20V and was driven directly from the battery. While a 5 cell LiPo has a nominal voltage below 20V, at max charge and no load the LiPo will have a voltage of about 21V. Over time this damaged FET gates and caused the HVAC system to fail. Additionally, the microcontroller used to regulate chrage and discharge cycles was located too far to close to the HVAC transformer. The interference prevented communication between the microcontroller and the surrounding components rendering it useless. We had to tap the relevant lines with wire and assert control signals from elsewhere in 2015. This impacted performance. \subsection{Kicker 2017 (v2.X)} The 2017 kicker design addressed issues from the 2015 design. Initially the 2017 design had a misspeced rectifer diode on the HVAC system. The Trr (reverse recovery time) was too long, causing almost all of the energy to be attenuated by the diode or reflected back to the switching FET. This was further complicated by the fact that the diodes varied greatly in binning. Some well binned diodes had an acceptable Trr which result in it taking over a year to identify the issue. Once the part was speced correctly the charging system worked very well. Early on we had difficulty kicking at low speeds because of generated interference. We determined the cause of the issue was the presence of TVS diodes on the discharge FETs. They were originally intended to prevent the 21V max battery from damaging a 20V rated gate, but the breakdown threshold and parasitic capcitance resulted in oscillation that rapidly switched the discharge FET on and off generating massive amounts of high frewuency interference. This caused microcontroller reboots and corrupted data on the global SPI line resulting in radio brownouts. This was not truely fixed on 2017, instead the TVS diodes were simply removed at the 21V rarely damaged the power FETs. In v3.0, a 15.0V LDO is used to drive the FETs rather than direct batter voltage. The 20V TVS diodes remain in the design to protect the FETs against ringing and trasient spikes. Another minor issue observed under unclear condtions was the presence of ringing on the HVAC regulator IC control lines. It was difficult to assertain the magnitude of the issue, as the parasitic inductance and capcaitance of scope probes amplified the problem. As a precaution, snubbers with a cutoff frequency of 1kHz have been added to all HVAC regulator IC control lines. These are some of the longest traces on the board and the only digitial IO lines that are required to pass by the HVAC system. The last minor issue observed was inconsistency in HV charge time and level holding. The deathlight, intended to indicate if there is power on the HV rail leaked too much current. We think replacing this with a microcontroller controlled level indiciator is an acceptable trade off. It now requires the microcontroller to function to report voltage on the line. Our operating assumption is that if it's too broken to report voltage level it's also too broken to flag a charge cycle. When unplugged, the auto discharge light will come one and it's approximate margnitude of brightness will indicate remainig charge ensuring that in virtually any case where the HV rail is powered, some safety indicator will be on. The leakage through the microcontroller should now be ones to tens of microamps rather than tens of miliamps. The inconsistency is auto-discharge time and cutoff was also likely a binning issue. We are reducing the tolerance when practical to 1\% or 0.1\% to address these issues. The biggest area for improvement on 2017 was the HV leakage issue and charge time. Most boards still took 2.5-3.5+ seconds to charge make our repetitive kick rate low. We are attempting to boost the charge rate in v3.0 to around half second. \section{Kicker v3.X} Kicker v3.0 began design in summer of 2018. As of now, it is under design review. The following seubsections are intended to be highly techinical, describing why parts were speced the way they were and what higher level considerations were included. \subsection{Overview} \subsection{Input Power} The input power section is responsible for generating the necessary sources of power for the board. It also includes protected. In this kicker board we need 4 voltages: raw battery, 15V, 5V, and HV. The source of HV has a dedicated section below called High Voltage Charging. \subsubsection{Changes in v3.X} A few changes were made to the input power subsystem. First, the surface mount fuse was replaced with a socketed fuse. This board will likely be able to charge at a very high rate and surface mount fuses become impractical at 50A. It may also be required to lower the charging current so easily swapping the fuse is good. A new feature is the addition of reverse polarity pretection. This is done with a PFET right after the fuse. Although the input connector is polarity protected, in the past we've still managed to mess it up on occasion. When this happes 10 hours of labor and \$150 in parts are lost. Adding the protection is cheap and easy and will save time when accidents happen. A new 15V rail was added to prevent overvoltages on discharge FET gates. The 15V rail is sourced from an adjustable LDO. TVS diodes were added to every power rail, except HV, to protect regulation and digital circuitry. \subsection{Microcontroller} The microcontroller is the primary logic for the kicker board. It communicates with the control board to report charge level, kick cycles status, readiness, and errors. It also has the critical function of translating a kick/chip strength into a time interval to control kick speed. It commands the charge and discharge states, ensure they've never occur at the same time. The microcontroller is also responsible for for handing breakbeam information. \subsubsection{Changes in v3.0} The microcontroller was upgraded from an ATTiny167 to an ATMega32. We wanted additional IO, timing features, and flash space. It's very similar to the 167 most ways just with an extra IO bank and flash. We considered switching to ARM, but liked that the 32 could be flashed from the same pins as it being a SPI slave, so we can flash and then communcate with the chip over the same SPI lines. It also meant we wouldn't have to rewrite significant chunks of the code base. The extra IO was used for error reporting. $$ \omega_\mathrm{desired\_cutoff} \approx 10 kHz $$ \begin{equation} \label{eq:rc_snub} \omega_\mathrm{cutoff} = 1 / (2 * \pi * R * C) \end{equation} $$ R_\mathrm{chosen} = 160 \Omega, C_\mathrm{chosen} = 0.1 \mu F $$ \begin{equation} \label{eq:rc_snub_situ} \omega_\mathrm{cutoff} = 1 / (2 * \pi * 160 * 0.0000001) \approx 9947.18 Hz, \epsilon \approx 0.005 \end{equation} RC snubbers were added to IO lines that pass by the HVAC system. This is included as a precaution based on past observed behavior that may case IO errors due to voltage spikes from interferences. These IO lines don't see high frequency switching so we can play pretty fast and loose on the snubber calibaration. We've picked an initial cutoff frequency of 10kHz. The cutoff frequency of an RC snubber can be calculated using the equation \ref{eq:rc_snub}. We selected resistor and capacitor values that can easily be acquired in E96 and the resulting cutoff frequency and error from desired can be seen in equation \ref{eq:rc_snub_situ}. \subsection{High Voltage Charging} The high voltage charging systems works by switching low voltage DC into low voltage AC. This low voltage AC becomes the primary side input to a transformer, that produces a higer voltage AC. We use a transformer with a turns ratio of 10:1, so we get a voltage approximately 10 times higher. The regulator actually produces a slightly higher voltage. The high voltage AC (HVAC) is then rectified by a diode in to high voltage DC to be store in the capacitors. Import considerations are the current ratings of the switching FET, transformer, and rectifier diode. The datasheet of you switching regulator IC can usually help you spec these components. For the diode, take extra caution to ensure the recovery times meet spec based on the swithing frequency of your regulator IC. For many ICs, that frequency is configurable. \subsubsection{Changes in v3.0} Significant changes were made to the HVAC system. The swithcing IC was changed from the LT3757 to the LT3751. The 3757 is a generic regulator, but the 3751 is specifically made for charging capacitor banks and other appllications that have periodic rather than coninuous charging cycles. Rather than enabling charging, a rising edge flags a charge cycle and the chip will carry out the cycle until a target voltage is reached or a fault occurs. The primary battery rail bypass capitance was increased to 1000uF of electrolytic and 30uF ceramic to accomodate the greater demands and interference of a 50A charging circuit. These values were recommended by the LT3751 datasheet. The HVAC system has been updraded to support a primary current draw of 50A. The recitifier diode was respeced to have have a lower Trr and higher current (5A) to support faster charge times. The transformer was respeced from within the same product line as well. The DA203X series was replaced with the GA43XX series. The new transformer supports a maximum primary current of 50A rather than 10A. The turn ratio is unchanged at 10:1. The switching FET was already withing spec, and not changed. The capacitor bank was respeced as the old caps had been discontinued. We now have slightly larger (both physically and in capacitance) caps, bringing the total capacitance of the bank to 4000uF, a ~25\% increase. The 5V swiitch mode regulator bypass caps were changed to better support how the global marked now produces ceramics. The pads were largened and duplicated to give the maximum flexibility in being able to source parts from the market. \subsubsection{LT3751 Part Spec} The HV\_AC regulator is the most complicated subsystem on the board and also one the hardest to debug. Rapid switching and high currents present a noise filled measurement challenge for most hobbiest equipment and complex analog interactions can make finidng the source of obvious failures hard. Subtle failures are even harder to debug because often times insturmentation is not recording when stochastic errors occur that wear down a part slowly over time. In order to help future designers, we are going to cover how we speced every part of the HV\_AC subsystem and what part attributes are the most important. If you haven't acquired a copy of the LT3751 datasheet, now would be the time to do so. \paragraph{Voltage Protection Lockouts} Before calibrating the voltage lockouts, we need to determine what an acceptable voltage range should be. In order to do this, we need to understand what the safe operating limits of our battery are and what other protection mechanisms we have put in place. We define the acceptable LiPo cell voltage not underload as $$ 3.4 V < V_\mathrm{cell} < 4.2 V $$ and the acceptable minimum for a cell under load as $$ V_\mathrm{cell\_load} \ge 3.1 V $$ Additionally we clamp $ V_\mathrm{batt} $ at 22.2V using a TVS diode. With this information in hand, we can calculate our voltage lockouts from the following constraints $$ N = 5, the number of cells $$ $$ V_\mathrm{cell\_abs\_min} = 3.1 V $$ $$ V_\mathrm{batt\_abs\_min} = N * V_\mathrm{cell\_abs\_min} = 5 * 3.1 V = 15.5 V $$ $$ V_\mathrm{batt\_abs\_max} = 23.5 V $$ \begin{equation} \label{eq:vbatt_range} V_\mathrm{batt\_abs\_min} < V_\mathrm{batt} < V_\mathrm{batt\_abs\_max} \equiv 15.5 V < V_\mathrm{batt} < 23.5 V \end{equation} With the acceptable voltage range deifined, we can now calibrate our lockouts. Both Over Voltage and Under Voltage Lock Outs, OVLO and UVLO respectively, are defined by equation \ref{eq:lt_vlos}, which is arranged to provide the resistor value for convenience in equation \ref{eq:lt_vlos_arr}. \begin{equation} \label{eq:lt_vlos} V_\mathrm{LO} = 1.225 + 0.50 \mu A * R_\mathrm{LO\_CALIB} \end{equation} \begin{equation} \label{eq:lt_vlos_arr} R_\mathrm{LO\_CALIB} = (V_\mathrm{LO} - 1.225) / 0.5 \mu A \end{equation} Substituting the values from the range defined in equation \ref{eq:vbatt_range} into equation \ref{eq:lt_vlos_arr} yields the following resistor values: $$ R_\mathrm{lvlo} = 285500 \approx 287k (E96) $$ $$ R_\mathrm{ovlo} = 445500 \approx 442k (E96) $$ \paragraph{High-Level Charding Characterization} \subsection{High Voltage Discharging} \subsubsection{Changes in v3.0} \subsection{High Voltage Auto Safe Discharge} \subsubsection{Changes in v3.0} \subsection{Breakbeam} \subsubsection{Changes in v3.0} \subsection{Debugging and Status} \subsubsection{Changes in v3.0} \subsection{Errata} None yet. \end{document}