Carousel control application
|
| |
| #define | CAN_SPEED 1000000 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| #define | CAN_ISR 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| #define | ENG_ISR 1 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| #define | SERVO_ISR 5 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| #define | FULLSPEED 50 |
| the speed of motors while turn at FULLSPEED | |
| #define | MIDSPEED 20 |
| the speed of motors while turn at MIDSPEED | |
| #define | LOWSPEED 10 |
| the speed of motors while turn a LOWSPEED - used to accurate move to possition | |
| #define | INIT_POSITION 0 |
| the initial position of carousel, could be 0..3 | |
| #define | GLOBALTIMEOUT 6000 |
| the timeout for carousel to reach requested position | |
| enum | Event { EVENT_ENTRY, EVENT_DO, EVENT_EXIT } |
the interrupt for the timer is somehow set in this class perhaps 4 More... | |
| enum | Direction { FORWARD, BACKWARD } |
the interrupt for the timer is somehow set in this class perhaps 4 More... | |
| enum | ErrorState { NO_ERROR = 0, ERROR_SENSOR = 1, ERROR_POSITION = 2, ERROR_TIMEOUT = 3, NOTICE = 5 } |
information about error states
| |
| typedef void(* | state_fcn )(enum Event my_event) |
state space automat
| |
| volatile unsigned int | validReading = 0 |
| 0 - carusel position signal 0- not valid, 1- valid | |
| volatile unsigned int | validPosition = 0 |
| 0..4 read position from carusel | |
| unsigned int | timeNextPos = 232 |
| default time to move to next postion | |
| unsigned int | timeNext2Pos = 424 |
| default time to move to next postion | |
| volatile unsigned int | requestedPosition = 0 |
| the positon the carousel should move to | |
| volatile unsigned int | moveCarousel = 0 |
| request to move the carousel | |
| enum Direction | moveDirection = FORWARD |
| the direction carousel should move | |
| unsigned int | stepsToPos = 1 |
| distance to reguested position | |
| unsigned int | flashLEDB = 0 |
| when 1, blue led will flash when the sensors sense new valid position (overshoot position) | |
| unsigned int | flashLEDY = 0 |
| when 1 Yellow led will flash when the requested position was set | |
| unsigned int | sendCANmessage = 0 |
| flag to sent CAN data | |
| unsigned int | sendCANOKdata = 0 |
| flag data to send - OK | |
| unsigned int | sendCANERRdata = 0 |
| flag data to send - ERROR | |
| volatile unsigned int | recieveCANmessage = 0 |
| flag indicated CAN data was recieved | |
| volatile unsigned int | recieveCANdata = 0 |
| recieved CAN data | |
| unsigned int | systemInit = 0 |
| flag that show that carousel is just initialising | |
| const unsigned int | useKeyboard = 0 |
| debuging - the next position of carousel is set by terminal | |
| const unsigned int | useArray = 0 |
| debuging - next position is generated automaticly using the array of possition | |
| const unsigned int | doInitCarousel = 0 |
| debuging - if set, program will count constants to move carousel, not really the best ones.. | |
| unsigned int | carouselTimeOut = 0 |
| global timeout, the requested position is not reachable | |
| enum ErrorState | errorState = NO_ERROR |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | errorNumber = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | wasError = 0 |
| flag that says, that there were an error, this flag is cancelled while new position is received | |
| can_msg_t | msg |
| pointer to the recieved can message | |
| state_fcn | current_state |
| current state of carousel, stop, fast_move, slow_move, returnToPosition | |
| unsigned int | repeatTXCANtime = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | repeatErrorCANtime = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | repeatErrorCAN = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | prevRequestedPos = INIT_POSITION +1 |
| at start robot should move therefore the initial position has to be different than this position | |
| int | prevMoveCarousel = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| const unsigned int | sequens [14] = {0,1,2,3,4,3,2,1,0,2,4,3,1,4} |
| sequence of carousel positions, used for debuging | |
| unsigned int | sequensX = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | readyToGo = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | timeToGo = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | okTimeToBlink = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | okLEDstate = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | errTimeToBlink = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | errLEDstate = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | errLEDFlash = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | yBlinkTime = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | yLEDstate = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| enum ErrorState | lastErrorState = NO_ERROR |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | stopFaMoveTime = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | stopSlMoveTime = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| const unsigned int | moveSlowTimeOut = 2000 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| const unsigned int | returnTimeOut = 2000 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | returnStopTime |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| const unsigned int | signalToInt [7] = {11,0,3,4,1,2,10} |
| used to decode signal from sensors to integer; 0..4 is position, 10 means error, 11 does'n sense any position | |
| const unsigned int | intToSignal [5] = {1,4,5,2,3} |
| used to get signals from sensors for the position (0..4) | |
| unsigned int | stateReading = 0 |
| 0- no signal, 1- some signal | |
| unsigned int | reading = 0 |
| signal that is read | |
| unsigned int | prevValidPosition = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | prevMoveDirection = FORWARD |
| init direction should be forward!! | |
| unsigned int | signalTimeoutOn = 0 |
| flag that show if carousel is moving and is checked if new signal comes before timeout | |
| unsigned int | lastSignaltime = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | errorPosRead [5] = {0,0,0,0,0} |
| how many times positon was read wrong. once read right, reset this number | |
| unsigned int | initPos = 0 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| unsigned int | setConstants = 1 |
| the interrupt for the timer is somehow set in this class perhaps 4 | |
| void | init_perip (void) |
initialisation of ARM periphery
| |
| void | delay (int interval) |
| wait time specified in the interaval int interval - interval in ms | |
| void | init_carousel (void) |
| Initialize constants for positioning carousel. | |
| unsigned int | getCurrentPosition (void) |
| reads the sensors !caution! read position can be errorneous | |
| void | generatePositions (void) |
| used for debuging to generate new positions for the carousel new position could be set by keyboard or read from array sequens[] | |
| void | go_to_sleep () |
| set carousel to sleep caused by CAN_PWR_ALERT CAN message | |
| unsigned int | getTime (void) |
| used as timer | |
| void | can_rx (can_msg_t *msg) |
| handels messages recieved by the CAN controller | |
| void | handle_CAN (void) |
handle CAN bus
| |
| void | blink_LED (void) |
Blink with the LEDs located on eb_board
| |
| void | updatePosition (void) |
Check the sensors Has three states
| |
| void | state_stop (enum Event my_event) |
State space machine state: state_stop The initial state where the motor is stoped and Carousel is waiting for commands to move to requested postion
| |
| void | state_moveSlow (enum Event my_event) |
State space machine state: state_moveSlow
| |
| void | state_moveFast (enum Event my_event) |
State space machine state: state_moveFast
| |
| void | state_returnToPosition (enum Event my_event) |
State space machine state: state_returnToPosition
| |
| int | main (void) |
| Main loop. | |
| signed int | positionToDistance (unsigned int pos1, unsigned int pos2) |
| Count the distance between 2 position. | |
| unsigned int | distanceToPos (unsigned int position, signed int distance) |
| Count new position. | |
Carousel control application
| #define CAN_ISR 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| #define CAN_SPEED 1000000 |
the interrupt for the timer is somehow set in this class perhaps 4
| #define ENG_ISR 1 |
the interrupt for the timer is somehow set in this class perhaps 4
| #define FULLSPEED 50 |
the speed of motors while turn at FULLSPEED
| #define GLOBALTIMEOUT 6000 |
the timeout for carousel to reach requested position
| #define INIT_POSITION 0 |
the initial position of carousel, could be 0..3
| #define LOWSPEED 10 |
the speed of motors while turn a LOWSPEED - used to accurate move to possition
| #define MIDSPEED 20 |
the speed of motors while turn at MIDSPEED
| #define SERVO_ISR 5 |
the interrupt for the timer is somehow set in this class perhaps 4
state space automat
| enum Direction |
| enum ErrorState |
information about error states
| enum Event |
| void blink_LED | ( | void | ) |
Blink with the LEDs located on eb_board


