このライブラリは模型用のDCモータをmbedで直接制御します。 モータは正転、反転動作が可能です。 モータの回転速度は可変できます。 This library is directly controlled by a DC motor for model mbed. Motor forward rotation, inversion operation is possible. The motor speed is adjustable.
Dependents: adxl335_motor_direction
Diff: DcMotorDirectDrive.h
- Revision:
- 0:ade473623320
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DcMotorDirectDrive.h Mon Dec 05 12:09:54 2011 +0000 @@ -0,0 +1,162 @@ +/* mbed Dc motor direct drive Library + * Copyright (c) 2011 suupen + * + * 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. + */ + + +//================================ +// DcMotorDirectDrive.h +// V1.0 : 2011/12/05 +// +//================================ +#ifndef _DCMOTORDIRECTDRIVE_H +#define _DCMOTORDIRECTDRIVE_H + +/** Dc motor direct drive class + * + * Example: + * @code + * //============================================ + * // DcMotorDirectDrive Library Example + * // + * // This program controls the motor 3. + * // Repeat the forward and reverse motor. + * // Continuously varies the rotational speed of the motor. + * // + * // <schematic> + * // + * // motor1,2,3 : mabuchi motor RF-300C-11440 DC3V 18mA 2200rpm) + * // __ + * // p21(pwmOut) ---------| | motor1 + * // | |-- + * // p22(digitalOut) ---------|__| + * // + * // __ + * // p23(pwmOut) ---------| | motor2 + * // | |-- + * // p24(digitalOut) ---------|__| + * // + * // __ + * // p25(pwmOut) ---------| | motor3 + * // | |-- + * // p26(digitalOut) ---------|__| + * // + * //============================================= + * + * #include "mbed.h" + * + * #include "DcMotorDirectDrive.h" + * + * // pwm pin + * // | + * // | reference pin + * // | | + * DcMotorDirectDrive motor1(p21, p22); + * DcMotorDirectDrive motor2(p23, p24); + * DcMotorDirectDrive motor3(p25, p26); + * + * + * DigitalOut led1(LED1); + * DigitalOut led4(LED4); + * + * Timer timer; // data change timer + * + * int main() { + * float siji = 1.0f; // motor output (+1.0 -> ... -> +0.5 -> -1.0 -> ... -> -0.5 -> +1.0) + * uint8_t fugo = 0; // 0 : normal rotation, 1 : reverse rotation + * + * + * timer.start(); + * + * while(1) { + * // After 100[ms] to start the process + * if(timer.read_ms() >= 100){ + * timer.reset(); + * + * if(fugo == 0){ + * // Normal rotation + * // siji = +1.0 -> +0.5 + * siji -= 0.005; + * if(siji < 0.5f){ + * fugo = 1; + * siji = -1.0f; + * } + * } + * else{ + * // Reverse rotation + * siji += 0.005; + * if(siji > -0.5f){ + * fugo = 0; + * siji = +1.0f; + * } + * } + * // Outputs a control instruction to the motor + * motor1.DcMotorDirectDrive_main(siji); + * motor2.DcMotorDirectDrive_main(siji); + * motor3.DcMotorDirectDrive_main(siji); + * + * // rotation display + * if(siji > 0.5){ + * // normal rotation + * led1 = 1; + * led4 = 0; + * } + * else{ + * // reverse rotation + * led1 = 0; + * led4 = 1; + * } + * } + * } + * } + * @endcode + */ + + + +#include "types.h" + +class DcMotorDirectDrive { +public: + + /** Create a eight dot matrix led array object connected to the specified DigitalOut pin + * @param pwmPin PwmOut pin to connect to. pwm pin (p21 - p26) + * @param referencePin DigitalOut pin to connect to. Reference power supply pin (p5 - p30) + */ + + DcMotorDirectDrive(PinName pwmPin, PinName referencePin); + + + /** Data set to the seven segment LED display + * @param float request motor output request (-1.0 - 0.0 - 1.0) -1.0 to 0.0 : Reverse rotation, 0.0 : stop, 0.0 to +1.0 : normal rotation + */ + void DcMotorDirectDrive_main(float request); + +private: + PwmOut _pwmPin; + DigitalOut _referencePin; + + #define Z_pwmPeriod (10000) // pwm period (1/1 [us]/count) 10[ms](0.1[kHz]) + #define Z_stopRange (0.0) // pwm request stop range (-0.0 - +0.0) + + +}; + +#endif // _DCMOTORDIRECTDRIVE_H