فهرست منبع

调整扭矩查找表的结构

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 سال پیش
والد
کامیت
5874f7d711
3فایلهای تغییر یافته به همراه14 افزوده شده و 7 حذف شده
  1. 6 2
      Applications/app/nv_storage.h
  2. 4 1
      Applications/bsp/fmc_flash.c
  3. 4 4
      Applications/foc/core/torque.c

+ 6 - 2
Applications/app/nv_storage.h

@@ -44,9 +44,13 @@ typedef struct {
 #define MAX_SPD_POINTS 100
 #define TBL_TRQ_INTVAL 1
 #define TBL_SPD_INTVAL 100
+struct lut_dq {
+	s16 d;
+	s16 q;
+};
 typedef struct {
-	s16  d[MAX_TRQ_POINTS][MAX_SPD_POINTS];
-	s16  q[MAX_TRQ_POINTS][MAX_SPD_POINTS];
+	struct lut_dq dq[MAX_TRQ_POINTS][MAX_SPD_POINTS];
+	//s16  q[MAX_TRQ_POINTS][MAX_SPD_POINTS];
 	u16  magic;
 	u16  crc16;
 }torque_lut_t;

+ 4 - 1
Applications/bsp/fmc_flash.c

@@ -113,9 +113,12 @@ uint32_t fmc_get_addr(int page) {
 
 
 static void _fmc_write_data(uint32_t addr, uint8_t *data, int len){
+	int page_count = (len + (one_page_size-1))/one_page_size;
 	fmc_unlock();
 	fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
-	fmc_page_erase(addr);
+	for (int i = 0; i < page_count; i++) {
+		fmc_page_erase(addr + i * one_page_size);
+	}
 	int total_words = len>>2;
 	uint32_t *p_u32_data = (uint32_t *)data;
 	int i;

+ 4 - 4
Applications/foc/core/torque.c

@@ -27,16 +27,16 @@ void torque_get_idq(float torque, float rpm, DQ_t *dq_out) {
 	if (rpm_idx >= MAX_SPD_POINTS) {
 		rpm_idx = MAX_SPD_POINTS -1;
 	}
-	s16 d = _trq_tbl->d[trq_idx][rpm_idx];
-	s16 q = _trq_tbl->q[trq_idx][rpm_idx];
+	s16 d = _trq_tbl->dq[trq_idx][rpm_idx].d;
+	s16 q = _trq_tbl->dq[trq_idx][rpm_idx].q;
 	if (trq_idx < MAX_TRQ_POINTS - 1) {
 		trq_idx += 1;
 	}
 	if (rpm_idx < MAX_SPD_POINTS - 1) {
 		rpm_idx += 1;
 	}
-	s16 d_delta = _trq_tbl->d[trq_idx][rpm_idx] - d;
-	s16 q_delta = _trq_tbl->q[trq_idx][rpm_idx] - q;
+	s16 d_delta = _trq_tbl->dq[trq_idx][rpm_idx].d - d;
+	s16 q_delta = _trq_tbl->dq[trq_idx][rpm_idx].q - q;
 	float comp_ceof = 0.5f * ((torque - torque/TBL_TRQ_INTVAL*TBL_TRQ_INTVAL)/(float)TBL_TRQ_INTVAL + (rpm - rpm/TBL_SPD_INTVAL*TBL_SPD_INTVAL)/(float)TBL_SPD_INTVAL);
 
 	dq_out->d = d + d_delta * comp_ceof;