优化W9光电编码器响应 1933/3
authorpenglei <1624952103@qq.com>
Sat, 5 Jul 2025 08:15:08 +0000 (16:15 +0800)
committerpenglei <1624952103@qq.com>
Sat, 5 Jul 2025 08:15:08 +0000 (16:15 +0800)
code/sdk/drivers/peripheral/rotary_encoder/mixo/mixo_ots_access.c
code/sdk/drivers/peripheral/rotary_encoder/mixo/mixo_ots_driver.c
code/sdk/drivers/peripheral/rotary_encoder/mixo/mixo_service.c

index 6078260..58955ad 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2025-01-04 10:53:54
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-01-04 16:38:46
+ * @LastEditTime: 2025-07-05 15:32:27
  * @FilePath: /sdk615/code/sdk/zhihui/drivers/rotary_encoder/mixo/src/mixo_ots_access.c
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -37,7 +37,8 @@ int mixo_ots_reg_read(uint8_t regAddr, uint8_t* regData)
     *regData = 0x00;  // 清空数据
     // printf("<-%02X,%02X,%02X\r\n",slave_addr,regAddr,*regData);
     // return mixo_gpio_i2c_write_read(slave_addr, &regAddr, 1, regData, 1);
-    return custom_i2c_read_regs(slave_addr, regAddr, 1, regData, 1,MIXO_OTS_I2C_BUS);
+    custom_i2c_read_regs(slave_addr, regAddr, 1, regData, 1,MIXO_OTS_I2C_BUS);
+    return 0;
 }
 
 int mixo_ots_reg_consecutive_read(uint8_t regStartAddr,int len,uint8_t* regData)
@@ -57,6 +58,7 @@ int mixo_ots_reg_write(uint8_t regAddr, uint8_t regData)
     // uint8_t tmp[2] = {regAddr, regData};
     // printf("->%02X,%02X,%02X\r\n",slave_addr,regAddr,regData);
     // return mixo_gpio_i2c_write_read(slave_addr, tmp, 2, NULL, 0);
-    return custom_i2c_write_reg(slave_addr, regAddr, 1, &regData, 1,MIXO_OTS_I2C_BUS);
+    custom_i2c_write_reg(slave_addr, regAddr, 1, &regData, 1,MIXO_OTS_I2C_BUS);
+    return 0;
 }
 
index be7f699..844e511 100644 (file)
@@ -32,9 +32,9 @@ static void put_crown_result(int16_t x)
     {   
         return;
     }
-    if(abs(x)>=16 )
+    if(abs(x)>=8 )
     {
-        ots_result += x/16; //大于4的值除以4, 代表角度, 单位0.5°
+        ots_result += x/8; //大于4的值除以4, 代表角度, 单位0.5°
     }
     else
     {
@@ -52,12 +52,19 @@ static void put_crown_result(int16_t x)
         g_encoder_callback();
 }
 
+static void report_zero_data_for_start_stop_flag(void)
+{
+   ots_result = 0;
+
+   if (g_encoder_callback != NULL)
+        g_encoder_callback();
+}
 
 void mixo_ots_timer_callback(void)
 {
     uint8_t mot_status = 0x00;
     mixo_ots_get_mot_status(&mot_status);
-
+    // printf("mot_status:0x%x\n",mot_status);
     if ((mot_status & 0x80) == 0x80)
     {
         timer_cnt = 0;
@@ -71,11 +78,19 @@ void mixo_ots_timer_callback(void)
         // printf("%ld,%d,%d,%d,%d\r\n", timestamp, raw_data.dx, raw_data.dy, mot_status, dx_sum);
         // PRINT("%d,%d,%d,%d\r\n",raw_data.dx, raw_data.dy, mot_status, dx_sum);
 
-        put_crown_result(raw_data.dx);
+        // ots_result = raw_data.dx;
+
+        if (stand_still == 1) 
+        {
+            //上次是静止,上报状态改变
+            report_zero_data_for_start_stop_flag();
+        }
         stand_still = 0;
 
-        if (g_encoder_callback != NULL)
-            g_encoder_callback();
+        put_crown_result(raw_data.dx);
+
+        // if (g_encoder_callback != NULL)
+        //     g_encoder_callback();
 
     }
     else
@@ -92,6 +107,11 @@ void mixo_ots_timer_callback(void)
         //     mixo_ots_forced_clear_int();  // 强制拉高MOT脚
         //     int_mode = 1;
         // }
+        if (stand_still == 0) 
+        {
+            //上次是转动,上报状态改变
+            report_zero_data_for_start_stop_flag();
+        }
         stand_still = 1;
     }
 }
index f9225ce..7fa8cd7 100644 (file)
@@ -19,7 +19,7 @@
 */
 #define MIXO_SERVICE_CMD_TIMER_CHECK 0x11
 
-#define MIXO_SERVICE_TIMER_CHECK_MS  30
+#define MIXO_SERVICE_TIMER_CHECK_MS  20
 
 static bool g_mixo_service_initialled = false;
 
@@ -118,7 +118,7 @@ void create_mixo_queue(void)
     }
 }
 
-#define MIXO_BOARD_TASK_SIZE   0x500
+#define MIXO_BOARD_TASK_SIZE   0x1000
 errcode_t uapi_mixo_service_init(void)
 {
     PRINT("uapi_mixo_service_init !\r\n");
@@ -134,7 +134,7 @@ errcode_t uapi_mixo_service_init(void)
     app_task_definition_t taskcfg={0};
     taskcfg.create_queue_handle = create_mixo_queue;
     taskcfg.attr.name="mixo_service";
-    taskcfg.attr.priority = osPriorityBelowNormal4;
+    taskcfg.attr.priority = osPriorityNormal1;
     taskcfg.attr.stack_size = MIXO_BOARD_TASK_SIZE;
     taskcfg.func = mixo_service_check_task;
     taskcfg.use_mem = USE_EXTEND_MEM;