control de velocidad progresivo de un motor de CC en ambas direcciones
Fork of pwm_example by
main.cpp
- Committer:
- javierjsp
- Date:
- 2017-03-22
- Revision:
- 4:84669d69a2d4
- Parent:
- 3:1174132d5190
File content as of revision 4:84669d69a2d4:
/* PWM motor driving example on LPC1768
*
* @author: Baser Kandehir
* @date: July 9, 2015
* @license: MIT license
*
* Copyright (c) 2015, Baser Kandehir, baser.kandehir@ieee.metu.edu.tr
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @description of the program:
*
* Program is written as an example for the PWM control on mbed LPC1768.
* After making neccessary connections, this program can control speed
* and direction of a motor. Example code will increase motor speed to
* its max in 5 seconds and decrease the motor speed from max to zero
* in 5 seconds and it will keep doing this.
*
* @connections:
*--------------------------------------------------------------
* |LPC1768| |Peripherals|
* Pin 21 --------> First input of the L293D
* Pin 22 --------> Second input of the L293D
* GND -----------> GND of any peripheral
* VOUT (3.3 V) --> VCC of the the motor driver
*---------------------------------------------------------------
* Note: L293D is a very simple and useful motor driver that mostly used in
* robotics. For detailed info and neccessary connections for L293D, please
* refer to its datasheet.
*/
#include "mbed.h"
PwmOut PWM1(PF_8); // pwm outputs
PwmOut PWM2(PF_7);
DigitalOut led1(LED1);
/* Function prototype */
void motorControl(bool dir, float pwmVal);
int main()
{
led1 = 1;
wait(1);
led1 = 0;
PWM1.write(0); // Duty cycles are initially zero
PWM2.write(0);
PWM1.period(0.02f); // 1 kHz pwm frequency
PWM2.period(0.02f);
while(1)
{
for(float i=0;i<1;i=i+0.01f) // increase speed from 0 to 1 in 5 seconds (50ms*100).
{
motorControl(1,i);
wait(0.05f);
}
for(float i=1;i>0;i=i-0.01f) // decrease speed from 1 to 0 in 5 seconds (50ms*100).
{
motorControl(0,i);
wait(0.05f);
}
led1 = 1;
wait(0.5);
led1 = 0;
}
}
// This is a motor control function which controls the speed and direction of
// a motor. Motor drivers like L293D can be used.
void motorControl(bool dir, float pwmVal)
{
if(dir==1) // forward direction
{
PWM2.write(0);
PWM1.write(pwmVal);
}
else if(dir==0) // reverse direction
{
PWM1.write(0);
PWM2.write(pwmVal);
}
}
