STM3 ESC dual brushless motor controller. 10-60v, motor power rating tiny to kW. Ganged or independent motor control As used in 'The Brute' locomotive - www.jons-workshop.com
Dependencies: mbed BufferedSerial Servo FastPWM
Diff: error_handler.cpp
- Revision:
- 12:d1d21a2941ef
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/error_handler.cpp Mon Mar 04 17:51:08 2019 +0000
@@ -0,0 +1,87 @@
+#include "mbed.h"
+#include "DualBLS.h"
+#include "BufferedSerial.h"
+extern BufferedSerial pc;
+
+/*class error_handling_Jan_2019
+{
+ int32_t TS_fault[NUMOF_REPORTABLE_TS_ERRORS] ; // Some number of reportable error codes, accessible through set and read members
+ public:
+ error_handling_Jan_2019 () { // default constructor
+ for (int i = 0; i < (sizeof(TS_fault) / sizeof(int32_t)); i++)
+ TS_fault[i] = 0;
+ }
+ void set (uint32_t, int32_t) ;
+ uint32_t read (uint32_t) ;
+ bool all_good () ;
+ void report_any () ;
+} ;
+*/
+
+const char * FaultList[] = {
+/*
+ FAULT_0,
+ FAULT_EEPROM,
+ FAULT_BOARD_ID,
+ FAULT_COM_LINE_LEN,
+ FAULT_COM_LINE_NOMATCH,
+ FAULT_COM_LINE_LEN_PC,
+ FAULT_COM_LINE_LEN_TS,
+ FAULT_COM_LINE_NOMATCH_PC,
+ FAULT_COM_LINE_NOMATCH_TS,
+ FAULT_MAX,
+ NUMOF_REPORTABLE_TS_ERRORS
+*/
+ "Zero",
+ "EEPROM",
+ "board ID",
+ "com line len",
+ "com line nomatch",
+ "com line len",
+ "com line len",
+ "com no match",
+ "com no match",
+ "max",
+ "endoflist",
+ " ",
+ } ;
+
+bool error_handling_Jan_2019::all_good () {
+ for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++)
+ if (ESC_fault[i])
+ return false;
+ return true;
+}
+
+/**void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) {
+ Used to set bits in error int
+ Uses OR to set new bits without clearing other bits set previously
+*/
+void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) {
+ if (bits_to_set) {
+ pc.printf ("At Error.set, err_no %d, bits %lx\r\n", err_no, bits_to_set);
+ ESC_fault[err_no] |= bits_to_set; // Uses OR to set new bits without clearing other bits set previously
+ }
+}
+
+/**void error_handling_Jan_2019::clr (uint32_t err_no) {
+ Used to clear all bits in error int
+*/
+void error_handling_Jan_2019::clr (uint32_t err_no) {
+ ESC_fault[err_no] = 0;
+}
+
+uint32_t error_handling_Jan_2019::read (uint32_t err_no) {
+ return ESC_fault[err_no];
+}
+
+void error_handling_Jan_2019::report_any (bool retain) {
+ for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++) {
+ if (ESC_fault[i]) {
+ pc.printf ("Error report, number %d, value %d, %s\r\n", i, ESC_fault[i], FaultList[i]);
+ if (!retain)
+ ESC_fault[i] = 0;
+ }
+ }
+}
+