| void can_rx | ( | can_msg_t * | msg | ) |
handels messages recieved by the CAN controller
| msg | the recieved CAN message pointer |


| void delay | ( | int | interval | ) |
wait time specified in the interaval int interval - interval in ms
‘Ò‹@
need to implement overflow when needed durations in days..

| unsigned int distanceToPos | ( | unsigned int | position, | |
| signed int | distance | |||
| ) |
Count new position.
| position | 0..4, the current position | |
| distance | -4..+4, distance from the current position, + forward, - backward from current position |

| void generatePositions | ( | void | ) |
used for debuging to generate new positions for the carousel new position could be set by keyboard or read from array sequens[]


| unsigned int getCurrentPosition | ( | void | ) |
reads the sensors !caution! read position can be errorneous
| @return | position 0..4 if sense sone data, 10 means error, 11 does'n sense any position |

| unsigned int getTime | ( | void | ) |
used as timer
| @return | returns the number in timer T0TC |

| void go_to_sleep | ( | ) |
set carousel to sleep caused by CAN_PWR_ALERT CAN message

| void handle_CAN | ( | void | ) |
handle CAN bus
CAN id is CAN_CAROUSEL
recieve message


| void init_carousel | ( | void | ) |
Initialize constants for positioning carousel.
Move n times by set speed and measure the time interval Not very accurate, it is better to set constants manualy


| void init_perip | ( | void | ) |
initialisation of ARM periphery


| int main | ( | void | ) |
Main loop.
In main loop

| signed int positionToDistance | ( | unsigned int | pos1, | |
| unsigned int | pos2 | |||
| ) |
Count the distance between 2 position.
| pos1 | 0..4, new position | |
| pos2 | 0..4, old position |

