TW的硬件一直很強,這是難得的硬件創新比賽的優秀作品,資料非常完整理。
硬件設計,源碼,項目計劃書,甚至包含了事后的復盤總結文檔。
是不可多得的好資料。
項目系統框架圖
1. 硬件系統框架圖?(請以方塊圖形式呈現)
2. 軟件系統框架圖?(以文字或方塊圖表示算法流程)
- 項目設計預計效果
- 六軸機械手臂運動控制
-
需使用六塊 Servo Motion controller
方塊圖如下:
-
-
使用PC 做為主控臺, 在PC端產生各軸的位置透過RS-485 下達命令做多軸運動控制
PC 人機介面規劃如下:
-
-
VT100 ?terminal 報文輸出
系統會由COM1 (115200,n,8,1) 輸出 VT100 格式化文字如下畫面 - 多軸接線圖
部份代碼:
#include <stdio.h>
#include <string.h>
#include "define.h"
#include "MultiTask.h"
#include "M451Series.h"
#include "sysclk.h"
#include "uart0.h"
#include "uart1.h"
#include "pwm.h"
#include "adc.h"
#include "eint.h"
#include "flash.h"
#include "adc_ctrl.h"
#include "TemFunction.h"
#include "VT100.H"enum {COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_YELLOW, COLOR_CYAN,COLOR_MAGENTA, COLOR_GRAY, COLOR_WHITE, COLOR_BLACK, COLOR_DGRAY,COLOR_DYELLOW, COLOR_DGREEN, COLOR_DRED,BCOLOR_YELLOW, BCOLOR_GREEN, BCOLOR_RED, COLOR_DBLUE};
typedef unsigned char* Uptr;
extern unsigned long g_ulFlags ;
//"FAULT xLINK oLINK SERVO_o CAN_o UART_o VCOMP_m CURRENTm SPEED_m POSITIONm";
// SP_ENC SP_iENC SP_qENC POS_ENC POS_POT POWERsts HALTED";
#define STATE_WAIT_FOR_LINK 0
#define STATE_RUN 1
#define STATE_FAULT 2
extern unsigned long g_ulControllerState;
//extern unsigned long g_ulMessageState;
extern long g_usEncoderCount; // encoder counter
extern unsigned long g_ulEncoderLines;
extern unsigned long MsgIdxNum;
//----------------------------------------------------------
extern void UART0IntHandler(void);
extern void CAN0IntHandler(void);
extern void ControllerIntHandler(void);
extern void TaskCanDataReceive(void);
extern unsigned long g_ulFlags;typedef struct
{ uint32_t id;uint8_t t1;uint8_t t2;uint8_t t3;uint8_t t4;
} STR_FLASH_T;STR_FLASH_T test;
void DiaplayInitial(void);
void DebugReport(void);
extern long g_lHBridgeV ;
int PwmCounter ;
void Initial_IoPort(void)
{// SETUP UARTUART0_Init(COM_485_BAUD);UART1_Init(COM_232_BAUD); // debug port // SETUP PWMPWM_Init_PA3_PWM1CH2();PF->bMODE.MODE2 = 1; // PF2 Output Mode Mode LED_GPF->bMODE.MODE1 = 1; // PF1 Output Mode Mode LED_RPB->bMODE.MODE6 = 1; // PB6 Output Mode Motor_CW PB->bMODE.MODE7 = 1; // PB7 Output Mode Motor_CCW PB->bMODE.MODE3 = 0; // PB3 input mode Limit switchPB->bMODE.MODE4 = 0; // PB4 input mode Limit switchPB->bMODE.MODE5 = 0; // PB5 input mode Config SwitchPC->bMODE.MODE1 = 0; // PC1 input mode Home switchPC->bMODE.MODE9 = 3; // Quasi-bidirectional Mode // SETUP ADCADC_Init_PB0PB1PB2();// SETUP EINTEINT_Init_PC0PF0(); pwm_out(0);
}
//-----------------------------------------------------------------------------------
void CallBootloader(void)
{}//-----------------------------------------------------------
//software Watch dog simulation
//-----------------------------------------------------------//-----------------------------------------------------------------------
//software watchdog for reset the linking status
//------------------------------------------------------------------------
unsigned int WatchDogCnt;
void WatchdogIntHandler(void)
{WatchDogCnt++;if (WatchDogCnt > 200) // for 100mS{WatchDogCnt = 0;ControllerLinkLost(LINK_TYPE_NONE);}
}
資源分享:
六軸機器手臂運動控制-直流伺服反饋系統設計(比賽項目計劃書+設計總結+硬件+源代碼+上位機等)