290 likes | 438 Views
Encoders, Motors, Power, Mini Project #1. Micromouse Lecture 1. 10/24/2014. Power Regulation: A Problem. We cannot use a simple voltage divider to provide a consistent voltage source. As the voltage from the battery decreases during discharge, the output voltage will decrease!.
E N D
Encoders, Motors, Power, Mini Project #1 Micromouse Lecture 1 10/24/2014
Power Regulation: A Problem • We cannot use a simple voltage divider to provide a consistent voltage source. • As the voltage from the battery decreases during discharge, the output voltage will decrease!
Power Regulation: The Solution • In order to provide a consistent source of potential difference, we need to use voltage regulators. • We will provide you with a 5V regulator to connect to your LiPo battery pack for Mini Project #1.
Power Regulation: Capacitors • Use capacitors to smooth out noise in your signal
Motors • Brushed and Brushless
Motors: Brushed • Brushed motors take a DC signal. • Powers an inductor to rotate a magnet. • Increase the voltage and/or current -> Increase the rotation speed. • Reverse the polarity of the input voltage -> Reverse the rotation. • Most digital microcontrollers do not have an analog signal output. • MCU’s output digital signals – either high or low. • So how do we control brushed motors?
Pulse Width Modulation (PWM) • Mimics an analog voltage signal • Square wave with a certain frequency • This can be used to control the speed of a motor
Pulse Width Modulation (PWM) • Speed is controlled by rapidly turning the motor on and off • Turn the motor on for a greater fraction of the time to make it rotate faster • The percent of time the PWM signal is on is the duty cycle • 0% duty cycle is same as off all the time; 100% duty is same as on all the time
Motor Driver: A Problem • We cannot connect the MCU to the motor. • MCUs don’t provide enough current to power motors. • Microcontrollers cannot invert the PWM signal to rotate the motor in the other direction.
Motor Driver: A Solution • Have the PWM control a H-bridge • PWM controls transistors (think of them as switches) that allows the battery to pour all its current to the motor • Easy to control direction
Motor Driver: The H-bridge • Simplified diagram Turn Left Turn Right
Motor Driver: The H-bridge • Actual implementation for two motors void turnLeft() { digitalWrite(1A, HIGH); //Right wheel digitalWrite(2A, LOW); //Right wheel digitalWrite(3A, LOW); //Left wheel digitalWrite(4A, HIGH); //Left wheel analogWrite(motorPwrR, 100); analogWrite(motorPwrL, 100); } void turnRight() { digitalWrite(1A, LOW); digitalWrite(2A, HIGH); digitalWrite(3A, HIGH); digitalWrite(4A, LOW); analogWrite(motorPwrR, 100); analogWrite(motorPwrL, 100); }
Motors: Brushless • Goal is the same as brushed motors: rotate something • Mechanics is different • Multiple inductors attract and repel the magnet • Has more control than DC motors • Controlling brushless motors are more complicated • But fairly easy to do with IC chips/software libraries
Encoders • Helps you determine how far you have travelled in the maze. • Rotary Encoders attached to wheels • Optical • Magnetic with Hall Effect Sensor
Rotary Encoder: Optical • Light reflects off alternating bright or dark areas. The detector determines when the light was shone on it. (Mini Project #1 uses this). • Another method: LED shines through a teeth in a disc to detector on other side.
Rotary Encoder: Magnetic • Attach magnets to a disc • Use Hall effect sensors to detect the changing magnetic field
Now How Does the Code Work? • Count the ticks to see how far the wheels have turned
How do we put an encoder to use? • Encoders are constantly outputting data • Your MCU needs to read the values all the time! • If your MCU is reading values 100% of the time it can’t do anything useful! • Otherwise you are losing data, or must litter your code with checks every few lines! • Not a good solution
Interrupts to the rescue! • Interrupts allow you to process data and then go back to what you were doing
Interrupts to the rescue! • Interrupts allow you to process data and then go back to what you were doing • “Yoimma let you finish, but this is some of the most important data of ALL TIME”
Interrupts • An interrupt handler is a short function that runs when an external event happens • Rest of the program pauses, and continues after interrupt is done • From the perspective of each, the other doesn’t exist* • *If your interrupt handler runs for too long (and too often) it can choke your entire program!
Using interrupts • Types of interrupts: • RISING • FALLING • CHANGE • LOW • HIGH • Arduino boards: only two interrupt pins • Teensy: all pins!
Programming with interrupts • The volatile keyword: • Tells the compiler “this value can change at any time!” • MCU will look up value in memory each time and not an old value in a register • Anything your interrupt handler modifies should be volatile, or you may get bugs!
Programming with interrupts • Increment a counter and return (be fast)! • Don’t want to use this counter directly • If you accidentally overwrite it, you might not be able to know how far you went! • Using good coding style you can prevent mistakes! • But I’m too good to make such silly mistakes! • Nonsense, we are all human, mistakes happen!
Programming with interrupts • The static keyword: • Means “this variable/function can only be used in this file only!” • Return value of counter with a function! • Now nobody from the outside can mess with it directly!
How to choose interrupt type • Depends on how fast your encoders are • On super high resolution encoders, it may be sufficient to track a single pin per encoder • On lower resolution encoders its better to track both pins changing • Tracking a pin change gives you even “more” resolution • If a wheel is on the edge between ticks, its possible to get “false positives”
Mini Project #1: Encoders • Demonstrate basic understanding of motor control and encoders. • DUE DATE: 11/7/2014 SIGN UP EARLY • Parts (abridged) • Teensy 3.1 • Motor • H-bridge • Encoders
So What Do I Need to Do? • Keep your eyes peeled for an email for when the spec sheet for Mini Project #1 is up. • Do not hesitate joining a group you don’t know to complete the Mini Projects. Make friends! • Start early!