このライブラリは模型用の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

Committer:
suupen
Date:
Mon Dec 05 12:09:54 2011 +0000
Revision:
0:ade473623320
V1.0   2011/12/06

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:ade473623320 1 /* mbed Dc motor direct drive Library
suupen 0:ade473623320 2 * Copyright (c) 2011 suupen
suupen 0:ade473623320 3 *
suupen 0:ade473623320 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
suupen 0:ade473623320 5 * of this software and associated documentation files (the "Software"), to deal
suupen 0:ade473623320 6 * in the Software without restriction, including without limitation the rights
suupen 0:ade473623320 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
suupen 0:ade473623320 8 * copies of the Software, and to permit persons to whom the Software is
suupen 0:ade473623320 9 * furnished to do so, subject to the following conditions:
suupen 0:ade473623320 10 *
suupen 0:ade473623320 11 * The above copyright notice and this permission notice shall be included in
suupen 0:ade473623320 12 * all copies or substantial portions of the Software.
suupen 0:ade473623320 13 *
suupen 0:ade473623320 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
suupen 0:ade473623320 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
suupen 0:ade473623320 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
suupen 0:ade473623320 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
suupen 0:ade473623320 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
suupen 0:ade473623320 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
suupen 0:ade473623320 20 * THE SOFTWARE.
suupen 0:ade473623320 21 */
suupen 0:ade473623320 22
suupen 0:ade473623320 23
suupen 0:ade473623320 24 //================================
suupen 0:ade473623320 25 // DcMotorDirectDrive.h
suupen 0:ade473623320 26 // V1.0 : 2011/12/05
suupen 0:ade473623320 27 //
suupen 0:ade473623320 28 //================================
suupen 0:ade473623320 29 #ifndef _DCMOTORDIRECTDRIVE_H
suupen 0:ade473623320 30 #define _DCMOTORDIRECTDRIVE_H
suupen 0:ade473623320 31
suupen 0:ade473623320 32 /** Dc motor direct drive class
suupen 0:ade473623320 33 *
suupen 0:ade473623320 34 * Example:
suupen 0:ade473623320 35 * @code
suupen 0:ade473623320 36 * //============================================
suupen 0:ade473623320 37 * // DcMotorDirectDrive Library Example
suupen 0:ade473623320 38 * //
suupen 0:ade473623320 39 * // This program controls the motor 3.
suupen 0:ade473623320 40 * // Repeat the forward and reverse motor.
suupen 0:ade473623320 41 * // Continuously varies the rotational speed of the motor.
suupen 0:ade473623320 42 * //
suupen 0:ade473623320 43 * // <schematic>
suupen 0:ade473623320 44 * //
suupen 0:ade473623320 45 * // motor1,2,3 : mabuchi motor RF-300C-11440 DC3V 18mA 2200rpm)
suupen 0:ade473623320 46 * // __
suupen 0:ade473623320 47 * // p21(pwmOut) ---------| | motor1
suupen 0:ade473623320 48 * // | |--
suupen 0:ade473623320 49 * // p22(digitalOut) ---------|__|
suupen 0:ade473623320 50 * //
suupen 0:ade473623320 51 * // __
suupen 0:ade473623320 52 * // p23(pwmOut) ---------| | motor2
suupen 0:ade473623320 53 * // | |--
suupen 0:ade473623320 54 * // p24(digitalOut) ---------|__|
suupen 0:ade473623320 55 * //
suupen 0:ade473623320 56 * // __
suupen 0:ade473623320 57 * // p25(pwmOut) ---------| | motor3
suupen 0:ade473623320 58 * // | |--
suupen 0:ade473623320 59 * // p26(digitalOut) ---------|__|
suupen 0:ade473623320 60 * //
suupen 0:ade473623320 61 * //=============================================
suupen 0:ade473623320 62 *
suupen 0:ade473623320 63 * #include "mbed.h"
suupen 0:ade473623320 64 *
suupen 0:ade473623320 65 * #include "DcMotorDirectDrive.h"
suupen 0:ade473623320 66 *
suupen 0:ade473623320 67 * // pwm pin
suupen 0:ade473623320 68 * // |
suupen 0:ade473623320 69 * // | reference pin
suupen 0:ade473623320 70 * // | |
suupen 0:ade473623320 71 * DcMotorDirectDrive motor1(p21, p22);
suupen 0:ade473623320 72 * DcMotorDirectDrive motor2(p23, p24);
suupen 0:ade473623320 73 * DcMotorDirectDrive motor3(p25, p26);
suupen 0:ade473623320 74 *
suupen 0:ade473623320 75 *
suupen 0:ade473623320 76 * DigitalOut led1(LED1);
suupen 0:ade473623320 77 * DigitalOut led4(LED4);
suupen 0:ade473623320 78 *
suupen 0:ade473623320 79 * Timer timer; // data change timer
suupen 0:ade473623320 80 *
suupen 0:ade473623320 81 * int main() {
suupen 0:ade473623320 82 * float siji = 1.0f; // motor output (+1.0 -> ... -> +0.5 -> -1.0 -> ... -> -0.5 -> +1.0)
suupen 0:ade473623320 83 * uint8_t fugo = 0; // 0 : normal rotation, 1 : reverse rotation
suupen 0:ade473623320 84 *
suupen 0:ade473623320 85 *
suupen 0:ade473623320 86 * timer.start();
suupen 0:ade473623320 87 *
suupen 0:ade473623320 88 * while(1) {
suupen 0:ade473623320 89 * // After 100[ms] to start the process
suupen 0:ade473623320 90 * if(timer.read_ms() >= 100){
suupen 0:ade473623320 91 * timer.reset();
suupen 0:ade473623320 92 *
suupen 0:ade473623320 93 * if(fugo == 0){
suupen 0:ade473623320 94 * // Normal rotation
suupen 0:ade473623320 95 * // siji = +1.0 -> +0.5
suupen 0:ade473623320 96 * siji -= 0.005;
suupen 0:ade473623320 97 * if(siji < 0.5f){
suupen 0:ade473623320 98 * fugo = 1;
suupen 0:ade473623320 99 * siji = -1.0f;
suupen 0:ade473623320 100 * }
suupen 0:ade473623320 101 * }
suupen 0:ade473623320 102 * else{
suupen 0:ade473623320 103 * // Reverse rotation
suupen 0:ade473623320 104 * siji += 0.005;
suupen 0:ade473623320 105 * if(siji > -0.5f){
suupen 0:ade473623320 106 * fugo = 0;
suupen 0:ade473623320 107 * siji = +1.0f;
suupen 0:ade473623320 108 * }
suupen 0:ade473623320 109 * }
suupen 0:ade473623320 110 * // Outputs a control instruction to the motor
suupen 0:ade473623320 111 * motor1.DcMotorDirectDrive_main(siji);
suupen 0:ade473623320 112 * motor2.DcMotorDirectDrive_main(siji);
suupen 0:ade473623320 113 * motor3.DcMotorDirectDrive_main(siji);
suupen 0:ade473623320 114 *
suupen 0:ade473623320 115 * // rotation display
suupen 0:ade473623320 116 * if(siji > 0.5){
suupen 0:ade473623320 117 * // normal rotation
suupen 0:ade473623320 118 * led1 = 1;
suupen 0:ade473623320 119 * led4 = 0;
suupen 0:ade473623320 120 * }
suupen 0:ade473623320 121 * else{
suupen 0:ade473623320 122 * // reverse rotation
suupen 0:ade473623320 123 * led1 = 0;
suupen 0:ade473623320 124 * led4 = 1;
suupen 0:ade473623320 125 * }
suupen 0:ade473623320 126 * }
suupen 0:ade473623320 127 * }
suupen 0:ade473623320 128 * }
suupen 0:ade473623320 129 * @endcode
suupen 0:ade473623320 130 */
suupen 0:ade473623320 131
suupen 0:ade473623320 132
suupen 0:ade473623320 133
suupen 0:ade473623320 134 #include "types.h"
suupen 0:ade473623320 135
suupen 0:ade473623320 136 class DcMotorDirectDrive {
suupen 0:ade473623320 137 public:
suupen 0:ade473623320 138
suupen 0:ade473623320 139 /** Create a eight dot matrix led array object connected to the specified DigitalOut pin
suupen 0:ade473623320 140 * @param pwmPin PwmOut pin to connect to. pwm pin (p21 - p26)
suupen 0:ade473623320 141 * @param referencePin DigitalOut pin to connect to. Reference power supply pin (p5 - p30)
suupen 0:ade473623320 142 */
suupen 0:ade473623320 143
suupen 0:ade473623320 144 DcMotorDirectDrive(PinName pwmPin, PinName referencePin);
suupen 0:ade473623320 145
suupen 0:ade473623320 146
suupen 0:ade473623320 147 /** Data set to the seven segment LED display
suupen 0:ade473623320 148 * @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
suupen 0:ade473623320 149 */
suupen 0:ade473623320 150 void DcMotorDirectDrive_main(float request);
suupen 0:ade473623320 151
suupen 0:ade473623320 152 private:
suupen 0:ade473623320 153 PwmOut _pwmPin;
suupen 0:ade473623320 154 DigitalOut _referencePin;
suupen 0:ade473623320 155
suupen 0:ade473623320 156 #define Z_pwmPeriod (10000) // pwm period (1/1 [us]/count) 10[ms](0.1[kHz])
suupen 0:ade473623320 157 #define Z_stopRange (0.0) // pwm request stop range (-0.0 - +0.0)
suupen 0:ade473623320 158
suupen 0:ade473623320 159
suupen 0:ade473623320 160 };
suupen 0:ade473623320 161
suupen 0:ade473623320 162 #endif // _DCMOTORDIRECTDRIVE_H