safe_numerics/example/motor_test3.c

59 lines
1.5 KiB
C

/*
* david austin
* http://www.embedded.com/design/mcus-processors-and-socs/4006438/Generate-stepper-motor-speed-profiles-in-real-time
* DECEMBER 30, 2004
*
* Demo program for stepper motor control with linear ramps
* Hardware: PIC18F252, L6219
*
* Compile with on Microchip XC8 compiler with the command line:
* XC8 --chip=18F252 motor_test3.c
*
* Copyright (c) 2015 Robert Ramey
*
* Distributed under the Boost Software License, Version 1.0. (See
* accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
#include <xc.h>
// 8 MHz internal clock
#define _XTAL_FREQ 8000000
#include <stdint.h>
#include <stdbool.h> /* For true/false definition */
// ***************************
// nullify macro for literals
#define literal(n) n
// ***************************
// map strong types to appropriate underlying types.
typedef uint16_t position_t;
typedef int16_t step_t;
typedef uint32_t ccpr_t;
typedef int32_t c_t;
typedef uint16_t phase_t;
typedef uint8_t phase_ix_t;
typedef int8_t direction_t;
// 1st step=10ms; max speed=300rpm (based on 1MHz timer, 1.8deg steps)
#define C_MIN literal((1000 << 8))
#define C0 literal((10000 << 8))
#include "motor3.c"
void main() {
initialize();
// move motor to position 200
motor_run(200);
while(busy()) __delay_ms(100);
// move motor to position 1000
motor_run(1000);
while(busy()) __delay_ms(100);
// move back to position 0
motor_run(200);
while(busy()) __delay_ms(100);
} // main()