Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:333434a8611b, committed 2020-03-20
- Comitter:
- Picmon
- Date:
- Fri Mar 20 10:54:58 2020 +0000
- Commit message:
- motor controller 200320A
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MotorControl.cpp Fri Mar 20 10:54:58 2020 +0000
@@ -0,0 +1,149 @@
+#include "mbed.h"
+#include "MotorControl.h"
+
+RawSerial mc_usart(PA_2,PA_15,115200);// this will be USART6 for motor control
+
+const string rxMsgTable[MESSAGE] = {
+
+ "SET DRIVE WORKING SETINGS",
+ "SET FEEDBACK BOOST CURRENT",
+
+};
+
+struct drvWorkingSettings{
+
+ bool par0;
+ bool par1;
+ bool par2;
+ bool par3;
+ bool feedBackMotChk;
+ bool par5;
+ bool auomaticMotCurRed;
+ bool disableDigOutputsFWH;
+ bool par8;
+ bool par9;
+ bool motRotDir;
+ bool par11;
+ bool par12;
+ bool fbErrMotAct;
+ bool par14;
+ bool par15;
+
+};
+
+char rxMsgStore[BUFFER_SIZE];//received local message store
+char mc_Tx_Buffer[BUFFER_SIZE];//transmitted message buffer
+volatile char mc_Rx_Buffer[BUFFER_SIZE];//received message buffer
+volatile unsigned char mc_Rx_Rd_Ptr = 0;//circulare buffer read pointer
+volatile unsigned char mc_Rx_Wr_Ptr = 0;//circulare buffer write pointer
+unsigned int rx_int = 0;//received integer / character
+
+//unsigned char i;
+bool msgRecFlag = false;//message received flag
+
+void motMsg_RX_ISR(void){
+
+ //led1=1;
+ //save character in buffer
+ mc_Rx_Buffer[mc_Rx_Wr_Ptr] = mc_usart.getc();
+ //increment pointer
+ mc_Rx_Wr_Ptr++;
+ //test for wrap around
+ if(mc_Rx_Wr_Ptr == (BUFFER_SIZE - 1))
+ {
+ mc_Rx_Wr_Ptr = 0;
+ }
+ //wait(0.0001);
+ //led1=0;
+}
+
+bool getMotMsg(char * msgArray){
+
+ //declare variables
+ static unsigned char i;
+ unsigned int uiMsg= 0xFFFF;
+
+ //test for any characters in the receiver buffer
+ if (mc_Rx_Wr_Ptr != mc_Rx_Rd_Ptr)
+ {
+ //character in the buffer, return the value
+ uiMsg = mc_Rx_Buffer[mc_Rx_Rd_Ptr];
+ //increment the Rd pointer
+ mc_Rx_Rd_Ptr++;
+ //test for wrap around
+ if(mc_Rx_Rd_Ptr == (BUFFER_SIZE - 1))
+ {
+ mc_Rx_Rd_Ptr = 0;
+ }
+ }
+
+ if(uiMsg != 0xFFFF){//check that a character is in the buffer
+ msgArray[i++] = uiMsg;//store characters in local message store array
+
+ mc_usart.printf("%c\r\n", uiMsg);
+
+ if(uiMsg == '\r'){//look for <CR> then print out the message in the RX buffer
+
+ msgRecFlag = true;//set the message received flag
+
+ mc_usart.printf("Stored Message\r\n");
+
+ for(i=0 ; i <BUFFER_SIZE ; i++)
+ mc_usart.printf("%c\r\n",msgArray[i]);
+
+ }
+ }
+ else
+ i=0;
+
+
+ return(msgRecFlag);
+}
+
+void motMsgDecode(unsigned int rxMsgTable[], unsigned int rxMsg[]){
+
+ if(memcmp(rxMsgTable, rxMsg, 10)){
+
+ }
+
+}
+
+void clrRxMsg(char array[]){
+
+ for(unsigned char i=0; i<BUFFER_SIZE; i++)
+ array[i]=0;
+
+ #ifdef DEBUG
+ mc_usart.printf("Clear the RX local message store\r\n");
+ #endif
+
+ for(unsigned char i=0; i<BUFFER_SIZE; i++){
+
+ #ifdef DEBUG
+ mc_usart.printf("%c\r\n",array[i]);
+ #endif
+ }
+}
+
+
+bool moveMot(uint8_t par1, int32_t par2){
+
+ static uint8_t newPar1 = 0;
+ static int32_t newPar2 = 0;
+ bool fault = false;
+
+ if((par1 != newPar1) || (par2 != newPar2)){
+
+ newPar1 = par1;
+ newPar2 = par2;
+
+ if(((par1 >=0) && (par1 <=4))&&((par2 >= REV_MAX_STEPS) && (par2 <= FWD_MAX_STEPS))){
+ sprintf(mc_Tx_Buffer,"MOVEMOT %d %u\r",par1, par2);
+ mc_usart.printf("%s\r",mc_Tx_Buffer);
+ }
+ else
+ fault = true;
+
+ }
+ return(fault);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MotorControl.h Fri Mar 20 10:54:58 2020 +0000 @@ -0,0 +1,36 @@ +#ifndef MOTORCONTROL_H +#define MOTORCONTROL_H + +#include "mbed.h" +#include <string> + +#define DEBUG_MOTOR + +#define BUFFER_SIZE 32 +#define MESSAGE 20 + +#define REV_MAX_STEPS -2147483648 +#define FWD_MAX_STEPS 2147483648 +#define DEBUG + + +extern RawSerial mc_usart;// this will be USART6 for motor control +extern const string rxMsgTable[]; +extern char rxMsgStore[];//received local message store +extern char mc_Tx_Buffer[];//transmitted message buffer +extern volatile char mc_Rx_Buffer[];//received message buffer +extern volatile unsigned char mc_Rx_Rd_Ptr;//circulare buffer read pointer +extern volatile unsigned char mc_Rx_Wr_Ptr;//circulare buffer write pointer +extern unsigned int rx_int;//received integer / character + +//unsigned char i; +extern bool msgRecFlag;//message received flag + +void motMsg_RX_ISR(void); +bool getMotMsg(char * msgArray); +void motMsgDecode(unsigned int rxMsgTable[], unsigned int rxMsg[]);void clrRxMsg(char array[]); +bool moveMot(uint8_t par1, int32_t par2); + + + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Mar 20 10:54:58 2020 +0000
@@ -0,0 +1,55 @@
+
+/*
+
+ ED Motor Controller API
+
+
+ Notes:
+ A robust protocal has been called for, the motor command sent out is to be echoed back with and <ACK> or <NACK>
+
+ In order to compare what was sent to what is echoed back two buffers are required, a TX buffer and an RX buffer, they can then be compared
+ using memcmp() function
+
+ 19/03/20 Compare of tx and rx buffers can be done
+ 20/03/20 Migrate code to mbed studio
+
+
+
+*/
+
+#include "mbed.h"
+#include <string>
+#include "MotorControl.h"
+
+DigitalOut led1(LED1);
+
+
+
+int main(){
+
+ led1=0;
+
+ mc_usart.attach(&motMsg_RX_ISR);//start the serial receiver interrupt
+ mc_usart.printf("ED Motor Controller Commands\r\n");
+
+ clrRxMsg(rxMsgStore);
+
+ moveMot(1, 1000);
+
+ mc_usart.printf("TX Buffer Contents\r\n");
+
+ for(unsigned char i=0 ; i <BUFFER_SIZE ; i++)
+ mc_usart.printf("%c\r\n",mc_Tx_Buffer[i]);
+
+ while(1){
+
+ if(getMotMsg(rxMsgStore)){//get the message from the receive buffer and store it in local message store
+
+ msgRecFlag = false;//clear the message received flag
+
+ if(memcmp(rxMsgStore,mc_Tx_Buffer,strlen(rxMsgStore)) == 0){
+ led1=1;
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.h Fri Mar 20 10:54:58 2020 +0000 @@ -0,0 +1,7 @@ +#ifndef MAIN_H +#define MAIN_H + +#include "mbed.h" + + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Mar 20 10:54:58 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file