![]() ![]() When the positive pin voltage is higher than the negative pin voltage, the output of the analog comparator ACO is set, and when the positive pin voltage is lower than the negative pin voltage, ACO is cleared. The analog comparator compares the positive input AIN0 (Arduino pin 6) with the negative input which can be AIN1 (pin 7), ADC2 (pin A2) or ADC3 (pin A3). The duty cycles of the PWM signals are updated when a pushbutton is pressed (speed up or speed down) by writing to their registers (OCR1A, OCR1B and OCR2A). Both Timer modules are configured to generate a PWM signal with a frequency of about 31KHz and a resolution of 8 bits. The code below does not use any BLDC motor library.Īs mentioned above, Arduino pins 9, 10 and 11 can generate PWM signals where pin 9 and pin 10 are related with Timer1 module (OC1A and OC1B) and pin 11 is related with Timer2 module (OC2A). Sensorless BLDC motor control with Arduino code: ![]() The Arduino UNO can generate PWM signals on that pins where only high side mosfets are PWMed. The HIN lines of the three IR2101 are connected to pins 11, 10 and 9 respectively for phase A, phase B and phase C. The figure below shows input and output timing diagram: The IR2101 chips are used to control high side and low side mosfets of each phase. The switching between the high side and the low side is done according to the control lines HIN and LIN. This minimizes the hardware needed and simplifies the circuit. Each time the comparator compares the virtual point with the BEMF of one phase (this is done in the software). So I connected the virtual natural point to the positive pin of the analog comparator (pin 6), phase A BEMF to pin 7 (AIN1), phase B BEMF to pin A2 and phase C BEMF to pin A3. The positive input of this comparator is on Arduino uno pin 6 (AIN0) and the negative input can be pin 7 (AIN1), A0 (ADC0), A1 (ADC1), A2 (ADC2), A3 (ADC3), A4 (ADC4) or A5 (ADC5). The Arduino UNO board is based on the ATmega328P microcontroller which has one analog comparator. The virtual natural point is connected to Arduino pin 6. The first three 33k (connected to motor phases) and the three 10k resistors are used as voltage dividers, because we can not supply the microcontroller with 12V, the other three 33k resistors generate the virtual natural point. The first pin in each array is the speed pin the other two pins are for direction.In the circuit there are 2 pushbuttons, one is used to increase BLDC motor speed and the 2nd one is used to decrease it. ![]() The pin number is held in the leftPins and rightPins arrays. Two pins are used to control the direction for each motor and with another pin to control speed. Motor speed is controlled in the setSpeed function. When the light drops below the threshold, the lookAround function is called to rotate the robot to search for more light. When the program starts, the ambient light is measured and this threshold is used to determine the minimum light level needed to move the robot. ![]() Light is sensed through analog input 0 & 1. Insufficient light causes the robot to stop and look around to see if there is a light source coming from any other direction. Light shining equally on both cells makes the robot move forward in a straight line. This causes the robot to turn toward the side with the brighter light. When an increase in light on one side will increase the speed of the motor on the other side. This sketch controls the speed of two motors in response to the amount of light detected by two photocells. The sketch monitors the light level on the sensors and drives the motors towards the sensor detecting the brighter light level: Circuit Diagram for DC Motor and LDR Sensor Code ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |