1 /* 2 * david austin 3 * http://www.embedded.com/design/mcus-processors-and-socs/4006438/Generate-stepper-motor-speed-profiles-in-real-time 4 * DECEMBER 30, 2004 5 * 6 * Demo program for stepper motor control with linear ramps 7 * Hardware: PIC18F252, L6219 8 * 9 * Compile with on Microchip XC8 compiler with the command line: 10 * XC8 --chip=18F252 motor_test3.c 11 * 12 * Copyright (c) 2015 Robert Ramey 13 * 14 * Distributed under the Boost Software License, Version 1.0. (See 15 * accompanying file LICENSE_1_0.txt or copy at 16 * http://www.boost.org/LICENSE_1_0.txt) 17 */ 18 19 #include <xc.h> 20 21 // 8 MHz internal clock 22 #define _XTAL_FREQ 8000000 23 24 #include <stdint.h> 25 #include <stdbool.h> /* For true/false definition */ 26 27 // *************************** 28 // nullify macro for literals 29 #define literal(n) n 30 31 // *************************** 32 // map strong types to appropriate underlying types. 33 typedef uint16_t position_t; 34 typedef int16_t step_t; 35 typedef uint32_t ccpr_t; 36 typedef int32_t c_t; 37 typedef uint16_t phase_t; 38 typedef uint8_t phase_ix_t; 39 typedef int8_t direction_t; 40 41 // 1st step=10ms; max speed=300rpm (based on 1MHz timer, 1.8deg steps) 42 #define C_MIN literal((1000 << 8)) 43 #define C0 literal((10000 << 8)) 44 45 #include "motor3.c" 46 main()47void main() { 48 initialize(); 49 // move motor to position 200 50 motor_run(200); 51 while(busy()) __delay_ms(100); 52 // move motor to position 1000 53 motor_run(1000); 54 while(busy()) __delay_ms(100); 55 // move back to position 0 56 motor_run(200); 57 while(busy()) __delay_ms(100); 58 } // main() 59