RS-EDP Brushed Motor Control Application Module library.

Dependencies:   mbed

Dependents:   RS-EDP-RDS-Rover

Committer:
aberk
Date:
Wed Aug 11 10:33:56 2010 +0000
Revision:
0:50c5f08a9178
Version 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aberk 0:50c5f08a9178 1 /**
aberk 0:50c5f08a9178 2 * @section LICENSE
aberk 0:50c5f08a9178 3 *
aberk 0:50c5f08a9178 4 * Copyright (c) 2010 ARM Limited
aberk 0:50c5f08a9178 5 *
aberk 0:50c5f08a9178 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
aberk 0:50c5f08a9178 7 * of this software and associated documentation files (the "Software"), to deal
aberk 0:50c5f08a9178 8 * in the Software without restriction, including without limitation the rights
aberk 0:50c5f08a9178 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
aberk 0:50c5f08a9178 10 * copies of the Software, and to permit persons to whom the Software is
aberk 0:50c5f08a9178 11 * furnished to do so, subject to the following conditions:
aberk 0:50c5f08a9178 12 *
aberk 0:50c5f08a9178 13 * The above copyright notice and this permission notice shall be included in
aberk 0:50c5f08a9178 14 * all copies or substantial portions of the Software.
aberk 0:50c5f08a9178 15 *
aberk 0:50c5f08a9178 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
aberk 0:50c5f08a9178 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
aberk 0:50c5f08a9178 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
aberk 0:50c5f08a9178 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
aberk 0:50c5f08a9178 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
aberk 0:50c5f08a9178 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
aberk 0:50c5f08a9178 22 * THE SOFTWARE.
aberk 0:50c5f08a9178 23 *
aberk 0:50c5f08a9178 24 * @section DESCRIPTION
aberk 0:50c5f08a9178 25 *
aberk 0:50c5f08a9178 26 * AM-MC1 Brushed Motor application module for an RS-EDP base board.
aberk 0:50c5f08a9178 27 *
aberk 0:50c5f08a9178 28 * There are a large number of options to choose from on the MC1 module.
aberk 0:50c5f08a9178 29 * After creating an RSEDP_AM_MC1 object, select which pins you wish to use
aberk 0:50c5f08a9178 30 * by making calls to "setXXXPin(pYY)" with appropriate pin you want to use.
aberk 0:50c5f08a9178 31 *
aberk 0:50c5f08a9178 32 * The pins available and their associated jumpers which need to be set
aberk 0:50c5f08a9178 33 * are detailed with the function declarations.
aberk 0:50c5f08a9178 34 *
aberk 0:50c5f08a9178 35 * See the datasheet for more information about configuring the module for
aberk 0:50c5f08a9178 36 * your application's needs.
aberk 0:50c5f08a9178 37 *
aberk 0:50c5f08a9178 38 * Datasheet:
aberk 0:50c5f08a9178 39 *
aberk 0:50c5f08a9178 40 * http://www.hitex.com/fileadmin/uk-files/EDP/Modules/MC1/MC1%20datasheet.pdf
aberk 0:50c5f08a9178 41 */
aberk 0:50c5f08a9178 42
aberk 0:50c5f08a9178 43 /**
aberk 0:50c5f08a9178 44 * Includes
aberk 0:50c5f08a9178 45 */
aberk 0:50c5f08a9178 46 #include "RSEDP_AM_MC1.h"
aberk 0:50c5f08a9178 47
aberk 0:50c5f08a9178 48 RSEDP_AM_MC1::RSEDP_AM_MC1() {
aberk 0:50c5f08a9178 49
aberk 0:50c5f08a9178 50 }
aberk 0:50c5f08a9178 51
aberk 0:50c5f08a9178 52 void RSEDP_AM_MC1::initialize(void) {
aberk 0:50c5f08a9178 53
aberk 0:50c5f08a9178 54 //20KHz.
aberk 0:50c5f08a9178 55 pwm_->period_us(50);
aberk 0:50c5f08a9178 56 //Off.
aberk 0:50c5f08a9178 57 *pwm_ = 1.0;
aberk 0:50c5f08a9178 58
aberk 0:50c5f08a9178 59 *brake_ = BRAKE_ON;
aberk 0:50c5f08a9178 60
aberk 0:50c5f08a9178 61 *dir_ = FORWARD;
aberk 0:50c5f08a9178 62
aberk 0:50c5f08a9178 63 }
aberk 0:50c5f08a9178 64
aberk 0:50c5f08a9178 65 void RSEDP_AM_MC1::setPwmPin(PinName pwm) {
aberk 0:50c5f08a9178 66
aberk 0:50c5f08a9178 67 pwm_ = new PwmOut(pwm);
aberk 0:50c5f08a9178 68
aberk 0:50c5f08a9178 69 }
aberk 0:50c5f08a9178 70
aberk 0:50c5f08a9178 71 void RSEDP_AM_MC1::setMaxCurrentPin(PinName maxCurrent) {
aberk 0:50c5f08a9178 72
aberk 0:50c5f08a9178 73 maxCurrent_ = new PwmOut(maxCurrent);
aberk 0:50c5f08a9178 74
aberk 0:50c5f08a9178 75 }
aberk 0:50c5f08a9178 76
aberk 0:50c5f08a9178 77 void RSEDP_AM_MC1::setDirectionPin(PinName dir) {
aberk 0:50c5f08a9178 78
aberk 0:50c5f08a9178 79 dir_ = new DigitalOut(dir);
aberk 0:50c5f08a9178 80
aberk 0:50c5f08a9178 81 }
aberk 0:50c5f08a9178 82
aberk 0:50c5f08a9178 83 void RSEDP_AM_MC1::setBrakePin(PinName brake) {
aberk 0:50c5f08a9178 84
aberk 0:50c5f08a9178 85 brake_ = new DigitalOut(brake);
aberk 0:50c5f08a9178 86
aberk 0:50c5f08a9178 87 }
aberk 0:50c5f08a9178 88
aberk 0:50c5f08a9178 89 void RSEDP_AM_MC1::setVdclinkPin(PinName vdclink) {
aberk 0:50c5f08a9178 90
aberk 0:50c5f08a9178 91 vdclink_ = new AnalogIn(vdclink);
aberk 0:50c5f08a9178 92
aberk 0:50c5f08a9178 93 }
aberk 0:50c5f08a9178 94
aberk 0:50c5f08a9178 95 void RSEDP_AM_MC1::setVsensePin(PinName vsense) {
aberk 0:50c5f08a9178 96
aberk 0:50c5f08a9178 97 vsense_ = new AnalogIn(vsense);
aberk 0:50c5f08a9178 98
aberk 0:50c5f08a9178 99 }
aberk 0:50c5f08a9178 100
aberk 0:50c5f08a9178 101 void RSEDP_AM_MC1::setVtachPin(PinName vtach) {
aberk 0:50c5f08a9178 102
aberk 0:50c5f08a9178 103 vtach_ = new AnalogIn(vtach);
aberk 0:50c5f08a9178 104
aberk 0:50c5f08a9178 105 }
aberk 0:50c5f08a9178 106
aberk 0:50c5f08a9178 107 void RSEDP_AM_MC1::setOpenLimitPin(PinName openLimit) {
aberk 0:50c5f08a9178 108
aberk 0:50c5f08a9178 109 openLimit_ = new DigitalIn(openLimit);
aberk 0:50c5f08a9178 110
aberk 0:50c5f08a9178 111 }
aberk 0:50c5f08a9178 112
aberk 0:50c5f08a9178 113 void RSEDP_AM_MC1::setClosedLimitPin(PinName closedLimit) {
aberk 0:50c5f08a9178 114
aberk 0:50c5f08a9178 115 closedLimit_ = new DigitalIn(closedLimit);
aberk 0:50c5f08a9178 116
aberk 0:50c5f08a9178 117 }
aberk 0:50c5f08a9178 118
aberk 0:50c5f08a9178 119 void RSEDP_AM_MC1::setTachoPulsesPin(PinName tachoPulses) {
aberk 0:50c5f08a9178 120
aberk 0:50c5f08a9178 121 tachoPulses_ = new DigitalIn(tachoPulses);
aberk 0:50c5f08a9178 122
aberk 0:50c5f08a9178 123 }
aberk 0:50c5f08a9178 124
aberk 0:50c5f08a9178 125 void RSEDP_AM_MC1::setEncoder0Pin(PinName encoder0) {
aberk 0:50c5f08a9178 126
aberk 0:50c5f08a9178 127 encoder0_ = new DigitalIn(encoder0);
aberk 0:50c5f08a9178 128
aberk 0:50c5f08a9178 129 }
aberk 0:50c5f08a9178 130
aberk 0:50c5f08a9178 131 void RSEDP_AM_MC1::setEncoder1Pin(PinName encoder1) {
aberk 0:50c5f08a9178 132
aberk 0:50c5f08a9178 133 encoder1_ = new DigitalIn(encoder1);
aberk 0:50c5f08a9178 134
aberk 0:50c5f08a9178 135 }
aberk 0:50c5f08a9178 136
aberk 0:50c5f08a9178 137 void RSEDP_AM_MC1::setRunStopPin(PinName runStop) {
aberk 0:50c5f08a9178 138
aberk 0:50c5f08a9178 139 runStop_ = new DigitalIn(runStop);
aberk 0:50c5f08a9178 140
aberk 0:50c5f08a9178 141 }
aberk 0:50c5f08a9178 142
aberk 0:50c5f08a9178 143 float RSEDP_AM_MC1::getPwmDuty(void) {
aberk 0:50c5f08a9178 144
aberk 0:50c5f08a9178 145 return pwm_->read();
aberk 0:50c5f08a9178 146
aberk 0:50c5f08a9178 147 }
aberk 0:50c5f08a9178 148
aberk 0:50c5f08a9178 149 void RSEDP_AM_MC1::setPwmDuty(float duty) {
aberk 0:50c5f08a9178 150
aberk 0:50c5f08a9178 151 pwm_->write(duty);
aberk 0:50c5f08a9178 152
aberk 0:50c5f08a9178 153 }
aberk 0:50c5f08a9178 154
aberk 0:50c5f08a9178 155 float RSEDP_AM_MC1::getMaxCurrentDuty(void) {
aberk 0:50c5f08a9178 156
aberk 0:50c5f08a9178 157 return maxCurrent_->read();
aberk 0:50c5f08a9178 158
aberk 0:50c5f08a9178 159 }
aberk 0:50c5f08a9178 160
aberk 0:50c5f08a9178 161 void RSEDP_AM_MC1::setDirection(int direction) {
aberk 0:50c5f08a9178 162
aberk 0:50c5f08a9178 163 //Check for valid direction.
aberk 0:50c5f08a9178 164 if (direction == FORWARD) {
aberk 0:50c5f08a9178 165 *dir_ = FORWARD;
aberk 0:50c5f08a9178 166 } else if (direction == BACKWARD) {
aberk 0:50c5f08a9178 167 *dir_ = BACKWARD;
aberk 0:50c5f08a9178 168 }
aberk 0:50c5f08a9178 169
aberk 0:50c5f08a9178 170 }
aberk 0:50c5f08a9178 171
aberk 0:50c5f08a9178 172 int RSEDP_AM_MC1::readDirection(void){
aberk 0:50c5f08a9178 173
aberk 0:50c5f08a9178 174 return dir_->read();
aberk 0:50c5f08a9178 175
aberk 0:50c5f08a9178 176 }
aberk 0:50c5f08a9178 177
aberk 0:50c5f08a9178 178 void RSEDP_AM_MC1::setBrake(int brakeSetting) {
aberk 0:50c5f08a9178 179
aberk 0:50c5f08a9178 180 //Check for valid setting.
aberk 0:50c5f08a9178 181 if (brakeSetting == BRAKE_ON) {
aberk 0:50c5f08a9178 182 *brake_ = BRAKE_ON;
aberk 0:50c5f08a9178 183 } else if (brakeSetting == BRAKE_OFF) {
aberk 0:50c5f08a9178 184 *brake_ = BRAKE_OFF;
aberk 0:50c5f08a9178 185 }
aberk 0:50c5f08a9178 186
aberk 0:50c5f08a9178 187 }
aberk 0:50c5f08a9178 188
aberk 0:50c5f08a9178 189 int RSEDP_AM_MC1::readVdclink(void) {
aberk 0:50c5f08a9178 190
aberk 0:50c5f08a9178 191 return (vdclink_->read())*3300;
aberk 0:50c5f08a9178 192
aberk 0:50c5f08a9178 193 }
aberk 0:50c5f08a9178 194
aberk 0:50c5f08a9178 195 int RSEDP_AM_MC1::readVsense(void) {
aberk 0:50c5f08a9178 196
aberk 0:50c5f08a9178 197 return (vsense_->read())*3300;
aberk 0:50c5f08a9178 198
aberk 0:50c5f08a9178 199 }
aberk 0:50c5f08a9178 200
aberk 0:50c5f08a9178 201 int RSEDP_AM_MC1::readVtach(void) {
aberk 0:50c5f08a9178 202
aberk 0:50c5f08a9178 203 return (vtach_->read())*3300;
aberk 0:50c5f08a9178 204
aberk 0:50c5f08a9178 205 }
aberk 0:50c5f08a9178 206
aberk 0:50c5f08a9178 207 int RSEDP_AM_MC1::readOpenLimit(void) {
aberk 0:50c5f08a9178 208
aberk 0:50c5f08a9178 209 return openLimit_->read();
aberk 0:50c5f08a9178 210
aberk 0:50c5f08a9178 211 }
aberk 0:50c5f08a9178 212
aberk 0:50c5f08a9178 213 int RSEDP_AM_MC1::readClosedLimit(void) {
aberk 0:50c5f08a9178 214
aberk 0:50c5f08a9178 215 return closedLimit_->read();
aberk 0:50c5f08a9178 216
aberk 0:50c5f08a9178 217 }
aberk 0:50c5f08a9178 218
aberk 0:50c5f08a9178 219 int RSEDP_AM_MC1::readTachoPulses(void) {
aberk 0:50c5f08a9178 220
aberk 0:50c5f08a9178 221 return tachoPulses_->read();
aberk 0:50c5f08a9178 222
aberk 0:50c5f08a9178 223 }
aberk 0:50c5f08a9178 224
aberk 0:50c5f08a9178 225 int RSEDP_AM_MC1::readEncoder0(void) {
aberk 0:50c5f08a9178 226
aberk 0:50c5f08a9178 227 return encoder0_->read();
aberk 0:50c5f08a9178 228
aberk 0:50c5f08a9178 229 }
aberk 0:50c5f08a9178 230
aberk 0:50c5f08a9178 231 int RSEDP_AM_MC1::readEncoder1(void) {
aberk 0:50c5f08a9178 232
aberk 0:50c5f08a9178 233 return encoder1_->read();
aberk 0:50c5f08a9178 234
aberk 0:50c5f08a9178 235 }
aberk 0:50c5f08a9178 236
aberk 0:50c5f08a9178 237 int RSEDP_AM_MC1::readRunStop(void) {
aberk 0:50c5f08a9178 238
aberk 0:50c5f08a9178 239 return runStop_->read();
aberk 0:50c5f08a9178 240
aberk 0:50c5f08a9178 241 }