| void state_moveFast | ( | enum Event | my_event | ) |
State space machine state: state_moveFast


| void state_moveSlow | ( | enum Event | my_event | ) |
State space machine state: state_moveSlow

| void state_returnToPosition | ( | enum Event | my_event | ) |
State space machine state: state_returnToPosition

| void state_stop | ( | enum Event | my_event | ) |
State space machine state: state_stop The initial state where the motor is stoped and Carousel is waiting for commands to move to requested postion
If requested position is read on sensors - wait for new request. If requeset position is valid position (last requested) but not read from the sensors, new state is state_returnToPosition. If the requested position is different from the last one. then find out the direction to move and change state to state_moveFast.

| void updatePosition | ( | void | ) |
Check the sensors Has three states
It also set the value readPositon= n, where n(0,4) is the last read valid position
In this function it is also checked for an errors in reading signal
! this is crucial, read error of requested position


| unsigned int carouselTimeOut = 0 |
global timeout, the requested position is not reachable
current state of carousel, stop, fast_move, slow_move, returnToPosition
| const unsigned int doInitCarousel = 0 |
debuging - if set, program will count constants to move carousel, not really the best ones..
| unsigned int errLEDFlash = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int errLEDstate = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int errorNumber = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int errorPosRead[5] = {0,0,0,0,0} |
how many times positon was read wrong. once read right, reset this number
| enum ErrorState errorState = NO_ERROR |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int errTimeToBlink = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int flashLEDB = 0 |
when 1, blue led will flash when the sensors sense new valid position (overshoot position)
| unsigned int flashLEDY = 0 |
when 1 Yellow led will flash when the requested position was set
| unsigned int initPos = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| const unsigned int intToSignal[5] = {1,4,5,2,3} |
used to get signals from sensors for the position (0..4)
| enum ErrorState lastErrorState = NO_ERROR |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int lastSignaltime = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| volatile unsigned int moveCarousel = 0 |
request to move the carousel
| enum Direction moveDirection = FORWARD |
the direction carousel should move
| const unsigned int moveSlowTimeOut = 2000 |
the interrupt for the timer is somehow set in this class perhaps 4
| can_msg_t msg |
pointer to the recieved can message
| unsigned int okLEDstate = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int okTimeToBlink = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| int prevMoveCarousel = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int prevMoveDirection = FORWARD |
init direction should be forward!!
| unsigned int prevRequestedPos = INIT_POSITION +1 |
at start robot should move therefore the initial position has to be different than this position
| unsigned int prevValidPosition = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int reading = 0 |
signal that is read
| unsigned int readyToGo = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| volatile unsigned int recieveCANdata = 0 |
recieved CAN data
| volatile unsigned int recieveCANmessage = 0 |
flag indicated CAN data was recieved
| unsigned int repeatErrorCAN = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int repeatErrorCANtime = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int repeatTXCANtime = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| volatile unsigned int requestedPosition = 0 |
the positon the carousel should move to
| unsigned int returnStopTime |
the interrupt for the timer is somehow set in this class perhaps 4
| const unsigned int returnTimeOut = 2000 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int sendCANERRdata = 0 |
flag data to send - ERROR
| unsigned int sendCANmessage = 0 |
flag to sent CAN data
| unsigned int sendCANOKdata = 0 |
flag data to send - OK
| const unsigned int sequens[14] = {0,1,2,3,4,3,2,1,0,2,4,3,1,4} |
sequence of carousel positions, used for debuging
| unsigned int sequensX = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int setConstants = 1 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int signalTimeoutOn = 0 |
flag that show if carousel is moving and is checked if new signal comes before timeout
| const unsigned int signalToInt[7] = {11,0,3,4,1,2,10} |
used to decode signal from sensors to integer; 0..4 is position, 10 means error, 11 does'n sense any position
| unsigned int stateReading = 0 |
0- no signal, 1- some signal
| unsigned int stepsToPos = 1 |
distance to reguested position
| unsigned int stopFaMoveTime = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int stopSlMoveTime = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int systemInit = 0 |
flag that show that carousel is just initialising
| unsigned int timeNext2Pos = 424 |
default time to move to next postion
| unsigned int timeNextPos = 232 |
default time to move to next postion
| unsigned int timeToGo = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| const unsigned int useArray = 0 |
debuging - next position is generated automaticly using the array of possition
| const unsigned int useKeyboard = 0 |
debuging - the next position of carousel is set by terminal
| volatile unsigned int validPosition = 0 |
0..4 read position from carusel
| volatile unsigned int validReading = 0 |
0 - carusel position signal 0- not valid, 1- valid
| unsigned int wasError = 0 |
flag that says, that there were an error, this flag is cancelled while new position is received
| unsigned int yBlinkTime = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
| unsigned int yLEDstate = 0 |
the interrupt for the timer is somehow set in this class perhaps 4
1.7.1