## Tuesday, 5 June 2007

### RTFM

I made a start on my PWM control software this evening. The first thing that I discovered was that I had connected the motor drive to the wrong pin on the MSP430F2013. There are two pins that can be driven from the timer, TA0 and TA1, but only TA1 is capable of PWM. I should have studied the datasheet more carefully! Easily fixed but a bit of a time waster.

I wrote a small test program to try different PWM duty cycles and frequencies :-
#include "msp430x20x3.h"#define LED           BIT0#define MOTOR         BIT2#define FLOATING      (BIT1 + BIT3)#define CURRENT       BIT4#define GND           BIT5#define I2CPINS       (BIT6 + BIT7)#define OUTPUTS       (I2CPINS + MOTOR + LED + FLOATING)int main( void ){WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer//// Set MCLK to 16 MHz, SMCLK = 2 MHz//BCSCTL2 = SELM_0 | DIVM_0 | DIVS_3;   // MCLK = DCO, SMCLK =  DCO / 8BCSCTL1 = CALBC1_16MHZ | XT2OFF;DCOCTL  = CALDCO_16MHZ;//// Set up I/0//P1OUT = MOTOR;                        // Motor offP1DIR = OUTPUTS;                      // Define output pinsP1SEL = MOTOR;                        // Motor = TA2 output//// Set up timer//TACCR0 = 20000;                       // 2 MHz / 100TACCR1 = 15000;                       // 25%TACCTL1 = OUTMOD_7;                   // Reset / setTAR = 0;                              // Start counting from zeroTACTL = TASSEL_2 + MC_1 + TACLR;      // SMCLK, upmode, clear}
I found that 50-100 Hz seems to work well. 1KHz is too fast as the current doesn't have chance the build up to its full value due to the motor winding inductance.

Here is a graph of motor current versus duty cycle with no mechanical load :-

As the duty cycle gets smaller the motor slows down so it generates less back e.m.f. making the current increase.

I chose a current sense resistor of 0.27Ω which gives voltages up to 1.75V however the full scale voltage of the ADC is only 0.6V so I could do with it being smaller. I could just attenuate it with a potential divider but as it gets hot and wastes power it is better to reduce its value to 0.1Ω. Again, I should have paid more attention to the datasheet. I guess I will be taking a trip to Maplin tomorrow lunch time.