Ben Katz
/
Quadrature_Test
quadrature testing
main.cpp@1:6e92984aacba, 2015-12-07 (annotated)
- Committer:
- benkatz
- Date:
- Mon Dec 07 08:26:22 2015 +0000
- Revision:
- 1:6e92984aacba
- Parent:
- 0:f3974679f594
how do I quadrature;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
benkatz | 0:f3974679f594 | 1 | #include "mbed.h" |
benkatz | 0:f3974679f594 | 2 | #include "FastPWM.h" |
benkatz | 0:f3974679f594 | 3 | |
benkatz | 0:f3974679f594 | 4 | |
benkatz | 0:f3974679f594 | 5 | //FastPWM duty(PA_3); |
benkatz | 0:f3974679f594 | 6 | Ticker loop; |
benkatz | 0:f3974679f594 | 7 | unsigned int old_velocity = 0; |
benkatz | 0:f3974679f594 | 8 | unsigned int velocity; |
benkatz | 0:f3974679f594 | 9 | AnalogOut output(A2); |
benkatz | 0:f3974679f594 | 10 | |
benkatz | 0:f3974679f594 | 11 | void EncoderInitialise(void) { |
benkatz | 0:f3974679f594 | 12 | // configure GPIO PA0 & PA1 as inputs for Encoder |
benkatz | 0:f3974679f594 | 13 | RCC->AHB1ENR |= 0x00000001; // Enable clock for GPIOA |
benkatz | 0:f3974679f594 | 14 | |
benkatz | 0:f3974679f594 | 15 | GPIOA->MODER |= GPIO_MODER_MODER0_1 | GPIO_MODER_MODER1_1 ; //PA0 & PA1 as Alternate Function /*!< GPIO port mode register, Address offset: 0x00 */ |
benkatz | 0:f3974679f594 | 16 | GPIOA->OTYPER |= GPIO_OTYPER_OT_0 | GPIO_OTYPER_OT_1 ; //PA0 & PA1 as Inputs /*!< GPIO port output type register, Address offset: 0x04 */ |
benkatz | 0:f3974679f594 | 17 | GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0 | GPIO_OSPEEDER_OSPEEDR1 ; // Low speed /*!< GPIO port output speed register, Address offset: 0x08 */ |
benkatz | 0:f3974679f594 | 18 | GPIOA->PUPDR |= GPIO_PUPDR_PUPDR0_1 | GPIO_PUPDR_PUPDR1_1 ; // Pull Down /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ |
benkatz | 0:f3974679f594 | 19 | GPIOA->AFR[0] |= 0x00000011 ; // AF01 for PA0 & PA1 /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ |
benkatz | 0:f3974679f594 | 20 | GPIOA->AFR[1] |= 0x00000000 ; // /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ |
benkatz | 0:f3974679f594 | 21 | |
benkatz | 0:f3974679f594 | 22 | // configure TIM2 as Encoder input |
benkatz | 0:f3974679f594 | 23 | RCC->APB1ENR |= 0x00000001; // Enable clock for TIM2 |
benkatz | 0:f3974679f594 | 24 | |
benkatz | 0:f3974679f594 | 25 | TIM2->CR1 = 0x0001; // CEN(Counter ENable)='1' < TIM control register 1 |
benkatz | 0:f3974679f594 | 26 | TIM2->SMCR = 0x0003; // SMS='011' (Encoder mode 3) < TIM slave mode control register |
benkatz | 0:f3974679f594 | 27 | TIM2->CCMR1 = 0xF1F1; // CC1S='01' CC2S='01' < TIM capture/compare mode register 1 |
benkatz | 0:f3974679f594 | 28 | TIM2->CCMR2 = 0x0000; // < TIM capture/compare mode register 2 |
benkatz | 0:f3974679f594 | 29 | TIM2->CCER = 0x0011; // CC1P CC2P < TIM capture/compare enable register |
benkatz | 0:f3974679f594 | 30 | TIM2->PSC = 0x0000; // Prescaler = (0+1) < TIM prescaler |
benkatz | 0:f3974679f594 | 31 | TIM2->ARR = 0xffffffff; // reload at 0xfffffff < TIM auto-reload register |
benkatz | 0:f3974679f594 | 32 | |
benkatz | 0:f3974679f594 | 33 | TIM2->CNT = 0x0000; //reset the counter before we use it |
benkatz | 0:f3974679f594 | 34 | } |
benkatz | 0:f3974679f594 | 35 | |
benkatz | 0:f3974679f594 | 36 | // Z Pulse routine |
benkatz | 0:f3974679f594 | 37 | void ZeroEncoderCount() { |
benkatz | 0:f3974679f594 | 38 | TIM2->CNT=0 ; //reset count to zero |
benkatz | 0:f3974679f594 | 39 | } |
benkatz | 0:f3974679f594 | 40 | |
benkatz | 0:f3974679f594 | 41 | void setp(void){ |
benkatz | 0:f3974679f594 | 42 | output.write_u16((TIM2->CNT)<<4); |
benkatz | 0:f3974679f594 | 43 | } |
benkatz | 0:f3974679f594 | 44 | |
benkatz | 0:f3974679f594 | 45 | void print_serial(void){ |
benkatz | 0:f3974679f594 | 46 | velocity = (TIM2->CNT); |
benkatz | 0:f3974679f594 | 47 | printf("%i\n\r",velocity-old_velocity); |
benkatz | 0:f3974679f594 | 48 | old_velocity = velocity; |
benkatz | 0:f3974679f594 | 49 | } |
benkatz | 0:f3974679f594 | 50 | |
benkatz | 0:f3974679f594 | 51 | int main() { |
benkatz | 0:f3974679f594 | 52 | EncoderInitialise() ; |
benkatz | 0:f3974679f594 | 53 | |
benkatz | 0:f3974679f594 | 54 | |
benkatz | 0:f3974679f594 | 55 | unsigned int EncoderPosition ; |
benkatz | 0:f3974679f594 | 56 | loop.attach(&setp, .000001); |
benkatz | 0:f3974679f594 | 57 | |
benkatz | 0:f3974679f594 | 58 | while (true) { |
benkatz | 0:f3974679f594 | 59 | // Print Encoder Quadrature count to debug port every 0.5 seconds |
benkatz | 0:f3974679f594 | 60 | //EncoderPosition = TIM2->CNT ; // Get current position from Encoder |
benkatz | 0:f3974679f594 | 61 | //printf("Encoder Position %i\r\n", EncoderPosition); |
benkatz | 0:f3974679f594 | 62 | //wait(0.1); |
benkatz | 0:f3974679f594 | 63 | } |
benkatz | 0:f3974679f594 | 64 | |
benkatz | 0:f3974679f594 | 65 | |
benkatz | 0:f3974679f594 | 66 | } |